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}=110110000y=110110000表示是否为人名的一部分。定义输出为y<t>\mathbf{y}^{<t>}y<t>。
(4)定义Tx(i)T_x^{(i)}Tx(i)为第iii个样本的长度,Ty(i)T_y^{(i)}Ty(i)为第iii个样本输出的长度。 - 词表示
(1)构建词典:本课以10000词典为例(商业用的通常大小为3W到5W,更大的也有)
(2)构建one-hot的词表示向量。
(3)未出现在词典里的单词,标记为新类别。
1.3 循环神经网络
- 为什么标准神经网络不行?
(1)输入和输出的维度可能不同。
(2)从文本不同位置学到特征无法共享。 - 循环神经网络
(1)对每一个单词进行预测,预测时,上一个单词网络中的激活值会输入到下一个单词的网络中,第一个单词可输入0向量。
(2)网络结构示意图

(3)词向量输入权重记为waxw_{ax}wax,激活值输入权重记为waaw_{aa}waa,预测值输出权重记为wyaw_{ya}wya。
(4)问题:在某一时刻仅利用了该时刻之前的信息。解决方法:双向循环神经网络(BRNN)。 - 前向传播
(1)a<0>=0a^{<0>}=\mathbf{0}a<0>=0
(2)a<1>=g1(waaa<0>+waxx<1>+ba)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>=g2(wyaa<1>+by)\hat{y}^{<1>}=g_2(w_{ya}a^{<1>}+b_y)y^<1>=g2(wyaa<1>+by)
(4)RNN中常用的激活函数为tanh。
(5)a<t>=g(waaa<t−1>+waxx<t>+ba)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(wyaa<t>+by)\hat{y}^{<t>}=g(w_{ya}a^{<t>}+b_y)y^<t>=g(wyaa<t>+by) - 简化的RNN符号
(1)上条的(5)公式,改写为a<t>=g(Wa[a<t−1>,x<t>]+ba)a^{<t>}=g(W_a[a^{<t-1>}, x^{<t>}]+b_a)a<t>=g(Wa[a<t−1>,x<t>]+ba)
(2)Wa=[waa;wax]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(Wya<t>+by)\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>logy^<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=1TyL<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要求Tx=TyT_x=T_yTx=Ty,本节展示一些其他RNN结构,不一定要求Tx=TyT_x=T_yTx=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(Tx=TyT_x=T_yTx=Ty)

(5)many to many (Tx≠TyT_x \neq T_yTx=Ty)
1.6 语言模型和序列生成
- 什么是语言模型
(1)语音识别
(2)给出某个特定句子的概率:P(sentence)=?P(sentence)=?P(sentence)=? - 使用RNN建立语言模型
(1)训练集:大规模英语文本语料库
(2)标记句子结尾:<EOS><EOS><EOS> - RNN模型
(1)例句:Cats average 15 hours of sleep a day. <EOS><EOS><EOS>
(2)网络结构
(3)损失函数
L(y^<t>,y<t>)=−∑iyi<t>logy^<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=∑tL<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(Wa[a<t−1>,x<t>]+ba)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引入新的变量ccc(来自于记忆细胞)。
(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(wc[c<t−1>,x<t>]+bc)\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=σ(wu[c<t−1>,x<t>]+bu)\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(Wc[c<t−1>,x<t>]+bc) \tilde{c}^{<t>}=\tanh (W_c[c^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[c<t−1>,x<t>]+bc)
Γu=σ(Wu[c<t−1>,x<t>]+bu) \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(Wc[Γr×c<t−1>,x<t>]+bc) \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=σ(Wu[c<t−1>,x<t>]+bu) \Gamma_u=\sigma(W_u[c^{<t-1>}, x^{<t>}]+b_u) Γu=σ(Wu[c<t−1>,x<t>]+bu)
Γr=σ(Wr[c<t−1>,x<t>]+br) \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(Wc[Γr×c<t−1>,x<t>]+bc) \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=σ(Wu[c<t−1>,x<t>]+bu) \Gamma_u = \sigma(W_u[c^{<t-1>}, x^{<t>}]+b_u) Γu=σ(Wu[c<t−1>,x<t>]+bu)
Γr=σ(Wr[c<t−1>,x<t>]+br) \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(Wc[a<t−1>,x<t>]+bc) \tilde{c}^{<t>}=\tanh(W_c[a^{<t-1>}, x^{<t>}]+b_c) c~<t>=tanh(Wc[a<t−1>,x<t>]+bc)
Γu=σ(Wu[a<t−1>,x<t>]+bu) \Gamma_u = \sigma(W_u[a^{<t-1>}, x^{<t>}]+b_u) Γu=σ(Wu[a<t−1>,x<t>]+bu)
Γf=σ(Wf[a<t−1>,x<t>]+bf) \Gamma_f = \sigma(W_f[a^{<t-1>}, x^{<t>}]+b_f) Γf=σ(Wf[a<t−1>,x<t>]+bf)
Γo=σ(Wo[a<t−1>,x<t>]+bo) \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×tanhc<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>为lll层第ttt时刻值。
(2)网络架构举例
(3)每一层的权值相同。
本文深入探讨了序列模型在多个领域的应用,包括语音识别、音乐生成、情感分析等,并详细介绍了循环神经网络(RNN)的工作原理,展示了如何通过时间的方向传播进行训练。文章还讨论了RNN的不同类型,如many-to-many、many-to-one等,以及如何解决长序列处理中的梯度消失问题,介绍了GRU和LSTM等高级模型。
1063

被折叠的 条评论
为什么被折叠?



