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