![请添加图片描述](https://img-blog.csdnimg.cn/36a48551439943b897c68fee305affc4.png#pic_center)
本章中对其他常见神经网络和深度学习部分只是蜻蜓点水、泛泛而谈而已,所以在本文中就未对该部分内容进行叙述,先挖个坑,以后来填~
1、M-P神经元模型
神经元模型是神经网络中最基本的成分。由McCulloch和Pitts提出的M-P神经元模型,对生物体内的神经元进行了很好的抽象,一直沿用至今。M-P神经元模型如下图所示:神经元接受到n个其他神经元传递来的信号,这些信号作为输入通过来权重的连接边进行传递,神经元接收到的总输入将与神经元的阈值进行比较,然后通过 “激活函数”(activation function) 处理作为输出。
2、感知机模型(Perceptron)
- 模型:
激活函数为sgn(阶跃函数)的神经元,其数学表达如下:
y = s g n ( w T x − θ ) = { 1 w T x − θ ≥ 0 0 w T x − θ < 0 y=sgn({\bf w^Tx}-\theta)=\begin{equation} \left\{ \begin{array}{cl} 1 & {\bf w^Tx}-\theta \ge 0 \\ 0 & {\bf w^Tx}-\theta < 0 \\ \end{array} \right.\nonumber \end{equation} y=sgn(wTx−θ)={10wTx−θ≥0wTx−θ<0
其中 x ∈ R x\in \mathbb{R} x∈R是样本的特征向量,即感知机模型的输入, w , θ w,\theta w,θ是模型的参数, w ∈ R w\in\mathbb{R} w∈R是权重, θ \theta θ是阈值。
从几何角度理解,对于给定的线性可分的数据集T,感知机试图求得能对T中的正负样本完全正确划分的超平面, w T x − θ {\bf w^Tx}-\theta wTx−θ就是超平面方程。关于超平面,有以下:
- 超平面方程不唯一:如方程左右同时乘以一个不为零的常数
- 法向量 w w w垂直于超平面
- 法向量 w w w和位移项 b b b确定唯一一个超平面
- 法向量 w w w指向的那一半空间为正空间,另一半为负空间
- 学习策略:
随机初始化 w , b w,b w,b,将全体训练样本代入模型找出误分类样本,设此时误分类样本集合为 M ⊆ T M\subseteq T M⊆T,对于任意一个误分类样本 ( x , y ) ∈ M ({\bf x},y)\in M (x,y)∈M ,当 w T x − θ ≥ 0 {\bf w^Tx}-\theta \ge 0 wTx−θ≥0时,模型输出 y ^ = 1 \hat y=1 y^=1,样本真是标记为 y = 0 y=0 y=0;当 w T x − θ < 0 {\bf w^Tx}-\theta < 0 wTx−θ<0时,模型输出 y ^ = 0 \hat y=0 y^=0,样本真实标记为 y = 1 y=1 y=1。综合两种情况,可知以下式子恒成立 ( y ^ − y ) ( w T x − θ ) ≥ 0 ({\hat y}-y)(\bf w^Tx-\theta)\ge 0 (y^−y)(wTx−θ)≥0
所以,对于数据集T,损失函数可定义为: L ( w , θ ) = ∑ x ∈ M ( y ^ − y ) ( w T x − θ ) L(w,\theta)=\sum\limits_{{\bf x}\in M}({\hat y}-y)(\bf w^Tx-\theta) L(w,θ)=x∈M∑(y^−y)(wTx−θ)
上式中,阈值 θ \theta θ可以看作一个固定输入-1.0的“哑结点”(dummy node),对应权重 w n + 1 w_{n+1} wn+1,从而将权重和阈值的学习统一为权重的学习。对于集体的数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } T=\{ ({\bf x_1},y_1),({\bf x_2},y_2),...,({\bf x_n},y_n)\} T={(x1,y1),(x2,y2),...,(xn,yn)},求其极小化损失函数如下 m i n w , θ L ( w , θ ) = m i n w , θ ∑ x i ∈ M ( y ^ i − y i ) w T x i \mathop{min} \limits_{{\bf w},\theta}L({\bf w},\theta)=\mathop{min} \limits_{{\bf w},\theta}\sum\limits_{{\bf x_i}\in M}({\hat y_i}-y_i)\bf w^Tx_i w,θminL(w,θ)=w,θminxi∈M∑(y^i−yi)wTxi
可见,该损失函数非负。当没有误分类点时,损失函数值为0。当误分类点越少、误分类点离超平面越近,损失函数值越小。 - 学习算法:
得到误分类样本集合M后,计算损失函数 L ( w ) L(w) L(w)的梯度,即 ▽ w L ( w ) = ∑ x i ∈ M ( y ^ i − y i ) x i {\bigtriangledown}_{\bf w}L({\bf w})=\sum\limits_{{\bf x_i}\in M}({\hat y_i}-y_i){\bf x_i} ▽wL(w)=xi∈M∑(y^i−yi)xi
再采用随机梯度下降的方法,来进行参数权重 w w w的更新: w ⟵ w + Δ w Δ w = − η ( y ^ i − y i ) x i = η ( y i − y ^ i ) x i {\bf w}\longleftarrow{\bf w}+\Delta{\bf w} \\ \Delta{\bf w}=-\eta ({\hat y_i}-y_i){\bf x_i}=\eta (y_i-{\hat y_i}){\bf x_i} w⟵w+ΔwΔw=−η(y^i−yi)xi=η(yi−y^i)xi
碎念几句:
- 感知机由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层时M-P神经元。
- 感知机的学习能力有限,虽然能解决与、或、非等线性可分问题,但不能解决非线性问题。
- 所谓线性可分问题,就是能找到一个超平面将空间正确分开。
3、误差逆传播算法
使用多层功能神经元,能克服上述感知机只能解决线性可分问题的局限性。通过在输出层与输入层之间添加隐含层(hidden layer),就能解决非线性可分问题。隐含层和输出层神经元都是拥有激活函数的功能神经元。而 “多层前馈神经网络”(multi-layer feedforward neural networks) 就是一种具有层级结构、每层神经元与下一层神经元全互联且不存在神经元之间的同层连接和跨层连接的神经网络。理论 “通用近似定理” 证明:只需一个包含足够多神经元的隐含层,多层前馈神经网络就能以任意精度笔记任意复杂度的连续函数。(关于神经网络的一些理解推荐观看Datawhale的讲解视频)
神经网络的学习过程就是根据训练数据来调整神经元之间“连接权”以及每个功能神经元的阈值的过程。训练多层网络使用得到是误差逆传播(BackPropagation,简称BP)算法 ,它是基于梯度下降的参数更新算法,参数更新如下所示(
η
是学习率
\eta 是学习率
η是学习率)
w
⟵
w
+
△
w
△
w
=
−
η
▽
w
E
w\longleftarrow w+\bigtriangleup w \\\bigtriangleup w=-\eta \bigtriangledown _wE
w⟵w+△w△w=−η▽wE
其中只需通过链式求导法则推导出
▽
w
E
\bigtriangledown _wE
▽wE这个损失函数E关于参数
w
w
w的一阶偏导数(梯度)即可。
接下来以下图所示的多层前馈网络结构来介绍BP算法对神经网络进行训练的过程。
在下图所示的网络结构中,有
(
d
+
l
+
1
)
q
+
l
(d+l+1)q+l
(d+l+1)q+l个参数需要确定:输入层到隐层的
d
×
q
d\times q
d×q个权值,隐层到输出层的
q
×
l
q\times l
q×l 个权值,
q
q
q个隐层神经元的阈值,
l
l
l个输出层神经元的阈值。
方便讨论,约定以下:
- 训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , x i ∈ R d , y i ∈ R l D=\{\bf(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\},x_i\in \mathbb R^d,y_i\in\mathbb R^l D={(x1,y1),(x2,y2),...,(xm,ym)},xi∈Rd,yi∈Rl,即输入示例有 d d d个属性描述,输出 l l l 维实值向量。
- 上图神经网络有 d d d个输入神经元、 l l l个输出神经元、 q q q个隐层神经元。
- θ j \theta _j θj : 输出层第 j j j 个神经元的阈值。
γ h \gamma _h γh : 隐层第 h h h 个神经元的阈值。
υ i h \upsilon _{ih} υih : 输入层第 i i i 个神经元与隐层第 h h h 个神经元之间的连接权重。
ω h j \omega _{hj} ωhj : 隐层第 h h h 个神经元与输出层第 j j j 个神经元之间的连接权重。
α h \alpha _h αh : ∑ i = 1 h υ i h x i \sum_{i=1}^{h}\upsilon _{ih}x_i ∑i=1hυihxi,隐层第 h h h 个神经元接收到的输入。
b h b_h bh : 隐层第 h h h 个神经元的输出。
β j \beta _j βj : ∑ h = 1 q ω h j b h \sum_{h=1}^{q}\omega _{hj}b_h ∑h=1qωhjbh,输出层第 j j j 个神经元接收到的输入。- 隐层和输出层神经元都使用 s i g m o i d ( x ) = 1 1 + e − x sigmoid(x)=\frac{1}{1+e^{-x}} sigmoid(x)=1+e−x1作为激活函数。
首先,对训练例
(
x
k
,
y
k
)
(\bf x_k,y_k)
(xk,yk),假定神经网络输出维
y
^
k
=
(
y
^
1
k
,
y
^
2
k
,
.
.
.
,
y
^
l
k
)
{\bf \hat y_k}=({\hat y_1^k},{\hat y_2^k},...,{\hat y_l^k})
y^k=(y^1k,y^2k,...,y^lk),其中
y
^
j
k
=
f
(
β
j
−
θ
j
)
{\hat y_j^k}=f(\beta _j-\theta _j)
y^jk=f(βj−θj)。则网络在
(
x
k
,
y
k
)
(\bf x_k,y_k)
(xk,yk)上的均方误差为:
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
(
注:
1
2
是为了方便后面求导运算
)
E_k=\frac{1}{2}\sum_{j=1}^{l}({\hat y_j^k}-y_j^k)^2 \\(注:\frac{1}{2}是为了方便后面求导运算)
Ek=21j=1∑l(y^jk−yjk)2(注:21是为了方便后面求导运算)
以该均方误差为目标损失函数。BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整。以下以输入层第
i
i
i 个神经元与隐层第
h
h
h 个神经元之间的连接权重
υ
i
h
\upsilon _{ih}
υih 的推导为例:
E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 △ υ i h = − η ∂ E k ∂ υ i h E_k=\frac{1}{2}\sum_{j=1}^{l}({\hat y_j^k}-y_j^k)^2 \qquad \bigtriangleup \upsilon _{ih}=-\eta \frac{\partial E_k}{\partial \upsilon _{ih}} Ek=21j=1∑l(y^jk−yjk)2△υih=−η∂υih∂Ek
而 υ i h 通过 α h 、 α h 影响 b h 、 b h 影响 β j 、 β j 影响 y ^ j k , 从而影响 E k 而\upsilon _{ih}通过\alpha _h、\alpha _h影响b_h、b_h影响\beta _j、\beta _j影响{\hat y_j^k},从而影响E_k 而υih通过αh、αh影响bh、bh影响βj、βj影响y^jk,从而影响Ek,所以依据链式求导法则所得梯度如下:
∂ E k ∂ υ i h = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ b h ⋅ ∂ b h ∂ α h ⋅ ∂ α h ∂ υ i h \frac{\partial E_k}{\partial \upsilon _{ih} }=\sum_{j=1}^{l}\frac{\partial E_k}{\partial {\hat y_j^k}}\cdot \frac{\partial {\hat y_j^k}}{\partial \beta _j}\cdot\frac{\partial \beta _j}{\partial b_h}\cdot\frac{\partial b_h}{\partial\alpha _h}\cdot\frac{\partial \alpha _h}{\partial\upsilon _{ih}} ∂υih∂Ek=j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅∂bh∂βj⋅∂αh∂bh⋅∂υih∂αh
将上式中各部分依次求解表示出来:
α h = ∑ i = 1 h υ i h x i ⟹ ∂ α h ∂ υ i h = x i \alpha _h=\sum_{i=1}^{h}\upsilon _{ih}x_i \qquad\Longrightarrow \qquad\frac{\partial \alpha _h}{\partial\upsilon _{ih}}=x_i αh=∑i=1hυihxi⟹∂υih∂αh=xi
使用的Sigmoid激活函数有一个很好的性质: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f′(x)=f(x)(1−f(x)),所有有以下等式,
b h = f ( α h − γ h ) ⟹ ∂ b h ∂ α h = f ′ ( α h − γ h ) = b h ( 1 − b h ) b_h=f(\alpha _h-\gamma _h)\qquad\Longrightarrow\qquad \frac{\partial b_h}{\partial\alpha _h}=f'(\alpha _h-\gamma _h)=b_h(1-b_h) bh=f(αh−γh)⟹∂αh∂bh=f′(αh−γh)=bh(1−bh)
β j = ∑ h = 1 q ω h j b h ⟹ ∂ β j ∂ b h = ω h j \beta _j=\sum_{h=1}^{q}\omega _{hj}b_h \qquad\Longrightarrow \qquad\frac{\partial \beta _j}{\partial b_h}=\omega_{hj} βj=∑h=1qωhjbh⟹∂bh∂βj=ωhj
记 g j = − ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j = − ( y ^ j k − y j k ) f ′ ( β j − θ j ) = y ^ j k ( 1 − y ^ j k ) ( y j k − y ^ j k ) 记\quad g_j=-\frac{\partial E_k}{\partial {\hat y_j^k}}\cdot\frac{\partial {\hat y_j^k}}{\partial \beta _j}=-({\hat y_j^k}-y_j^k)f'(\beta _j-\theta _j)={\hat y_j^k}(1-{\hat y_j^k})(y_j^k-{\hat y_j^k}) 记gj=−∂y^jk∂Ek⋅∂βj∂y^jk=−(y^jk−yjk)f′(βj−θj)=y^jk(1−y^jk)(yjk−y^jk)
所以最终可得: ∂ E k ∂ υ i h = − b h ( 1 − b h ) ⋅ ∑ j = 1 + l g j ⋅ ω h j ⋅ x i = − e h ⋅ x i \begin{split}\frac{\partial E_k}{\partial \upsilon _{ih} }&=-b_h(1-b_h)\cdot\sum_{j=1}^+ {l}g_j\cdot \omega_{hj}\cdot x_i \\&=-e_h\cdot x_i\end{split} ∂υih∂Ek=−bh(1−bh)⋅j=1∑+lgj⋅ωhj⋅xi=−eh⋅xi
从而 △ υ i h = − ∂ E k ∂ υ i h = η e h x i \bigtriangleup \upsilon _{ih}=-\frac{\partial E_k}{\partial \upsilon _{ih} }=\eta e_hx_i △υih=−∂υih∂Ek=ηehxi
同理可得其他参数更新梯度:
△
θ
j
=
−
η
g
j
△
ω
h
j
=
η
g
j
b
h
△
γ
h
=
−
η
e
h
\bigtriangleup\theta _j=-\eta g_j \\ \bigtriangleup\omega _{hj}=\eta g_jb_h\\ \bigtriangleup\gamma _h=-\eta e_h
△θj=−ηgj△ωhj=ηgjbh△γh=−ηeh
4、全局最小与局部极小
神经网络的训练过程可视为一个参数寻优过程,即在参数空间中,寻找一组最优参数使得损失函数E最小。对于
w
∗
w^*
w∗和
θ
∗
\theta ^*
θ∗,若
∃
ε
>
0
\exists \varepsilon >0
∃ε>0,
s
.
t
.
s.t.
s.t.
∀
(
ω
;
θ
)
∈
∣
∣
(
ω
;
θ
)
−
(
ω
∗
;
θ
∗
)
∣
∣
≤
ε
,
有
E
(
ω
;
θ
)
≥
(
ω
∗
;
θ
∗
)
成立,则
(
ω
∗
;
θ
∗
)
为局部极小解;
若对参数空间中的任意
(
ω
;
θ
)
都有
E
(
ω
;
θ
)
≥
(
ω
∗
;
θ
∗
)
,则
(
ω
∗
;
θ
∗
)
为全局最下解。
\forall (\omega;\theta)\in{||(\omega;\theta)-(\omega ^*;\theta^*)||\le \varepsilon },\\有E(\omega;\theta)\ge(\omega ^*;\theta^*)成立,则(\omega ^*;\theta^*)为局部极小解;\\若对参数空间中的任意(\omega ;\theta)都有E(\omega;\theta)\ge(\omega ^*;\theta^*),则(\omega ^*;\theta^*)为全局最下解。
∀(ω;θ)∈∣∣(ω;θ)−(ω∗;θ∗)∣∣≤ε,有E(ω;θ)≥(ω∗;θ∗)成立,则(ω∗;θ∗)为局部极小解;若对参数空间中的任意(ω;θ)都有E(ω;θ)≥(ω∗;θ∗),则(ω∗;θ∗)为全局最下解。
参数空间内梯度为零的点是局部极小点,对应局部极小值。可能存在多个局部极小值,蛋只会有一个全局最小值。基于梯度的搜索是使用最为广泛的参数寻优方法,其本身也存在陷入局部极小值的风险,可以考虑以下策略“跳出”局部极小值:
- 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解最为最终参数。
- 使用 “模拟退火”(simulated annealing) 算法——在每一步都以一定的概率接受比当前解更差的结构。
- 使用随机梯度下降策略,加入随机因素。
- 使用 遗传算法(genetic algorithms) 来进行网络训练。
5、补充