机器学习课程学习周报四

本文介绍了神经网络中的梯度计算,包括梯度下降法、正向传播和反向传播的概念,以及在优化过程中的应用。此外,还讨论了batch的分类及其在处理时间和准确性上的差异,以及momentum的概念和在梯度更新中的作用,强调了这些概念在神经网络训练中的重要性。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

摘要

在本次的机器学习课程中学习的内容主要是两部分。第一个是详细地学习了梯度计算的方法,了解了神经网络中梯度计算的复杂性,更了解了前向学习以及反向学习的概念与方法,能更好地推导并计算神经网络中参数的梯度。第二个是了解神经网络的batch和momentum的概念,能更好地理解神经网络。

Abstract

The content learned in this machine learning course mainly consists of two parts. The first one was a detailed study of gradient calculation methods, understanding the complexity of gradient calculation in neural networks, and gaining a better understanding of the concepts and methods of forward learning and reverse learning, enabling better derivation and calculation of gradients for parameters in neural networks. The second is to understand the concepts of batch and momentum in neural networks, which can better understand neural networks.


一、梯度计算

1、梯度与神经网络

为了优化整个神经网络,需要将其的代价函数值一步步地降低,希望降低到最小值,使神经网络的预测性能达到最好。为了达到这个目的,需要利用到梯度下降的方法对参数进行优化修改。在前面几周的学习中,已经了解了梯度下降的原理与方法,通过计算参数在附近区域的导数,寻找能让整个代价函数减少的值,然后不断迭代优化参数,达到理想的结果。整个神经网络优化的工程量很大,不可能一蹴而就,需要计算机不断地进行优化。
代价函数与梯度

2、梯度计算方法

为了完成梯度下降,需要计算出参数相应的梯度,然后通过该梯度值来对参数进行梯度下降的操作,这样能使模型性能达到一个令人满意的水平。整个神经网络有很多的层次以及许许多多的参数,正是因为这样这样庞大且复杂的结构让获得某个参数的梯度变得困难。为了解决这个问题,便引入反向传播和正向传播两个概念。如下图所示,要在这个神经网络中得到某个参数的梯度需要分成两部分,即z对w的微分以及C对z的微分,其中正向传播则是计算出所有的“中间参数Z”对w的微分,而反向传播则是计算“最终参数C”对“中间参数Z”的微分,通过二者的结合便可以得到“最终参数C”对w的微分,从而能进行梯度下降对神经网络模型进行优化。
双向传播

3、链式法则

链式法则在计算参数的梯度中有着很重要的位置,这也是正向传播和反向传播的基础。就比如下图中的例子,z经过两个参数x和y结合运算变换后得到参数z,要计算z对s的微分,就绕不开x和y,于是便可以利用上链式法则,通过z对x和y做偏导数,再通过与x和y对s的导数做运算便得到z对s的微分。在神经网络中会有更加复杂的例子,链式法则在其中也扮演着更重要的角色。
链式法则

4、正向传播

由上方知识点1中可以了解到,正向传播是计算出所有的“中间参数Z”对w的微分,这个微分是比较好求出来的,因为Z与w是一个“直接关系”,不需要变换成其他参数而导致的复杂计算,因此可以直接算出。如下图的例子,因为其w换成z是一个一次线性变换,所以其导数值便是该层的输入值。当然如果w变成Z经过一个Sigmoid函数变换,其微分则就是Sigmoid函数的导数。
正向传播

5、反向传播

反向传播是“最终参数C”对w的微分,相比正向传播会更加地复杂,因为参数C对w会经过多重变化,使微分计算变得复杂,可能需要经过多次的链式法则才可算出最终的结果,如下图所示,其省略了z对w的正向传播,只写出对C对中间参数z的方向传播。在神经网络会有两种情况,以下对其分开讲解。
反向传播

5.1、下一层为输出层

如下图所示,当下一层为输出层的时候,经过最后一次链式法则可以得出该方程,其中y1对z的微分通过正向传播即可得出,而C对y1的微分则不用继续通过链式法则对其进行分解,所以也就是对代价函数进行求导即可。
反向传播1

5.2、下一层不为输出层

如下图所示,当下一层不为输出层的时候,后续还会经过许多隐藏层进行参数变换,还会出现许多新的参数。为了得出相应的微分,需要不断地参数进行链式法则,直到后一层为输出层位置,这样不断通过与后续得出的折返数据与正向传播值进行运算,最后得出所需要的结果。
反向传播2

5.3、动手计算梯度

计算图

计算其中一个分支,即x1分支,x2分支情况与x1类似就不展开写了。

手推图

二、batch和momentum

1、batch概念

批次Batch,即对模型参数更新的过程是一个不断重复的过程,每一次都要计算一次梯度以及更新参数值。然后对每一次重复的步骤将其定义为一个Batrch。其中多个Batch的组合为一个epoch,每一个epoch执行完后为shuffle。batch

2、batch分类

batch主要分为两大类,即大型的Batch以及小型Batch。其中大型Batch所需要的处理时间可能会比较慢,但是效果直观。小型Batch则是处理时间会相对的快,但是效果不太明显,会显得十分地繁琐。下面对两种分类进行对比
大小batch

2.1、处理时间上的对比

通常认为大型batch会比小型batch计算时间会耗费更多,但是实际不是这样,因为GPU的出现让不是特大型的batch能进行并行运算,即同一时间可以同时计算多个batch,这样就让较大型batch和小型batch计算所需要的时间接近。在这个前提下,如下图所示,如果一个epoch需要进行60000次batch运算,即单次batch所需要60000个周期,千次batch则需要6000个周期,最后导致单次batch所需要的时间远远比千次batch所需时间多,在实际情况中,通常都会计算batch超万规模的epoch,所以选择一个稍微大的batch会更恰当。
时间对比

2.2、处理准确性上的对比

如下图所示,在两种模型下,大型batch与小型batch相比准确性都会差很多,一定规模下随着batch值越大,其准确性也就会越低。这是由于小型batch在更新上更有利于训练,且有着更好的预测性能。而且尽管两者的在训练中的准确率可能都大差不差的,但是在测试阶段,小型batch准确率往往会更加地好。
准确率对比

从数学角度上讲,如下图所示,当使用大型batch的时候,随着不断的更新其代价函数可能会存在梯度为0而不再更新的时候,而单次batch会因为周期不同而转换代价函数,导致其停止的概率就大大下降了。
stuck

3、momentum概念

在物理角度上看,一个球在高处斜坡滑下,当遇到类似“峡谷”的地形的时候,会因为惯性而不会卡在“峡谷中”,而会继续向前冲离开“峡谷”,如下图所示。
概念

4、momentum在梯度的运用

只考虑梯度下降的情况下,在现实情况中很有可能导致误差的出现,因为没有其他因素与梯度下降制衡,当梯度下降出现某些错误的时候,会导致模型变差。当加入momentum时,如下图所示,每次更新的时候会根据前一次的更新方向与梯度下降方向进行一个则中,使其出现错误的时候不会偏差得过于严重。
梯度结合


总结

在本次的学习中,对神经网络的梯度计算有了更深的理解,看到了其在神经网络的作用以及复杂性。当然我也尝试对其进行了推导,不得不说仅仅经过三个隐藏层的计算,整个梯度计算的式子就已经变得十分地复杂,不得不对其感叹。除此之外也了解了batch、momentum及相关的优化器,可以说每引入一些新的概念,对神经网络的理解就更加地阔然开朗,后续还会继续学习新的知识,继续开阔视野!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值