神经网络与深度学习-屈桢深-学习笔记(第二周)

多层前馈网络与误差反传算法

1、多层感知机

1.1 XOR问题

        XOR(异或)问题通常指的是一个在机器学习和模式识别中常见的二分类问题。XOR无法进行线性分类,是一种线性不可分问题。

1.2 多层感知机

        XOR的解决方法是是使用多层感知机。多层感知机,或者称作多层前馈神经网络,指的是在输入和输出层间加一层或者多层隐单元。三层感知器可识别任一凸多边形或无界的凸区域,更多层感知器网络,可识别更为复杂的图形。三层网络即可解决XOR问题。

        多层感知器网络,有如下定理:

定理1:若隐层节点(单元)可任意设置,用三层阈值节点的网络,可以实现任意的二值逻辑函数。

定理2:若隐层节点(单元)可任意设置,用三层S型非线性特性节点的网络,可以一致逼近紧集上的连续函数或按范数逼近紧集上的平方可积函数。

2、BP算法简述

2.1 多层前馈网络

        多层感知机是一种多层前馈网络,由多层神经网络构成,每层网络将 输出传递给下一层网络。神经元间的权值连接仅出现在相邻层之间, 不出现在其他位置。如果每一个神经元都连接到上一层的所有神经元 (除输入层外),则成为全连接网络。下面讨论的都是此类网络。

2.2 BP算法简述

        多层前馈网络的反向传播 (BP)学习算法,简称BP算法,是有监督的学习,它是梯度下降法在多层前馈网中的应用。BP学习算法由正向传播和反向传播组成:

①正向传播是输入信号从输入层经隐层,传向输出层,若输出层得到了期望的输出,则学习算法结束;否则,转至反向传播。

②反向传播是将误差(样本输出与网络输出之差)按原联接通路反向计算,由梯度下降法调整各层节点的权值和阈值,使误差减小。

3、BP算法详述

3.1 BP算法基本思想

        BP算法的基本思想是梯度下降算法,计算过程如下:

①设置初始权系数w_{0}为较小的随机非零值;

②给定输入/输出样本对,计算网络输出,完成前向传播;

③计算目标函数J。如果J<\varepsilon,训练成功并退出;否则转入④;

④反向传播计算。由输出层按梯度下降法将误差反向传播,逐层调整权值。

3.2 BP算法推导

        假设网络共有L层,其中输入层为第0层,输出层位第L层。记:

①网络中第i层输出:a^{[i]}=f(z^{[i]}),其中z^{[i]}为该层的线性输出;

②第i层第j个节点线性输出:z_{j}^{[i]} = \sum_{k} w_{jk}^{[i]}a_{k}^{[i-1]},其中w_{jk}^{[i]}为连接第i层第j个节点和第i-1层第k个节点的权值;

③网络中第i层线性输出:z^{[i]}=W^{[i]}a^{[i-1]},其中W为权矩阵,列数为上层神经元数目,行数为本层神经元数目;

④算法输入输出样本对:\left \{ x^{(1)},y^{(1)} \right \},\left \{ x^{(2)},y^{(2)} \right \},...,\left \{ x^{(N)},y^{(N)} \right \},共N个样本。

3.2.1 前向传播

        考虑含一层隐含层的二层神经网络,对于第i层第j个神经元,其输出为:

a_{i}=f(w^{[2]}\cdot a^{[1]})=f(\sum_{k=0}^{n}w_{jk}^{2}\cdot a_{k}^{[1]}))

其中,f可选取LogSigmoid函数\sigma =\frac{1}{1+e^{-x}}。接着需要计算\Delta w_{k} = -\alpha \frac{dJ}{dw}

3.2.2 误差反传

①初始化:i = L

②如果i = L,则\delta _{j}^{[i]} = a_{j}(1-a_{j})e_{j};否则,\delta_{j}^{[i]} = \left [ \sum_{k=1}^{m}w_{kj}^{[i+1]}\delta _{k}^{[i+1]} \right ](a_{j}^{[i]})

③权值更新:\Delta w_{jk}^{[i]}(p)=\alpha \cdot \delta _{j}^{[i]}\cdot \alpha _{k}^{[i-1]}

④如果i>0,则i\leftarrow (i-1),返回步骤2,进行前一层更新。对应输入层:a_{k}^{[0]}=x_{k}

4、BP算法评述

◼优点:学习完全自主;可逼近任意非线性函数。

◼缺点:算法非全局收敛;收敛速度慢;学习速率α选择; 神经网络如何设计?

5、常用训练技巧

5.1 模型初始化

◼把所有权值在[-1,1]区间内按均值或高斯分布进行初始化。

◼Xavier初始化:为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等。因此需要实现下面的均匀分布:

W\sim U\left [ -\frac{\sqrt{6}}{\sqrt{n_{j}+n_{j+1}}},\frac{\sqrt{6}}{\sqrt{n_{j}+n_{j+1}}} \right ]

5.2 K折交叉验证

        数据包括训练数据、验证数据、测试数据。通常三者比例为70%、15%、15%或60%、20%、20%。当数据很多时,训练和验证数据可适当减少。

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

5.3 权重衰减(L_{2}正则化)

        欠拟合指误差一直比较大,过拟合指在训练数据集上误差小而在测试数据集上误差大。

       为防止过拟合和权值震荡,加入新的指标函数项: 

J(w)+\frac{\lambda }{2}||w||^{2}

        第二项约束了权值不能过大。在梯度下降时,导数容易计算:

\frac{J(w)}{dw}+\lambda w

5.4 Dropout(暂退)

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

6、求解方法

6.1 动量法

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

          动量法公式如下:

v_{t}=\alpha v_{t-1}-\epsilon g_{t}

\Delta \theta \leftarrow v_{t}

\theta _{t+1}\leftarrow \theta _{t}+\Delta \theta

6.2 自适应梯度算法

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

        AdaGrad是最基础的自适应梯度算法。它的问题在于学习率是单调递减的,训练后期学习率过小会导致训练困难, 甚至提前结束。因此需要设置一个全局的初始学习率。

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

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

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在《python深度学习》的第八章中,主要讨论了在ImageNet大规模视觉识别挑战(ILSVRC)上训练神经网络的主题。其中最后一章讨论了SqueezeNet深度学习架构[1]。SqueezeNet是在2016年的一篇论文中提出的,它在准确度上和AlexNet相当,但参数减少了50倍,模型大小小于0.5MB。 在这一章中,还提到了一个名为test_alexnet.py的脚本,用以测试在ImageNet上训练的CNN模型。这个脚本没有进行任何修改,因为该章节中的test_*.py脚本旨在成为可以应用于任何在ImageNet上训练的CNN模型的模板。 此外,这一章还介绍了处理问题的一种方法,即使用softmax温度。在使用softmax温度时,需要尝试多种不同的温度值,以找到合适的温度值。 总结起来,《python深度学习》第八章主要涵盖了SqueezeNet深度学习架构、在ImageNet上训练的CNN模型的测试脚本以及使用softmax温度来处理问题的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python视觉深度学习系列教程 第三卷 第8章 在ImageNet上训练SqueezeNet](https://blog.csdn.net/bashendixie5/article/details/122175562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [《python深度学习学习笔记与代码实现(第八章:8.1,8.2,8.3)](https://blog.csdn.net/qq_41718518/article/details/90216766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值