一. 概述
在之前介绍过的卷积神经网络计算中,前一个输出和后一个输出之间是没有关联关系的。但很多工作须要利用序列关系做解决。例如在自然语言解决中,须要了解一句话的时候,独自的只了解每一个词语是不行的,咱们须要解决的是这些词连接起来的整体序列。为了解决这一问题,就诞生了循环神经网络(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。