4.机器学习——梯度下降

梯度下降

梯度下降法指的是函数值loss随梯度下降的方向减小
归问题的第三步中,需要解决下面的最优化问题:
θ ∗ = arg ⁡ minL ⁡ θ ( θ ) \theta^{*}=\underset{\theta}{\arg \operatorname{minL}}(\theta) θ=θargminL(θ)
L :lossfunction(损失函数)
θ \theta θ :parameters(参数)

parameters是复数,即 θ 指代一堆参数,比如上篇说到的 w和 b 。

我们要找一组参数 θ ,让损失函数越小越好,这个问题可以用梯度下降法解决:

假设 θ 有里面有两个参数 θ 1 , θ 2 \theta_1, \theta_2 θ1,θ2,随机选取初始值:
θ 0 = [ θ 1 0 θ 2 0 ] \theta^{0}=\left[\begin{array}{l} \theta_{1}^{0} \\ \theta_{2}^{0} \end{array}\right] θ0=[θ10θ20]
在这里插入图片描述
Gradient: Loss的等高線的法線方向

Learning rate存在的问题

在这里插入图片描述

做gradient descent一个很重要的事情是,要把不同的learning rate下,loss随update次数的变化曲线给可视化出来

Tip1:调整学习速率

小心翼翼地调整学习率

自适应学习率
最基本、最简单的大原则是:learning rate通常是随着参数的update越来越小的
举一个简单的思想:随着次数的增加,通过一些因子来减少学习率

  • 通常刚开始,初始点会距离最低点比较远,所以使用大一点的学习率

  • update好几次参数之后呢,比较靠近最低点了,此时减少学习率

  • 比如 η t = η t t + 1 \eta^t =\frac{\eta^t}{\sqrt{t+1}} ηt=t+1 ηt ,t是次数。随着次数的增加, η t η^t ηt减小

学习率不能是一个值通用所有特征,不同的参数需要不同的学习率

Adagrad 算法

Adagrad 是什么?

Adagrad就是将不同参数的learning rate分开考虑的一种算法
在这里插入图片描述
这里的w是function中的某个参数,t表示第t次update, g t g^t gt表示Loss对w的偏微分,而 σ t \sigma^{t} σt是之前所有Loss对w偏微分的方均根(根号下的平方均值),这个值对每一个参数来说都是不一样的
Adagrad w 1 = w 0 − η 0 σ 0 ⋅ g 0 σ 0 = ( g 0 ) 2 w 2 = w 1 − η 1 σ 1 ⋅ g 1 σ 1 = 1 2 [ ( g 0 ) 2 + ( g 1 ) 2 ] , = 。 w 3 = w 2 − η 2 σ 2 ⋅ g 2 σ 2 = 1 3 [ ( g 0 ) 2 + ( g 1 ) 2 + ( g 2 ) 2 ] w t + 1 = w t − η t σ t ⋅ g t σ t = 1 1 + t ∑ i = 0 t ( g i ) 2 \begin{aligned} &\text {Adagrad}\\ &w^{1}=w^{0}-\frac{\eta^{0}}{\sigma^{0}} \cdot g^{0} \quad \sigma^{0}=\sqrt{\left(g^{0}\right)^{2}}\\ &w^{2}=w^{1}-\frac{\eta^{1}}{\sigma^{1}} \cdot g^{1} \quad \sigma^{1}=\sqrt{\frac{1}{2}\left[\left(g^{0}\right)^{2}+\left(g^{1}\right)^{2}\right]}\\,=。 &w^{3}=w^{2}-\frac{\eta 2}{\sigma^{2}} \cdot g^{2} \quad \sigma^{2}=\sqrt{\frac{1}{3}\left[\left(g^{0}\right)^{2}+\left(g^{1}\right)^{2}+\left(g^{2}\right)^{2}\right]}\\ &w^{t+1}=w^{t}-\frac{\eta^{t}}{\sigma^{t}} \cdot g^{t} \quad \sigma^{t}=\sqrt{\frac{1}{1+t} \sum_{i=0}^{t}\left(g^{i}\right)^{2}} \end{aligned} =Adagradw1=w0σ0η0g0σ0=(g0)2 w2=w1σ1η1g1σ1=21[(g0)2+(g1)2] w3=w2σ2η2g2σ2=31[(g0)2+(g1)2+(g2)2] wt+1=wtσtηtgtσt=1+t1i=0t(gi)2
最后公式:
w t + 1 = w t − η ∑ i = 0 t ( g i ) 2 ⋅ g t w^{t+1}=w^{t}-\frac{\eta}{\sum_{i=0}^{t}\left(g^{i}\right)^{2}} \cdot g^{t} wt+1=wti=0t(gi)2ηgt

Adagrad的contradiction(矛盾)解释
分母表示梯度越大步伐越小,分子却表示梯度越大步伐越大,两者似乎相互矛盾。
原因:
直观:反差效果
深层: g t g^t gt就是一次微分,而分母中的 ∑ i = 0 t ( g i ) 2 \sum\limits_{i=0}^t(g^i)^2 i=0t(gi)2反映了二次微分的大小,所以Adagrad想要做的事情就是,在不增加任何额外运算的前提下,想办法去估测二次微分的值。
在这里插入图片描述

Stochastic Gradicent Descent

随机梯度下降的方法可以让训练更快速

  • 传统的gradient descent的思路是看完所有的样本点之后再构建loss function,然后去update参数;
  • stochastic gradient descent的做法是,看到一个样本点就update一次,因此它的loss function不是所有样本点的error平方和,而是这个随机样本点的error平方。
  • 在这里插入图片描述

Feature Scaling

概念介绍
特征缩放,当多个特征的分布范围很不一样时,最好将这些不同feature的范围缩放成一样。
方法:
假设有R个example(上标i表示第i个样本点), x 1 , x 2 , x 3 , . . . , x r , . . . x R x^1,x^2,x^3,...,x^r,...x^R x1,x2,x3,...,xr,...xR,每一笔example,它里面都有一组feature(下标j表示该样本点的第j个特征)

对每一个demension i,都去算出它的平均值mean= m i m_i mi,以及标准差standard deviation= σ i \sigma_i σi

对第r个example的第i个component,减掉均值,除以标准差,即
x i r = x i r − m i σ i x_i^r=\frac{x_i^r-m_i}{\sigma_i} xir=σixirmi

将每一个参数都归一化成标准正态分布,即 f ( x i ) = 1 2 π e − x i 2 2 f(x_i)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x_i^2}{2}} f(xi)=2π 1e2xi2,其中 x i x_i xi表示第i个参数

gradient descent的限制

gradient descent的限制是,它在gradient即微分值接近于0的地方就会停下来,而这个地方不一定是global minima,它可能是local minima,可能是saddle point鞍点,甚至可能是一个loss很高的plateau平缓高原

gradient descent数学

Taylor Series
泰勒表达式: h ( x ) = ∑ k = 0 ∞ h ( k ) ( x 0 ) k ! ( x − x 0 ) k = h ( x 0 ) + h ′ ( x 0 ) ( x − x 0 ) + h ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . h(x)=\sum\limits_{k=0}^\infty \frac{h^{(k)}(x_0)}{k!}(x-x_0)^k=h(x_0)+h'(x_0)(x-x_0)+\frac{h''(x_0)}{2!}(x-x_0)^2+... h(x)=k=0k!h(k)(x0)(xx0)k=h(x0)+h(x0)(xx0)+2!h(x0)(xx0)2+...

When x is close to x 0 x_0 x0 : h ( x ) ≈ h ( x 0 ) + h ′ ( x 0 ) ( x − x 0 ) h(x)≈h(x_0)+h'(x_0)(x-x_0) h(x)h(x0)+h(x0)(xx0)

同理,对于二元函数,when x and y is close to x 0 x_0 x0 and y 0 y_0 y0

h ( x , y ) ≈ h ( x 0 , y 0 ) + ∂ h ( x 0 , y 0 ) ∂ x ( x − x 0 ) + ∂ h ( x 0 , y 0 ) ∂ y ( y − y 0 ) h(x,y)≈h(x_0,y_0)+\frac{\partial h(x_0,y_0)}{\partial x}(x-x_0)+\frac{\partial h(x_0,y_0)}{\partial y}(y-y_0) h(x,y)h(x0,y0)+xh(x0,y0)(xx0)+yh(x0,y0)(yy0)

从泰勒展开式推导出gradient descent
对于loss图像上的某一个点(a,b),如果我们想要找这个点附近loss最小的点,就可以用泰勒展开的思想
在这里插入图片描述

假设用一个red circle限定点的范围,这个圆足够小以满足泰勒展开的精度,那么此时我们的loss function就可以化简为:

L ( θ ) ≈ L ( a , b ) + ∂ L ( a , b ) ∂ θ 1 ( θ 1 − a ) + ∂ L ( a , b ) ∂ θ 2 ( θ 2 − b ) L(\theta)≈L(a,b)+\frac{\partial L(a,b)}{\partial \theta_1}(\theta_1-a)+\frac{\partial L(a,b)}{\partial \theta_2}(\theta_2-b) L(θ)L(a,b)+θ1L(a,b)(θ1a)+θ2L(a,b)(θ2b)

s = L ( a , b ) s=L(a,b) s=L(a,b) u = ∂ L ( a , b ) ∂ θ 1 u=\frac{\partial L(a,b)}{\partial \theta_1} u=θ1L(a,b) v = ∂ L ( a , b ) ∂ θ 2 v=\frac{\partial L(a,b)}{\partial \theta_2} v=θ2L(a,b)

L ( θ ) ≈ s + u ⋅ ( θ 1 − a ) + v ⋅ ( θ 2 − b ) L(\theta)≈s+u\cdot (\theta_1-a)+v\cdot (\theta_2-b) L(θ)s+u(θ1a)+v(θ2b)

假定red circle的半径为d,则有限制条件: ( θ 1 − a ) 2 + ( θ 2 − b ) 2 ≤ d 2 (\theta_1-a)^2+(\theta_2-b)^2≤d^2 (θ1a)2+(θ2b)2d2

此时去求 L ( θ ) m i n L(\theta)_{min} L(θ)min,这里有个小技巧,把 L ( θ ) L(\theta) L(θ)转化为两个向量的乘积: u ⋅ ( θ 1 − a ) + v ⋅ ( θ 2 − b ) = ( u , v ) ⋅ ( θ 1 − a , θ 2 − b ) = ( u , v ) ⋅ ( Δ θ 1 , Δ θ 2 ) u\cdot (\theta_1-a)+v\cdot (\theta_2-b)=(u,v)\cdot (\theta_1-a,\theta_2-b)=(u,v)\cdot (\Delta \theta_1,\Delta \theta_2) u(θ1a)+v(θ2b)=(u,v)(θ1a,θ2b)=(u,v)(Δθ1,Δθ2)

观察图形可知,当向量 ( θ 1 − a , θ 2 − b ) (\theta_1-a,\theta_2-b) (θ1a,θ2b)与向量 ( u , v ) (u,v) (u,v)反向,且刚好到达red circle的边缘时(用 η \eta η去控制向量的长度), L ( θ ) L(\theta) L(θ)最小

在这里插入图片描述

( θ 1 − a , θ 2 − b ) (\theta_1-a,\theta_2-b) (θ1a,θ2b)实际上就是 ( Δ θ 1 , Δ θ 2 ) (\Delta \theta_1,\Delta \theta_2) (Δθ1,Δθ2),于是 L ( θ ) L(\theta) L(θ)局部最小值对应的参数为中心点减去gradient的加权 [ Δ θ 1   Δ θ 2 ] = − η [ u   v ] = > [ θ 1   θ 2 ] = [ a   b ] − η [ u   v ] = [ a   b ] − η [ ∂ L ( a , b ) ∂ θ 1   ∂ L ( a , b ) ∂ θ 2 ] \begin{bmatrix} \Delta \theta_1 \ \Delta \theta_2 \end{bmatrix}= -\eta \begin{bmatrix} u \ v \end{bmatrix}=> \begin{bmatrix} \theta_1 \ \theta_2 \end{bmatrix}= \begin{bmatrix} a\ b \end{bmatrix}-\eta \begin{bmatrix} u\ v \end{bmatrix}= \begin{bmatrix} a\ b \end{bmatrix}-\eta \begin{bmatrix} \frac{\partial L(a,b)}{\partial \theta_1}\ \frac{\partial L(a,b)}{\partial \theta_2} \end{bmatrix} [Δθ1 Δθ2]=η[u v]=>[θ1 θ2]=[a b]η[u v]=[a b]η[θ1L(a,b) θ2L(a,b)] 这就是gradient descent在数学上的推导,注意它的重要前提是,给定的那个红色圈圈的范围要足够小,这样泰勒展开给我们的近似才会更精确,而 η \eta η的值是与圆的半径成正比的,因此理论上learning rate要无穷小才能够保证每次gradient descent在update参数之后的loss会越来越小,于是当learning rate没有设置好,泰勒近似不成立,就有可能使gradient descent过程中的loss没有越来越小

当然泰勒展开可以使用二阶、三阶乃至更高阶的展开,但这样会使得运算量大大增加,反而降低了运行效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值