机器学习多层感知机梯度推导
在我的前一篇文章中,已经推导出了单层感知机梯度的计算公式
单层感知机梯度推导
φwj0φE=(O−t)σ(x01))(1−σ(x01)))xj0
**函数不变:
sigmoid=1+e−x1
**函数求导:
sigmoid′=σ(x)(1−σ(x))(具体过程参照上面链接)
损失函数:MSE
E=21Σi=0m(Ok−tk)2
多层感知机:
设置前一层对后一层的权值为Wjkj为前一层的结点位置,k为后一层的结点位置,如图:
即求解φWjkφE
φWjkφE=φWjkφ21Σi=0m(Ok−tk)2
只有当i=k时导数不为0所以φWjkφE=φWjkφ21(Ok−tk)2
例如(00−t0)2+(01−t1)2对W01求导从图中可以看出W01对(00−t0)2并没有贡献所以相当于常数项求导
φWjkφE=(0k−tk)φWjkφOk
σ(x)=Ok
φWjkφE=(0k−tk)φWjkφσ(xk1)
这里使用链式反则φWjkφE=(0k−tk)φxk1φσ(xk1)φWjkφxk1
结合前面的对激活函数求导公式:φWjkφE=(0k−tk)σ(xk1)(1−σ(xk1))φWjkφxk1
φWjkφE=(0k−tk)0k(1−0k)φWjkφ(Σi=0nxj0Wjk)
这里同单层感知机一样,导数部分结果为Wj0所以最终结果为:φWjkφE=(0k−tk)0k(1−0k)Wj0
其实,这里不光是完成了一次多层感知器梯度的求导,也是完成了一次反向传播的求解。这里我们知道了Ok,tk,Wj0来更新Wjk,不这是通过结果反过来更新梯度吗
注:以上图片素材来源龙良曲老师的tensorflow课程讲解