前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络中几个常用的求导公式

神经网络中几个常用的求导公式

作者头像
AI部落联盟
发布2021-06-17 17:28:15
7950
发布2021-06-17 17:28:15
举报
文章被收录于专栏:AI部落联盟

‍‍

亲爱的朋友们,多多有一段时间没有更新啦,主要是我在学习transformers突然开始思考几个神经网络相关的基本问题(模型结构越写越复杂,调包效果越来越好,是否还记得为什么而出发呢?),读者朋友也可以看看是否可以自如回答:

  1. 什么是链式法则?
  2. 什么是Jacobin矩阵?
  3. Jacobin有什么用处?
  4. 梯度的定义是什么?
  5. 方向导数和梯度的关系是什么?
  6. 神经网络中张量反向传播有什么特点?
  7. 哪些特性保证了神经网络中高效的梯度计算?

我将我的总结神经网络中的数学基础写到了一起放到了github,做成了一个网站,当然网站中也会逐渐加入之前写的transformer推送内容

https://erenup.github.io/deeplearningbasics/

还会持续更新,欢迎大家star或者提交issue/request~谢谢。

本来想一篇推送更新完,但考虑到大家时间有限,没法一次看完,于是个人觉得把最常用的章节挑出来更新一下,本文公式较多,排版尽可能简单化啦。

完整内容请查阅网站~

1. 矩阵乘以列向量求

可以看作函数将输入 经过变换得到输出,那么Jacobian矩阵

z_i = \sum^{m}_k W_{ik}x_k

那么

(\frac{\partial z}{\partial x})_{i,j} = \frac{\partial z_i}{\partial x_j} = \frac{\partial {\sum^{m}_k W_{ik}x_k}}{\partial x} = \sum^{m}_k W_{ik} \frac{\partial x_k}{\partial x_j} = W_{ij}

由于 if else 0, 所以有

2.

3. 向量等于自身,求

因为 所以

(\frac{\partial z}{\partial x})_{i,j} = \frac{\partial z_i}{\partial x_j} = \frac{\partial x_i}{\partial x_j} = \{^{1, i=j}_{0, otherwise}

所以,将其放在链式法则中进行矩阵乘法时候不会改变其他矩阵。

4. 对向量中每个元素进行变换, 求

由于所以

(\frac{\partial z}{\partial x})_{i,j} = \frac{\partial z_i}{\partial x_j} = \frac{\partial f(x_i)}{\partial x_j} = \{^{f'(x_i), i=j}_{0, otherwise}

所以是一个diagonal matrix 且

矩阵乘以一个diagonal矩阵也就是每个元素进行幅度变换,因此链式法则中的矩阵乘以相当于和做elementwise 乘法。

5. ,求

我们开始引入更复杂的情况,因为神经网络中往往包含多次链式法则的引用,这里我们假设已经知道,直接求。

假设神经网络的损失函数是标量,我们想计算的是损失函数对参数的梯度。我们可以想象神经网络这个函数输入是一个形状的参数,输出是一个标量,结合上一章节Jacobian知识我们可以知道形状和一样,所以在神经网络训练的时候可以将参数减轻去参数的梯度乘以学习率。

根据链式法则,我们需要求出。这个三维的张量不方便表示且十分复杂,因此我们先只看对求导。

z_k = \sum^m_{l=1} W_{kl}x_l
\frac{\partial z}{\partial W_{ij}} = \sum^m_{l=1}x_l \frac{\partial W_{kl}}{\partial W_{ij}}
\frac{\partial W_{kl}}{\partial W_{ij}} = \{^{1, i=k, j=l}_0

所以只有时候非零

\frac{\partial J}{\partial W_{ij}} = \begin{bmatrix} 0\\ .\\ x_j\\ .\\ 0 \end{bmatrix} \leftarrow ith element, j=l

所以

\frac{\partial J}{\partial W_{ij}} = \frac{\partial J}{\partial z}\frac{\partial z}{\partial W_{ij}} = \delta \frac{\partial z}{\partial W_{ij}} = \delta_i x_j

所以得到

\frac{\partial J}{\partial W} = \delta^T x^T

6.

7.

假设神经网络到达softmax之前的输出为,为分类数量,那么

\hat{y} = softmax(\Theta), \theta_i = \frac{e^{\theta_i}}{\sum^n_k e^{\theta_k}}
J = \sum^n_{i=1}y_ilog(\hat{y_i})
\frac{\partial J}{\hat{y_i}} = \frac{y_i}{\hat{y_i}}
\frac{\partial \hat{y_i}}{\theta_i} = \{^{\hat{y_i}(1-\hat{y_k}), i=k}_{-\hat{y_i}\hat{y_k}, i \neq k}
\frac{\partial J}{\theta_i} = \frac{\partial J}{\hat{y}} \frac{\partial \hat{y}}{\theta_i}, 形状为1 \times n, n \times 1
\frac{\partial J}{\theta_i} = \sum^n_{k=1}{\frac{\partial J}{\hat{y_k}} \frac{\partial \hat{y_k}}{\theta_i}} (k=i, k\neq i)
\frac{\partial J}{\theta_i} = \frac{\partial J}{\hat{y_i}} \frac{\partial \hat{y_i}}{\theta_i} + \sum^n_{k \neq i}{\frac{\partial J}{\hat{y_k}} \frac{\partial \hat{y_k}}{\theta_i}} (k=i, k\neq i)
\frac{\partial J}{\theta_i} = y_i(1- \hat{y_i}) + \sum_{k neq i} {y_k \hat{y_i}}
\frac{\partial J}{\theta_i} = -y_i(1- \hat{y_i}) + \sum_{k neq i} {y_k \hat{y_i}}
\frac{\partial J}{\theta_i} = -y_i + \hat{y_i} \sum {y_k}
\frac{\partial J}{\theta_i} = \hat{y_i} -y_i

所以

\frac{\partial J}{\theta} = \hat{y} -y \in \mathbb R^{n}

结语

本来对于矩阵求导还有些发怵的我,在熟练以上几个公式之后发现神经网络反向传播的求导也不是那么遥不可触。希望能对大家有帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI部落联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 矩阵乘以列向量求
  • 2.
  • 3. 向量等于自身,求
  • 4. 对向量中每个元素进行变换, 求
  • 5. ,求
  • 6.
  • 7.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档