深度学习优化函数详解(6)-- adagrad

xiaoxiao2021-02-28  99

深度学习优化函数详解系列目录

本系列课程代码,欢迎star: https://github.com/tsycnh/mlbasic

深度学习优化函数详解(0)-- 线性回归问题 深度学习优化函数详解(1)-- Gradient Descent 梯度下降法 深度学习优化函数详解(2)-- SGD 随机梯度下降 深度学习优化函数详解(3)-- mini-batch SGD 小批量随机梯度下降 深度学习优化函数详解(4)-- momentum 动量法 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 深度学习优化函数详解(6)-- adagrad

前面的一系列文章的优化算法有一个共同的特点,就是对于每一个参数都用相同的学习率进行更新。但是在实际应用中各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。 adagrad方法是将每一个参数的每一次迭代的梯度取平方累加再开方,用基础学习率除以这个数,来做学习率的动态更新。这个比较简单,直接上公式。

公式推导

∇ θ i J ( θ ) \nabla_{\theta_i} J(\theta) θiJ(θ) 表示第 i i i 个参数的梯度,对于经典的SGD优化函数我们可以这样表示 θ i _ n e w = θ i − η ∇ θ i J ( θ ) \theta_{i\_new}=\theta_i - \eta\nabla_{\theta_i} J(\theta) θi_new=θiηθiJ(θ) adagrad这样表示 θ i , t + 1 = θ i , t − η G i , t + ϵ ∇ θ i , t J ( θ ) \theta_{i,t+1}=\theta_{i,t}- \frac{\eta}{\sqrt{G_{i,t}+\epsilon}}\nabla_{\theta_{i,t}} J(\theta) θi,t+1=θi,tGi,t+ϵ ηθi,tJ(θ) t代表每一次迭代。 ϵ \epsilon ϵ 一般是一个极小值,作用是防止分母为0 。$G_{i,t} $ 表示了前 t t t 步参数 θ i \theta_i θi 梯度的累加 G i , t = G i , t − 1 + ∇ θ i , t J ( θ ) G_{i,t} = G_{i,t-1}+ \nabla_{\theta_{i,t}} J(\theta) Gi,t=Gi,t1+θi,tJ(θ) 简化成向量形式 θ t + 1 = θ t − η G t + ϵ ∇ θ t J ( θ ) \theta_{t+1}=\theta_t- \frac{\eta}{\sqrt{G_t+\epsilon}}\nabla_{\theta_t} J(\theta) θt+1=θtGt+ϵ ηθtJ(θ)

容易看出,随着算法不断的迭代, G t G_t Gt 会越来越大,整体的学习率会越来越小。所以一般来说adagrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。

实验

实验取 η = 0.2 , ϵ = 1 e − 8 \eta = 0.2, \epsilon = 1e-8 η=0.2,ϵ=1e8

可以看出收敛速度的确是特别慢(在该数据集下),最重要的原因就是动态学习率处于一个单向的减小状态,最后减到近乎为0的状态。

实验源码:https://github.com/tsycnh/mlbasic/blob/master/p6 adagrad.py

转载请注明原文地址: https://www.6miu.com/read-51239.html

最新回复(0)