05. 序列模型
第1周 循环序列模型
1.1 为什么选择序列模型
- 序列数据举例
(1)语音识别
(2)音乐生成
(3)态度分类
(4)DNA序列分析
(5)机器翻译
(6)视频动作识别
(7)命名实体识别
1.2 数学符号
- 举例
(1) x \mathbf{x} x:Harry Potter and Hermione Granger invented a new spell.定义输入为 x < t > \mathbf{x}^{<t>} x<t>。
(2)模型目的:命名实体识别(人名位置)
(3)输出: y = 110110000 \mathbf{y}=110110000 y=110110000表示是否为人名的一部分。定义输出为 y < t > \mathbf{y}^{<t>} y<t>。
(4)定义 T x ( i ) T_x^{(i)} Tx(i)为第 i i i个样本的长度, T y ( i ) T_y^{(i)} Ty(i)为第 i i i个样本输出的长度。 - 词表示
(1)构建词典:本课以10000词典为例(商业用的通常大小为3W到5W,更大的也有)
(2)构建one-hot的词表示向量。
(3)未出现在词典里的单词,标记为新类别。
1.3 循环神经网络
- 为什么标准神经网络不行?
(1)输入和输出的维度可能不同。
(2)从文本不同位置学到特征无法共享。 - 循环神经网络
(1)对每一个单词进行预测,预测时,上一个单词网络中的激活值会输入到下一个单词的网络中,第一个单词可输入0向量。
(2)网络结构示意图
(3)词向量输入权重记为 w a x w_{ax} wax,激活值输入权重记为 w a a w_{aa} waa,预测值输出权重记为 w y a w_{ya} wya。
(4)问题:在某一时刻仅利用了该时刻之前的信息。解决方法:双向循环神经网络(BRNN)。 - 前向传播
(1) a < 0 > = 0 a^{<0>}=\mathbf{0} a<0>=0
(2) a < 1 > = g 1 ( w a a a < 0 > + w a x x < 1 > + b a ) a^{<1>}=g_1(w_{aa}a^{<0>}+w_{ax}\mathbf{x}^{<1>}+b_a) a<1>=g1(waaa<0>+waxx<1>+ba)
(3) y ^ < 1 > = g 2 ( w y a a < 1 > + b y ) \hat{y}^{<1>}=g_2(w_{ya}a^{<1>}+b_y) y^<1>=g2(wyaa<1>+by)
(4)RNN中常用的激活函数为tanh。
(5) 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>}+b_a) a<t>=g(waaa<t−1>+waxx<t>+ba)
(6) y ^ < t > = g ( w y a a < t > + b y ) \hat{y}^{<t>}=g(w_{ya}a^{<t>}+b_y) y^<t>=g(wyaa<t>+by) - 简化的RNN符号
(1)上条的(5)公式,改写为 a < t > = g ( W a [ a < t − 1 > , x < t > ] + b a ) a^{<t>}=g(W_a[a^{<t-1>}, x^{<t>}]+b_a) a<t>=g(Wa[a<t−1>,x<t>]+ba)
(2) W a = [ w a a ; w a x ] W_a=\left[w_{aa}; w_{ax}\right] Wa=[waa;wax]
(3) [ a < t − 1 > , x < t > ] = [ a < t − 1 > x < t > ] [a^{<t-1>}, x^{<t>}]=\left[\begin{matrix}a^{<t-1>}\\ x^{<t>}\end{matrix}\right] [a<t−1>,x<t>]=[a<t−1>x<t>]
(4) y ^ < t > = g ( W y a < t > + b y ) \hat{y}^{<t>}=g(W_ya^{<t>}+b_y) y^<t>=g(Wya<t>+by)
1.4 通过时间的方向传播
- 前向传播和反向传播
(1)定义损失项
L < t > ( y ^ < t > , y < t > ) = − y < t > log y ^ < t > − ( 1 − y < t > ) log ( 1 − y ^ < t > ) L^{<t>}(\hat{y}^{<t>}, y^{<t>})=-y^{<t>}\log \hat{y}^{<t>}-(1-y^{<t>})\log (1-\hat{y}^{<t>}) L<t>(y^<t>,y<t>)=−y<t>logy^<t>−(1−y<t>)log(1−y^<t>)
(2)定义损失函数
L ( y ^ , y ) = ∑ t = 1 T y L < t > ( y ^ < t > , y < t > ) L(\hat{y}, y)=\sum_{t=1}^{T_y}L^{<t>}(\hat{y}^{<t>}, y^{<t>}) L(y^,y)=t=1∑TyL<t>(y^<t>,y<t>)
1.5 不同类型的循环神经网络
- 前几节中展示的RNN要求 T x = T y T_x=T_y Tx=Ty,本节展示一些其他RNN结构,不一定要求 T x = T y T_x=T_y Tx=Ty。
- RNN结构举例
(1)前述结构称为many-to-many结构。
(2)情感识别:输入测试单词,输出为情感评分,称为many-to-one结构。
(3)音乐生成:输入整数(代表类型等),输出为一段音乐,称为one-to-many。
(4)机器翻译:输入输出序列长度可能不同。先读取输入进行编码,然后统一进行解码。 - RNN类型总结
(1)one to one
(2)one to many
(3)many to one
(4)many to many( T x = T y T_x=T_y Tx=Ty)
(5)many to many ( T x ≠ T y T_x \neq T_y Tx=Ty)
1.6 语言模型和序列生成
- 什么是语言模型
(1)语音识别
(2)给出某个特定句子的概率: P ( s e n t e n c e ) = ? P(sentence)=? P(sentence)=? - 使用RNN建立语言模型
(1)训练集:大规模英语文本语料库
(2)标记句子结尾: < E O S > <EOS> <EOS> - RNN模型
(1)例句:Cats average 15 hours of sleep a day. < E O S > <EOS> <EOS>
(2)网络结构
(3)损失函数
L ( y ^ < t > , y < t > ) = − ∑ i y i < t > log y ^ < t > L(\hat{y}^{<t>},y^{<t>})=-\sum_i y^{<t>}_i\log \hat{y}^{<t>} L(y^<t>,y<t>)=−i∑yi<t>logy^<t>
L = ∑ t L < t > ( y ^ < t > , y < t > ) L = \sum_t L^{<t>}(\hat{y}^{<t>},y^{<t>}) L=t∑L<t>(y^<t>,y<t>)
(4)给定任意句子的某些开头词语,可以预测后面词汇出现的概率。
1.7 对新序列采样
- 从一个已训练的RNN中采样序列
(1)训练模型结构
(2)采样模型
根据训练模型得到的概率分布,选取单词,实现方法举例:np.numpy.choice - 基于字符的语言模型
(1)之前的RNN是基于词汇的RNN方法
(2)基于字符的优点是不必担心会出现未知词汇,但是其缺点是得到的序列过长,因而计算成本较高。
(3)主流思想仍是基于词汇的。
1.8 带有神经网络的梯度消失
- RNN中的梯度消失
(1)RNN网络结构
(2)长短期记忆需求举例
The cat, which ……, was full ……
The cats, which ……, were full ……
(3)由于神经网络层数较深,所以梯度难以传递到网络前段,反映到句子上,句子前面的名词单复数难以影响到后面动词的单复数上。
(4)也可能会出现梯度爆炸,表现是会出现NAN,解决方法是通过最大值进行梯度修剪。
1.9 GRU单元
- RNN单元
(1)RNN计算 a < t > = g ( W a [ a < t − 1 > , x < t > ] + b a ) a^{<t>}=g(W_a[a^{<t-1>},x^{<t>}]+b_a) a<t>=g(Wa[a<t−1>,x<t>]+ba)单元图 - GRU(简化版)
(1)举例句子:The cat, which alread ate …, was full.
(2)GRU引入新的变量 c c c(来自于记忆细胞)。
(3)在GRU中令 c < t > = a < t > c^{<t>}=a^{<t>} c<t>=a<t>(LSTM中不相等)。
(4)在每个时间步,计算 c < t > c^{<t>} c<t>的一个替代值 c ~ < t > = tanh ( w c [ c < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=\tanh(w_c[c^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(wc[c<t−1>,x<t>]+bc)。
(5)定义门值 Γ u = σ ( w u [ c < t − 1 > , x < t > ] + b u ) \Gamma_u=\sigma(w_u[c^{<t-1>},x^{<t>}]+b_u) Γu=σ(wu[c<t−1>,x<t>]+bu),其中 σ ( ⋅ ) \sigma(\cdot) σ(⋅)为sigmoid函数。
(6)在GRU中, c < t > = Γ u × c ~ < t > + ( 1 − Γ u ) × c < t − 1 > c^{<t>}=\Gamma_u\times \tilde{c}^{<t>}+(1-\Gamma_u)\times c^{<t-1>} c<t>=Γu×c~<t>+(1−Γu)×c<t−1>
(7)GRU示意图 - 完整版GRU
(1)简化版关键公式
c ~ < t > = tanh ( W c [ c < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=\tanh (W_c[c^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[c<t−1>,x<t>]+bc)
Γ u = σ ( W u [ c < t − 1 > , x < t > ] + b u ) \Gamma_u=\sigma(W_u[c^{<t-1>}, x^{<t>}]+b_u) Γu=σ(Wu[c<t−1>,x<t>]+bu)
c < t > = Γ u × c ~ < t > + ( 1 − Γ u ) × c < t − 1 > c^{<t>}=\Gamma_u\times \tilde{c}^{<t>}+(1-\Gamma_u)\times c^{<t-1>} c<t>=Γu×c~<t>+(1−Γu)×c<t−1>
(2)完整版
c ~ < t > = tanh ( W c [ Γ r × c < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=\tanh (W_c[\Gamma_r\times c^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[Γr×c<t−1>,x<t>]+bc)
Γ u = σ ( W u [ c < t − 1 > , x < t > ] + b u ) \Gamma_u=\sigma(W_u[c^{<t-1>}, x^{<t>}]+b_u) Γu=σ(Wu[c<t−1>,x<t>]+bu)
Γ r = σ ( W r [ c < t − 1 > , x < t > ] + b r ) \Gamma_r=\sigma(W_r[c^{<t-1>}, x^{<t>}]+b_r) Γr=σ(Wr[c<t−1>,x<t>]+br)
c < t > = Γ u × c ~ < t > + ( 1 − Γ u ) × c < t − 1 > c^{<t>}=\Gamma_u\times \tilde{c}^{<t>}+(1-\Gamma_u)\times c^{<t-1>} c<t>=Γu×c~<t>+(1−Γu)×c<t−1>
1.10 长短期记忆
- GRU和LSTM
(1)GRU
c ~ < t > = tanh ( W c [ Γ r × c < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=\tanh(W_c[\Gamma_r\times c^{<t-1>}, x^{<t>}]+b_c) c~<t>=tanh(Wc[Γr×c<t−1>,x<t>]+bc)
Γ u = σ ( W u [ c < t − 1 > , x < t > ] + b u ) \Gamma_u = \sigma(W_u[c^{<t-1>}, x^{<t>}]+b_u) Γu=σ(Wu[c<t−1>,x<t>]+bu)
Γ r = σ ( W r [ c < t − 1 > , x < t > ] + b r ) \Gamma_r = \sigma(W_r[c^{<t-1>}, x^{<t>}]+b_r) Γr=σ(Wr[c<t−1>,x<t>]+br)
c < t > = Γ u × c ~ < t > + ( 1 − Γ u ) × c < t − 1 > c^{<t>}=\Gamma_u\times\tilde{c}^{<t>}+(1-\Gamma_u)\times c^{<t-1>} c<t>=Γu×c~<t>+(1−Γu)×c<t−1>
a < t > = c < t > a^{<t>}=c^{<t>} a<t>=c<t>
(2)LSTM
c ~ < t > = tanh ( W c [ a < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=\tanh(W_c[a^{<t-1>}, x^{<t>}]+b_c) c~<t>=tanh(Wc[a<t−1>,x<t>]+bc)
Γ u = σ ( W u [ a < t − 1 > , x < t > ] + b u ) \Gamma_u = \sigma(W_u[a^{<t-1>}, x^{<t>}]+b_u) Γu=σ(Wu[a<t−1>,x<t>]+bu)
Γ f = σ ( W f [ a < t − 1 > , x < t > ] + b f ) \Gamma_f = \sigma(W_f[a^{<t-1>}, x^{<t>}]+b_f) Γf=σ(Wf[a<t−1>,x<t>]+bf)
Γ o = σ ( W o [ a < t − 1 > , x < t > ] + b o ) \Gamma_o = \sigma(W_o[a^{<t-1>}, x^{<t>}]+b_o) Γo=σ(Wo[a<t−1>,x<t>]+bo)
c < t > = Γ u × c ~ < t > + Γ f × c < t − 1 > c^{<t>}=\Gamma_u\times \tilde{c}^{<t>}+\Gamma_f\times c^{<t-1>} c<t>=Γu×c~<t>+Γf×c<t−1>
a < t > = Γ o × tanh c < t > a^{<t>}=\Gamma_o\times \tanh c^{<t>} a<t>=Γo×tanhc<t> - LSTM图像化
1.11 双向神经网络
- 从未来获得信息
(1)举例
He said, “Teddy bears are on sale!”
He said, “Teddy Roosevelt was a great President!” - 双向RNN
(1)网络结构图
(2)上述结构图构成了一个无环有向图。
1.12 深层循环神经网络
- 深度RNN举例
(1)符号说明: a [ l ] < t > a^{[l]<t>} a[l]<t>为 l l l层第 t t t时刻值。
(2)网络架构举例
(3)每一层的权值相同。