logo
BosonNLP Blog

当我们在谈深度学习时,到底在谈论什么(三)

Alt text

相信对机器学习有一定了解的朋友对正则化(Regularization)这个概念都不会陌生。可以这么说,机器学习中被讨论最广泛也可以说是最重要的一个问题,就是防止过拟合(Overfitting)

为什么这么说呢?因为通过增加模型复杂性来在训练数据上达到完美的拟合实在太过容易。如果仅希望在训练数据上得到输入\(x\)预期的输出\(y\),那么我们仅仅需要记住所有的训练数据\((x, y)\)就可以了。而对于机器学习,我们真正的关心的问题,是在那些没有见过的数据上,模型的表现如何,也就是模型的泛化能力。

至于正则化的方法,很多时候被大家简化理解为了“在目标函数上增加关于参数的\(\ell_1\)\(\ell_2\)范数”的简单表达,但对于为何需要增加范数约束,以及增加以后所产生的效果不甚明了。

我们这里通过一个最简单的Logistic regression的例子来看看增加范数约束的必要性。对于Logistic regression问题,通过给定的\(n\)个数据\(\{(x_i, y_i)\}^n_{i=1}\),其中\(y_i \in \{0, 1\}\),我们希望寻求到一个足够好的\(w\),使得\(\sigma(x_i)\)尽可能接近\(y_i\),其中\(\sigma(x)=\frac{1}{1+\exp(-w\cdot x)}\)就是我们前文神经网络常用的Sigmoid函数。我们可以将Sigmoid函数的输出解释为某个输出为1的概率,那么按照最大似然原则,需要求解如下优化问题:

$$ \arg \min_w -\sum_{i: y_i=1} \log \sigma(x_i, w) - \sum_{i: y_i=0} \log \sigma(-x_i, w). $$

假设我们求得某个\(w\),能够成功让所有\(y_i=1\)的正样本\(\sigma(x_i)>0.5\),而负样本输出\(\sigma(x_i)<0.5\),已经意味着我们可以通过该分类器完美对数据进行区分。但如果仔细查看我们的最优化问题可以发现,如果我们将\(w\)替换成\(2w\),则可以进一步降低目标函数值,我们可以通过不断放大\(w\)来进一步降低目标函数值。事实上,\(w\)\(c\cdot w\)所表达的是同一个分类器超平面(hyperplane),可以通过限制\(\|w\|_2=1\)使其收敛到唯一解。

上面的例子是数学上一类Inverse problem的特例。这其中最简单的当属线性方程组求解的问题。当我们已知其生成过程 \(y_i=w^Tx_i + \epsilon\),其中\(\epsilon \sim \mathcal{N}(0, \sigma^2)\)为独立同分布(i.i.d)的高斯随机噪声时,可以证明,采用\(\ell_2\)范数进行优化,是在最大似然意义下的理论最优解:

$$ \arg \min _w \|w^TX - y\|_2. $$

类似上述能够给出具体数学描述的生成过程,及其Inverse problem最优求解方法的问题还有很多。最近哥伦比亚大学John Wright教授在字典学习问题的突破(参见Complete Dictionary Recovery over the Sphere)的结果非常漂亮,堪称是这一类Inverse problem和正则化应用的典范。

Alt text

谈回深度学习,我们可以看到目前应用最广泛的两类正则化的方法,一类是通过给网络参数\(w\)增加\(\|w\|_p\)的范数(并且往往p=2):

$$ \arg \min_w \text{Cost}(f(x, w), y) + \lambda\|w\|_p, $$

另一类是采用由Hinton et. al所提出的Dropout方法进行正则化(参见Dropout: A Simple Way to Prevent Neural Networks from Overfitting)。并且这两类方法经常同时在训练神经网络时被采用。

范数正则化

这两种正则化方法在深度学习的应用,与其说是理论家的贡献,不如说是实践者的胜利。虽然通过添加范数的形式在传统凸优化中有大量可被证明正确性的应用,并且将这个想法使用于神经网络极为自然,但对于超过一层隐藏层的神经网络,范数所带来的优势还很难被严格证明。这里我提供几个非完全严格的“直观”解释:

  1. 在原目标函数的基础上增加\(\|w\|_2\),将原函数进行了一定程度的平滑化,这个可以从其梯度函数有所体现。
  2. 对于一类存在大量驻点(Stationary point,即梯度为0的点),增加\(\|w\|_2\)范数意味着将原本导数为零的区域,加入了先验知识进行区分(几何上,意味着原本一个平台的区域向0点方向倾斜),这样可以帮助优化算法至少收敛到一个局部最优解,而不是停留在一个鞍点上。 Alt text
  3. 通过限制参数\(w\)在0点附近,加快收敛,降低优化难度。回忆一下,对于一类常见激活函数\(f(\cdot)\),如Sigmoid,满足:单调有界。根据单调有界定理,对于任意小的\(\epsilon>0\),我们可以取得足够大的\(z_0\),使得\(f'(z)<\epsilon (z_0<z)\)。换句话说,对于该变量,我们可以找到一个足够大的区域\((z_0,\infty)\)使得其导数接近于0,这意味着通过梯度方法改进该变量会变得极其缓慢(回忆后向传播算法的更新),甚至受浮点精度等影响其收敛。那么,采用范数控制变量的大小在0附近,可以避免上述情况,从而在很大程度上可以让优化算法加快收敛。

Dropout正则化

Alt text

Dropout是另一类目前被广泛使用的正则化方法,其基本思路非常简单:在训练阶段,对于每个mini-batch随机抹去一定比例的神经元进行前向及后向传播更新。这种方法子啊Hinton et. al的论文中所给出的解释为:

This prevents units from co-adapting too much. This should make each hidden unit more robust and drive it towards creating useful features on its own without relying on other hidden units to correct its mistakes.

但由于深层神经网络的一大优势其实就在于对于特征的层级化表达,并且深层单元可以对浅层单元进行组合与复用。所以上述解释虽然乍听之下合理,但真实的可靠性存疑。上述论文中提到了另个解释,可能更为合理:通过控制每个单元的开关,我们潜在使用了\(2^N\)个不同的网络(\(N\)为采用Dropout的神经元数量),这样的模型相当于将\(2^N\)个不同的共享变量的网络在预测时进行几何平均,从而达到平滑的效果。

对于一类更特定的模型,Dropout有在理论上有进一步的论证。如果我们限制所研究的为广义线性模型(Generalized linear models),并且Dropout只在输入\(x\)变量上进行,那么通过对广义线性模型通过泰勒展开进行二次近似,可以得到

$$ \text{Reg}_{\text{dropout}}(w) = \frac{\delta}{2(1-\delta)}w^T\text{diag}(nI(w))w,$$

其中\(I(w)\)为参数\(w\)的Fisher information矩阵:

$$ I(w) = -\mathbb E\left[\triangledown^2 \log p(X|w)\right]. $$

那么,对于输入\(x\)进行Dropout,实际上就相当于首先将输入\(x\)采用\(\text{diag}(I(w))^{-1/2}\)进行归一化得到\(\bar w\),然后采用传统范数\(\|\bar w\|_2\)对参数进行正则化,从而建立起了采用Dropout与范数进行正则化的联系。具体的推导可以参见:Dropout Training as Adaptive Regularization

在下一次的分享中,我们给大家谈谈卷积网络(Convolutional network)的使用,欢迎关注。