文章目录
深度学习三步走
Step1 Neural Network
从neural network说起,每个神经元以不同的方式链接,就会产生不同的结果输出。将两个神经元并排拼在一起
每个神经元有不同的参数,以输入1,-1为例,可以得到的结果是:(神经网络的参数
θ
\theta
θ:所有的weight和bias)
即输入先乘上权重再加上偏置,最后通过激活层,输出的又作为下一层的输入层。通常把全连接网络分成输入层,隐藏层和输出层,Deep learning中的Deep可以认为是Many hidden layers。
y
=
f
(
x
)
=
σ
(
w
m
⋯
σ
(
w
2
∗
σ
(
w
1
∗
x
+
b
1
)
+
b
2
)
⋯
+
b
m
)
)
y=f(x)=\sigma(w^m \cdots\sigma(w^2 *\sigma(w^1*x+b^1)+b^2) \cdots+b^m ))
y=f(x)=σ(wm⋯σ(w2∗σ(w1∗x+b1)+b2)⋯+bm))
也可以把这种运算看成矩阵运算,针对上图有:
Step2 goodness of function
loss函数的设计,以手写数字识别为例,采用交叉熵,则 l ( y , y ^ ) = − ∑ i = 1 10 y i ^ l n y i l(y,\hat{y})=-\sum_{i=1}^{10} \hat{y_i}lny_i l(y,y^)=−∑i=110yi^lnyi
Step3 pick the best function
利用梯度下降让loss最小,即计算
∂
L
∂
w
1
,
∂
L
∂
b
1
⋯
\frac{\partial L}{\partial w1},\frac{\partial L}{\partial b1} \cdots
∂w1∂L,∂b1∂L⋯
再利用和线性规划中一样的更新迭代方法,找到最优解。唯一不同的就是此时的函数更复杂——需要采用后向传播
后向传播(让梯度计算更有效率)
用到的原理就是链式法则。
loss函数可以简写为
L
(
θ
)
=
∑
n
=
1
N
l
n
(
θ
)
L(\theta)=\sum_{n=1}^N l^n(\theta)
L(θ)=∑n=1Nln(θ),对w求偏导,
∂
L
(
θ
)
∂
w
=
∑
n
=
1
N
∂
l
n
(
θ
)
∂
w
\frac{\partial L(\theta)}{\partial w}=\sum_{n=1}^N \frac{\partial l^n(\theta)}{\partial w}
∂w∂L(θ)=∑n=1N∂w∂ln(θ)
以一个神经元为例,根据链式法则,
∂
l
∂
w
=
∂
l
∂
z
∂
z
∂
w
\frac{\partial l}{\partial w}=\frac{\partial l}{\partial z}\frac{\partial z}{\partial w}
∂w∂l=∂z∂l∂w∂z
其中
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z比较好计算(结果就是权重w连接的输入),称为Forward pass
∂
l
∂
z
\frac{\partial l}{\partial z}
∂z∂l则有些复杂,需要再往后面找,称为Backward pass
从这幅图可以看出,
∂
l
∂
z
=
∂
l
∂
a
∂
a
∂
z
\frac{\partial l}{\partial z}=\frac{\partial l}{\partial a}\frac{\partial a}{\partial z}
∂z∂l=∂a∂l∂z∂a
其中
∂
a
∂
z
=
σ
′
(
z
)
,
∂
l
∂
a
=
∂
l
∂
z
′
∂
z
′
∂
a
+
∂
l
∂
z
′
′
∂
z
′
′
∂
a
\frac{\partial a}{\partial z}=\sigma'(z),\frac{\partial l}{\partial a}=\frac{\partial l}{\partial z'}\frac{\partial z'}{\partial a}+\frac{\partial l}{\partial z''}\frac{\partial z''}{\partial a}
∂z∂a=σ′(z),∂a∂l=∂z′∂l∂a∂z′+∂z′′∂l∂a∂z′′
所以
∂
l
∂
z
=
σ
′
(
z
)
[
w
3
∂
l
∂
z
′
+
w
4
∂
l
∂
z
′
′
]
\frac{\partial l}{\partial z}=\sigma'(z)[w_3\frac{\partial l}{\partial z'}+w_4\frac{\partial l}{\partial z''}]
∂z∂l=σ′(z)[w3∂z′∂l+w4∂z′′∂l]
现在就是要解决
∂
l
∂
z
′
\frac{\partial l}{\partial z'}
∂z′∂l和
∂
l
∂
z
′
’
\frac{\partial l}{\partial z'’}
∂z′’∂l
(递归循环开始出现)
case1.output layer
case2 Not output layer
另一种观点看后向传播
之前计算梯度时,要计算loss函数对第一层参数的导数就得计算第二层,计算第二层就得计算第三层……这样子效率不高。可以换一种观点,将反向传播看出“前向传播”,先计算最后一层的导数,这样就可以计算倒数第二层的导数……只需要注意一下此时的"激活函数"是
σ
′
(
z
)
\sigma'(z)
σ′(z)
最后总结一下后向传播:
参考链接:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html