一、线性相关
先看一个常见的神经网络模型
图1神经网络模型其中模型的数学关系式如图2所示:
图2 数学关系式激励函数f()中的关系式可以刨离出来,就是一个线性组合
s变量是对变量x的加权线性"混合"。因此,将s定义为变量的线性组合,定义每个是一个矢量,因此,它们的线性组合s也是一个矢量。当然.每个矢量必须有相同数量的元素。请注意,s的每个分量都是一个由被组合矢量的相对应元素构成的线性组合。
二、基于梯度的优化算法
问题:深度学习算法在做模型调整的时候会涉及优化函数,通常把需要最小化的目标函数称为代价函数/损失函数/误差函数
解决思路:下面从导数和偏导数的基本层面来看下这个问题
假设函数,函数导数表示缩放输入的大小才能在输出获得相应变化即:
可见导数对我们很有用,因为它可以告诉我们如何更改x 来略微的改善 y, 具体而言,我们想要找到y的最小值,沿着导数的负方向移动一个足够小的, 得到的 肯定是比 要小的,我们就这样沿着导数的负方向一步一步挪来减小, 去接近最低点。这种技术就是 梯度下降(gradient descent)。
图3 通过导数进行梯度下降我们常见的是多维情况,即存在多个局部最小值点,如图4所示:
图4 多维函数情况针对多维输入函数,需要通过偏导数。之前我们已经知道,梯度向量指向上坡,负梯度方向指向下坡。我们在负梯度方向上移动x 可以减小 y.这被称为最速下降法(method of steepest descent) 或 梯度下降(gradient descent) . 应用最速下降法,在x点处建议的下一个更新的点是 x′=x−ε∇xf(x). 其中 ε是 学习率(learning rate), 是一个确定移动步长大小的正标量。ε的选择是一个技术活儿,有几种不同的策略来找到最佳的 ε.
一种是直接设置为一个小常数。
一种是通过计算,选择使得方向导数消失的步长。
一种是根据几个 ε是试探计算 f(x−ε∇xf(x)), 并选择其中能产生最小目标值函数值得 ε。
最速下降法在梯度的每一个元素都为 0的时候收敛(或者在实践中,很接近0 时)。 在有些情况下,我们也许能够避免运行迭代求解,而是通过解方程 ∇xf(x)=0直接跳到临界点。
以上说的梯度下降法,都是针对连续空间中的优化问题,但是其背后的解决问题的思路 – 不断地向更好的情况移动一小步–可以拓展到离散空间。 例如,递增带有离散参数的目标函数被称作爬山算法(hill climbing).
问题:病态曲率,如图5所示。
图5 损失曲面放大的图如6所示。
图6 梯度下降解决分析:上文已经看见一阶优化解决梯度问题,再看下二阶导数。
一阶导数表征的是曲线的斜率, 同理我们可以认为二阶导数表征的是曲线(或曲面)的曲率. 借助物理来理解,就是函数表征的是位移和时间的对应关系,一阶导数就是速度,二阶导数就是加速度。
对于一个一次函数而言,比如 , 其一阶导数就是常数k, 而二阶导数就是 0, 或者说匀速直线运动,速度恒定,没有加速度。
对于一个二次函数而言,比如自由落体运动 , 其一阶导数就是xt, 二阶导数就是常数 g, 也就是说有随x变化的斜率和固定的曲率,或者说有固定的加速度然后有随时间变化的速度。
回到优化算法中,我们之前使用的梯度下降法,相当于以当前的速度匀速直线前进一个δx时间,作为估计的 , 当然这个和真实的 肯定是有差距的。二阶导数信息就可以用来预知这个差距的大小:
如果二阶导数/曲率 为0, 也就是没有加速度,匀速直线运动,那么我们用梯度进行预测就是很准确的。
如果二阶导数/曲率 为负, 也就是减速运动,那么我们用梯度进行预测的值就会比真实值大。
如果二阶导数/曲率 为正, 也就是加速运动, 那么我们用梯度进行预测的值就会比真实值小。
介绍下Hessian 矩阵,Hessian 矩阵如下:
图7 Hessian 矩阵其中
利用 Hessian 矩阵的特征值分解,我们可以将二阶导数测试扩展到多维情况。在临界点处 ∇xf(x)=0, 我们通过检测 Hessian 的特征值来判断该临界点是一个局部极大点,局部极小点还是鞍点。
回到病态曲率的问题,Hessian提供了损失曲面每一点上的曲率估计。正曲率意味着随着我们的移动,损失曲面变得不那么陡峭了。负曲率则意味着,损失曲面变得越来越陡峭了。注意,如果这一步的计算结果是负的,那就意味着我们可以切换回原本的算法。这对应于下面梯度变得越来越陡峭的情形,然而,如果梯度变得越来越不陡峭,那么我们也许正向病态曲率的底部移动。这时牛顿算法提供了一个修正过的学习步幅,和曲率成反比。换句话说,如果损失曲面变得不那么陡峭,学习步幅就下降
问题:Hessian矩阵需要我们计算损失函数在所有权重组合上的梯度。也就是说,需要做的计算的数量级是神经网络所有权重数量的平方。
解决分析:基于之前梯度的信息使用启发式算法引导优化过程,这就可以用动量方法来解决,动量算法参考下边文献[3]
小结:以上从数学层面介绍了神经网络实现的基本公式,以及网络梯度优化的基本算法。
文章为学习整理笔记,仅供参考
参考文献:
【1】线性代数知识
【2】梯度优化方法
【3】优化算法(动量等)
【4】牛顿算法
网友评论