本文讨论的问题跟之前的单词向量学习类似,把其中的标量评分替换为softmax 或maxent分类器即可。训练过程也是通过后向反馈来完成的。
深度学习中比较有趣的是会学习输入的特征,当然,这需要借助于大规模文本数据集中的无监督预训练。其中比较有代表性的系统有:
POS: (Toutanova et al. 2003),NER: (Ando & Zhang 2005)
数据集来自Wikipedia和Reuters,词窗大小为11,隐含层有100个节点,单词量为130,000的词嵌入训练耗时7周,然后用于有监督学习
其中 C & W 2011 是基于无监督的预训练和有监督的神经网络模型。
接下来介绍信息共享。为了真正实现人工智能,能够泛化到新任务中是至关重要的。深层结构能够学到比较好的中间表示,这些中间表示可以用于多个任务中。
为了将多个数据源融合起来,可以借助于共享嵌入来实现。其中涉及到关联性学习,多个信息源,多种关系,符号(比如单词,维基百科的记录)共享。共享嵌入可以跨数据源传递信息,比如 WordNet, XWN,Wikipedia,FreeBase等等。
半监督学习有助于基于少量有标签数据来学习模型。半监督学习中有一个假设: 可以利用 P(x) 的共享结构来更精确地计算 P(c|x) 。
自编码对维度大小固定的输入效果比较好。自编码是多层的神经网络,其中output = input 并且 Reconstruction=decoder(encoder(input))。
特别的,PCA是一种线性流形,并且这种方法可以看作线性自编码。
流形学习示例:
自编码通过改变激活函数也可以类似于非线性PCA。
在自编码中,最小化重构误差能够迫使相似输入的隐含表示嵌入到流形中。
下面介绍一些自编码的变体。离散输入情形:可以利用交叉熵或对数似然函数形式的重构标准,类似于MLPs中目标离散的情形。为了防止自编码在隐含层中各个单元学到一致的表示,学者们提出了以下几种trick。
1 欠完备表示法,比如PCA,隐含层中的单元个数取得相对输入少一些。
2 稀疏性,将隐含层部分激活值限定在0或接近0 [Goodfellow et al 2009]
3 去噪法,先对输入加入噪声,然后利用污染后的输入预测真实输入[ Vincent et al 2008]
4 压缩编码法,迫使编码具有较小的导数 [Rifai et al 2011]
稀疏自编码在图像编码中应用比较广泛,比如
自编码可以堆叠起来,进而得到抽象层次更高的非线性表示 (Bengio et al NIPS’2006)。如下:
它的学习方式是逐层式无监督学习。具体过程如下:
对于分类问题,最后需要有监督的微调。
最后来说明下为什么无监督预训练有效,这主要来源于两方面的假设。
正则性假设:对于 P(x) 效果好的表示同样对 P(y|x) 表示效果也好。
优化方面的假设: 无监督预训练可以为有监督训练提供比较好的初始值,使得初始值距离效果更好的局部最小值更近一些。