AI机器学习及python实现

数学梯度下降—Apple的学习笔记

2018-10-13  本文已影响12人  applecai

一,   梯度下降算法摘要

步长就是a,也叫学习速率。偏导数就是梯度,下降最快的方向

合适的学习速率α应该是每一次迭代过后,代价函数J(θ)都应该减小,但是学习速率α如果太小的话又会使梯度下降收敛的特别慢。

学习速率的选择,可以尝试0.001、0.01、0.1、1。选择一个最大的学习速率,然后选择一个比它小一点点的学习率,通常能够找到最合适的学习速率来解决我们的问题。

二,理论说明

    在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。对于在点(x0,y0)的具体梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),如果是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此类推。

    那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是-(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。

梯度下降法大家族(BGD,SGD,MBGD)

A.批量梯度下降法(Batch Gradient Descent)

批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新,这个方法对应于前面3.3.1的线性回归的梯度下降算法,也就是说3.3.1的梯度下降算法就是批量梯度下降法。

    θi=θi−α∑j=0m(hθ(x(j)0,x(j)1,...x(j)n)−yj)x(j)iθi=θi−α∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

    由于我们有m个样本,这里求梯度的时候就用了所有m个样本的梯度数据。

B.随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。对应的更新公式是:

  θi=θi−α(hθ(x(j)0,x(j)1,...x(j)n)−yj)x(j)iθi=θi−α(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。

训练速度很快, 不能很快的收敛到局部最优解。

C. 小批量梯度下降法(Mini-batch Gradient Descent)

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。对应的更新公式是:

    θi=θi−α∑j=tt+x−1(hθ(x(j)0,x(j)1,...x(j)n)−yj)x(j)iθi=θi−α∑j=tt+x−1(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

三,python代码

TBD

步骤如下:

step0: 给定W ,b初始值,W0,b0W0,b0,

step1: 随机选取一个样本 (xn,yn)(xn,yn),

step2: 将样本和Wt1,bt1Wt1,bt1代入 y^n=ft1(xn)=Wt1xn+bt1y^n=ft1(xn)=Wt1xn+bt1确定y^ny^n,

step3: 求得Wt=Wt1+α(y^nyn)xnWt=Wt1+α(y^nyn)xn,

step4: 求得bt=ynWtxnbt=ynWtxn,

循环迭代1-4步,使得MSEloss的值小于某个值退出循环。

上一篇下一篇

猜你喜欢

热点阅读