Adam优化方法显存占用情况

·1811·4 分钟·
AI摘要: Adam优化方法显存占用情况。一般来说,Adam用到的信息更多,所以需要的内存占用更大。曾有个实验,Optimizer选择SGD的时候,Batch Size能选择20,但是换成Adam时候,Batch Size只能选择2。Adam的自适应体现之处在于指数平滑,缓解了梯度方向剧变,使收敛路径更平滑一点。

一般来说,Adam用到的信息更多,所以需要的内存占用更大。曾有个实验,Optimizer选择SGD的时候,Batch Size能选择20,但是换成Adam时候,Batch Size只能选择2

矩的定义

来自物理的定义,是距离和物理量的乘积,反映的是物体空间分布;

在数学中,表示一种数据测度:E(Xck)E(|X - c|^k) 称为 XX 关于 cckk 阶矩.

特别的,c=0c = 0,称为 kk 阶原点矩,c=E(X)c = E(X) 称为中心距

再特别一点,E(Xc1pYc2q)E(|X - c_1|^p \cdot |Y - c_2|^q) 称为X,YX, Y关于 c1,c2c_1, c_2q+pq + p 阶矩.

如果 c1=c2=0c_1 = c_2 = 0,则称为 p+qp + q 阶混合原点矩

如果 c1=E(X),c2=E(Y)c_1 = E(X), c_2 = E(Y) ,则称为 p+qp + q 阶混合中心距

指数滑动平均

指数滑动平均法简称为指数平滑法。是利用上一次的实际值预测值(估算值),对它们进行不同的加权分配,求得一个 指数 平滑值,作为下一期预测值的一种预测方法。它的预测公式是:

Xt=αXt1+(1α)St(0<α<1)Xt为第t次预测值,St为实际值;Xt1为上一次的预测值;α为加权系数。 X_t= α X_{t-1} + (1 - α) S_{t},(0<α<1)\\ X_t 为第 t 次预测值,S_{t} 为实际值;X_{t-1} 为上一次的预测值;α为加权系数。

通常不直接利用一次指数平滑法来预测,而是利用二次指数平滑法,求出平滑系数,建立起预测模型,再进行预测。三次以上指数平滑法几乎适用于所有的时间序列预测.

Adam原理(全称:自适应矩估计优化器)

最关键的地方是:使用指数加权移动平均值来估算梯度的动量二次矩,状态变量:

vt=β1vt1+(1β1)gtst=β2st1+(1β2)gt2 v_t = \beta_1 v_{t -1} +(1 - \beta_1)g_t\\ s_t = \beta_2 s_{t - 1} + (1 - \beta_2)g_t^2

可以发现,上面那项 vtv_t 其实就是梯度的一阶矩,下面那项 sts_t 是梯度的二阶矩。一般来说,β1=0.9,β2=0.999\beta_1 = 0.9, \beta_2 = 0.999, 也就是说,方差估计的移动要远远慢于动量估计的移动

修正矩估计的偏差

vt^=vt1β1tst^=st1β2t \hat{v_t} = \frac{v_t}{1 - \beta_1^t}\\ \hat{s_t} = \frac{s_t}{1 - \beta_2^t}

更新方程:

gt=vt^st^+ϵxt=xt1ηgt g_t^` = \frac{ \hat{v_t}}{\sqrt{\hat{s_t}} + \epsilon }\\ x_t = x_{t - 1} - \eta \cdot g_t^`

Adam本质是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整

这里的 gtg_t^{'} 当做归一化算了,可能的理解是:gtg_t^` 只关心方向,范数无所谓了,反正有学习率 η\eta

理解

其实每次训练的时候都是分批次训练的,从总体样本中抽取一部分作为本次训练的样本。那么用这部分小样本的梯度当做总体样本的梯度就是矩估计(之前一直不清楚自适应矩估计的矩体现在哪里)。然后,如果直接使用样本梯度当做总体梯度又会发现有点问题,那就是方差。很明显,抽取的批样本只是总体样本的一部分,那么批样本的梯度不可能正好就是总体样本的梯度,批样本的梯度服从一个随机分布,其期望是总体梯度,但是这个随机分布是有方差的。(balabalal,胡言乱语)

Adam的自适应的体现之处在于指数平滑,缓解了梯度方向剧变,使收敛路径更平滑一点。

内存占用

既然用了更多信息,那么内存占用自然更多,很明显批训练的Batch_Size 上界会更小.

Adam使用了参数、梯度、动量和二阶动量,所以它的内存占用量是数据的四倍

Kaggle学习赛初探