终于快要毕业了,乘着还在还在研究室,把最后一章sequence模型也学完吧。
Sequence Model
一:基础知识
1:符号的定义
X X X: 表示是一组输入的序列,也就是一段话,类似:
- X = X= X= “Cats average 15 hours of sleep a day.”
- 如果任务需要处理变长序列,则会用
<EOS>
标记序列结束
X = X= X= “Cats average 15 hours of sleep a day.<EOS>
”
Y Y Y: 标签序列
T : T: T: 时间序列的总长度,也就是总时间步数
- 一般用到的是很多个 t t t 来表示某一个时刻。 x < 1 > x^{<1>} x<1>… x < t > x^{<t>} x<t>
- 在词类的任务中 (word-level classification) x < 1 > = x^{<1>}= x<1>=“Cast”、 x < 2 > = x^{<2>}= x<2>=“average”…
- 在字母的任务中(character-level processing) x < 1 > = x^{<1>}= x<1>=“C”、 x < 2 > = x^{<2>}= x<2>=“a”…
除此之外,仍然用 i i i 表示每一个单独的样本
x ( i ) < t > : x^{(i)<t>}: x(i)<t>: 第 i i i 个样本的第 t t t 个词.
T x ( i ) T_x^{(i)} Tx(i): 第 i i i 个序列的长度.
2:词典(Vocabulary) 与编码(Encoding)
词典是一个映射关系,将数据中的每个唯一单词或字符分配一个唯一的索引。
One-hot 编码将每个类别或字符表示为一个长度为词典长度的二进制向量。
如果在输入的序列 X X X中遇到一个词 x < 1 > x^{<1>} x<1>并且该词存在于一个词典 V={‘a’,‘ab’,‘abc’…‘zulu’}中,
使用One-hot对 ‘a’ 进行编码,则是[1,0,0,…,0]. 对 ‘zulu’ 进行编码则是[0,0,0,…,1].
如果一个单词、字符或子词不在词典中,通常会将其标记为 unknown word(未知词,简称 UNK)
并使用特殊符号 <UNK>
来表示。
二:RNN(Recurrent Neural Networks) 循环神经网络
1:模型架构
其中,权重矩阵 W a x W_{ax} Wax、 W a a W_{aa} Waa、 W y a W_{ya} Wya 的命名顺序是 输出-输入
为什么?
因为矩阵乘法的维度规则就是 矩阵A(输出维度\隐藏维度,输入维度) × 矩阵B(输出维度\隐藏维度,输入维度)
2:公式
a < t > = g ( w a a a < t − 1 > + w a x x < t > + b a ) a^{<t>}=g(w_{aa}a^{<t-1>}+w_{ax}x^{<t>}+ba) a<t>=g(waaa<t−1>+waxx<t>+ba)
其中 w a a w_{aa} waa和 w a x w_{ax} wax可以堆积为 [ w a a : w a x ] = w a [w_{aa}:w_{ax}]=w_{a} [waa:wax]=wa
a < t > = g ( w a [ a < t − 1 > , x < t > ] + b a ) a^{<t>}=g(w_{a}[a^{<t-1>}, x^{<t>}]+ba) a<t>=g(wa[a<t−1>,x<t>]+ba)
y ^ < t > = g ( w y a a < t > + b y ) \hat y^{<t>}=g(w_{ya}a^{<t>}+by) y^</