1.1 为什么选择序列模型
序列模型的应用
- 语音识别:将输入的语音信号直接输出相应的语音文本信息。无论是语音信号还是文本信息均是序列数据。
- 音乐生成:生成音乐乐谱。只有输出的音乐乐谱是序列数据,输入可以是空或者一个整数。
- 情感分类:将输入的评论句子转换为相应的等级或评分。输入是一个序列,输出则是一个单独的类别。
- DNA序列分析:找到输入的DNA序列的蛋白质表达的子序列。
- 机器翻译:两种不同语言之间的想换转换。输入和输出均为序列数据。
- 视频行为识别:识别输入的视频帧序列中的人物行为。
- 命名实体识别:从输入的句子中识别实体的名字。
1.2 数学符号
符号含义
- x<t>x<t> 表示输入 x 中的第 t 个符号(单词)
- y<t>y<t> 表示输出 y 中的第 t 个符号(单词)
- x<t>(i)x(i)<t> 表示第 i 个输入样本中的第 t 个符号(单词)
- y<t>(i)y(i)<t> 表示第 i 个输出样本中的第 t 个符号(单词)
- TxTx 表示输入 x 的长度
- TyTy 表示处处 y 的长度
字典编码
- 利用一个字(词)典向量,通常有3-5万个字(词)。
- 可以利用one-hot编码,指出输入的序列中每个单词的向量
- 与字典向量大小一致
- 是单词的索引位置1,其他位置0
1.3 循环神经网络模型
传统神经网络
试想我们如果将输入拆成每个字的 One-Hot 编码输入传统的深度神经网络中,经过一些隐藏层的计算得到输出 Y。
问题:
- 输入和输出数据在不同的例子中可以有不同的长度;
- 不能共享从文本不同位置所学习到的特征
- 参数数量过多
循环神经网络
循环神经网络,从左到右一个字计算一步,每一步的计算不仅来自这一步的输入,也来自上一步的激活函数值。
- 最左侧第一层假设了一个来自第零层的激活值向量(零向量或随机向量)
- 有的研究论文上将循环神经网络的结构写成右边的形式,其和左边的形式是一致的。
循环神经网络是从左到右扫描数据的,同时共享每个时间步的参数。
- Wax 管理从输入x<t>x<t>到隐藏层的连接
- Waa 管理激活值a<t>a<t>到隐藏层的连接
- Wya 管理隐藏层到激活值y的连接
- 每个时间步都使用相同的 Wax,Waa,Wya
循环神经网络的前向传播
- 计算每步的激活函数a: Tanh/ReLu
- 计算每步的输出函数yhatyhat
a<t>=g(Waaa<t−1>+Waxx<t>+ba)a<t>=g(Waaa<t−1>+Waxx<t>+ba)
y<t>=g(Wyaa<t>+by)y<t>=g(Wyaa<t>+by)
- 每一步都有一个激活函数 atat 和一个输出函数