一. 概述
在之前介绍过的卷积神经网络计算中,前一个输出和后一个输出之间是没有关联关系的。但很多工作须要利用序列关系做解决。例如在自然语言解决中,须要了解一句话的时候,独自的只了解每一个词语是不行的,咱们须要解决的是这些词连接起来的整体序列。为了解决这一问题,就诞生了循环神经网络(Recurrent Neural Network,RNN)。
二. 语言模型
首先回顾一下之前分享过的语言模型内容,语言模型(Language model)是自然语言解决的重要技术。自然语言解决中最常见的数据是文本数据。咱们能够把一段自然语言文本看作一段离散的工夫序列。假如一段长度为T的文本中的词顺次为w1,w2,...,wT,那么在离散的工夫序列中,wt(1≤t≤T)可看作在工夫步(time step)t的输入或标签。给定一个长度为T的词的序列w1, w2,...,wT,语言模型将计算该序列的概率:
P(w1, w2,...,wT)
公式1:语言模型表达式
语言模型可用于晋升机器翻译的性能。如果对英文“you go first”逐词翻 译成中文的话,可能失去“你走先”“你先走”等排列形式的文本序列。如果语言模型判断出“你先走”的概率大于其余排列形式的文本序列的概率,咱们就能够把“you go first”翻译成“你先走”。
既然语言模型很有用,那该如何计算它呢?假如序列w1, w2,...,wT中的每个词是顺次生成的,咱们有:
P(w1, w2, . . . , wT )=∏ T t=1 P(wt | w1, . . . , wt−1).
公式2:语言模型展开式
例如,一段含有4个词的文本序列的概率 P(w1, w2, w3, w4) = P(w1)P(w2 | w1)P(w3 | w1, w2)P(w4 | w1, w2, w3). 为了计算语言模型,咱们须要计算词的概率,以及一个词在给定前几个词的状况下的条件概率,即语言模型参数。设训练数据集为一个大型文本语料库,如维基百科的所有条目。词的概率能够通 过该词在训练数据集中的绝对词频来计算。例如,P(w1)能够计算为w1在训练数据集中的词频(词呈现的次数)与训练数据集的总词数之比。因而,依据条件概率定义,一个词在给定前几个词的状况下的条件概率也能够通过训练数据集中的绝对词频计算。例如,P(w2|w1)能够计算为w1,w2两词相邻的频率与w1词频的⽐值,因为该比值即P(w1,w2)与P(w1)之比;而P(w3|w1,w2)同理能够计算为w1、w2和w3这3个词相邻的频率与w1和w2这2个词相邻的频率的比值。以此类推。
当序列⻓度减少时,计算和存储多个词独特呈现的概率的复杂度会呈指数级减少。n元语法通过马尔可夫假如(尽管并不一定成立)简化了语言模型的计算。这里的马尔可夫假如是指一个词的呈现只与后面n个词相干,即n阶马尔可夫链(Markov chain of order )。如果n = 1,那么有P(w3 | w1, w2) = P(w3 | w2)。如果基于n-1阶马尔可夫链,咱们能够将语言模型改写为:
P(w1,w2,...,wT)≈∏T t=1 P(wt|wt-(n-1),...,wt-1).
公式3:马尔可夫语言模型表达式
以上也叫n元语法(n-grams)。它是基于n−1阶马尔可夫链的概率语言模型。当n别离为1、2和3时,咱们将其别离称作一元语法(unigram)、二元语法(bigram)和三元语法(trigram)。例如,长度为4的序列w1, w2, w3, w4在一元语法、二元语法和三元语法中的概率别离为:
P(w1, w2, w3, w4) = P(w1)P(w2)P(w3)P(w4),
P(w1, w2, w3, w4) = P(w1)P(w2 | w1)P(w3 | w2)P(w4 | w3),
P(w1, w2, w3, w4) = P(w1)P(w2 | w1)P(w3 | w1, w2)P(w4 | w2, w3).
当n较小时,n元语法往往并不精确。例如,在一元语法中,由三个词组成的句子“你走先”和“你先走”的概率是一样的。然而,当n较大时,n元语法须要计算并存储大量的词频和多词相邻频率。
三. 循环神经网络
下面介绍的n元语法中,工夫步t的词wt基于后面所有词的条件概率只思考了最近工夫步的n-1个词。如果要思考比t-(n-1)更早工夫步的词对wt的可能影响,咱们须要增大n。但这样模型参数的数量将随之呈指数级增长。
循环神经网络并非刚性地记忆所有固定长度的序列,而是通过暗藏状态来存储之前工夫步的信息。首先咱们介绍下多层感知机,而后形容如何增加暗藏状态来将它变成循环神经网络。
image.png
图1:多层感知机构造
思考一个含单暗藏层的多层感知机。给定样本数为n输⼊个数(特色数或特征向量维度)为d的小批量数据样本X∈Rn×d。设暗藏层的激活函数为,那么暗藏层的输入H ∈ R n×h计算为:
image.png
图2:根底单层网络结构
H=(XWxh+bh)
公式4:rnn暗藏层表达式
其中暗藏层权重参数Wxh∈Rd×h,暗藏层偏差参数bh∈R1×h,h为暗藏单元个数。上式相加的两项形态不同,因而将依照播送机制相加。把暗藏变量H作为输入层的输⼊,且设输入个数为q(如分类问题中的类别数),输入层的输入为 :
O=HWhq+bq
公式5:rnn输入层表达式
其中输入变量O∈Rn×q,输入层权重参数Whq∈Rh×q , 输入层偏差参数bq ∈R1×q。如果是分类问题,咱们能够应用softmax(O)来计算输入类别的概率分布。
当初咱们思考输⼊数据存在工夫相关性的状况。假如Xt∈Rn×d是序列中工夫步t的小批量输⼊,Ht∈Rn×h是该工夫步的暗藏变量。与多层感知机不同的是,这里咱们保留上一时间步的暗藏变量Ht-1,并引⼊一个新的权重参数Whh∈ Rh×h,该参数用来形容在以后工夫步如何应用上一时间步的暗藏变量。具体来说,工夫步t的暗藏变量的计算由以后工夫步的输⼊和上一时间步的暗藏变量独特决定:
Ht=(XtWxh+Ht-1Whh+bh).
公式6:rnn表达式
与多层感知机相比,咱们在这里增加了Ht-1Whh一项。由上式中相邻工夫步的暗藏变量Ht和Ht-1之间的关系可知,这里的暗藏变量可能捕获截至以后工夫步的序列的历史信息,就像是神经网络以后工夫步的状态或记忆一样。因而,该暗藏变量也称为暗藏状态。因为暗藏状态在以后工夫步的定义应用了上一时间步的暗藏状态,上式的计算是循环的。应用循环计算的网络即循环神经网络(recurrent neural network)。
循环神经网络有很多种不同的构造方法。含上式所定义的暗藏状态的循环神经网络是极为常见的一种。本次内容中的循环神经网络均基于上式中暗藏状态的循环计算。在工夫步t输入层的输入和多层感知机中的计算相似:
image.png
图3:t时刻示意图
通过图1的示意图,咱们能够很分明的看到上一时刻的暗藏层是如何影响以后时刻的暗藏层的,还能够将图1进行开展,循环神经网络还能够依照工夫线规定开展示意。
image.png
图4:RNN工夫线开展图
Ot=HtWhq+bq.
公式7:rnn第t步输入表达式
循环神经网络的参数包含暗藏层的权重Wxh∈Rd×h、Whh∈Rh×h和偏差bh ∈R1×h,以及输入层的权重Whq∈Rh×q和偏差bq∈R1×q。值得一提的是,即使在不同工夫步,循环神经网络也始终应用这些模型参数。因而,循环神经网络模型参数的数量不随工夫步的减少而增长。
image.png
图5:rnn模型图
图1展现了循环神经网络在3个相邻工夫步的计算逻辑。在工夫步t,暗藏状态的计算能够看成是将输⼊Xt和前一时间步暗藏状态Ht-1连结后输⼊一个激活函数为的全连贯层。该全连贯层的输入就是以后工夫步的暗藏状态Ht,且模型参数为Wxh与Whh的连结,偏差为bh。以后工夫步t的暗藏状态Ht将参加下一个工夫步t+1的暗藏状态Ht+1的计算,并输⼊到以后工夫步的全连贯输入层。
四. 总结
本次的分享内容次要就是以上的两个局部,首先咱们从语言模型开始切入,剖析到n元语法的局限性,就是对前后时刻的不准确性和计算量大的问题。前面局部咱们开始从根底开展RNN(循环神经网络),剖析在t时刻状态受到t-1时刻的影响和对t+1时刻的影响,依照工夫线形成的RNN。