优化方法总结

梯度下降,SGD~,ADAm,牛顿法,拟牛顿法

 

首先要理解,优化方法对谁优化?没有说错,我们是做机器学习或者深度学习,在程序中是通过不断迭代完成的,那么,学习什么呢?是x?不对,因为x其实是我们的数据,我们是想通过x求得y也就是根据我们的已有的数据求出对应映射下的结果,可能是个分类,也可能是个回归,其实我们要的就是建立这个映射的关系,怎么建立呢?就是通过参数矩阵W,无论是任何机器学习算法中,还是在深度学习算法中,我们都是为了求这个W矩阵。

 

那么现在看梯度下降这个概念,什么意思,我们的优化目标,是损失函数最小化,或者似然函数最大化(当然加个负号就变成了最小化,其实也是一种损失函数)。那么常用的损失函数都有哪些呢?简单的线性回归中的MSE,当然加了l1,l2的lasso回归和岭回归都是一样的,还有在线性回归的基础上加了sigmoid函数的逻辑回归,损失函数为交叉熵,还有Adaboost使用的损失函数为指数函数,SVM中使用的是合页损失等。

 

因此要优化损失函数,使损失函数最小化,优化的参数是什么?对喽,要优化的参数是参数矩阵W,因此在梯度下降,Adam,牛顿法,拟牛顿法中,优化的参数都是W,换一种好理解的说法就是梯度下降那个图,牛顿法那个切线的图,横坐标x其实是参数矩阵W。

 

#下面的损失函数均用f(x)表示,Δf(x)为损失函数对参数矩阵求导。

 

梯度下降迭代过程:

  1. 初始化参数矩阵W,设定学习率alpha
  2. 根据公式W = W - alpha * Δf(x)
  3. 直至满足停止条件

 

 

SGD迭代过程:

  1. SGD随机梯度下降,每次迭代只选一条x样本
  2. 初始化参数矩阵W,设定学习率lapha
  3. 更具公式W = W- alpha * Δf(x)进行跟新W
  4. 只至满是停止条件

 

Adam迭代过程:

Adam有几个参数,m,belta1,n,belta2,ee(一个很小的数)

  1. 初始化参数矩阵W,初始化m,belta1,n,belta2
  2. 更新m  = belta1 * m + (1 - belta1 ) * Δf(x)

更新n = belta2 * n + (1 0 belta2) * Δf(x)

  1. 计算m_ = m / (1 - belta1 ** t)

计算n_ = n /(1 - belta2 ** t)

  1. 更新参数矩阵

W  = W - alpha * m_ /(np.sqrt(n_) + ee

  1. 返回第二步直至满足截至条件为止

 

 

牛顿法:

首先理解牛顿法是泰勒一节展开的应用,牛顿法和拟牛顿法优化目标是使损失函数为0,也就是在找损失函数为0的路上越走越远~~~,而梯度下降的优化目标是使损失函数最小话,也就是在找算函数最小值点的路上越走越远~~~。这里可以看到,其实梯度下降的优化目标更接近真实情况,因为不是所有的损失函数都有零点,但是look the other side of the road,找损失函数为零的点也没什么大问题,我是在找这个的路上,而不是非要找这个点。

先写下损失函数的1阶泰勒展开:

F(x) = F(x0) + F’(x0)*(x - x0)

如果看了上面那段话,大家应该知道,我们的目标是什么?F(x) == 0.因此损失函数的一阶泰勒展开可以写成

0 = F(x0)  + F’(x0)(x - x0)

变形求x(这里的x就是参数矩阵,而且是x0,下一个迭代的值)得x = x0 - F(x0) / F’(x0)

这个就是我们牛顿法更新权重矩阵的公式。下面总结牛顿法迭代过程

  1. 初始化参数矩阵W
  2. 更新W = W - f(x)/Δf(x)
  3. 直至满足截至条件

 

 

拟牛顿法

拟牛顿法是考虑损失函数的二阶泰勒展开

F(x) = F(x0) + F’(x0)* ( x - x0)  + F’2(x0) * (x - x0)2/2

这里我们再说下泰勒展开,什么是泰勒展开?除了上面这个公式大家还有什么其他的理解?简单点的,就是一个函数的泰勒展开等于这个函数(废话)。再回过头想我们的优化目标是什么?没错是损失函数为0,所以令F(x) == 0,公式变形为

0 =  F(x0) + F’(x0)* ( x - x0)  + F’2(x0) * (x - x0)2/2

求目标为0的函数的参数的最小值,也就是对这个公式右面的公式对x求导(再次明确,则例的x0是本时刻的求出的w值,x是根据本时刻要求的下一时刻的w值)

变形中~~~~~~~~~~

X = x0 - f’(x0) / f’’(x0)

理论上来说,到这一步,我们就可以更新迭代求W矩阵了。But~~~~·0 ·

这里的f’’(x0)是一个二阶求导后的矩阵,而且是在分母,也就是还要求逆(Hassion矩阵~费劲)如果直接求,计算量太大,其实就是基本算不出来。所有我们需要找一个矩阵U---->f’’(x0)来逼近这个hassion矩阵,这里便有了DFP以及BFGS算法,都是为了找这么一个逼近f’’(x0)的矩阵U。我们不管,这么低级的应用的时候直接来就行了。下面写下拟牛顿法的更新迭代过程。

  1. 初始化参数矩阵W
  2. 更新W
  3. 直至满足截至条件为止。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值