最优化方法--梯度下降

Posted zym-yc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最优化方法--梯度下降相关的知识,希望对你有一定的参考价值。

梯度下降:实现梯度下降、线性回归中的梯度下降

随机梯度下降:相关代码即调用

本文参考:公众号《数据科学家联盟》文章

转自:https://www.cnblogs.com/huangyc/p/9801261.html#_label1_0

一、概念

梯度下降(Gradient Descent, GD)不是一个机器学习算法,而是一种基于搜索的最优化方法。梯度下降(Gradient Descent, GD)优化算法,其作用是用来对原始模型的损失函数进行优化,以便寻找到最优的参数,使得损失函数的值最小。我么需要从损失值出发,去更新参数,且要大幅降低计算次数

梯度下降算法作为一个聪明很多的算法,抓住了参数与损失值之间的导数,也就是能够计算梯度(gradient),通过导数告诉我们此时此刻某参数应该朝什么方向,以怎样的速度运动,能安全高效降低损失值,朝最小损失值靠拢。

1、步长(Learning rate):步长又称学习率,决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

2、损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。

二、原理

就好比一个蒙着眼睛的人下山,每次在负梯度最大的方向,向前走一步,走出一步后,比较前后的的落差,若落差小于一定阈值,则认为到达山谷,若落差大于阈值,则继续向前走,直到到达山谷。

三、调优

步长、初始值、归一化

1、步长:步长太小,收敛慢,步长太大,会远离最优解。所以需要从小到大,分别测试,选出一个最优解。

2、初始值:随机选取初始值,当损失函数是非凸函数时,找到的解可能是局部最优解,需要多测试几次,从局部最优解中选出最优解。当损失函数是凸函数时,得到的解就是最优解。

3、归一化:如果不归一化,会收敛的很慢,会形成之字的路线。

四、分类

1、批量梯度下降法(BGD)

计算梯度时使用所有的样本,这样每次算出来的梯度都是当前最优的方向。

  • 优点
  1. 迭代次数少
  2. 若损失函数为凸函数,能够保证收敛到全局最优解;若为非凸函数,能够收敛到局部最优值(结果的准确度)
  • 缺点
  1. 训练速度慢(时间,每一次训练需要的时间)
  2. 需要内存大(空间)
  3. 不支持在线更新

2、随机梯度下降法(SGD)

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

  • 优点
  1. 训练速度快
  2. 支持在线更新
  3. 有几率跳出局部最优解
  • 缺点
  1. 容易收敛到局部最优,并且容易被困在鞍点
  2. 迭代次数多

3、小批量梯度下降法(MBGD)

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m1<x<m。一般可以取x=10x=10。

 ---

待完善

 

 

以上是关于最优化方法--梯度下降的主要内容,如果未能解决你的问题,请参考以下文章

几种常用最优化方法

求解方法之梯度下降法

常用优化方法总结

Python实现简单的梯度下降法

常见的几种最优化方法(梯度下降法牛顿法拟牛顿法共轭梯度法等)

为啥随机梯度下降方法能够收敛