吴恩达改善深层神经网络参数:超参数调试、正则化以及优化——优化算法

机器学习的应用是一个高度依赖经验的过程,伴随着大量的迭代过程,你需要训练大量的模型才能找到合适的那个,优化算法能够帮助你快速训练模型。

难点:机器学习没有在大数据发挥最大的作用,我们可以利用巨大的数据集来训练网络,但是在大数据下训练网络速度很慢;

使用快速的优化算法大大提高效率

mini-batch梯度下降法

向量化能让你有效的对所有的m个例子进行计算,允许你处理整个训练集而无需某个明确的公式。

在这里插入图片描述

m很大时,处理速度非常慢
在对整个训练集进行梯度下降时,必须处理整个训练集,才能进行下一步梯度下降。
假设有500万个数据,必须处理完500万个数据,才能进行下一步梯度下降。

mini—beach

将训练集分成小一点的子集
将500万个数据没1000个分为一组,分为5000个子集

在这里插入图片描述
在这里插入图片描述

mini—beach的数据集就变成了X^{t},Y^{t}
X^{1}Y^{1}中有1000个样本
同时处理单个mini-batchX^{t},Y^{t}
#算法
{
for t = 1,...,5000{
#forward propagation on X^{t}
#向量化处理1000个样本
	Z^[l] = W^[l]*A^[l-1]+b^[l]
	A^[l] = g^[l](Z^[l])
#cost function
	cost = 1/1000*sum(L(yhat{t}-y{t}))+lamabd/(2*1000)*sum||w^[t]||^2
`#backward propagation 
	dAL = dL(AL,Y)/dAL
	dZ^[l]=g'^[l]*dAL
	dW^[l]=dZ^[l]*A^[l-1]T
	db^[l]=dZ^[l]
	dA_prev = dZ^[l]T*W^[l]
#mini-batch
	W^[l]=W^[l]-alpha*dW^[l]
	b^[l]=b^[l]-alpha*db^[l]
	}
}

梯度下降:一次遍历训练集,只能让你做一个梯度下降
mini-batch:一次遍历训练集,做5000个梯度下降

多次遍历训练集,最外层还需要一个while/for循坏,使能收敛到一个合适的精度。

理解mini-batch剃度下降法

梯度下降法
在这里插入图片描述
mini-batch梯度下降法
在这里插入图片描述

趋势向下

mini-batch的size

if mini-batch size = m  --> 梯度下降法
	相对噪音低,幅度大,单次迭代耗时长
if mini-batch size = 1   -->随机梯度下降法
	噪音大,最终靠近最小值有时偏离,因为它永不收敛
	失去向量化带来的加速
mini-batch size 介于1,m之间

怎样寻选择m?

if small train set:(<2000)
	梯度下降
typical mini-batch size:
	64(2^6) 128(2^7),256(2^8),512(2^9)
	x^{t},Y^{t}符合CPU、GPU内存

指数加权平均

在这里插入图片描述

V^theta = 0
repeat{
	get next theta^t
	V^theta := bata*V^theta + (1-bata)*theta^t
	}

指数加权平均的偏差

在这里插入图片描述

动量梯度下降法

在这里插入图片描述
在纵轴上,希望学习慢一点
在横轴上,希望学习快一点
动量梯度下降法:
V_dW= 0
V_db = 0
在这里插入图片描述
超参数:alpha,bata
bata一般取0.9

RMSprop

在这里插入图片描述

消除摆动
允许使用更大的学习率
On iteration t:
	compute dW,db on current mini-batch
	S_dw = bata_2*S_dW + (1-bata_2)*(dW)^2
	S_db = bata_2*S_db + (1-bata_2)*(db)^2
	W := W - alpha*dW/(sqrt(S_dW)+e)
    b:= b - alpha*db/(sqrt(S_db)+e)

adam优化器

S_dW =0,S_db = 0,V_dW =0,V_db = 0 
On iteration t:
	compute dW,db on current mini-batch
	V_dW = bata_1*V_dW + (1-bata_1)*(dW)^2
	V_db = bata_1*V_db + (1-bata_1)*(db)^2
	S_dW = bata_2*S_dW + (1-bata_2)*(dW)^2
	S_db = bata_2*S_db + (1-bata_2)*(db)^2
	V^vorrect_dW = V_dW/(1-bata_1^t) V^vorrect_db = V_db/(1-bata_1^t)
	S^vorrect_dW = S_dW/(1-bata_2^t) S^vorrect_db = S_db/(1-bata_2^t)

	W := W - alpha*V^vorrect_dW/(sqrt(S^vorrect_dW)+e)
    b := b - alpha*V^vorrect_db/(sqrt(S^vorrect_db)+e)

在这里插入图片描述

学习率衰减

在这里插入图片描述
有时候使用固定学习率,在不会收敛
使用衰减的学习率,在学习初期,能承受较大的步伐,但当开始收敛的时候,小的学习率会让步伐变小
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cherry1307/article/details/83962901