BP神经网络&性能优化

本文详细介绍了BP神经网络的结构、反向传播算法,以及性能优化方法如k折交叉验证、权值衰减、Dropout、随机梯度下降(SGD)、动量法、自适应梯度(AdaGrad)和RMSProp/Adam等,展示了神经网络在处理复杂任务中的应用和优化策略。

一、BP神经网络

1 多层感知机与BP神经网络

多层感知机(Multilayer Perceptron, 缩写为MLP)是一种前馈型人工神经网络模型,主要用于解决非线性分类和回归问题。它的结构包含多个相互连接的层,这些层包括:

输入层(Input Layer):接收原始输入数据,这一层的每个节点(或称为神经元)对应输入数据的一个特征。

隐藏层(Hidden Layers):位于输入层和输出层之间,至少有一个或多个隐藏层。每个隐藏层中的神经元对上一层所有神经元的输出进行加权求和,并将这个加权和传递给一个激活函数以产生新的输出,这一过程允许网络对输入进行复杂的变换和抽象表示。

输出层(Output Layer):最后一层提供网络的最终输出,它可以是分类的概率分布或者是连续值的预测。

全连接网络

简单来说,BP神经网络就是采用了反向传播算法的多层感知机,因此,BP神经网络一定是MLP,但是MLP不一定是BP神经网络。权重和偏置参数在神经元传输信号时起了关键作用,训练MLP的过程主要是通过反向传播算法来更新这些权重和偏置,从而最小化预测输出与实际目标值之间的误差。BP神经网络由于器强大的非线性拟合能力和泛化能力,在很多预测任务中经常采用。

2 BP神经网络的基本原理

我们以L层网络为例(输入层是第0层,输出层是第L层)
预测多输出记为 y^=a[L]=a\rm\widehat{y}=a^{[L]}=ay=a[L]=a(注:按照吴恩达"深度学习"的记法,粗正题为向量或矩阵,而一般斜体则为单变量)
网络输入为 a[0]=x\rm{a}^{[0]}=xa[0]=x

BP算法的基本思想

BP算法也就是误差反传算法,那么具体是怎么推导得到的呢?具体请看下文
我们选取Sigmoid函数作为激活函数
网络中的第l层输出:a[l]=σ(z[l])\rm{a}^{[l]}=σ({z}^{[l]})a[l]=σ(z[l])

网络中的第l层第i个节点的输出:zil=Σjwij[l]ajl−1{z}_i^{l} = Σ_{j}w_{ij}^{[l]}a_{j}^{l-1}zil=Σjwij[l]ajl1
其中,wij[l]w_{ij}^{[l]}wij[l],表示连接第lll层(本层)第iii节点和第l−1l-1l1层(上层)第j个节点的权值

网络中第lll层线性输出:z[l]=W[l]a[l−1]z^{[l]}=W^{[l]}a^{[l-1]}z[l]=W[l]a[l1],W为权值矩阵,列数为上层神经元数目,行数为本层神经元数目

网络训练的目的,是使对每一个输入样本,调整网络权值参数w,使输出均方误差最小化。这是一个最优化问题。
选取目标函数 J(x(i);w)=12(y(i)−y^(i)(x;w))2=12(e(i)(x;w))2J(x^{(i)};w)={1 \over 2}(y^{(i)}-\widehat{y}^{(i)}(x;w))^{2}={1\over 2}(e^{(i)}(x;w))^{2}J(x(i);w)=21(y(i)y(i)(x;w))2=21(e(i)(x;w))2

其中,e(i)=y(i)−y^(i)e^{(i)}=y^{(i)}-\widehat{y}^{(i)}e(i)=y(i)y(i)

为了求解上述最小化问题,考虑采用迭代算法
设初始权值为w0w_0w0,k时刻权值为wkw_kwk,使用泰勒级数展开,有
J(wk+1)=J(wk)+[dJdθ]TΔwk+...J(w_{k+1})=J(w_k)+[{dJ\over dθ}]^{T}Δw_k+...J(wk+1)=J(wk)+[dθdJ]TΔwk+...

问题是如何选择ΔwkΔw_kΔwk,使得J最小呢?
最直接的方法就是选择Δwk=−α[dJdw]Δw_k=-α[{dJ\over dw}]Δwk=α[dwdJ],0<α<=1
这就是梯度下降算法,可以使得JJJ最终收敛到最小。这就是BP算法的基本思想

计算过程
1、设置初始权系数w_0为较小的随机非零值;
2、给定输入/输出样本对,计算网络输出,完成前向传播;
3、给定目标函数JJJ,如JJJ<ε\varepsilonε,训练成功,退出;否则转入4
4、反向传播计算由输出层,按梯度下降法将误差反向传播,逐层调整权值

二、性能优化

1 k折交叉验证

原始训练数据被分成K个不重叠的子集。然后执行K次模型
训练和验证,每次在K−1 个子集上进行训练,并在剩余的一
个子集(在该轮中没有用于训练的子集)上进行验证。最后,
通过对K 次实验的结果取平均来估计训练和验证误差。

2 权值衰减(L2L_2L2正则化)

为防止过拟合和权值震荡,加入新的指标函数项:J(w)+λ2∣∣w∣∣2J(w)+{\lambda \over 2} ||w||^{2}J(w)+2λ∣∣w2
第二项约束了权值不能过大。在梯度下降时,导数容易计算:J(w)dwJ(w) \over dwdwJ(w)+λw\lambda wλw

3 Dropout(暂退)

在整个训练过程的每一次迭代中,标准暂退法包括在计算下
一层之前将当前层中的一些节点置零。

4 随机梯度下降(SGD)病态曲率问题解决方案

1、使用动量法进行随机梯度下降
如果把原始的 SGD 想象成一个纸团在重力作用向下滚动,由
于质量小受到山壁弹力的干扰大,导致来回震荡;或者在鞍点
处因为质量小速度很快减为 0,导致无法离开这块平地。
动量方法相当于把纸团换成了铁球;不容易受到外力的干扰,
轨迹更加稳定;同时因为在鞍点处因为惯性的作用,更有可能
离开平地。

2、自适应梯度法(AdaGrad)
参数自适应变化:具有较大偏导的参数相应有一个较大的学习
率,而具有小偏导的参数则对应一个较小的学习率
具体来说,每个参数的学习率会缩放各参数反比于其历史梯度
平方值总和的平方根

该方法也存在问题: 学习率是单调递减的,训练后期学习率过小会导致训练困难,甚至提前结束,需要设置一个全局的初始学习率

3、RMSProp法
RMSProp解决AdaGrad方法中学习率过度衰减的问题
RMSProp使用指数衰减平均以丢弃遥远的历史,使其能够快
速收敛;此外,RMSProp还加入了超参数𝜌控制衰减速率。

4、Adam算法(常用)
Adam 在RMSProp方法的基础上更进一步:
除了加入历史梯度平方的指数衰减平均(r)外,
还保留了历史梯度的指数衰减平均(s),相当于动量。
Adam 行为就像一个带有摩擦力的小球,在误差面上倾向于平坦的极小值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值