机器学习中使用的神经网络第四讲
Geoffery Hinton教授的Neuron Networks for Machine Learning的第四讲主要介绍如何使用back propagation算法来学习到词汇的特征表示、Neuron-probabilistic language models和处理大规模输出的方法。
Learning to predict the next word
接下来的几小节主要介绍如何使用back propagation算法来学习到词汇的特征表示。我们从一个很简单的例子开始,介绍使用back propagation算法来将词汇间的相关信息转换成特征向量。
下图给出了一个家庭的树状图,我们要做的就是让神经网络去理解树状图中的信息,将其中的信息翻译成一个个命题,如下面第二张图所示。
现在的关系学习任务是从类似上图中的由树状图中得到的三元关系得到规律性的东西,一个典型的表示方法如下图红色字体所示。要知道,从树状图中搜索这种典型的规律是一个很困难的事情,因为搜索空间是离散的。一个与众不同的方法是使用神经网络来搜索权值的连续实数域,从而尝试从树状图中提取到类似的关系表示。
如果神经网络能够根据三元组信息的前两个信息元素预测出第三个信息元素,我们就说神经网络能从树状图中提取到信息。下图是神经网络的一个示意图,底部为输入,顶部为输出。在底部,我们输入一个人名p1和一种关系R;在顶部,输出则是神经网络找到的与p1有着关系R的人名p2。
现在我们需要做的是对信息以一种中性(不加感情色彩)的方式进行编码。因为前面给出的家庭关系树状图例子中有24个人,所以,在流程图的底部会产生24个neuron,每一个person one对应24个人中的一个。类似的这里应该有12个neuron对应着12个不同的关系,对于给定的person one和relationship神经网络应该有唯一的输出。当然,比如说图中没有给出Christopher的mother,那神经网络给出的答案肯定是错的。
这里截图一下视频中的小测试,我认为还是值得思考的。
我们使用类似小测试中的编码方法,最大程度的减少因编码问题而造成的人物之间的相似度信息,这样神经网络应该就不会得到由不当编码而暗含的关系信息(we’re not cheating by giving the network information about who’s like who)。就是说,对于神经网络而言,人物编码只是一组没有任何意义的标志。
在神经网络的第二层,我们已经得到了the local encoding of person one,然后将其与24个neuron的一个子集联系起来,在这个例子中这个集合的大小为6(一个人最多有6个关系),神经网络需要针对这6个neuron对person one进行re-represent。下图是神经网络得到的信息(具体如何得来的后面课程会介绍),用24维的二元向量来表示每一个人,下面给出了6个unit,上面一行代表英国人,下面一行代表意大利人。仔细观察发现,右侧第一个的第一行全为positive(黑色),第二行全为negative(白色),说明学习到了这十二个人全是英国人;右侧第二个学习到了辈分,辈分最高的人全对应中等大小的方块,辈分第二的人全对应的是最小的方块,辈分最小的人全对应最大的方块;左侧最后一个学习到了分支,标记为negative(白色)的人全都在树状图的有分支,标记为positive(黑色)的人全都在树状图的左分支。(这里是按照应该人一组说明的,对意大利人是一样的)可以看到,神经网络自动的从树状图中挖掘到了一些隐含的信息。
下面两张图告诉我们神经网络学到了什么。
对于大规模问题,下图给出了建议。
这一小节不太懂,希望学过的同学分享一下你们的理解。
A brief diversion into cognitive science
这一小节简单的介绍一点认知科学(cognitive science)。在计算机科学中,关于概念的特征向量表述与该概念关系到其他概念时的表述之间的关系,已经持续争论了近百年。针对家庭关系树的学习算法在这个争论的方面有一些值得讨论的东西。
在认知科学中存在两种对立的观点:特征理论(feature theory)认为概念时语义特征的集合,而结构主义理论(structualist theory)认为概念的意义依赖于其与其他概念的关系。
Hinton教授认为两种观点都是错的,因为两种观点根本就不是对立的。
Another diversion: The softmax output function
这一小节介绍soft max output function。该函数将神经网络的输出加到一起,用以表示互相排斥的选择的概率分布。
先说点题外的东西。对于训练神经网络或者线性神经元来说,平方误差是一个明智的选择,但其也有一些缺点。例如,如果理想输出为1,而实际输出为0.00000001,对于逻辑回归单元来说梯度特别小,需要很长很长的时间才能修正参数。再或者,如果我们要用互相排斥的类别来标记输入,不同输出的概率之和应为1,单我们没有提供给网络这一信息,那么当出现标记为A的概率为$\frac{1}{3}$,标记为B的概率为$\frac{1}{3}$这样的结果(输出只有A和B两种可能)时是比较可怕的(不可信的)。
那么是否存在更好地损失函数呢?答案是肯定的,该函数可以让输出表示不同输出选择的概率分布。这个函数就是soft max output function。Softmax group是非局部、非线性的,其输出$y_i$不仅仅来自于$z_i$,而是来自所有互相排斥的$z_j$。下面给出了$y_i$的公式及其对$z_i$的偏导。
下图给出了损失函数及其对$z_i$的偏导。
Neuron-probabilistic language models
这一小节给出几个用特征向量来表征词汇的实例。首先看其在语音识别(speech recognition)中的应用。在语音识别中,我们很难从有噪声的语音中完美得分辨出音位(phoneme),原声输入总是不够好。而我们人类很擅长利用对说话方式的理解来听出正确的词汇,这就是说语音识别者通常需要知道接下来可能会出现哪些词汇不会出现哪些词汇。
这里有一个预测接来下可能会出现的几个词的频率的一个方法,称为三元模型方法(trigram method),下图给出了步骤。
三元模型方法也存在一些缺点,其无法理解一些词汇间的相似性,如下图所示。为克服这一缺陷,我们需要利用前面词汇的语法语音特征向量来预测下一个词汇的特征。
下图是Bengio教授预测下一个词汇的神经网络。
下图给出了大规模输出面临的问题,在下一小节中我们会讨论大规模输出的问题。
Ways to deal with the large number of possible outputs
这一小节讨论如果真的需要100,000个词汇的概率时,我们避免真的使用100,000个输出单元的几个方法。下图给出了a serial architecture,输入在原来的基础上加上了candidate,表示可能的可能出现的词汇。多次运用神经网络计算出每一个候选词汇的logit score之后,再使用softmax函数得到每一个词汇的可能性。由词汇可能值和目标词汇可能值的差值,我们可以得到交叉熵损失导数(cross-entropy error derivatives),而该导数可以提高正确选项的分数而降低high-scoring rivals的分数。如果仅使用由其它预测器(predictor)得来一个候选词汇的小集合,那我们就可以节省很多时间。
这里介绍了得到候选词汇的二叉树。我们将所有的词汇放到二叉树的叶子节点上,然后我们利用前面词汇组成的文本产生一个预测向量v。我们拿从二叉树的每一个节点学习到的向量与预测向量作比较,做比较的方法是taking a scale of product of the, the prediction vector and the vector that we’ve learned for the node of the tree(不知道啥意思)。然后引入logistics函数,计算出下图中二叉树中每一个路径的权值(其中$\sigma$是参数)。
下图中的红线路径上的节点是我们在学习中需要考虑的,个中缘由没搞明白。
下面还给出了学习词汇的特征向量的一种简单方法,该方法是由Collobert和Weston两人提出的。例如,给出一个长度为11的文本,前五个词汇和后五个词汇输入正确,中间的词汇可能输入正确的词汇也可能随机的输入一个词汇。在神经网络得到训练之后,当中间的词汇输入正确时,输出结果时high的;当中间的词汇输入时一个随机的词汇时,输出结果是low的。将词汇映射到特征向量,然后去判断文本中的某一个词汇是否合理。
下面介绍了在二维平面中可视化。
下面两张图给出了2500个最常用词汇可视化后的一部分,从中可以看出哪些词会经常出现在一起等规律性的东西。