目录
前言
序列模型在语音识别、自然语言处理等有时序信号的领域中引起了变革性的改变。
例子:语音识别、音乐产生、情感判断、DNA序列分析、机器翻译、视频动作翻译、语句中识别关键字词
数学符号规定
假设要构造一个模型,能识别句子中的模型,现在标签用0表示非人名,1表示人名。
这个输入数据是9个单词组成的序列,用来索引这个序列的中间位置。
例如 代表Harry,
代表1。
训练样本 的序列中第t 个元素用
这个符号来表示。
如何表示一个句子里的单个的词?构造词典。可以通过one-hot编码来表示词典里的每个单词(如下图所示)。
one-hot向量,因为它只有一个值是1,其余值都是0,所以之前的例子会需要9个one-hot向量来表示这个句中的9个单词。
另外如果遇到一个不在词表中的单词,则需要创建一个新的标记,也就是Unknow Word的伪单词,用<UNK>作为标记。
循环神经网络模型
不用标准神经网络的原因:
(1)输入的X和输出的Y,长度很有可能不一样。
(2)无法共享文本在不同位置上学到的特征,无法利用时序特征。
希望构造的模型能够类似卷积神经网络,可以将部分图片里学到的内容快速推广到图片中的其他部分,同样的效果也能发生在序列数据中。
(1, 2 分别是循环神经网络的两种画法,每个时间步的参数是共享的)
当循环神经网络读到句中的第二个单词时,假设是 ,它不是仅用
就预测出
,它也会输入一些来自
的信息(
)。
预测 时,不仅要使用
的信息,还要使用来自
和
的信息(由
表示)。
其中激活值 通常设置为零向量。
但是这样传统的循环神经网络有一个显著缺点:只使用了这个序列之前的信息来做出预测,而后面的信息没有利用到。
举例:“Teddy Roosevelt was a great President.”,为了判断Teddy是否是人名的一部分,仅仅知道句中前两个词是完全不够的,还需要知道句中后部分的信息。
为了解决这个问题,有研究提出了双向循环神经网络(BRNN),后续再介绍。
前向传播
先计算激活值
,然后再计算
。
g表示激活函数,w是权重,b是偏差。 g1通常是tanh函数,g2通常是softmax函数。
RNN前向传播示意图:
简化计算公式表达(写成矩阵乘法的形式)
反向传播
训练循环神经网络同样是通过反向传播实现的。
前向传播中计算a<t>的 和
是属于共享参数,同样计算y<t>的
和
也是共享参数 。
为了计算反向传播,需要一个损失函数(loss function)。
一个元素的损失函数:(交叉熵损失函数)
整个序列的损失函数:(每个元素相加)
注明:反向传播只计算y<t>,不考虑中间的a<t>。
不同类型的循环神经网络
之前介绍的RNN结构是对于Tx和Ty相等的情形,但是另外还有很多Tx和Ty不相等的情形(比如电影情感分类)。
通常有多对多(many-to-many)、多对一(many-to-one)和一对多(one-to-many)的结构。
(一对多,则前面的输出继续作为后面的输入) (多对一,则前面的输入没有输出)