错觉
- 深度神经网络“容易收敛到局部最优”,很可能是一种想象,实际情况是,我们可能从来没有找到过“局部最优”,更别说全局最优了。
- 很多人都有一种看法,就是“局部最优是神经网络优化的主要难点”。这来源于一维优化问题的直观想象。在单变量的情形下,优化问题最直观的困难就是有很多局部极值,如:
- 人们直观的想象,高维的时候这样的局部极值会更多,指数级的增加,于是优化到全局最优就更难了。然而单变量到多变量一个重要差异是,单变量的时候,Hessian 矩阵只有一个特征值,于是无论这个特征值的符号正负,一个临界点都是局部极值。但是在多变量的时候,Hessian 有多个不同的特征值,这时候各个特征值就可能会有更复杂的分布,如有正有负的不定型和有多个退化特征值(零特征值)的半定型。在后两种情况下,是很难找到局部极值的,更别说全局最优了。
真相
-
神经网络的训练的困难主要是鞍点的问题。在实际中,我们很可能也从来没有真的遇到过局部极值。
-
Bengio 组这篇文章 Eigenvalues of the Hessian in Deep Learning(https://arxiv.org/abs/1611.07476)里面的实验研究给出以下的结论:
- Training stops at a point that has a small gradient. The norm of the gradient is not zero, therefore it does not, technically speaking, converge to a critical point.
- There are still negative eigenvalues even when they are small in magnitude.
-
另一方面,一个好消息是,即使有局部极值,具有较差的 loss 的局部极值的吸引域也是很小的.Towards Understanding Generalization of Deep Learning: Perspective of Loss Landscapes (https://arxiv.org/abs/1706.10239)
-
所以,很可能我们实际上是在“什么也没找到”的情况下就停止了训练,然后拿到测试集上试试,“咦,效果还不错”。
-
补充说明,这些都是实验研究结果。理论方面,各种假设下,深度神经网络的 Landscape 的鞍点数目指数增加,而具有较差 loss 的局部极值非常少。
海森矩阵与特征值
-
求一阶导,意义不用多说,共有n个
f ′ ( x ) = [ δ f δ x 1 , δ f δ x 2 , ⋯ , δ f δ x n ] f^{\prime}(x)=\left[\frac{\delta f}{\delta x_{1}}, \frac{\delta f}{\delta x_{2}}, \cdots, \frac{\delta f}{\delta x_{n}}\right] f′(x)=[δx1δf,δx2δf,⋯,δxnδf] -
求二阶导得到了一个矩阵(n x n)。这是因为我们就想看「每个一阶导」(共n个)是如何受其它变量(n个)影响的,因此会有(n x n)个量。然后故意把它写成了海森矩阵的形式。如下:
H = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ∂ 2 f ∂ x 2 ∂ x 1 ∂ 2 f ∂ x 2 2 ⋯ ∂ 2 f ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ∂ 2 f ∂ x n ∂ x 2 ⋯ ∂ 2 f ∂ x n 2 ] H=\left[\begin{array}{cccc} \frac{\partial^{2} f}{\partial x_{1}^{2}} & \frac{\partial^{2} f}{\partial x_{1} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{1} \partial x_{n}} \\ \frac{\partial^{2} f}{\partial x_{2} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{2}^{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{2} \partial x_{n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^{2} f}{\partial x_{n} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{n} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{n}^{2}} \end{array}\right] H=⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤ -
用处:海森矩阵相当于二阶导,可用于判断函数在某个点 x = ( x 1 , x 2 , . . . , x n ) \textbf{x}=(x_1, x_2, ..., x_n) x=(x1,x2,...,xn)变化率的变化率,即函数在某个点的凸性
- H > 0 H > 0 H>0 ,那么对于一个二次函数,它下严格凸,像碗, f ′ ( x ) = 0 f'(x)=0 f′(x)=0的点有全局极小值
- H > = 0 H >= 0 H>=0,函数下凸, f ′ ( x ) = 0 f'(x)=0 f′(x)=0的点有局部极小值
- H < 0 H < 0 H<0,那么对于一个二次函数,它上严格凸,像倒碗, f ′ ( x ) = 0 f'(x)=0 f′(x)=0的点有全局极大值
- H < = 0 H <= 0 H<=0,函数上凸, f ′ ( x ) = 0 f'(x)=0 f′(x)=0的点有局部极大值
- H H H 有正有负,鞍点, f ′ ( x ) = 0 f'(x)=0 f′(x)=0的点,既是极小值也是极大值