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)的使用,欢迎关注。


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

后向传播 上一次的分享我们提到了神经网络的几个基本概念,其中提到了随机梯度下降(SGD)算法是神经网络学习(或者更通用的,一般性参数优化问题)的主流方法。概念上,神经网络的学习非常简单,可以被归纳为下面的步骤:(a) 构造神经网络结构(选择层数、激活函数等);(b) 初始化构造出的神经网络参数\(w\);(c) 对于给定的训练样本\((x, y)\)与当前的\(w\),计算梯度\(\triangledown w\);(d) 通过(随机)梯度下降算法更新\(w\)。例如,不考虑任何正则化因子情况的最简单参数更新为 $$w = w - \eta\triangledown w.$$ 神经网络的初学者往往会发现,上述四个步骤当中,对于给定样本\((x,y)\),计算其梯度是最不直观的一个步骤。本文我们玻森(bosonnlp.com ...if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) { var align = "center", indent = "0em", linebreak = "false"; if (false) { align = (screen.width

阅读全文…
当我们在谈深度学习时,到底在谈论什么(一)

深度学习最近两年在音频分析,视频分析,游戏博弈等问题上取得了巨大的成果。由于微软,谷歌等科技巨头的推动及应用上的可见突破,使得深度学习成为目前学术界和工业界的超热门话题。包括国内很多公司也乐见其成,适时宣布自己的产品或算法也拥抱了深度学习。不过对于具体如何使用,达到了什么效果等问题讳莫如深。 事实上,关于深度学习的大量研究成果在上世纪已经完成,包括卷积神经网络(CNN)、长短时记忆网络(LSTM),多层网络的表达能力等。宣称自己在使用某个算法工具其实并不具备天然的正义性,如何能将工具用好,解决关键场景才是我们应该关心的问题。 为提升对非结构化数据的处理,玻森(bosonnlp.com)内部也在开展深度学习的讨论。接下来的一段时间,我们将不定期更新深度学习的讨论notes。 我们不谈情怀,不讨论人工智能是否要统治人类,也不论奇点是否临近。我们就谈点落地的深度学习基础数学理论,及背后的几何直观。世界太大,认知有限,这点上我们遵从维特根斯坦的观点,“凡能够说的,都能够说清楚;凡不能谈论的,就应该保持沉默”。 什么是感知机 人类大脑的神经系统相当复杂,其具体的工作机制至今仍是前沿的生物课题。在1957年时由 Cornell 大学的学者 Frank Rosenblatt 博士所提出的感知机(Perceptron)模型可以认为是对人类神经系统的一个高度简化概括 ...

阅读全文…
一行命令让ElasticSearch支持中文分词搜索

相信大家在开发博客,在线商城的时候会涉及到搜索功能。而近几年火起来的 ElasticSearch(ES)凭借其稳定、可靠、快速的实时搜索普遍受到大家的好评,连 GitHub、SoundCloud 也都将 ES 作为其核心搜索组件。 但是 ES 本身对中文分词和搜索比较局限。因为内置的分析器在处理中文分词时,只有两种方式:一种是单字(unigram)形式,即简单粗暴的将中文的每一个汉字作为一个词(token)分开;另一种是两字(bigram)的,也就是任意相邻的两个汉字作为一个词分开。这两种方式都不能很好的满足现在的中文分词需求,进而影响了搜索结果。 举个例子: 假设我们的 index 里面存储了3篇 documents 如下: id content 1 美称中国武器商很神秘 花巨资海外参展却一言不发 2 在第一界国际锦标赛中 国家代表李雷勇夺冠军 3 国武公司近日上市 Case 1:查询 ...

阅读全文…
这一次,我赌AlphaGo胜

相信大家对一月底《Nature》杂志的封面文章,Google DeepMind团队的AlphaGo程序战胜围棋职业选手樊麾的新闻还记忆犹新。从下周三(3月9日)开始,AlphaGo与传奇棋手李世石的比赛将于韩国首尔拉开帷幕。这一次,我赌AlphaGo胜。 在《Nature》杂志刊登出AlphaGo程序论文《Mastering the Game of Go with Deep Neural Networks and Tree Search》后的第二天,玻森数据内部做了一个技术讨论,分析AlphaGo的实现细节及该成果的影响。下对讨论内容作一个简要总结。一家之言,作为与李世石这场巅峰之战的暖场,供对人工智能或围棋有兴趣的朋友参考。 虽然该新闻出来后网上产生了各种质疑,但我们认为AlphaGo在围棋AI上的跨越式突破无可置疑,无愧于一个里程碑式的结果。 不论是从博弈算法,还是深度学习,该论文没有理论上的突破。里面所用到的三大算法:基于卷积神经网络(Convolutional Neural Network, CNN)的预测学习在2008年就被提出;基于模特卡罗树搜索(Monte-Carlo ...

阅读全文…
  • 1
  • 2