Neural network 计算hessian如何用于神经网络学习

Neural network 计算hessian如何用于神经网络学习,neural-network,artificial-intelligence,backpropagation,hessian-matrix,Neural Network,Artificial Intelligence,Backpropagation,Hessian Matrix,有谁能用一种简单的数学方法向我解释一下什么是Hessian,以及在优化神经网络的学习过程时,它在实践中是如何工作的 要理解黑森矩阵,首先需要理解雅可比矩阵,而要理解雅可比矩阵,则需要理解导数 导数是衡量函数值随参数变化的速度。因此,如果你有函数f(x)=x^2,你可以计算它的导数,得到f(x+t)随足够小的t变化的速度。这将使您了解函数的基本动力学 梯度在多维函数中显示最大值变化的方向(基于方向导数),因此给定一个函数,即g(x,y)=-x+y^2,你会知道,最好最小化x的值,同时强烈地最大化

有谁能用一种简单的数学方法向我解释一下什么是Hessian,以及在优化神经网络的学习过程时,它在实践中是如何工作的

要理解黑森矩阵,首先需要理解雅可比矩阵,而要理解雅可比矩阵,则需要理解导数

  • 导数是衡量函数值随参数变化的速度。因此,如果你有函数f(x)=x^2,你可以计算它的导数,得到f(x+t)随足够小的t变化的速度。这将使您了解函数的基本动力学
  • 梯度在多维函数中显示最大值变化的方向(基于方向导数),因此给定一个函数,即g(x,y)=-x+y^2,你会知道,最好最小化x的值,同时强烈地最大化y的值。这是基于梯度的方法的基础,如最速下降技术(用于传统的反向传播方法)
  • 雅可比是另一种推广,因为你的函数可能有很多值,比如g(x,y)=(x+1,x*y,x-z),因此你现在有2*3个偏导数,每个输出值(2个值中的每个值)有一个梯度,从而形成一个2*3=6个值的矩阵
现在,导数显示函数本身的动力学。但是你可以更进一步,如果你能用这个动力学来找到函数的最佳值,也许你能做得更好,如果你能找到这个动力学的动力学,然后计算二阶导数?这就是Hessian,它是函数的二阶导数矩阵。它捕捉了导数的动态,那么变化的速度(方向)有多快。乍一看可能有点复杂,但如果你想一想,它就会变得非常清楚。您想沿着渐变的方向走,但不知道“多远”(正确的步长是多少)。所以你定义了一个新的,更小的优化问题,你在问“好吧,我有这个梯度,我怎么知道去哪里?”然后用导数(导数的导数形成了黑森函数)类似地解决它

您也可以从几何角度来看待这一点-基于梯度的优化使用来近似您的函数。您只需在当前点中找到一条最靠近您的函数的直线,它就定义了一个变化方向。现在,线条非常原始,也许我们可以使用一些更复杂的形状,比如。。。。抛物线?二阶导数,海森方法只是试图将抛物线(二次函数,f(x)=ax^2+bx+c)拟合到当前位置。根据这个近似值,选择了有效的步骤


有趣的是,将动量项添加到基于梯度的优化中(在充分条件下)近似于基于hessian的优化(并且计算成本要低得多)。

我知道如何使用牛顿方法(hessian)找到函数的驻点。但我仍然不知道如何计算神经网络的Hessian,因为在这个过程中有不同的层和不同的激活函数,然后将其应用于权重更新。而且,你在回答中没有解释任何关于雅可比的事情。你想说点什么但忘了说了吗?雅可比只是梯度的生成,它是网络中每个输出变量和权重的所有偏导数的矩阵。简而言之,反向传播不是一种学习技术,它只是计算梯度的一种有效方法,仅此而已,实际上所有的神经网络学习技术都是基于梯度的(hessian只是“更深一步”,它是梯度的梯度)。我可以推荐S·海金的“神经网络和学习机器”。或者,如果你对优化一点也不熟悉,那么D KincaidI的“数值分析”就不明白为什么你说一个人必须先知道雅可比,然后再也不要谈论它了。@lejlot,你能提到动量这个有趣的事实吗?