深度学习的数学:反向传播算法
业余民科学习者阅读笔记,垃圾内容
代价函数最小值回顾
在《深度学习的数学:神经网络的数学基础 - 阅读笔记》中提到了,如果要求模型的参数。给定一组打了标签的数据,我们可以通过平方差的方式,构造代价函数。
其中
,其中是包含。
我们要求的是多元函数在自变量取什么值的时候,函数值取得最小值。
传统的方法是通过下面的方式求的最小值,但是对于深度神经网络来说,参数动辄成千上万,使得求导数不太可能。
对于函数取得最小值的必要条件是
既然求所有所有偏导不太可行,那么在神经网络中使用梯度下降法行不行呢?梯度下降法也需要求代价函数在某个点的导数,
求梯度也就是通过链式法则求偏导,这个工作量也是十分巨大的,例如要求关于的导数,神经网络有多少层,链式法则就要应用多长;训练数据有多少组,求导相加的项就要多少。这显然是很容易陷入所谓的“导数地狱”。
反向传播算法
原有梯度下降法的缺陷
原有的梯度下降法问题是求导不易,求导过程依赖于训练数据,如果训练数据有上万,层数有个几十层,整个求导估计就炸了。可能我需要观察神经网络的特点,有针对性找到合适的办法来降低复杂度。
反向传播算法是什么
反向传播算法的特点是将繁杂的导数计算替换为数列的递推关系式 - 《深度学习的数学》。
从上图中手工求导的过程中我们可以发现,其实有很多可以复用的地方,例如
如果我们要求,神经网络与求导过程如下所示:
如果我们要求,神经网络与求导过程如下所示:
从中我们可以看到整个求导过程,有很多可以复用的地方,这些部分我都使用相同颜色标识了出来。那么如果我们尽可能地求出所有的,那么我都就可以通过搭积木的方式组装出偏导数。其实从这点来看,反向传播算法求解其实就是动态规划。链式求导和复合求导明确了子问题的分解。
如下图所示,如果重新求,我们就可以直接使用,(1 * 2 * 2 + 1 * (-1) * 0) + (1 * 2 * 2 + 1 * (-1) * 0) + (1 * 2 * 0 + 1 * 1 * 2) = 6。
而反向传播的求的是,但是大同小异。3Blue2Brown的视频《反向传播演算|附录深入学习第3章》有非常直观的图形化动态展示,如下图所示。
但视频中使用的是个单链的神经网络,其图形更类似于一个有乘法加法交叉构成的树形结构。
反向传播算法的优势
所以我不认为反向传播算法是多么有价值的方法,它只是对神经网络有效。因为每个节点的值可能对很多节点有贡献,所有有些的值可以共享,它只是对梯度下降的一种改进。
如果出现了另外一种神经网络结构(虽然可能性很小),可以共享的部分很少,那么反向传播也就是求导中的动态规划没有可以重复使用的子问题,那么还是遇到求导爆炸的问题。
注:动态规划的本质不是复用,不是复用,不是复用
注:31Blue1Brown的视频非常有帮助
读书的重点在于思考和理解,否则无疑是向脑子里倾倒垃圾