前言
神经网络中的前向传播与反向传播是机器学习中最基础的理论之一,这次可算走心推导。
机器学习中常用的10大算法概要 这一篇文章中有引导介绍。
推导流程
1.1符号表达
在推导过程中将会涉及到很多元素的表达,严谨的数学符号能帮助我们更清晰的阅读推导的过程。
(1) 首先上图描述的是简单易懂的三层结构的神经网络,输入层、隐藏层、以及输出层,本文约定以[L]表示层的数量级;
(2) [L]用来表示权重,i是属于L层上节点的位置,j是表示L+1层上节点的位置;
(3) [L]用来表示L层第i个位置的输入,[L]是属于L层第i节点的输出,[L]是表示第L层第i节点的偏移;
1.2 正向传播
在了解完符号表达后,先推导正向传播是如何进行的:
(1)节点C的输入: [2] = [1]*[1] + [1]*[1] + [2]
(2)同理节点D的输入: [2] = [1]*[1] + [1]*[1] + [2]
(3)同理节点C的输出: [2] = sigmoid([2])
(4)同理节点D的输出: [2] = sigmoid([2])
(5)引入矩阵的概念: ,权重矩阵起到了纽带的作用。
1.3 反向传播
反向传播作用在于通过误差更新权重以期减少误差。如图-2所示,现在通过计算得到了两个误差,分别为e1和e2,通过反向传播造成了节点C 的eh1误差,eh1的量归功于eo1与eo2的贡献,遵循按劳分配的原则可知
eh1 = [[2]/([2] + [2])] * eo1 + [[2]/([2] + [2])] * eo2
不改变比例忽略相同因子1/([2] + [2]) 可得
eh1 = [2] * eo1 + [2] * eo2
不难发现反向传播时,权重值依然是重要的计算枢纽。只不过使用矩阵表示时是权重矩阵的转置。
1.4链式求导
如果你悉知高等数学,以下内容对你来说不值一提,如果不太熟悉,还是看看推导吧。
(1)首先我们需要明确目标,反向传播的意义在于更新权值,以节点C为例更新[2] 的值,这时需要从产生误差的地方开始回推:
eo1 = 1/2 * ([3] - y1)
[3] = sigmoid([3])
[3] = [2]*[2] + [2]*[2] + [3]
一直推算到出现[2]为止。
(2)现在需要依据上面的步骤对[2]进行求求偏导
带入已知值可得:
同样对[2]的求导:
带入已知值可得:
按照以上步骤向更靠前的地方算,当所有偏导数都为已知的情况下可以更新权值
这也是阶段性的目的,也是最终的目标。