梯度下降

原理

  • 代价函数中,y和x是不可改变的,因为那是事实(配钥匙时,我们需要改变的是钥匙胚胎,不是原钥匙或者锁芯)
  • 假设预测函数是y_hat=wx+b,为了让y_hat尽量切近y,就需要改变w和b,x和y是常数
  • 自变量是theta0和theta1,因变量是代价函数的值

方法

梯度下降原理

例子

假如我们是一只蚂蚁,要从这个曲线的某一点到达最低点,那么我们要怎么做呢

步骤

1.求导

知道方向

无法直接算出最低点处Parameter的值

因为我们现在是只蚂蚁,这个地形太大了,我们根本看不到最低点,不能一下跳过去,只能一步一步走,那怎么办

最小值必定小于等于当前值

我们可以沿着重力的方向走,一直向下,不能再下了那就是最低点了

尽可能快的逼近最小值

我们只能贴着地形走,而且尽可能少走弯路,所以需要把垂直向下的这个方向依附分解到地形上

2.逐步逼近

怎么走过去

减去以导数为因子的小变量

因为看不到最低点,所以我们只能走一步算一步

Alpha是学习率,逐步逼近的步幅

步子迈多大

注意导数是根据当前点计算,而不是梯度下降后的点

3.尽可能接近最小值

  1. 斜率因逐渐接近最低点而逐渐减少
  2. 人为减小学习率

梯度下降的方法

共轭梯度

可以用来代替梯度下降优化Theta的更复杂,更快捷的方法

批量梯度下降(Batch Gradient Descent)

优缺点

  • 梯度计算准确
  • 训练数据大时耗时巨大

实现

  1. 输入所有训练数据,计算梯度
  2. 用所得梯度实现梯度下降

随机梯度下降(Stochastic Gradient Descent)

优缺点

  • 当数据很大的时候,要把所有数据都计算好后再算梯度,会花费大量时间,随机梯度下降解决了这个问题
  • 得出的梯度和用全部数据计算的梯度相差较大

实现

  1. 打乱数据
  2. 输入单个记录,计算梯度
  3. 用所得梯度实现梯度下降)

小批量梯度下降(Mini-Batch Gradient Descent)

概述

批量梯度下降和随机梯度下降的折中

实现

  1. 打乱数据(可以不打乱)
  2. 抽出一批数据(一般为2的n次方),计算梯度
  3. 用所得梯度实现梯度下降

优化

自适应学习率算法

优点

样本标准差公式

σn

优点

  • 从公式看,更多样本的梯度回报是低于线性的,也就是10000个样本是100个要本的10倍,不是100倍,但是计算量是一样的,所以优化算法会收敛地更快
  • 训练集的容易,例如极端情况下训练集下所有数据都是冗余的,那么无论算m和还是全算,结果都是一样的

动量

分类

动量随机梯度下降

(Gradient Descent with Momentum)

公式

$$v\leftarrow \alpha v - \epsilon \nabla_\theta \left( \frac{1}{m}\sum_{i=1}^m L(f(x^{(i)} \; ;\theta), y^{(i)}) \right)$$

$$\theta \leftarrow \theta + v$$

Nesterov动量

概述

梯度计算在施加当前速度之后

公式

$$v\leftarrow \alpha v - \epsilon \nabla_\theta \left[ \frac{1}{m}\sum_{i=1}^m L(f(x^{(i)} \; ;\theta+ \alpha v), y^{(i)}) \right]$$

$$\theta \leftarrow \theta + v$$

概述

积累了之前梯度指数级衰减的激动平均,并继续沿该方向移动

优点

缓解参数高度敏感于参数空间的问题

缺点

加入了新的超参数

分类

AdaGrad

Adam

不太懂,按原文是,Adam算法结合了动量梯度下降和RMSprop各自的优点,使得神经网络训练速度大大提高。

优点

没有引入新的超参数的情况下缓解餐宿高度敏感于参数空间的问题

定义

独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平均值总和的平方根

缺点

  • 从训练开始积累梯度平方会导致有效学习率过早和过量的减小
  • 对有局部极小值效果不怎么好

个人理解

就是权重的每隔一维度做各自的积累然后新的除以总和

RMSprop

定义

独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史指数衰减平均

个人理解

类似Normalzation,SW因为由dW平方得出,所以没有方向,只有绝对值,而且最后dW会除以根号SW,类似于归一化和一点点滑动平均(只有数值结合,没有方向结合)的结合