序列模型相关问题
- 命名实体识别: 给一个句子,标记其中属于名称的单词。
- 语音识别: 语音信号到文字的转换
- 音乐生成: 给定开始的几个音符,生成一段音乐
- 情感分类: 给定一段文本,判断消极或者积极。
- 机器翻译: 给定一个语言的文本,翻译成另外一种语言
- 视频动作识别: 给定一段视频,识别人物动作
循环神经网络(RNN)
上述问题中,使用简单的二分类方法或者多分类方法已经比较难来解决,因此研究者们提出循环神经网络(Recurrent Neural Network, 或者RNN)。
RNN的运行机理在于,它不是将文本一次性地输入到模型中,而是每一层神经网络输入一个单词,通过这种方式,使RNN适用于任意长度的文本。
具体的公式:
a
<
t
>
=
g
(
W
a
[
a
<
t
−
1
>
,
x
<
t
>
]
+
b
a
)
y
^
<
t
>
=
g
(
W
y
a
<
t
>
+
b
y
)
a^{<t>} = g(W_a[a^{<t-1>}, x^{<t>}] + b_a) \\ \hat{y}^{<t>} = g(W_ya^{<t>} + b_y)
a<t>=g(Wa[a<t−1>,x<t>]+ba)y^<t>=g(Wya<t>+by)
反向传播中,基于 y ^ < t > \hat{y}^{<t>} y^<t>和 y < t > y^{<t>} y<t>的cross entropy,即
L < t > ( y ^ < t > , y < t > ) = − y < t > l o g y ^ < t > − ( 1 − y < t > ) l o g ( 1 − y ^ t ) l o s s = ∑ L < t > L^{<t>}(\hat{y}^{<t>, y^{<t>}}) = -y^{<t>}log\hat{y}^{<t>} - (1-y^{<t>})log(1- \hat{y}^{t}) \\ loss = \sum L^{<t>} L<t>(y^<t>,y<t>)=−y<t>logy^<t>−(1−y<t>)log(1−y^t)loss=∑L<t>
不同的RNN可以通过修改输入和输出,适用于不同的问题。例如命名实体识别,是单词与输出一对一的RNN模型;机器翻译问题,则是编码器和解码器模型。
GRU和LSTM
RNN存在梯度消失的风险。例如以下文本:
The cat, which already ate fish, was full.
The cats, which already ate fish, were full.
RNN在处理上述两处文本时,对单词的处理主要受周围单词的影响,而不能解决距离较远的语义依赖问题,即梯度消失的问题。相对而言,梯度爆炸的问题是好解决的,当梯度超过某个阈值,对梯度向量进行尺度缩小即可。
GRU和LSTM的使用就是为了解决上述梯度消失的问题。它们的核心思想都是要将隐藏单元(hidden unit)的输出结果能够尽可能地传递到更远的神经网络层。
RNN的每一层都会输出一维向量 h h h,相当于神经网络中隐藏层输出的 a a a,这一维向量在研究论文中通常被称为RNN的隐藏状态。GRU和LSTM都引入了门(gate)的概念。门的作用在于控制RNN上一层的隐藏状态的不同分量是否传递到下一层,通过这种方式,实现文本之间的远距离依赖。
词嵌入(Word Embedding)
- embedding等同于encoding,词嵌入是指对单词在低维空间进行编码。
- 词嵌入基于有监督学习方法,基于单词之间的位置关系构建标签数据,以此,构建softmax分类器或二分类器,通过梯度下降方法,对embedding和分类器参数同时进行梯度下降。
机器翻译与beam search
机器翻译通过encoder-decoder 模型完成,encoder将一种语言的文本转化为多维向量输入到decoder,decoder生成另一种语言对应的文本。
机器翻译要实现的是基于上述encoder产生的多维向量,计算一个概率值最大的句子。但是机器翻译必须逐单词输出,如果使用贪婪算法,可能得到并不是最优解。采用beam search 算法解决此问题,每次产生一个单词,保留前 n n n个最有可能的句子。
Blue score
基于正确句子中的n-gram数量,与生成句子的n-gram进行对比,计算一个比值。
注意力机制
注意力机制的本质就是对RNN每一层生成的隐藏状态,施加权重(权重总和为1),得到的结果输入到一个decoder模型中。