神经网络是由具有适应性简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应,神经网络中最基本的成分是神经元模型,以下为第一个神经元数学模型——M-P神经元模型。
在这个模型中,神经元接收到来自 n n n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出,理想中的激活函数如下图a所示的阶跃函数,它将输入值映射为输出值“0”或“1”,其中“1”对应于神经元兴奋,“0”对应于神经元抑制。
然而,阶跃函数具有不连续、不光滑等不太好的性质,所以实际常用Sigmoid函数作为激活函数。目前常用的激活函数主要有以下几种,具体的可以参考这个链接(激活函数 | 深度学习领域最常用的10个激活函数,详解数学原理及优缺点)。
感知机是神经网络最基本的模型,它是由一个或多个神经元组成的,而神经网络是由多个感知机或其他类型的神经元连接而成的复杂模型,它可以实现非线性分类和回归等功能,比如下面就是一个有两个输入神经元的感知机网络结构 y = f ( ∑ w i x i − θ ) y = f(\sum {{w_i}} {x_i} - \theta ) y=f(∑wixi−θ),可以实现与、或、非运算。
更一般的,给定训练数据集,权重
w
w
w以及阈值
θ
\theta
θ可以通过学习得到,而阈值
θ
\theta
θ可以看作固定输入为-1的权重
w
n
+
1
w_{n+1}
wn+1,这样就可以统一为权重的学习,对于感知机来说,学习规则如下所示,假设当前感知机的输出为$\mathop y\limits^ \wedge $,感知机权重将这样调整:
w
i
←
w
i
+
Δ
w
i
Δ
w
i
=
η
(
y
−
y
∧
)
x
i
{w_i} \leftarrow {w_i} + \Delta {w_i}\\ \Delta {w_i} = \eta (y - \mathop y\limits^ \wedge ){x_i}
wi←wi+ΔwiΔwi=η(y−y∧)xi
其中
η
∈
(
0
,
1
)
\eta \in (0,1)
η∈(0,1)称为学习率,若感知机预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整,这也是感知机学习算法,是一种基于误分类的监督学习算法,目标是找到一个能够将训练数据正确分类的超平面。
感知机选择将预测值与实际值作差的形式来进行权重更新的依据是为了使超平面向正确分类的方向移动。当一个实例被误分类时,预测值与实际值的差就是误差的符号,它表示了超平面与实例之间的距离和方向,此时将误差乘以输入向量,就可以得到一个调整量,它表示了超平面在每个特征维度上需要移动的大小和方向,而将调整量加到权重上,就可以使超平面向正确分类的方向移动一定的距离。这样,经过多次迭代,超平面就可以逐渐接近最优的位置了。
上述问题都是线性可分问题,而这样的感知机无法解决非线性可分问题,要解决非线性可分问题,需要考虑使用多层功能神经元。如下所示的两层感知机,就可以解决异或问题,而在输出层与输入层之间的一层神经元则被称为隐层或隐含层,也是具有激活函数的功能神经元。
下面介绍一下前馈神经网络,在前馈神经网络中,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,如下所示:
前馈神经网络与反馈神经网络的区别:深度学习–前馈神经网络、反馈神经网络
多层网络的学习能力比单层感知器强得多,如果想训练多层网络,上述简单感知器的学习规则显然就不够了,需要更强大的学习算法,下面来介绍一下BP算法,BP算法是一种用于训练多层神经网络的梯度下降算法,它利用链式法则计算网络每层的权重对损失函数的梯度,然后更新权重来最小化损失函数。BP算法分为两个阶段:激励传播和权重更新。激励传播阶段包括前向传播和反向传播,前向传播是将训练输入送入网络以获得预测结果,反向传播是计算预测结果与训练目标的误差。权重更新阶段是根据误差和梯度调整网络的权重,以减小误差。
下面对BP算法中的一些符号进行定义,以一个拥有 d d d个输入神经元、 l l l个输出神经元、 q q q个隐层神经元的多层前馈网络结构为例,假设隐层和输出层神经元都是用Sigmoid函数作为激活函数。
对于训练例
(
x
k
,
y
k
)
({x_k},{y_k})
(xk,yk),假定神经网络的输出为
y
∗
k
=
(
y
∗
1
k
,
y
∗
2
k
,
.
.
.
,
y
∗
l
k
)
{{y^*}_k} = ({y^*}_1^k,{y^*}_2^k,...,{y^*}_l^k)
y∗k=(y∗1k,y∗2k,...,y∗lk),即
y
∗
l
k
=
f
(
β
j
−
θ
j
)
{y^*}_l^k = f({\beta _j} - {\theta _j})
y∗lk=f(βj−θj),则网络在
(
x
k
,
y
k
)
({x_k},{y_k})
(xk,yk)上的均方误差为
E
k
=
1
2
∑
j
=
1
l
(
y
∗
l
k
−
y
j
k
)
2
{E_k} = \frac{1}{2}{\sum\limits_{j = 1}^l {({y^*}_l^k - y_j^k)} ^2}
Ek=21j=1∑l(y∗lk−yjk)2
下面以隐层到输出层的连接权重
w
h
j
w_{hj}
whj为例来进行权重更新的推导,对于误差
E
k
E_k
Ek,给定学习率
η
\eta
η,有
Δ
w
h
j
=
−
η
∂
E
k
∂
w
h
j
∂
E
k
∂
w
h
j
=
∂
E
k
∂
y
∗
l
k
⋅
∂
y
∗
l
k
∂
β
j
⋅
∂
β
j
∂
w
h
j
,
∂
β
j
∂
w
h
j
=
b
h
\Delta {w_{hj}} = - \eta \frac{{\partial {E_k}}}{{\partial {w_{hj}}}}\\ \frac{{\partial {E_k}}}{{\partial {w_{hj}}}} = \frac{{\partial {E_k}}}{\partial {y^*}_l^k} \cdot \frac{\partial {y^*}_l^k}{{\partial {\beta _j}}} \cdot \frac{{\partial {\beta _j}}}{{\partial {w_{hj}}}}, \frac{{\partial {\beta _j}}}{{\partial {w_{hj}}}} = {b_h}
Δwhj=−η∂whj∂Ek∂whj∂Ek=∂y∗lk∂Ek⋅∂βj∂y∗lk⋅∂whj∂βj,∂whj∂βj=bh
Sigmoid函数有一个很好的性质:
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
f'(x) = f(x)(1 - f(x))
f′(x)=f(x)(1−f(x)),所以可以定义如下
g
j
g_j
gj:
g
j
=
−
∂
E
k
∂
y
∗
l
k
⋅
∂
y
∗
l
k
∂
β
j
=
−
(
y
∗
l
k
−
y
j
k
)
f
′
(
β
j
−
θ
j
)
=
y
∗
l
k
(
1
−
y
∗
l
k
)
(
y
j
k
−
y
∗
l
k
)
{g_j} = - \frac{{\partial {E_k}}}{\partial {y^*}_l^k} \cdot \frac{\partial {y^*}_l^k}{{\partial {\beta _j}}} = - ({y^*}_l^k - y_j^k)f'({\beta _j} - {\theta _j}) = {y^*}_l^k(1 - {y^*}_l^k)(y_j^k - {y^*}_l^k)
gj=−∂y∗lk∂Ek⋅∂βj∂y∗lk=−(y∗lk−yjk)f′(βj−θj)=y∗lk(1−y∗lk)(yjk−y∗lk)
将上述
g
j
g_j
gj代入之前的式子即可得到权重
w
h
j
w_{hj}
whj的更新公式:
Δ
w
h
j
=
η
g
j
b
h
\Delta {w_{hj}} = \eta g_j b_h
Δwhj=ηgjbh,类似也可以得到其他权重的更新公式,如下所示:
Δ
θ
j
=
−
η
g
j
,
Δ
v
i
h
=
η
e
h
x
i
,
Δ
γ
h
=
−
η
e
h
其中
e
h
=
−
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
−
∑
j
=
1
l
∂
E
k
∂
β
j
⋅
∂
β
j
∂
b
h
f
′
(
α
h
−
γ
h
)
=
∑
j
=
1
l
w
h
j
g
j
f
′
(
α
h
−
γ
h
)
=
b
h
(
1
−
b
h
)
∑
j
=
1
l
w
h
j
g
j
\Delta {\theta _j} = - \eta {g_j},\Delta {v_{ih}} = \eta {e_h}{x_i},\Delta {\gamma _h} = - \eta {e_h}\\ 其中{e_h} = - \frac{{\partial {E_k}}}{{\partial {b_h}}} \cdot \frac{{\partial {b_h}}}{{\partial {\alpha _h}}} = - \sum\limits_{j = 1}^l {\frac{{\partial {E_k}}}{{\partial {\beta _j}}} \cdot \frac{{\partial {\beta _j}}}{{\partial {b_h}}}} f'({\alpha _h} - {\gamma _h}) = \sum\limits_{j = 1}^l {{w_{hj}}} {g_j}f'({\alpha _h} - {\gamma _h}) = {b_h}(1 - {b_h})\sum\limits_{j = 1}^l {{w_{hj}}} {g_j}
Δθj=−ηgj,Δvih=ηehxi,Δγh=−ηeh其中eh=−∂bh∂Ek⋅∂αh∂bh=−j=1∑l∂βj∂Ek⋅∂bh∂βjf′(αh−γh)=j=1∑lwhjgjf′(αh−γh)=bh(1−bh)j=1∑lwhjgj
下面给出BP算法的工作流程,对于每个训练样例,BP算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权重和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止,比如训练误差已达到一个很小的值。
BP算法的目标是要最小化训练集 D D D上的累积误差 E = 1 m ∑ k = 1 m E k E = \frac{1}{m}\sum\limits_{k = 1}^m {{E_k}} E=m1k=1∑mEk,在这里要注意虽然BP算法里面有反向传播这一步,但这与反馈神经网络中的反馈是不同的,BP算法里面的反向传播是指根据网络的输出误差,从输出层到输入层逐层计算并更新权重参数的过程,而反馈神经网络中的反馈是指网络的输出会经过一定的变换后,再作为输入传回到网络中,形成一个循环或回路。
下面介绍一下两种BP算法:标准BP算法与累积BP算法。
标准BP算法每次只针对一个训练样例更新参数,也就是随机梯度下降法(stochastic gradient descent),优点是参数更新频繁,可以加快收敛速度和避免局部最优,缺点是参数更新不一致,可能导致震荡和偏离最优方向。累积BP算法每次针对所有训练样例更新参数,也就是批量梯度下降法(batch gradient descent),优点是参数更新稳定,可以减少噪声和波动,缺点是参数更新缓慢,可能导致陷入局部最优或过拟合。比如,假设有n个训练样例,分别使用标准BP和累积BP,那么参数更新的次数取决于迭代轮数,假设迭代轮数为m,那么:
为了缓解BP网络的过拟合,一共有两种策略——早停和正则化。早停是将数据集分成训练集和验证集,训练集用来计算梯度、更新连接权重和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权重和阈值。正则化是在误差目标函数中增加一个用于描述网络复杂度的部分,比如连接权重与阈值的平方和。
在神经网络的训练过程中,我们往往会谈到两种最优:局部极小与全局最小。显然,参数空间内梯度为零的点,只要其误差函数值小于邻点的误差函数值,就是局部极小点;可能存在多个局部极小值,但是却只会有一个全局最小值。
基于梯度的搜索时使用最为广泛的参数寻优方法,梯度下降法是沿着负梯度方向搜索最优解,因为负梯度方向是函数在当前点的方向导数最小的方向,方向导数是函数沿着某个方向的变化率,它与函数的梯度和该方向的单位向量的点积相等,当两个向量的夹角为180度时,点积最小,也就是说,当单位向量与梯度的反方向一致时,方向导数最小。因此,沿着负梯度方向走,函数值下降最快。
目前常采用以下策略来试图跳出局部极小,从而进一步接近全局最小:
(1)RBF网络
RBF网络是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元的激活函数,而输出层则是对隐层神经元输出的线性组合。
(2)ART网络
竞争型学习是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制。而ART网络是竞争型学习的重要代表,该网络由比较层、识别层、识别阈值和重置模块组成。
在接收到比较层的输入信号后,识别层神经元之间相互竞争以产生获胜神经元,竞争的最简单方式是,计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜。获胜神经元将向其他识别层神经元发送信号,抑制其激活。若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则当前输入样本将被归为该代表向量所属类别,同时,网络连接权重将会更新,使得以后在接收到相似输入样本时该模式类会计算出更大的相似度,从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。
(3)SOM网络
SOM网络是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。
如下图所示,SOM网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在低维空间中的位置。SOM的训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。
(4)级联相关网络
一般的神经网络模型通常假定网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权重、阈值等参数。与此不同,结构自适应网络则将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构,级联相关网络是结构自适应网络的重要代表。
级联相关网络有两个主要成分:“级联”和“相关”。级联是指建立层次连接的层级结构,相关是指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数。
(5)Elman网络
Elman网络是最常用的递归神经网络之一,如下所示,它的结构与多层前馈网络很相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入。隐层神经元通常采用Sigmoid激活函数,而网络的训练则常通过推广的BP算法进行。
典型的深度学习模型就是很深层的神经网络,深度学习有很多应用场景,例如:
以下是卷积神经网络用于手写数字识别的一个例子。