参考:https://www.cnblogs.com/pinard/p/5970503.html
我在学习机器学习的时候,主要是参考两位老师的笔记,已经学习了一段之间回来整理总结,以免忘记。这一篇主要参考网址为:https://www.cnblogs.com/pinard/p/5970503.html
所以回顾的话主要还是打开链接跟着我的理解回顾吧。
梯度:
在我的理解里面是:函数f(x,y)是函数的偏导数∂f/∂x和 ∂f/∂y构成的梯度向量(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。
梯度向量(∂f/∂x, ∂f/∂y)T的方向是f(x,y)增加最快的地方,也更加容易找到函数的最大值。
而梯度的反方向则是f(x,y增加减少最快的地方,也更容易找到最小值。
因此引出了梯度上升和梯度下降。
在机器学习里面,梯度上升和梯度下降还是比较重要的概念。
一般最小化损失函数(min f(θ))时,我们需要使用到梯度下降得到最小化的损失函数和模型参数值。
一般最大化损失函数(max f(θ))时,需要梯度上升计算最大化的损失函数和模型参数值。
而梯度下降和梯度上升是可以互相转化的。比如说梯度上升max f(θ)可以转换为min -f(θ)来计算。
梯度下降法算法
形象一点的理解是:
在大山的某处位置,由于不知道怎么下山,肯定要走一步算一步的。也就是说,每走一步到一个位置都要计算这个位置的梯度,然后沿着梯度的负方向就是下降速度最快的方向前进一步。每步的长度是确定的,这样一步一步的走下去就能到山脚了,也就是最优接。但是,我们也可能走到了局部的山峰低处,也就是局部最优解。
总的来说,梯度下降不一定可以找到全局最优解,也可能是找到局部最优解。
但是,如果损失函数 f(θ)是凸函数的话,梯度下降获得的解一定是全局最优解。
为了更好地理解梯度下降,可以先了解一下这些概念:
1、步长:步长就是我刚才说的,下山的每一步的长度,也可以说是沿着梯度负方向前进的长度,也可以说是沿着这一位置的最快下降方向前进的长度。
2、特征:指的是样本的输入部分。比如说单特征的样本是(x,y)。x是单特征,y是输出值。多特征的样本是(x1,x2,……,xk,y)。其中x1,……,xk是特征,y是输出。
3、 假设函数(hypothesis function)(hθ(x)):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,…m)可以采用拟合函数如下: hθ(x)=θ0+θ1xhθ(x)。
4、 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。最小化损失函数,意味着拟合程度最好,对应的模型参数即为最优参数。
在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(xi,yi)(i=1,2,…m),采用线性回归,损失函数为:
其中xi表示第i个样本特征,yi表示第i个样本对应的输出,hθ(xi)为假设函数。
感觉这里的假设函数hθ(x)有点像预测函数。损失函数J(θ)则是预测值和真实值的差的平方和,令损失函数J(θ)最小,可以计算出最优参数。
梯度下降算法的详细介绍
分为代数法和矩阵法。
代数法-梯度下降算法
1、先决条件: 确认优化模型的假设函数和损失函数。
以线性回归为例:
假设函数:
其中:是模型参数。
是样本特征。
损失函数为:
总的来说,n是特征个数。m是样本个数。假设函数就是线性回归公式,而损失函数就是预测值和真实值的差的平方和除以样本个数再除以2.
2、算法相关参数初始化:主要是初始化模型参数。算法终止距离ε。步长α。
在没有任何先验知识的时候,通常将所有的θ初始化为0, 将步长α初始化为1。在调优的时候再优化。
接下来的直接看参考链接吧。
粗略的总结下,
也就是下一个θi是上一个θi-步长乘以(预测值-真实值)*特征除以样本个数
矩阵方式-梯度下降算法
假设函数:
损失函数:
4、梯度下降法大家族(BGD,SGD,MBGD)
4.1 批量梯度下降法(Batch Gradient Descent)
批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。
使用了m个数据。
4.2 随机梯度下降法(Stochastic Gradient Descent)
随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。
随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。
那么,有没有一个中庸的办法能够结合两种方法的优点呢?有!这就是4.3的小批量梯度下降法。
4.3 小批量梯度下降法(Mini-batch Gradient Descent)
批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。对应的更新公式是:
- 梯度下降法和其他无约束优化算法的比较
- 在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。
梯度下降法和最小二乘法相比,梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。
梯度下降法和牛顿法/拟牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。