深度学习与神经网络-吴恩达-第二周优化算法
一、Mini-batch梯度下降法
前面介绍的向量化方法能够让我们高效的处理m个样本数据,模型输入的也就是m个样本按列堆叠而成的矩阵X,同样地,输入数据的标签也是m个样本标签按列堆叠而成的矩阵Y。但是以海量训练样本(m很大,几百万甚至几千万的数据量)作为输入的话,这样做的计算成本依然会很高。因为只有处理完所有的训练样本才能进行一次梯度下降法,然后还需要重新处理所有的训练数据才能进行下一步梯度下降法。那么我们能不能在处理完所有训练样本之前,先让梯度下降法处理一部分呢?
为了达到上面的目的,我们可以把训练样本集分割为小一点的子训练集(Mini-batch)。例如对于一个含有五百万样本的的训练集,我们依次取1000个样本作为子训练集,这样就可以得到5000个子训练集。
将整个训练集拆分为5000个子训练集后,我们依次对每个子训练集进行梯度下降法(也称为Mini-batch gradient descent),过程如下:
下面对Mini-batch梯度下降法做进一步的讲解,包括其和Batch梯度下降法的异同以及Mini-batch梯度下降法中Mini-batch size的选择。首先我们来看看两种梯度下降法成本函数的变化趋势。
从上图中可以看出,当使用Batch梯度下降法时,每次迭代都需要遍历整个训练集,可以预期每次迭代的成本都会下降,所以成本函数J是迭代次数的函数,并保持下降趋势。但使用Mini-batch梯度下降法时,并不是每次迭代都是下降的。如果我们要做出成本函数J{t}的图,因为其只与X{t},Y{t}有关,也就是每次迭代下你都在训练不同的样本集,我们得到的应该是如上图右部分所示,走向朝下,但有更多的噪声,噪声较多的原因在于样本中每个子训练集的计算难易程度不一样(有的子训练集可能是残缺的样本,成本函数较大)。
对于Mini-batch梯度下降法我们唯一需要确定的是Mini-batch梯度下降法的size,当Mini-batch size=m时,那么就等同于Batch梯度下降法;当Mini-batch size=1时,那么就等同于stochastic梯度下降法(也就是随机梯度下降法);那接下来让我们分析下这两种极端下成本函数的优化情况,batch度下降法从某个初始点开始下降,相对噪声低些,幅度也大一点(图中蓝线所示)。相反,在stochastic梯度下降法中,从某一点开始,每次迭代只对一个样本进行梯度下降,大部分时候都朝着全局最小值靠近,有时候会远离最小值,原因在于根据某个样本所计算的梯度项所代表的方向不对,因此tochastic梯度下降法是有很多噪音的(图中紫线所示);当然这两种极端算法也有各自的弊端,Batch梯度下降法弊端在于单次迭代耗时太长,stochastic梯度下降法则会失去向量化所带来的加速,因此效率低下。Mini-batch梯度下降法则介于两者之间,一方面采用了向量化的方法进行加速,另一方面还不需要等待整个训练集被处理完就可以进行后续工作,上面的例子中,对训练样本进行一次遍历我们可以执行5000次梯度下降。Mini-batch梯度下降法从某个初始点开始,虽然它不会总朝着最小值靠近,但它比随机梯度下降更持续地靠近最小值的方向(图中绿线所示),它也不一定在很小的范围内收敛或者波动(通过减小学习率可以解决)。
对于Mini-batch size的选取一般有以下几个原则:如果训练集较小(m<=2000),Mini-batch size=m,即直接使用Batch梯度下降法。如果训练集较大,Mini-batch size=64,128,256,512......2^n,根据实际的GPU/CPU内存上限来确定,最好为2的次方倍。
二、指数加权平均
指数加权平均是几种常用优化方法的基础,包括Momentum、RMSprop以及Adam。下面以Lodon某地区的温度变化数据来说明指数加权平均方法的应用,左边部分为具体的温度数据,右边部分为温度的变化情况,图中蓝点表示对应某一天具体的温度值,红色线则是我们计算所得的指数加权平均值,可以看出指数加权平均曲线是对原始数据的一个平滑拟合。
那么上图中的红色曲线是如何计算的呢?我们这里给出详细过程,公式里具体的数值后面会做详细讲解,大家先理解大致流程:
没错,红色曲线中每个具体的值就与Vi相对应,接下来我们对上面的公式进行一个归纳:
接下来我们对式子里的各个变量的定义进行讲解,Vt可视为1/(1-Betal)的每日温度的平均值,当Betal=0.9时,Vt也就对应10天的平均值,指数加权平均曲线对应图中红线。当Betal=0.98时,Vt也就对应50天的平均值,指数加权平均曲线对应图中绿线。对于Betal较大的情况,其波动更小,更加平坦,缺点是曲线进一步右移,因为现在所平均的温度值更多。接下来让我们看看比较极端的情况,Betal=0.5,曲线如黄线所示,由于仅平均了两天的温度,平均的数据较少,得到的曲线含有较多噪音和异常值。
为什么上面的做法可以起到一个取平均值的作用了,我们不妨以下面的一个例子来说明:
我们将V100按最上面的公式展开,可以得到最下面的式子,将该式子分为两部分:数据项(也就是具体的温度值theta),权重系数项(和Betal相关的项)。可以看到最终指数加权平均的结果其实就是对应数据项和系数项乘积的累加和,我们将这两部分分别画在两个坐标系中。
分析上图中系数项的变化趋势,呈指数衰减,从(1-Betal)开始随着天数逐渐衰减,当Belta=0.9,大概经过10天权重下降到当日权重的三分之一(0.1*0。9^10近似等于0.035,大概为0.1的三分之一),超过10天权重下降到不到当日权重的三分之一,由于该部分权重系数很小,对最终的加权平均贡献很小,所以当Belta=0.9就近似认为是前10天的温度平均数。同理,当Belta=0.98,大概经过50天权重下降到当日权重的三分之一(0.1*0.98^50=0.036),只有当日往前50天的权重系数有效,所以为是前50天的温度平均数。
三、指数加权平均的偏差修正
四、Momentum梯度下降法
Momentum梯度下降法总是要快于标准的梯度下降法,基本的思想就是计算梯度(梯度是随迭代次数变化的)的指数加权平均数,然后用梯度的指数加权平均数替换原来的梯度项。因为指数加权平均后的梯度往往含有较少的噪音和误差,整体显得更加平滑,梯度下降的趋势更加明显,因此其效率是较高的。下面我们来看一个例子,分别选取Momentum梯度下降法和标准梯度下降法对下面的的成本函数进行优化。
五、RMSprop梯度下降法
还是上面的例子,我们希望减缓纵向上的学习,同时加快横向上的学习,RMSprop方法刚好解决上述问题。上例中,纵向上的梯度要大于横向上的梯度项,代表纵向的Sdb也会较大,相比之下,代表纵向的Sdw会较小。最终结果就是:纵向上结果的更新要被一个较大的数相除,进而消除摆动;横向上结果的更新要被一个较小的数相除,因此可以用一个更大的学习率实现加速;
六、Adam梯度下降法
Adam方法将Momentum方法和RMSprop方法完美结合,是深度学习领域比较常用的方法,被证明能有效适用于不同神经网络。
七、超参数设置(经验值)
八、学习率衰减
之前我们设计的神经网络模型往往都是选取固定的学习率,最后的结果并不会绝对的收敛,只是在最小值附近一块区域摆动(蓝线所示)。但对于理想的优化情况,我们应该在起先设置较大的学习率,这样保证学习较快,当比较接近最小值时,则逐渐减小学习率,保证最终结果能停留在最小值附近一个较小的区域里面(绿线所示)。
基于以上分析,我们可以在每次迭代时对学习率进行一次衰减,这里引入了新的超参数decay_rate,epoch-num表示迭代的次数,具体公式如下:
当然还有另外一些经验公式:
九、局部最优的问题
在深度神经网络中,由于参数的维度通常是很高的,成本函数梯度为零的点并不是左图中的局部最优点(蓝点所示),而是右图中的鞍点-saddle points(蓝点所示),因为在高维空间中,我们计算所遇到的并不是局部最小值,更有可能遇到的是鞍点。
通过上面的分析我们可知,训练神经网络,尤其是深度神经网络,不太可能困在局部最优中,而鞍点往往对我们的优化有影响。平稳段会减缓学习,因为平稳段是一块平坦区域,其中导数长时间接近0。
深度学习与神经网络-吴恩达-第二周优化算法相关推荐
- 1.1 欢迎-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 无 回到目录 1.2 什么是神经网络 欢迎 第一个视频主要讲了什么是深度学习,深度学习能做些什么事情.以下是吴恩达老师的原话: 深度学习改变了传统互联网业务,例如如网络搜索和 ...
- 0.0 目录-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...
- 4.8 这和大脑有什么关系-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 4.7 参数 vs. 超参数 回到目录 4.9 总结习题 这和大脑有什么关系 (What does this have to do with the brain?) 深度学习 ...
- 1.2 什么是神经网络-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 1.1 欢迎 回到目录 1.3 用神经网络进行监督学习 什么是神经网络 我们常常用深度学习这个术语来指训练神经网络的过程.有时它指的是特别大规模的神经网络训练.那么神经网络究 ...
- 吴恩达深度学习代码_吴恩达深度学习笔记(58)-深度学习框架Tensorflow
TensorFlow 有很多很棒的深度学习编程框架,其中一个是TensorFlow,很期待帮助你开始学习使用TensorFlow,我想在这个笔记中向你展示TensorFlow程序的基本结构,然后让你自 ...
- 4.9 总结-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 4.8 这和大脑有什么关系 回到目录 1.1 训练/开发/测试集 (第二课) 总结 习题 第 31 题 在我们的前向传播和后向传播实现中使用的"缓存"是什 ...
- 机器学习吴恩达第二周
第2周 4.多变量线性回归 4.1多维特征
- 吴恩达机器学习——反向传播算法
吴恩达机器学习--反向传播算法 1.误差 $\delta^{(3)}$, $\delta^{(2)}$的推导 2.反向传播算法的计算过程 前言:反向传播算法是用来求偏导数的,即 σJ(θ)σθij(2 ...
- 吴恩达 深度神经网络,吴恩达神经网络课程
如何评价吴恩达的学术地位 吴恩达(AndrewNg),斯坦福计算机系的副教授,师从机器学习的大师级人物MichaelI.Jordan. 同门师兄弟包括ZoubinGhahramani,TommiJaa ...
最新文章
- Android中shape属性详解
- 知道了05后的隐藏技能之后,我酸了…​
- HTML table 标签的 frame 属性
- ELK三件套安装实践之路(1)
- 紫东太初:自动化所开源图-文-音三模态的预训练大模型
- linux之NTP服务
- 线程池,封装使用,实现控制子线程
- JUnit5 TestSuite替代
- eval 函数 代替函数_eval()函数以及JavaScript中的示例
- 高扫后督解决方案 力助银行内部核查
- 蚂蚁金服4轮面经(Java研发):G1收集器+连接池+分布式架构
- 金蝶国际公布2020年全年业绩,云业务收入增长45.6%
- SpringCloud与Feign
- 【资源分享】Linux Scheduler
- 选择 Veeam ONE v10 的其他三大原因!
- Win10更换壁纸一直跳到纯色背景问题解决记录
- 操作系统-进程甘特图画法
- 德巴赫猜想python_哥德巴赫猜想问题基于Python的验证方法研究
- 线性代数(二十四) : 行列式的展开式—拉普拉斯公式
- c#打开数据库连接池的工作机制_详解数据库连接池概念、原理、运行机制等
热门文章
- 我,大专毕业2年,从前端转型大数据开发,薪资涨了10K!
- KVM内存管理(一)—— 设置基本参数
- 【阿里聚安全·安全周刊】战斗民族黑客入侵德国政府|“猫脸识别”门禁
- (二-1)多码之间的进制转换【计算机组成原理】
- 深入了解电容(四):钽电容、聚合物有机半导体电容(POSCAP,ECAS)和薄膜电容
- 微信开发(六)--模板消息接口
- TiDB和MongoDB分片集群架构比较
- 极客日报:三星嘲讽iPhone13:120Hz高刷我们早用上了;华为撤回对OPPO欧洲专利的异议;淘宝搜索崩了登上热搜
- 招商银行fintech选拔课题---《基于微博爬虫的舆情分析》上
- Linux终端设备文件介绍