原理
- 代价函数中,y和x是不可改变的,因为那是事实(配钥匙时,我们需要改变的是钥匙胚胎,不是原钥匙或者锁芯)
- 假设预测函数是y_hat=wx+b,为了让y_hat尽量切近y,就需要改变w和b,x和y是常数
- 自变量是theta0和theta1,因变量是代价函数的值
方法
梯度下降原理
例子
假如我们是一只蚂蚁,要从这个曲线的某一点到达最低点,那么我们要怎么做呢
步骤
1.求导
知道方向
无法直接算出最低点处Parameter的值
因为我们现在是只蚂蚁,这个地形太大了,我们根本看不到最低点,不能一下跳过去,只能一步一步走,那怎么办
最小值必定小于等于当前值
我们可以沿着重力的方向走,一直向下,不能再下了那就是最低点了
尽可能快的逼近最小值
我们只能贴着地形走,而且尽可能少走弯路,所以需要把垂直向下的这个方向依附分解到地形上
2.逐步逼近
怎么走过去
减去以导数为因子的小变量
因为看不到最低点,所以我们只能走一步算一步
Alpha是学习率,逐步逼近的步幅
步子迈多大
注意导数是根据当前点计算,而不是梯度下降后的点
3.尽可能接近最小值
- 斜率因逐渐接近最低点而逐渐减少
- 人为减小学习率
梯度下降的方法
共轭梯度
可以用来代替梯度下降优化Theta的更复杂,更快捷的方法
批量梯度下降(Batch Gradient Descent)
优缺点
- 梯度计算准确
- 训练数据大时耗时巨大
实现
- 输入所有训练数据,计算梯度
- 用所得梯度实现梯度下降
随机梯度下降(Stochastic Gradient Descent)
优缺点
- 当数据很大的时候,要把所有数据都计算好后再算梯度,会花费大量时间,随机梯度下降解决了这个问题
- 得出的梯度和用全部数据计算的梯度相差较大
实现
- 打乱数据
- 输入单个记录,计算梯度
- 用所得梯度实现梯度下降)
小批量梯度下降(Mini-Batch Gradient Descent)
概述
批量梯度下降和随机梯度下降的折中
实现
- 打乱数据(可以不打乱)
- 抽出一批数据(一般为2的n次方),计算梯度
- 用所得梯度实现梯度下降
优化
自适应学习率算法
优点
样本标准差公式
σ√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,类似于归一化和一点点滑动平均(只有数值结合,没有方向结合)的结合