详解神经网络中的反向传播


严格的数学定义

务必先认真研究参考资料1,否则后面的内容就不用看了.Jacobian在本质上是个行列式,在参考资料1下引出Jacobian式是为了解决方程组定义的隐函数求导问题.

程序设计上的约定

刚才已经明确,从严格的数学定义上讲,求导或者求偏导只有函数对自变量而言,其余任务情况,从数学上讲都是错的.但是很多机器学习的资料和开源库都涉及到标量对向量求导.比如下面这个pytorch的例子.

import torch
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x ** 2 + 2
z = torch.sum(y)
z.backward()
print(x.grad)

简单解释下,设\(x=[x_1,x_2,x_3]\),则
\[ \begin{equation*} z=x_1^2+x_2^2+x_3^2+6 \end{equation*} \]

\[ \begin{equation*} \frac{\partial z}{\partial x_1}=2x_1 \end{equation*} \]
\[ \begin{equation*} \frac{\partial z}{\partial x_2}=2x_2 \end{equation*} \]
\[ \begin{equation*} \frac{\partial z}{\partial x_3}=2x_3 \end{equation*} \]
当将x_1=1.0,x_2=2.0,x_3=3.0代入就可以得到
\[ \begin{equation*} (\frac{\partial z}{\partial x_1},\frac{\partial z}{\partial x_1},\frac{\partial z}{\partial x_1})=(2x_1,2x_2,2x_3)=(2.0,4.0,6.0) \end{equation*} \]
结果是和pytorch的输出是一样的.反过来想想,其实所谓的"标题对向量求导"本质上是函数对各个自变量求导,这里只是把各个自变量看成一个向量.和数学上的定义并不矛盾.

backward的gradient参数作用

现在有如下问题,已知
\[ \begin{equation*} y_1=x_1^2+2 \end{equation*} \]
\[ \begin{equation*} y_2=x_2^2+2 \end{equation*} \]
\[ \begin{equation*} y_3=x_3^2+2 \end{equation*} \]
\[ \begin{equation*} A=f(y_1,y_2,y_3) \end{equation*} \]
其中函数\(f(y_1,y_2,y_3)\)的具体定义未知,现在求
\[ \begin{equation*} \frac{\partial A}{\partial x_1}=? \end{equation*} \]
\[ \begin{equation*} \frac{\partial A}{\partial x_2}=? \end{equation*} \]
\[ \begin{equation*} \frac{\partial A}{\partial x_3}=? \end{equation*} \]
根据参考资料1中讲的多元复合函数的求导法则.
\[ \begin{equation*} \frac{\partial A}{\partial x_1}=\frac{\partial A}{\partial y_1}\frac{\partial y_1}{\partial x_1}+\frac{\partial A}{\partial y_2}\frac{\partial y_2}{\partial x_1}+\frac{\partial A}{\partial y_3}\frac{\partial y_3}{\partial x_1} \end{equation*} \]
\[ \begin{equation*} \frac{\partial A}{\partial x_2}=\frac{\partial A}{\partial y_1}\frac{\partial y_1}{\partial x_2}+\frac{\partial A}{\partial y_2}\frac{\partial y_2}{\partial x_2}+\frac{\partial A}{\partial y_3}\frac{\partial y_3}{\partial x_2} \end{equation*} \]
\[ \begin{equation*} \frac{\partial A}{\partial x_3}=\frac{\partial A}{\partial y_1}\frac{\partial y_1}{\partial x_3}+\frac{\partial A}{\partial y_2}\frac{\partial y_2}{\partial x_3}+\frac{\partial A}{\partial y_3}\frac{\partial y_3}{\partial x_3} \end{equation*} \]
上面3个等式可以写成矩阵相乘的形式.如下
\[ \begin{equation}\label{simple} [\frac{\partial A}{\partial x_1},\frac{\partial A}{\partial x_2},\frac{\partial A}{\partial x_3}]= [\frac{\partial A}{\partial y_1},\frac{\partial A}{\partial y_2},\frac{\partial A}{\partial y_3}] \left[ \begin{matrix} 1 & 2 & 3 \\ 1 & 2 & 3 \\ 1 & 2 & 3 \end{matrix} \right] \end{equation} \]

参考资料

  1. 同济大学数学系,高等数学第七版下册,高等教育出版社,2015. p78-80,p88-91
优质内容筛选与推荐>>
1、背水一战 Windows 10 (116) - 后台任务: 前台程序激活后台任务
2、统计字母个数
3、关于linux的档案随笔
4、c++ 操作符优先级
5、intellij idea208激活


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号