前言
梯度下降法可以帮助我们找到某个函数的极小值或者最小值。这里先拿一个损失函数来说,假设损失函数如下:
我们最终的目的求参数
θ0
θ1
使得损失函数对于给定的样本求得的值最小。
θ0
、
θ1
对应损失函数的图像关系类似一个碗状(bowl shape)
单个参数与损失函数的关系图类似于以下二维图:
我们发现:
- 当 θ 在最小值左边的时候,损失函数的导数(斜率)是负的;
- 当 θ 在最小值右边的时候,导数是正的;
- 当 θ 在最小值附近的时候,导数接近0.
因此,如果我们在:
- 导数为负的时候增加 θ ;
- 导数为正的时候减小 θ ;
为达到上面调整参数
θ
的目的,我们可以定义步长
α
(Learning rate),并通过以下公式对调整参数值:
对上述损失函数可以将上述公式转化成以下公式:
梯度
在微积分里面,对多元函数的参数求
∂
偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。对于在点
在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。
梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。
梯度下降
对于前言中讲到2个参数对应的损失函数是个碗状,更抽象的可以比作一个山脉(如下图),我们如何从山脉的某处走到山脚,当然有可能我们不能走到山脚,而是到了某一个局部的山峰低处。因此,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
梯度下降算法
一、 先决条件: 确认优化模型的假设函数和损失函数。
比如对于线性回归,假设函数表示为
hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn
, 其中
θi
(i = 0,1,2… n)为模型参数,
xi
(i = 0,1,2… n)为每个样本的n个特征值。我们增加一个特征
x0=1
,这样可以简化成
hθ(x0,x1,...xn)=∑ni=0θixi
。
同样是线性回归,对应于上面的假设函数,损失函数为(同前言):
二、算法相关参数初始化:主要是初始化参数
θ
,算法终止距离
ε
以及步长
TODO:初始化方法后期补充
三、计算过程
1)、定当前位置的损失函数的梯度,对于
θi
,其梯度表达式如下:
2)、用步长乘以损失函数的梯度,得到当前位置下降的距离,即 α∂∂θiJ(θ0,θ1...,θn)
具体例子见前言
3)、确定是否所有的 θi ,梯度下降的距离都小于 ε ,如果小于
4)、更新所有的 θ ,对于 θi ,其更新表达式如下。更新完毕后继续转入步骤1.
具体示例见前言。
调优
1、步长
α
的选择,可以选择多个值进行效果调试。
α
足够小时,
J(θ)
会一直下降,
α
太小,收敛太慢,
α
太大,可能不会每次迭代都下降,可能不会收敛。
2、算法参数的初始值选择。
3、特征值归一化。参数
J(θ)
在数据范围小的情况下下降快,在数据方位大的情况下下降慢,所以我们可以将所有特征值都缩放到−1 ≤ x(i) ≤ 1或者−0.5 ≤ x(i) ≤ 0.5范围内,可以使用以下方法
4、Momentum、RMSProp算法、Adam优化算法等,可参考这或自行搜索资料
normal equation
下面直接给出公式
其中, θ 为 n x1的向量,里面有n个代数法的模型参数。
下面给出证明
首先要回顾一下线性代数:
1.单位矩阵 E 是一个对角线全为1,其他元素都为零的方阵 :
2.方阵 A 的逆矩阵记为
A−1
,同时其满足下面的特性:
或
下面开始证明
假设模型矩阵表达式为
首先在两边同时左乘 XT 得到
再在两边同时左乘 (XTX)−1 得到
其中 (XTX)−1XTX 求得为单位矩阵,可以消除故得
与梯度下降的比较
对于 m≤n (样本数少于特征数), XTX 不可逆
梯度下降分类
批量梯度下降法(Batch Gradient Descent)
批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。
m表示样本总数
优点:最小化所有训练样本的损失函数,得到全局最优解;易于并行实现。
缺点:当样本数目很多时,训练过程会很慢。
示意图:
随机梯度下降法(Stochastic Gradient Descent)
跟BGD相似,只是每次迭代更新只使用一个样本
优点:训练速度快。
缺点:最小化每条样本的损失函数,最终的结果往往是在全局最优解附近,不是全局最优;不易于并行实现。
示意图:
小批量梯度下降法(Mini-batch Gradient Descent)
小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用k个样子来迭代, 1<k<m 。可根据样本量调整这个值,为了和计算机的信息存储方式相适应,可将t的值设置为2的幂次。将所有的训练样本完整过一遍称为一个epoch。
示意图:
参考
梯度下降(Gradient Descent)小结
Gradient Descent 梯度下降法
机器学习笔记03:Normal equation与梯度下降的比较
深度学习(4):优化神经网络(2)