记录第一遍没看懂的
记录觉得有用的
其他章节:
第一章
第三章
第五章
第六章
第七章
第八章
第九章
第十章
十一章
十二章
十三章
十四章
十五章
十六章
第四章决策树,都是比较基础的概率论的东西,主要就是结合例子去理解概念。
第五章是神经网络模型的介绍, 比较难理解的算是5.3 误差逆传播算法。它其实是对梯度计算结果的一个解释,用的其实还是梯度下降法。
也就是说,主要还是微积分多元函数的计算。头疼.jpg
可以看到这里是多输出问题,但只关注一个输出的推导即可,其他都是一样的。
首先看均方误差求偏导,其中公式(5.4)是三层复合函数,第一层是损失函数对输出求导(
E
k
→
y
ˉ
j
k
E_k \to \bar{y}_j^k
Ek→yˉjk),第二层是输出对节点的输入求导(
y
ˉ
j
k
→
β
j
\bar{y}_j^k\to\beta_j
yˉjk→βj),最后是输入对连接权求导(
β
j
→
w
h
j
\beta_j\to w_{hj}
βj→whj)。
也就是:
结合公式和定义,
β
j
=
∑
h
=
1
q
w
h
j
b
h
\beta_j=\sum_{h=1}^{q}w_{hj}b_h
βj=∑h=1qwhjbh其实是一个线性的累加,对于每一个h来说,其他项都是常数,导数为0,那么
β
j
\beta_j
βj求导也就是
b
h
b_h
bh。
而激活函数
S
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
x
Sigmoid(x)=\dfrac{1}{1+e^{-x}}
Sigmoid(x)=1+e−x1。这个的导数是一个固定公式,推导过程简言之:
(
1
1
+
e
−
x
)
′
=
−
1
(
1
+
e
−
x
)
2
(
−
1
)
e
−
x
=
e
−
x
+
1
−
1
(
1
+
e
−
x
)
2
=
f
(
x
)
−
f
2
(
x
)
(\dfrac{1}{1+e^{-x}})'=-\dfrac{1}{(1+e^{-x})^2}(-1)e^{-x}=\dfrac{e^{-x}+1-1}{(1+e^{-x})^2}=f(x)-f^2(x)
(1+e−x1)′=−(1+e−x)21(−1)e−x=(1+e−x)2e−x+1−1=f(x)−f2(x)
Sigmoid函数求导推导公式更详细的解释可以参考:sigmoid函数求导-只要四步
剩下的
E
k
E_k
Ek对
y
ˉ
j
k
\bar{y}_j^k
yˉjk的求导其实就是一个平方项的求导。
为了使结果只和下标j有关,把前两层单独提出来,并把梯度下降的负号提过来,得到公式(5.10)。
公式(5.14)中关于
Δ
v
i
h
\Delta v_{ih}
Δvih的计算,其中
η
\eta
η表示步长,
e
h
x
i
e_hx_i
ehxi表示下降方向。同样,损失函数对输出
y
j
y_j
yj求导,输出
y
j
y_j
yj对节点的输入
β
j
\beta_j
βj求导,输入对上一层节点的输出
b
h
b_{h}
bh求导,然后上一层节点的输出
b
h
b_{h}
bh对上一层节点的输入
α
h
\alpha_{h}
αh求导,最后
α
h
\alpha_{h}
αh再对
Δ
v
i
h
\Delta v_{ih}
Δvih求导。
需要注意的是,此时
Δ
v
i
h
\Delta v_{ih}
Δvih的每一项会对每一个
y
j
y_j
yj产生影响,所以还是需要
∑
j
\sum_j
∑j的。
所幸,损失函数对
β
j
\beta_j
βj的求导在
g
j
g_j
gj中已经完成了。而
β
j
\beta_j
βj对
b
h
b_{h}
bh求偏导类似于上一个
β
j
\beta_j
βj对
w
h
j
w_{hj}
whj求偏导,也是线性的,结果就为
w
h
j
w_{hj}
whj。接着下一项,是输出对输入的求导,同样是套用Sigmoid函数的公式,也就是
b
h
(
1
−
b
h
)
b_h(1-b_h)
bh(1−bh);最后就是
x
i
x_i
xi。
Δ
v
i
h
=
−
η
∑
j
∂
E
k
∂
β
j
∂
β
j
∂
b
h
∂
b
h
∂
α
h
∂
α
h
∂
v
i
h
=
η
∑
j
g
j
w
h
j
b
h
(
1
−
b
h
)
x
i
\begin{aligned} \Delta v_{ih} &=-\eta\sum_j\dfrac{\partial E_k}{\partial \beta_j}\dfrac{\partial \beta_j}{\partial b_h}\dfrac{\partial b_h}{\partial \alpha_h}\dfrac{\partial \alpha_h}{\partial v_{ih}}\\ &=\eta\sum_j g_j w_{hj} b_h(1-b_h)x_i \end{aligned}
Δvih=−ηj∑∂βj∂Ek∂bh∂βj∂αh∂bh∂vih∂αh=ηj∑gjwhjbh(1−bh)xi
可以看出,每次都用了上一层的结论(比如这个
e
h
e_h
eh用了
g
j
g_j
gj,那么,如果有更多层,也是可以直接套用这个结果,也就是直接用
e
h
e_h
eh。也就是说,无论多深,都是类似形式。
BP算法工作流程如下:
5.5节的网络其实不算常见了,主要是他们的改进思路。