【启航期 85 折票价倒计时 4 天】3月13日晚,英特尔以153 亿美元的价格强势收购自动驾驶汽车摄像头供应商Mobileye,消息传出震惊业界。这是英特尔自动驾驶部门成立后的第一笔重大收购,智能时代英特尔重拳出击。3月27日,英特尔与新智元共同在北京举办 AI 技术峰会,届时英特尔中国研究院院长宋继强将登台阐释 PC 时代的王者如何拥抱智能时代。近距离了解进击 AI 的英特尔,点击“阅读原文”抢票。 【新智元导读】这篇文章是一个教程,介绍如何用 RNN 来实现一个语言模型,内容涵盖RNN的典型应用,RNN的训练和拓展等。 语言模型是在自然语言处理处理中非常常见的一个模型。它在语音识别,机器翻译等任务中都有应用。它解决的问题之一就是给定一个字符串,用了判断这是一个“合理”句子的概率。比如在语音识别中,声学模型会把声学信号转换成音素【当然也是概率而不是绝对的】,但是同音的词很多,而组成的句子就更多了。 语言模型需要解决的问题是:给定一个句子,计算它出现的可能性(概率)。比如“今天天气不错”的概率就比“今天天启不错”的概率大。最常见的语言模型就是n-gram语言模型,它是在假设当前的词只依赖于之前的n-1个词,比如二元语法(bi-gram)它假设当前词只依赖于之前的词,因此一个句子的概率P(w1w2…wn)=P(w1)P(w2|w1)…P(wn|wn?1)。我们可以使用训练语料来估计: 当然还有很多问题,比如没有在训练语料出现的词对概率就是零了,这需要通过平滑等方法解决。有兴趣的读者参考N-gram wiki(https://en.wikipedia.org/wiki/N-gram)。 什么是RNN? RNN的特点是利用序列的信息。之前我们介绍的神经网络假设所有的输入是相互独立的。但是对于许多任务来说这不是一个好的假设。如果你想预测一个句子的下一个词,知道之前的词是有帮助的。RNN被成为递归的(recurrent)原因就是它会对一个序列的每一个元素执行同样的操作,并且之后的输出依赖于之前的计算。另外一种看待RNN的方法是可以认为它有一些“记忆”能捕获之前计算过的一些信息。理论上RNN能够利用任意长序列的信息,但是实际中它能记忆的长度是有限的。 下图是一个典型的RNN的样子:
上图显示了怎么把一个RNN展开成一个完整的网络。比如我们考虑一个包含5个词的句子,我们可以把它展开成5层的神经网络,每个词是一层。RNN的计算公式如下: xt是t时刻的输入。例如,x1是句子可以是句子第二个【下标从0开始】词的one-hot表示。 注:one-hot表示简单解释是:假设有3000个词,我们可以给他们从0到2999的一个编号,每个词对应的位置为1,j2直播,其它为0。比如“你好”这个词,假设它的编号是2,那么“你好”的one-hot表示为 (0,0,1,0,….,0)T,相对于word embedding的低维“稠密”表示方法,one-hot是一种高维稀疏的表示方法。它的缺点是如果用这个向量来计算相似度,如果两个词相同,距离是0,否则就是1,因此它不能capture同义词这样的特征。有兴趣的读者可以参考: 斯坦福cs224d的slides() st 是t时刻的隐状态。它是网络的“记忆”。 st的计算依赖于前一个时刻的状态和当前时刻的输入: st=f(Uxt+Wst?1)。函数f通常是诸如tanh或者ReLU的非线性函数。s?1,这是用来计算第一个隐状态,通常我们可以初始化成0。 ot是t时刻的输出。比如我们想预测的句子的下一个词,那么它可以是生成每一个词的概率【比如生成3000个词中的一个】,那么我们可以把它定义为softmax这样的函数,因为它加起来等于1。ot=softmax(Vst) 有一些事情值得注意: 你可以把 st 看成是网络的“记忆”。 st 捕获了从开始到前一个时刻的所有(感兴趣)的信息。输出 ot 只基于当前时刻的记忆。之前也提过,实际应用中 st 很难记住很久以前的信息。 和传统的深度神经网络不同,这些传统的网络每层使用不同的参数,RNN的参数(上文的U, V, W)是在所有时刻共享(一样)的。这反映这样一个事实:我们每一步都在执行同样的操作,只不过输入不同而已。这种结构极大的减少了我们需要学习的参数【同时也让信息得以共享,是的训练变得可能】 (责任编辑:本港台直播) |