4.3 tensorflow学习与应用——优化器

Optimizer

标准梯度下降法:
先计算所有样本汇总误差,然后根据总误差来更新权值。
随机梯度下降法:
随机抽取一个样本来计算误差,然后更新权值。
批量梯度下降法:
一种折中的方案,从总样本中选取一个批次(比如一共有10000个样本,随机选取100个样本作为一个batch),然后计算这个batch的总误差,根据总误差来更新权值。
W: 要训练的参数
J(W):代价函数
\nabla_wJ(W):代价函数的梯度
\eta:学习率

  • SGD(随机梯度下降法):
    W = W - \eta\cdot\nabla_wJ(W;x^{(i)};y^{(i)})
  • Momentum(动量梯度下降法):
    \gamma:动力,通常设置为0.9
    v_t = \gamma \cdot v_{t-1} + \eta\cdot \nabla_{w} J(W)
    W_{new} = W - v_t
    当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球的向下的速度。
    加快收敛速度,可以缓解局部最优。
  • NAG(Nesterov accelerated gradient):
    v_t = \gamma \cdot v_{t-1} + \eta\cdot \nabla_{w} J(W - \gamma \cdot v_{t-1})
    W_{new} = W - v_t
    NAG在tf中跟Momentum合并在同一个函数tf.train.MomentumOptimizer中,可以通过参数配置启用。
    在Momentum中,小球会盲目地跟从下坡的梯度,容易发生错误,所以我们需要一个更聪明的小球,这个小球提前知道他要去哪,它还要知道走到坡底的时候速度慢下来。\gamma \cdot v_{t-1}用来修改W的值,计算W - \gamma \cdot v_{t-1}可以知道小球下一个位置大概在哪。可以提前计算下一个位置的梯度,然后使用到当前的位置。
  • Adagrad:
    i:代表第 i 个分类
    t:代表出现次数
    \varepsilon:避免分母为0,取值一般为 1e-8
    \eta:取值一般为0.01
    g_{t,i}=\nabla_wJ(W_i):梯度
    W_{t+1}=W_t-\frac{\eta}{\sqrt{\sum^t_{t'=1}(g_{t',i})^2+\varepsilon}}\bigodot g_t
    它是基于SGD的一种算法,它的核心思想史对 比较常见的数据给予它比较小的学习率去调整参数,对于比较罕见的数据给予它比较大的学习率去调整参数。它很适合应用于数据稀疏的数据集(比如一个图片数据集,有10000张狗的照片,10000张猫的照片,只有100张大象的照片)。
    Adagrad主要的优势在于不需要认为的调节学习率,它可以自动调节。
    他的缺点是随着迭代次数增多,学习率也会越来越低,最终趋近于0.
  • RMSprop
    RMS(Root Mean Square)是均方根的缩写。
    \gamma:动力,通常设置为0.9
    \eta:取值一般为0.001
    E[g^2]_t:前 t 次的梯度平方的平均值
    g_t=\nabla_wJ(W) 梯度
    E[g^2]_t = \gamma E[g^2]_{t-1} + (1-\gamma)g^2_t
    W_{t+1} = Wt - \frac{\eta}{\sqrt{E[g^2]_t + \varepsilon}}\bigodot g_t
    RMSprop借鉴了一些Adagrad的思想,不过这里RMSprop只用到了前 t-1次梯度平方的平均值加上当前梯度平方的和 ,再开平方作为学习率的分母。这样RMSprop不会出现学习率越来越低的问题,而且也能自己调节学习率,并且有一个比较好的结果。
  • Adadelta
    g_t = \nabla_w J(W)
    \nabla W_t = - \frac{\eta}{\sqrt{E[g^2]_t + \varepsilon}}\bigodot g_t
    \nabla W_t = - \frac{\eta}{RMS[g]_t}\bigodot g_t
    W_{t+1}=W_t - \frac{RMS[\nabla W]_{t-1}}{RMS[g]_t}
    不需要设置一个默认学习率
  • Adam
    \beta_1 :一般取值0.9
    \beta_2 :一般取值0.999
    \varepsilon :避免分母为0,一般取值 1e-8
    m_t = \beta_1m_{t-1} + (1-\beta_1)g_t
    vt = \beta_2 v_{t-1} + (1-\beta_2)g^2_t
    \hat{m_t} = \frac{m_t}{1-\beta^t_1}
    \hat{v_t} = \frac{v_t}{1-\beta^t_2}
    W_{t+1} = W_t - \frac{\eta}{\sqrt{\hat{v_t} + \varepsilon}}\hat{m_t}
    像RMSprop和Adadelta一样,Adam会存储之前衰减的梯度和梯度的平方。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容