MLP多层感知机梯度推导与反向传播
1.MLP梯度推导
2.MLP链式法则
3.MLP反向传播
1.MLP梯度推导
单输出感知器模型:
运算法则:
输入X乘以权重W得到y,再通过激活函数得到输出(O)。在这里,激活函数是sigmoid函数。
E是loss函数值,这里是输出值(output)与真实值(target)的欧式距离。
E的大小是评价感知器模型好坏的指标之一,w权重是描述这个感知器模型的参数,通过计算E来优化感知器模型,即优化w的值。
表示第I层,第j个输入链接第k个输出的权值w。以下先对一个权重(值)w求得感知器模型的梯度。
红色部分使用了链式法则,链式法则其实就是连续求导,这里将求得sigmoid函数的导数。sigmoid导数如何求,将在下一环节展示。求得的sigmoid导数是s‘(x) = s(x)(1 - s(x))
现在把单个输出的感知器模型推广成多输出感知器模型。
按照上面的思路,求w的梯度:
从上图加粗的线可以知道,Wjk只对Ok值有贡献,对Oi(i不等于k)没有贡献。因此Oi(i不等于k)对Wjk的偏导为0。换句话说,相关梯度与输入结点有关。
以上,梯度推导完毕。
2.MLP链式法则
求导过程:
链式法则如下:
3.MLP反向传播
多层感知器模型:
参考上面的公式推导,现在完成从1到K的泛化处理。
首先根据前面的结论,梯度推导为:
针对多层感知器,x是该层的输入,即是上一层的输出O。如果这里用x表示会有歧义,因为O = sigmoid(x),x必须经过激活函数之后才会得到O,所以对多层感知器而言,梯度推导为:
K-1便是上图所对应的J。
现在,我们对结合上述结论,以及链式法则,完成下一层的梯度求导,即对求导。
先求到K层的梯度,继续使用链式法则,在K层的梯度上继续求第J层。
上述推导可以参考图4完成。I,J,K是连续的3层,即J = I + 1,K = J + 1。
通过上述推导,仔细的同学应该能发现其中的一定的规律,现在开始对其简化。
对第K层的第k结点有:
其中:
同理,对第J(K = J + 1)层的第j个结点有:
其中:
现在开始说反向传播。如果通过前向通路求得个个参数的梯度十分困难和繁琐。比如你需要先对第I层求得梯度,然后又求得第J层,最后是第K层。这样会重复计算,会造成资源浪费。对于反向传播的详细概念这里不赘述,可以参考:
https://www.jianshu.com/p/964345dddb70
如果使用反向传播的话,可以一次计算所有参数。如同上述推导过程一样,如果你要对第J层(第J层不是输出层,第K层是输出层)求得梯度,那么必须要经过求得第K层(输出层)梯度基础上才行,第I层,I-1,...,0层(输入层)同理。参考以下图示理解:
图5求得和。
在图5的基础上,在图6中求得和。依此类推:
图7在图5和图6的基础上,求得和。
以上,整个推导流程完毕。推导的时候,如果有疑惑一定要参考图示。
参考:网易公开课。