前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >梯度下降与海森矩阵

梯度下降与海森矩阵

作者头像
用户9184480
发布2024-12-19 08:30:17
发布2024-12-19 08:30:17
720
举报
文章被收录于专栏:云计算linux

理一理基础优化理论,解释一下深度学习中的一阶梯度下降遇到的病态曲率(pathological curvature)问题。当海森矩阵condition number很大时,一阶梯度下降收敛很慢,无论是对鞍点还是局部极值点而言都不是个好事。

梯度下降与海森矩阵_其他
梯度下降与海森矩阵_其他

鞍点

f'(x)=0时函数不一定抵达局部最优解,还可能是鞍点(见上图),此时还必须根据二阶导数确定。

$f'(x)$

$f''(x)$

$f(x)$

$f'(x)=0$

$f''(x)>0$

局部最小值

$f'(x)=0$

$f''(x)<0$

局部最大值

$f'(x)=0$

$f''(x)=0$

局部极值或鞍点

对角化

可分解为如下乘积:

A = W\Lambda W^{-1}

其中,的主对角线元素为特征向量对应的特征值。亦即:

\begin{align*} W &= {\left(\begin{matrix}a_1 & a_2 & \dots & a_n\end{matrix}\right)} \\ \Lambda &= \begin{bmatrix} \lambda_1 & 0 & \cdots & 0 \\ 0 & \lambda_2 & \cdots & 0 \\ \tag{1} \vdots & \cdots & \ddots & \vdots \\ 0 & \cdots & 0 & \lambda_n \end{bmatrix}\end{align*}
W\Lambda = {\left(\begin{matrix}\lambda_1 a_1 & \lambda_2 a_2 & \dots & \lambda_n a_n\end{matrix}\right)}

W中的n个特征向量为标准正交基,即满足W^TW=I,等价于W^T=W^{-1},也等价于W是Unitary Matrix。

由于对角化定义在方阵上,不适用于一般矩阵。一般矩阵的“对角化”就是大名鼎鼎的奇异值分解了。

奇异值分解

A_{m\times n}=U_{m\times m}\Sigma_{m\times n}V^T_{n\times n}

其中,AA^T的特征向量stack为UA^TA的特征向量stack为V,奇异值矩阵\Sigma中对角线元素为\sigma_i = \frac{Av_i}{u_i}

Hessian 矩阵

一阶导数衡量梯度,二阶导数衡量曲率(curvature)。当 f''(x)<0f(x) 往上弯曲;当 f''(x)>0f(x) 往下弯曲,一个单变量函数的二阶导数如下图所示。

梯度下降与海森矩阵_梯度下降_02
梯度下降与海森矩阵_梯度下降_02

对于多变量函数f(x, y, z, \dots),它的偏导数就是Hessian矩阵:

Hf = \left[ \begin{array}{ccc} \dfrac{\partial^2 f}{\partial \color{blue}{x}^2} & \dfrac{\partial^2 f}{\partial \color{blue}{x} \partial \color{red}{y}} & \dfrac{\partial^2 f}{\partial \color{blue}{x} \partial \color{green}{z}} & \cdots \\\\ \dfrac{\partial^2 f}{\partial \color{red}{y} \partial \color{blue}{x}} & \dfrac{\partial^2 f}{\partial \color{red}{y}^2} & \dfrac{\partial^2 f}{\partial \color{red}{y} \partial \color{green}{z}} & \cdots \\\\ \dfrac{\partial^2 f}{\partial \color{green}{z} \partial \color{blue}{x}} & \dfrac{\partial^2 f}{\partial \color{green}{z} \partial \color{red}{y}} & \dfrac{\partial^2 f}{\partial \color{green}{z}^2} & \cdots \\\\ \vdots & \vdots & \vdots & \ddots \end{array} \right]

Hf并不是一个普通的矩阵,而是一个由函数构成的矩阵。也就是说,\textbf{H}f的具体取值只有在给定变量值(x_0, y_0, \dots)时才能得到。

Hf(x_0, y_0, \dots) = \left[ \begin{array}{ccc} \dfrac{\partial^2 f}{\partial \color{blue}{x}^2}(x_0, y_0, \dots) & \dfrac{\partial^2 f}{\partial \color{blue}{x} \partial \color{red}{y}}(x_0, y_0, \dots) & \cdots \\\\ \dfrac{\partial^2 f}{\partial \color{red}{y} \partial \color{blue}{x}}(x_0, y_0, \dots) & \dfrac{\partial^2 f}{\partial \color{red}{y}^2}(x_0, y_0, \dots) & \cdots \\\\ \vdots & \vdots & \ddots \end{array} \right]

是对称的实数矩阵:

\begin{split}& \frac{\delta^2}{\delta x_i \delta x_j} f(x) = \frac{\delta^2}{\delta x_j \delta x_i} f(x) \implies H_{ij} = H_{ji} \\\end{split}

,有如下结论成立:

\forall v \in \mathbb{R^n}, ||v||=1 \implies v^T Hv\leq \lambda_{\max}

证明如下:

由对角化形式H = Q\Lambda Q^T得到{\bf v}^TH{\bf v} = {\bf v}^TQ\Lambda Q^T{\bf v}。定义一个由\bf{v}经过Q^T转换的向量{\bf y} = Q^T{\bf v},于是

{\bf v}^TH{\bf v} = {\bf y}^T\Lambda {\bf y}\tag{2}

定义(1)代入有:

\begin{align}{\bf y}^T\Lambda {\bf y}&=\lambda_{\max}y_1^2 + \lambda_{2}y_2^2 + \cdots + \lambda_{\min}y_N^2& \\&\le \lambda_{\max}y_1^2 + \lambda_{\max}y_2^2 + \cdots + \lambda_{\max}y_N^2 \\ & =\lambda_{\max}(y_1^2 +y_2^2 + \cdots y_N^2) \\ & =\lambda_{\max} {\bf y}^T{\bf y} \\ & \implies {\bf y}^T\Lambda {\bf y} \le \lambda_{\max} {\bf y}^T{\bf y} \tag{3}\end{align}

,所以

\begin{eqnarray}{\bf y}^T{\bf y} &= &{\bf v}^TQQ^T{\bf v} = {\bf v}^T{\bf v} \tag{4}\end{eqnarray}
\begin{eqnarray}{\bf y}^T\Lambda {\bf y} & \le & \lambda_{\max} {\bf y}^T{\bf y} \tag{5}\end{eqnarray}
{\bf v}^TH{\bf v} \le \lambda_{\max}{\bf v}^T{\bf v}

根据定义,所以

\begin{eqnarray}{\bf v}^TH{\bf v} & \le & \lambda_{\max} \tag{6}\end{eqnarray}

Condition Number of Hessian

任意可对角化矩阵的Condition Number定义如下:

\underset{i, j}{\max} \left| \frac{\lambda_i}{\lambda_j} \right|

line search

在使用line search确定学习率的梯度下降中,参数点可看做首先往梯度最陡峭方向的垂线方向移动一个步长,接着往次陡峭方向移动一个步长。比如2个参数的损失函数:

梯度下降与海森矩阵_海森矩阵_03
梯度下降与海森矩阵_海森矩阵_03

将上面的等高线还原为3d的爬山问题,则如下图所示:

梯度下降与海森矩阵_海森矩阵_04
梯度下降与海森矩阵_海森矩阵_04

3个参数:

梯度下降与海森矩阵_海森矩阵_05
梯度下降与海森矩阵_海森矩阵_05
梯度下降与海森矩阵_海森矩阵_06
梯度下降与海森矩阵_海森矩阵_06

N个参数:

梯度下降与海森矩阵_海森矩阵_07
梯度下降与海森矩阵_海森矩阵_07

步长(学习率\epsilon)是通过如下方式估计的。

根据泰勒级数

\begin{align*}f\left( x \right) & = \sum\limits_{n = 0}^\infty {\frac{{{f^{\left( n \right)}}\left( a \right)}}{{n!}}{{\left( {x - a} \right)}^n}} \\ & = f\left( a \right) + f'\left( a \right)\left( {x - a} \right) + \frac{{f''\left( a \right)}}{{2!}}{\left( {x - a} \right)^2} + \frac{{f'''\left( a \right)}}{{3!}}{\left( {x - a} \right)^3} + \cdots \end{align*}
\begin{align*}f(x) & = f(x^{(0)}) + (x-x^{(0)})^T g + \frac{1}{2} (x-x^{(0)})^T H (x-x^{(0)}) + \ldots \quad \text{其中 } g \text{ 为偏导数向量} \\f(x) & \approx f(x^{(0)}) + (x-x^{(0)})^T g + \frac{1}{2} (x-x^{(0)})^T H (x-x^{(0)}) \\f(x^{(0)} - \epsilon g) & \approx f(x^{(0)}) - \epsilon g^T g + \frac{1}{2} \epsilon^2 g^T H g \tag{7} \quad\ \text{令} x=x^{(0)} - \epsilon g,\epsilon \in(0,1)\\\end{align*}

求导,得到最佳学习率为:

\epsilon^{*} = \frac{g^T g}{g^T H g} \geqslant \frac{g^T g}{g^T g \lambda_{max}} = \frac{1}{\lambda_{max}} \quad \text{利用式(7) } g^T H g \leqslant g^T g \lambda_{\max}.\tag{8}

的最大特征值。于是海森矩阵决定了最佳学习率的下界。在使用最佳学习率的情况下,将式(8)代入式(7)有

\begin{split}f(x^{(0)} - \epsilon^{*} g) & \approx f(x^{(0)}) - \frac{1}{2} \epsilon^{*} g^T g \\\end{split}
梯度下降与海森矩阵_海森矩阵_08
梯度下降与海森矩阵_海森矩阵_08

梯度下降要么下降的很慢,要么步长太大跑得太远。

梯度下降与海森矩阵_其他_09
梯度下降与海森矩阵_其他_09

如同在一个狭长的峡谷中一样,梯度下降在两边的峭壁上反复碰撞,很少顺着峡谷往谷底走。

梯度下降与海森矩阵_其他_10
梯度下降与海森矩阵_其他_10

如果有种方法能让参数点在峭壁上采取较小步长,慢慢移动到谷底(而不是一下子撞到对面),然后快速顺流而下就好了。一阶梯度下降只考虑一阶梯度,不知道损失函数的曲率是如何变化的,也就是说不知道下一步会不会离开峭壁。解决方法之一是考虑了二阶梯度的牛顿法。

牛顿法

损失函数的泰勒展开近似,以及相应的导数近似为:

\begin{split} f(x) & \approx f(x_n) + f'(x_n)\Delta{x} + \frac{1}{2} f''(x_n)\Delta{x}^2 \\ \frac{ df(x)}{d\Delta{x}} & \approx f'(x_n)+ f''(x_n)\Delta{x} \\ \end{split}
\begin{split} f'(x_n)+ f''(x_n)\Delta{x} = 0 \\ \Delta{x} = -\frac{f'(x_n)}{f''(x_n)} \\ \end{split}

执行一次迭代:

\begin{split} x_{n+1} & = x_n + \Delta{x} \\ & = x_n -\frac{f'(x_n)}{f''(x_n)} \\ &=x_{n} -[H f(x_{n})]^{-1} f'(x_{n})\\ \end{split}
\begin{split} x^{'} = x - [H f(x)]^{-1} f'(x) \\ \end{split}

其中,学习率

\epsilon=[H f(x)]^{-1} f'(x)

学习率与曲率成反比,也就是说在曲率大的方向(垂直于峭壁)的学习率小,而在曲率小的方向(平行于峭壁)的学习率大。也就是是说此时的梯度下降在顺流而下的方向的学习率更大,也就更快收敛了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 鞍点
  • 对角化
  • 奇异值分解
  • Hessian 矩阵
  • Condition Number of Hessian
  • line search
  • 牛顿法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档