深度学习笔记(9) 优化算法(一)

TensorFlow笔记
配合深度学习笔记专栏的理论,记录TensorFlow的学习过程
氢键H-H


1. Mini-batch 梯度下降

把训练样本放大巨大的矩阵X当中去,X=[x(1) x(2) x(3) ……x(m)]
Y也是如此,Y=[y(1) y(2) y(3) ……y(m)]
所以X的维数是(n_x,m),Y的维数是(1,m),向量化能够相对较快地处理所有m个样本
如果m很大的话,处理速度仍然缓慢,如果m是500万,必须处理整个训练集才能进行一步梯度下降法

如果在处理完整个500万个样本的训练集之前,先让梯度下降法处理一部分,算法速度会更快
可以把训练集分割为小一点的子集训练,这些子集被取名为 mini-batch

假设每一个子集中只有1000个样本,那么把其中的 x(1) 到 x(1000) 取出来
将其称为第一个子训练集X{1}
然后再从 x(1001) 到 x(2000) 取出接下来的1000个样本X{2} ,然后再取1000个样本,以此类推到 X{5000}
Y 也要进行相同处理,也要相应地拆分Y的训练集,所以从 y(1) 到 y(1000) 是 Y{1},然后一直到 Y{5000}

mini-batch的数量 t 组成了 X{t} 和 Y{t} ,这就是1000个训练样本,包含相应的输入输出对
X{t} 和 Y{t} 的维数:如果 X{t} 是一个有1000个样本的训练集,维数应该是(nx,1000),而 Y{t} 的维数都是(1,1000)
计算损失成本函数 :
在这里插入图片描述
使用batch梯度下降法,一次遍历训练集只能做一个梯度下降
使用mini-batch梯度下降法,一次遍历训练集,能做5000个梯度下降

在这里插入图片描述
没有每次迭代都下降是不要紧的,但走势应该向下
噪声产生的原因在于X{t} 和 Y{t} 是数据不同的mini-batch,因此成本会有些波动
经常把mini-batch大小设成2的次方,64到512的mini-batch比较常见


2. 指数加权平均数

计算指数加权平均数的关键方程:
在这里插入图片描述
用指数加权平均数计算出每日温度的平均值

在这里插入图片描述

β = 0.9 的时候,得到的结果是红线,
如果它更接近于1,比如0.98,结果就是绿线

进一步地分析,来理解如何计算出每日温度的平均值
使β=0.9,v100 =0.1θθ100 +0.9v99 ,而v99 =0.1θθ99 +0.9v98
以此类推,v100 =0.1θθ100 +0.1×0.9θθ99 +0.1×(0.9)2θθ98+0.1×(0.9)3θθ97+0.1×(0.9)4θθ96+⋯
从0.1开始,到0.1×0.9,到0.1×(0.9)2,以此类推,所以就有了这个指数衰减函数

计算v100是通过,把两个函数对应的元素,然后求和,用这个数值100号数据值乘以0.1,99号数据值乘以0.1乘以(0.9)2,这是第二项,以此类推,所以选取的是每日温度,将其与指数衰减函数相乘,然后求和,就得到了v100

指数加权平均数公式的好处之一在于,它占用极少内存,然后把最新数据代入公式,不断覆盖就可以了
在 β = 0.98 的时候,得到的并不是绿色曲线,而是紫色曲线,可以注意到紫色曲线的起点较低
计算移动平均数的时候,初始化v0 = 0,v1 = 0.98v0+0.02θθ1
但是v0 = 0,所以v1 = 0.02θθ1,因此值会小很多

在估测初期,不用vt,而是用 vt / (1-βt),t就是现在的天数
当t=2时,1-βt= 1-(0.98)2 = 0.0396
因此对第二天温度的估测变成了在这里插入图片描述
也就是θ1和θ2的加权平均数,并去除了偏差
随着t增加,βt 接近于0,所以当 t 很大时,偏差修正几乎没有作用
因此当 t 较大时,紫线基本和绿线重合


3. 动量梯度下降法

如果要优化成本函数,函数形状如图,红点代表最小值的位置
假设从蓝色点开始梯度下降法,如果进行梯度下降法的一次迭代
无论是batch或mini-batch下降法,也许会指向红点
慢慢摆动到最小值,这种上下波动减慢了梯度下降法的速度,就无法使用更大的学习率
如果用较大的学习率(紫色箭头),结果可能会偏离函数的范围
为了避免摆动过大,要用一个较小的学习率
在这里插入图片描述
另一个看待问题的角度是
在纵轴上,希望学习慢一点,因为不想要这些摆动,但是在横轴上,希望加快学习

计算 vvdW = βvβvdW + (1β)dW(1-β)dW,这跟 v=βv+(1β)θv=βv+(1-β) θt 的计算相似
也就是,dWdW 的移动平均数
接着同样地计算vvdbvvdb = βvβvdb + (1β)db(1-β)db
然后重新赋值权重,W:=WavW := W-avdW
同样,b:=bavb:=b-avdb,这样就可以减缓梯度下降的幅度

在纵轴方向,希望放慢一点,平均过程中,一上一下,正负数相互抵消
所以这些纵轴上的摆动平均值接近于零

在横轴方向,所有的微分都指向横轴方向,因此横轴方向的依旧保持指向红心,平均值仍然较大,横轴方向运动更快
这些微分项,为从山上往下滚的一个球提供了加速度,Momentum 项相当于速度,叫做动量梯度下降法
而因为β 稍小于1,表现出一些摩擦力,所以球不会无限加速下去,指数加权平均数β最常用的值是0.9

实际中,在使用梯度下降法或动量梯度下降法时
不会受到偏差修正的困扰,因为移动平均很快就过了初始阶段

如果查阅了动量梯度下降法相关资料,经常1-β被删除
最后得到的是 vvdW = βvβvdW + dWdWvvdW缩小了 1β1-β
相当于乘以1/(1-β),所以要用梯度下降最新值的话,aa 要根据1/(1-β)相应变化


4. 均方根反向传播

均方根反向传播 RMSprop 也是是一种权值更新算法,全称 root mean square prop
执行梯度下降,虽然横轴方向正在推进,但纵轴方向会有大幅度摆动,为了分析这个例子
假设纵轴代表参数b,横轴代表参数W,可能有W1,W2或者其它重要的参数
为了便于理解,被称为b和W
在这里插入图片描述
在第 t 次迭代中,该算法会照常计算当下 mini-batch 的微分dW,db
所以会保留这个指数加权平均数,用到符号SdW,而不是vdW
因此SdW = βSdW + (1-β) dW^2 ,Sdb = βSdb + (1-β)db2

接着RMSprop会这样更新参数值:
在这里插入图片描述
希望 W 变化较大,加强该方向前进的速度,b变化较小,减弱该方向前进的速度
即dW较小,db较大,所以希望SdW会相对较小,Sdb又较大

为了避免混淆,现在不用β,而采用超参数β2
要确保算法不会除以0,若SdW的平方根趋近于0,得到的答案就非常大
为了确保数值稳定,在实际操练的时候,要在分母上加上一个很小的ε,ε是多少没关系,10-8 是个不错的选择
实际中,会处于参数的高维度空间,垂直维度可能是参数W1,W2等的合集,水平维度可能W3,W4等等


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(8) 实践层面(三)
深度学习笔记(7) 实践层面(二)
深度学习笔记(6) 实践层面(一)
深度学习笔记(5) 深层神经网络
深度学习笔记(4) 浅层神经网络


谢谢!

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie
应支付0元
点击重新获取
扫码支付

支付成功即可阅读