深度学习的数学:反向传播算法

业余民科学习者阅读笔记,垃圾内容

代价函数最小值回顾

在《深度学习的数学:神经网络的数学基础 - 阅读笔记》中提到了,如果要求模型的参数Arg0, Arg1, ..., ArgnArg_0,\ Arg_1,\ ...,\ Arg_n。给定一组打了标签的数据<input1, t1>, <input2, t2>, ..., <inputn, tn><input_1,\ t_1>,\ <input_2,\ t_2>,\ ...,\ <input_n,\ t_n>,我们可以通过平方差的方式,构造代价函数CTC_T

CT=C1+C2+...+CnC_T = C_1 + C_2 + ... + C_n

其中

Cn=12(M(inputn)tn)2C_n=\frac{1}{2}(M(input_n) - t_n)^2,其中MM是包含Arg0, Arg1, ..., ArgnArg_0,\ Arg_1,\ ...,\ Arg_n

我们要求的是多元函数CTC_T在自变量Arg0, Arg1, ..., ArgnArg_0,\ Arg_1,\ ...,\ Arg_n取什么值的时候,函数值CTC_T取得最小值。

传统的方法是通过下面的方式求CTC_T的最小值,但是对于深度神经网络来说,参数动辄成千上万,使得求导数不太可能。

对于函数z=f(x,y)z=f(x,y)取得最小值的必要条件是δfδx=0,δfδy=0\frac{\delta f}{\delta x}=0, \frac{\delta f}{\delta y}=0

既然求所有所有偏导不太可行,那么在神经网络中使用梯度下降法行不行呢?梯度下降法也需要求代价函数CTC_T在某个点的导数,

(Δx1,Δx2, ..., Δxn)=ηfx1,fx2,...,fxn(\Delta x_1, \Delta x_2,\ ...,\ \Delta x_n ) = -\eta \lgroup \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, ..., \frac{\partial f}{\partial x_n} \rgroup

求梯度也就是通过链式法则求偏导,这个工作量也是十分巨大的,例如要求CTC_T关于ww的导数,神经网络有多少层,链式法则就要应用多长;训练数据有多少组,求导相加的项就要多少。这显然是很容易陷入所谓的“导数地狱”。
深度学习的数学:反向传播算法

反向传播算法

原有梯度下降法的缺陷

原有的梯度下降法问题是求导不易,求导过程依赖于训练数据,如果训练数据有上万,层数有个几十层,整个求导估计就炸了。可能我需要观察神经网络的特点,有针对性找到合适的办法来降低复杂度。

反向传播算法是什么

反向传播算法的特点是将繁杂的导数计算替换为数列的递推关系式 - 《深度学习的数学》。

从上图中手工求导的过程中我们可以发现,其实有很多可以复用的地方,例如

如果我们要求Z31x\frac{\partial Z_3^1}{x},神经网络与求导过程如下所示:
深度学习的数学:反向传播算法

如果我们要求Z32x\frac{\partial Z_3^2}{x},神经网络与求导过程如下所示:
深度学习的数学:反向传播算法
从中我们可以看到整个求导过程,有很多可以复用的地方,这些部分我都使用相同颜色标识了出来。那么如果我们尽可能地求出所有的Zijx\frac {\partial Z_i^j}{\partial x}那么我都就可以通过搭积木的方式组装出偏导数其实从这点来看,反向传播算法求解其实就是动态规划。链式求导和复合求导明确了子问题的分解

如下图所示,如果重新求Z31x\frac {\partial Z_3^1}{\partial x},我们就可以直接使用,(1 * 2 * 2 + 1 * (-1) * 0) + (1 * 2 * 2 + 1 * (-1) * 0) + (1 * 2 * 0 + 1 * 1 * 2) = 6。
深度学习的数学:反向传播算法
而反向传播的求的是CTx\frac{\partial C_T}{\partial x},但是大同小异。3Blue2Brown的视频《反向传播演算|附录深入学习第3章》有非常直观的图形化动态展示,如下图所示。
深度学习的数学:反向传播算法
但视频中使用的是个单链的神经网络,其图形更类似于一个有乘法加法交叉构成的树形结构。

反向传播算法的优势

所以我不认为反向传播算法是多么有价值的方法,它只是对神经网络有效。因为每个节点的值ZjiZ_j^i可能对很多节点Zj+1iZ_{j+1}^i有贡献,所有有些的值可以共享,它只是对梯度下降的一种改进。

如果出现了另外一种神经网络结构(虽然可能性很小),可以共享的部分很少,那么反向传播也就是求导中的动态规划没有可以重复使用的子问题,那么还是遇到求导爆炸的问题。
注:动态规划的本质不是复用,不是复用,不是复用

注:31Blue1Brown的视频非常有帮助

读书的重点在于思考和理解,否则无疑是向脑子里倾倒垃圾