前言
梯度下降法可以帮助我们找到某个函数的极小值或者最小值。这里先拿一个损失函数来说,假设损失函数如下:
我们最终的目的求参数
单个参数与损失函数的关系图类似于以下二维图:
我们发现:
- 当
θ 在最小值左边的时候,损失函数的导数(斜率)是负的; - 当
θ 在最小值右边的时候,导数是正的; - 当
θ 在最小值附近的时候,导数接近0.
因此,如果我们在:
- 导数为负的时候增加
θ ; - 导数为正的时候减小
θ ;
为达到上面调整参数
对上述损失函数可以将上述公式转化成以下公式:
梯度
在微积分里面,对多元函数的参数求
在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。
梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。
梯度下降
对于前言中讲到2个参数对应的损失函数是个碗状,更抽象的可以比作一个山脉(如下图),我们如何从山脉的某处走到山脚,当然有可能我们不能走到山脚,而是到了某一个局部的山峰低处。因此,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
梯度下降算法
一、 先决条件: 确认优化模型的假设函数和损失函数。
比如对于线性回归,假设函数表示为
同样是线性回归,对应于上面的假设函数,损失函数为(同前言):
二、算法相关参数初始化:主要是初始化参数
TODO:初始化方法后期补充
三、计算过程
1)、定当前位置的损失函数的梯度,对于
2)、用步长乘以损失函数的梯度,得到当前位置下降的距离,即
具体例子见前言
3)、确定是否所有的
4)、更新所有的
具体示例见前言。
调优
1、步长
2、算法参数的初始值选择。
3、特征值归一化。参数
4、Momentum、RMSProp算法、Adam优化算法等,可参考这或自行搜索资料
normal equation
下面直接给出公式
其中,
下面给出证明
首先要回顾一下线性代数:
1.单位矩阵
2.方阵 A 的逆矩阵记为
或
下面开始证明
假设模型矩阵表达式为
首先在两边同时左乘
再在两边同时左乘
其中
与梯度下降的比较
对于
梯度下降分类
批量梯度下降法(Batch Gradient Descent)
批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。
m表示样本总数
优点:最小化所有训练样本的损失函数,得到全局最优解;易于并行实现。
缺点:当样本数目很多时,训练过程会很慢。
示意图:
随机梯度下降法(Stochastic Gradient Descent)
跟BGD相似,只是每次迭代更新只使用一个样本
优点:训练速度快。
缺点:最小化每条样本的损失函数,最终的结果往往是在全局最优解附近,不是全局最优;不易于并行实现。
示意图:
小批量梯度下降法(Mini-batch Gradient Descent)
小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用k个样子来迭代,
示意图:
参考
梯度下降(Gradient Descent)小结
Gradient Descent 梯度下降法
机器学习笔记03:Normal equation与梯度下降的比较
深度学习(4):优化神经网络(2)