梯度到底是个什么东西,物理意义和数学意义分别是什么?
如果大家有过高数的学习经历,就一定对梯度有过一定的学习。接下来,人邮君带着大家简单复习一下梯度的概念和意义。
梯度(gradient) 的概念
在空间的每一个点都可以确定无限多个方向,一个多元函数在某个点也必然有无限多个方向。因此,导数在这无限多个方向导数中最大的一个(它直接反映了函数在这个点的变化率的数量级)等于多少?它是沿什么方向达到的?描述这个最大方向导数及其所沿方向的矢量,就是我们所说的梯度。
梯度是场论里的一个基本概念。所谓“场”, 它表示空间区域上某种物理量的一种分布。从数学上看,这种分布常常表示为 2 上的一种数值函数或向量函数。能表示为数值函数u=u (x,y,z) 的场,称为数量场,如温度场、密度场等。
梯度的本意是一个向量(矢量), 表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
梯度是雅可比矩阵的一种特殊形式,当m=1时函数的雅可比矩阵就是梯度,这个概念原是为场论设定的,任何场都可以用来理解梯度,后来被引用到数学中用来指明函数在指定点的变量率最快的方向和大小,是一种变化效率的数字抽象。
举一个降维的例子,在修建一个通向山顶的缆车时,缆车的路线怎么修建效率最高呢?从山顶到山底一条直线中间可能有山峰阻拦,一昧的修高山顶的到达站不仅不安全还会增加施工效率,在调整修建缆车的角度时的角度变化率就是梯度,角度太低了通不到山顶这个梯度方向角度就是零,方向导数就也是零。
参考资料:[图文]方向梯度与导数 - 百度文库
梯度的物理及数学意义
我们可以理解物理中梯度是一个用来做用空间中纯量场的一个数学运算,可以用来了解纯量场随空间的变化。而数学中单从梯度的下降算法而言能够帮我们找到函数的极小值点。
梯度的使用(之一):梯度下降
类比之前的修缆车的概念,从山顶向山底修缆车就是一个梯度下降的基本过程。修建梯度的山峰就是一个可微分的函数。目标是最有效率的修建到山底的缆车上车点(函数的最小值)最快修建的方式就是找到当前位置最陡峭的方向,沿着此方向向下探索,对应到函数中,就是找到给定点的梯度 ,沿着梯度相反的方向,就能让函数值下降的最快!因为梯度的方向就是函数之变化最快的方向。在《百面机器学习》中进行很详细的介绍。
梯度下降算法,图源《深度学习原理与实践》
这种算法在机器学习中,优化问题的目标函数通常可以表示成:
经典的梯度下降法采用所有训练数据的平均损失来近似目标函数,即
因此经典的梯度下降法在每次对模型参数进行更新时,需要遍历所有的训练数据。当M很大时,需要很大的计算量,耗费很长的计算时间,在实际应用中基本不可行。
为了解决该问题,随机梯度下降法,用单个样本的损失来近似平均损失,即
因此,随机梯度下降法用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速率。该方法也非常适用于数据源源不断到来的在线更新场景。
为了降低随机梯度的方差,从而使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际应用中我们会同时处理若干训练数据,该方法被称为小批量梯度下降法(Mini- Batch Gradient Descent)。假设需要同时处理m个训练数据
则目标函数及其梯度为
对于小批量梯度下降法的使用,有以下三点需要注意的地方。
(1)如何选取参数m?在不同的应用中,最优的m通常会不一样需要通过调参选取。一般m取2的幂次时能充分利用矩阵运算操作,所以可以在2的幂次中挑选最优的取值,例32、64、128、256等。
(2)如何挑选m个训练数据?为了避免数据的特定顺序给算法收敛带来的影响,一般会在每次遍历训练数据之前,先对所有的数据进行随机排序,然后在每次迭代时按顺序挑选m个训练数据直至遍历完所有的数据。
(3) 如何选取学习速率a? 为了加快收敛速率,同时提高求解精度,通常会采用衰减学习速率的方案:一开始算法采用较大的学习速率,当误差曲线进入平台期后,减小学习速率做更精细的调整。最优的学习速率方案也通常需要调参才能得到。
综上,通常采用小批量梯度下降法解决训练数据量过大的问题。每次更新模型参数时,只需要处理m个训练数据即可,其中m是一个远小于总数据量M的常数,这样能够大大加快训练过程。
以上就是梯度的基本概念,和一个基于梯度的实际优化的算法案例。梯度的理解对于机器学习尤其深度学习来说是至关重要的。