单隐层前馈神经网络
基本术语
由多个简单单元并行互连所构成的网络,这些基础单元被称为神经元,这个网络称为神经网络。神经网络被用来模拟生物对于外界刺激的真实反应。
神经元模型可以有若干个输入和一个输出,当输入的电信号足够强时,神经元会被激活。使用数学模型描述就是:
y=f(i∑wixi−θ)
其中θ是激活阈值,xi是第i个输入信号,wi是第i个输入信号的权重,两者比较后送给激活函数f(⋅) 进行处理,以决定到底是激活该神经元还是抑制该神经元。上述神经元模型类似于对数几率回归模型,只需要将f(⋅)设置为sigmoid
函数,并令θ为一个输入恒为−1的哑元,则上述模型即为对数几率回归模型。
由若干个神经元异层全连接、同层无连接的堆叠,可以得到神经网络。下图为单隐层前馈神经网络的结构示意图。
单隐层前馈神经网络指的是输入流动只能向前流动(即方向单一),输入层和输出层之间只有一层神经元。根据通用近似定理,具有单隐层的神经网络可以以任何精度拟合任意复杂的连续函数。但是需要注意的是:这个定理只告诉你一个单隐层足够,但是这个单隐层是有多少个神经元,参数都是多少他没有告诉你,因此实践中,常常用多层前馈神经网络来进行拟合。
注:图5.7
来源于《机器学习.周志华》
数学建模
单隐层前馈网络结构的数学描述
由一个输入层、一个隐层和一个输出层共三层堆叠所形成的前馈神经网络。共有d个输入信号,隐层有q个神经元,输出层有l个神经元。
设:
- xi 为输入层的第i个输入信号
- vih是由输入层的第i个信号到隐层的第h个神经元的信号权重
- whj是隐层第h个神经元到输出层第j个神经元的信号的权重
- αh=∑i=1dvihxi为隐层第h个神经元的输入值
- γh为隐层第h个神经元的阈值,θj为输出层第j个神经元的阈值
- bh=f(αh−γh)为隐层第h个神经元的输出值,f(⋅)为
sigmoid
函数
- βj=∑h=1qwhjbh为输出层第j个神经元的输入值
已知条件与目标
给定训练集D={(xx1,yy1),(xx2,yy2),⋯,(xxm,yym)},xxi∈Rd,yyi∈Rl。通过梯度下降法迭代式的进行训练。目标是使得每一个样本的预测输出值与样本的真实值在某种度量下的误差最小。
设使用的度量为均方误差,预测值y^,真实值为y,则对于单个样本(xxk,yyk),有:
Ek=21j=1∑d(y^jk−yjk)2
误差反向传播算法
反向传播算法中用到的数学解析式
设η为梯度下降的学习率,则梯度下降法的实质是:对于待求的参数v,有:
v←v+Δv
其中v为上一轮迭代的值,而Δv是本轮计算得到的修正值。
根据以上几节的定义,可以知道共有(d+l+1)×q+l 个参数,其中参数分别为:v,w,γ,θ共四类参数。
误差传递到隐层的解析式的计算
对于任意的一个由隐层节点h到输出节点的j的权重的修正量为:
Δwhj=−η∂whj∂Ek
根据求导的链式法则,有:
∂whj∂Ek=∂y^jk∂Ek∂βj∂y^jk∂whj∂βj
由于∂y^jk∂Ek∂βj∂y^jk在下列计算中经常应用到,则提取公共表达式,并给予符号−gj,即:
gj=−∂y^jk∂Ek∂βj∂y^jk=−(y^jk−yjk)∂βj∂y^jk=−(y^jk−yjk)f′(βj−θj)
对于sigmoid
函数有一个很好的性质,即:f′(x)=f(x)(1−f(x)),故上式整理有:
gj=−(y^jk−yjk)f′(βj−θj)=−(y^jk−yjk)y^jk(1−y^jk)=−y^jk(1−y^jk)(y^jk−yjk)
则∂whj∂Ek为:
∂whj∂Ek=−gj∂whj∂βj=−gjbh
故有:
Δwhj=−η∂whj∂Ek=ηgjbh
对于输出层的阈值θj的修正量为:
Δθj=−η∂θj∂Ek=−η∂y^jk∂Ek∂θj∂yjk
而:
∂θj∂yjk=f′(βj−θj)(−1)=−y^jk(1−y^jk)
故有:
∂θj∂Ek=∂y^jk∂Ek∂θj∂yjk=−y^jk(1−y^jk)(y^jk−yjk)=gj
故输出层的阈值θj的修正量为Δθj=−ηgj
误差传递到输入层的解析式的计算
计算输入层第i个输入信号到隐层第h个神经元的权重vij的修正量Δvih,则有:
Δvih=−η∂vih∂Ek
而由于误差Ek 到节点vih 经过一个隐层,将一对一的关系变为了一对多的情形,因此偏导数∂vih∂Ek为:
∂vih∂Ek=j=1∑l∂y^jk∂Ek∂βj∂yjk∂bh∂βj∂αh∂bh∂vih∂αh=j=1∑l(−gj)∂bh∂βj∂αh∂bh∂vih∂αh=j=1∑l(−gj)∂bh∂βj∂αh∂bhxi=j=1∑l(−gj)∂bh∂βjf′(αh−γh)xi=j=1∑l(−gj)whjf′(αh−γh)xi=j=1∑l(−gj)whjbh(1−bh)xi=−xibh(1−bh)j=1∑lgjwhj
令eh=bh(1−bh)∑j=1lgjwhj,则上式可以化简为:
∂vih∂Ek=−ehxi
则修正量Δvih为Δvih=ηehxi。
而隐层第h个神经元的权重γh的修正量Δγh=−η∂γh∂Ek,其中:
∂γh∂Ek=j=1∑l∂y^jk∂Ek∂βj∂y^jk∂bh∂βj∂γh∂bh=j=1∑l(−gj)whjf′(bh−γh)(−1)=j=1∑lgjwhjbh(1−bh)=bh(1−bh)j=1∑lgjwhj=eh
故修正量Δγh=−ηeh。
反向传播算法的流程
根据反向传播算法所用到的解析式的计算,可以得到反向传播算法的流程:
- 在(0,1)范围内,随机初始化网络中的所有链接权和阈值,逐一从训练集中拿出一个样本(xxk,yyk)进行训练
- 根据当前权值和阈值,计算预测输出y^jk
- 计算gj和eh
- 更新连接权值whj,vih,γh,θj
- 重复步骤2 - 4,直到满足退出条件
局部最优解与过拟合
前馈神经网络的总体目标是最小化训练集上的累积误差:
E=m1k=1∑mEk
由于神经网络的学习能力过于强大,很容易出现过拟合,常用的两种方法分别是:早停法和添加正则化项的方法。对于早停法,使用训练集进行更新参数,使用训练集进行误差估计,当训练集中的误差降低但是训练集的误差升高时,停止训练,并返回具有最小验证集误差的参数值;对于添加正则化项的方法,可以使用某种度量方式(如范数),将参量数值化并作为整体学习目标中的一项进行评估,即:在误差目标函数中增加一项使用参量来描述模型复杂度的部分。如使用L2范数作为模型复杂度的度量,令w^为连接权重和阈值的向量,则误差目标函数可以改写为:
E=λm1k=1∑mEk+(1−λ)∣∣w^∣∣22,λ∈(0,1)
λ是超参数,为了进一步分方便看出来,将等号两侧均除以λ时,函数变为:
λE=m1k=1∑mEk+λ(1−λ)∣∣w^∣∣22,λ∈(0,1)
此时不影响优化结果,且正则化项前的系数变为了α=λ1−λ。由于正则化项不能太大,不能过于影响原来的目标函数项,因此正则化前的系数往往位于(0,1)之间,即:权衡两项。
神经网络极容易陷入局部最优解,常用的方法是将标准梯度下降法改为采用随机梯度下降法。标准梯度下降法当梯度为0时,即达到了最优解并停止迭代了,而采用随机梯度下降则有一定几率使得计算的梯度不为0,从而跳出局部极小值,向着全局最小值继续搜索。