《吴恩达深度学习》05序列模型(第1周 循环序列模型)

本文深入探讨了序列模型在多个领域的应用,包括语音识别、音乐生成、情感分析等,并详细介绍了循环神经网络(RNN)的工作原理,展示了如何通过时间的方向传播进行训练。文章还讨论了RNN的不同类型,如many-to-many、many-to-one等,以及如何解决长序列处理中的梯度消失问题,介绍了GRU和LSTM等高级模型。

05. 序列模型

第1周 循环序列模型

1.1 为什么选择序列模型

  1. 序列数据举例
    (1)语音识别
    在这里插入图片描述
    (2)音乐生成
    (3)态度分类
    (4)DNA序列分析
    (5)机器翻译
    (6)视频动作识别
    (7)命名实体识别

1.2 数学符号

  1. 举例
    (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个样本输出的长度。
  2. 词表示
    (1)构建词典:本课以10000词典为例(商业用的通常大小为3W到5W,更大的也有)
    (2)构建one-hot的词表示向量。
    (3)未出现在词典里的单词,标记为新类别。

1.3 循环神经网络

  1. 为什么标准神经网络不行?
    (1)输入和输出的维度可能不同。
    (2)从文本不同位置学到特征无法共享。
  2. 循环神经网络
    (1)对每一个单词进行预测,预测时,上一个单词网络中的激活值会输入到下一个单词的网络中,第一个单词可输入0向量。
    (2)网络结构示意图
    在这里插入图片描述
    (3)词向量输入权重记为waxw_{ax}wax,激活值输入权重记为waaw_{aa}waa,预测值输出权重记为wyaw_{ya}wya
    (4)问题:在某一时刻仅利用了该时刻之前的信息。解决方法:双向循环神经网络(BRNN)。
  3. 前向传播
    (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<t1>+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)
  4. 简化的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<t1>,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<t1>,x<t>]=[a<t1>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. 前向传播和反向传播
    (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>(1y<t>)log(1y^<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=1TyL<t>(y^<t>,y<t>)

1.5 不同类型的循环神经网络

  1. 前几节中展示的RNN要求Tx=TyT_x=T_yTx=Ty,本节展示一些其他RNN结构,不一定要求Tx=TyT_x=T_yTx=Ty
  2. RNN结构举例
    (1)前述结构称为many-to-many结构。
    (2)情感识别:输入测试单词,输出为情感评分,称为many-to-one结构。
    (3)音乐生成:输入整数(代表类型等),输出为一段音乐,称为one-to-many。
    (4)机器翻译:输入输出序列长度可能不同。先读取输入进行编码,然后统一进行解码。
  3. 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. 什么是语言模型
    (1)语音识别
    (2)给出某个特定句子的概率:P(sentence)=?P(sentence)=?P(sentence)=?
  2. 使用RNN建立语言模型
    (1)训练集:大规模英语文本语料库
    (2)标记句子结尾:<EOS><EOS><EOS>
  3. RNN模型
    (1)例句:Cats average 15 hours of sleep a day. <EOS><EOS><EOS>
    (2)网络结构在这里插入图片描述
    (3)损失函数
    L(y^<t>,y<t>)=−∑iyi<t>log⁡y^<t> L(\hat{y}^{<t>},y^{<t>})=-\sum_i y^{<t>}_i\log \hat{y}^{<t>} L(y^<t>,y<t>)=iyi<t>logy^<t>
    L=∑tL<t>(y^<t>,y<t>) L = \sum_t L^{<t>}(\hat{y}^{<t>},y^{<t>}) L=tL<t>(y^<t>,y<t>)
    (4)给定任意句子的某些开头词语,可以预测后面词汇出现的概率。

1.7 对新序列采样

  1. 从一个已训练的RNN中采样序列
    (1)训练模型结构在这里插入图片描述
    (2)采样模型
    根据训练模型得到的概率分布,选取单词,实现方法举例:np.numpy.choice
  2. 基于字符的语言模型
    (1)之前的RNN是基于词汇的RNN方法
    (2)基于字符的优点是不必担心会出现未知词汇,但是其缺点是得到的序列过长,因而计算成本较高。
    (3)主流思想仍是基于词汇的。

1.8 带有神经网络的梯度消失

  1. RNN中的梯度消失
    (1)RNN网络结构
    在这里插入图片描述
    (2)长短期记忆需求举例
    The cat, which ……, was full ……
    The cats, which ……, were full ……
    (3)由于神经网络层数较深,所以梯度难以传递到网络前段,反映到句子上,句子前面的名词单复数难以影响到后面动词的单复数上。
    (4)也可能会出现梯度爆炸,表现是会出现NAN,解决方法是通过最大值进行梯度修剪。

1.9 GRU单元

  1. 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<t1>,x<t>]+ba)单元图在这里插入图片描述
  2. 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<t1>,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<t1>,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<t1>
    (7)GRU示意图在这里插入图片描述
  3. 完整版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<t1>,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<t1>,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<t1>
    (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<t1>,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<t1>,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<t1>,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<t1>

1.10 长短期记忆

  1. 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<t1>,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<t1>,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<t1>,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<t1>
    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<t1>,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<t1>,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<t1>,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<t1>,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<t1>
    a<t>=Γo×tanh⁡c<t> a^{<t>}=\Gamma_o\times \tanh c^{<t>} a<t>=Γo×tanhc<t>
  2. LSTM图像化
    在这里插入图片描述

1.11 双向神经网络

  1. 从未来获得信息
    (1)举例
    He said, “Teddy bears are on sale!”
    He said, “Teddy Roosevelt was a great President!”
  2. 双向RNN
    (1)网络结构图
    在这里插入图片描述
    (2)上述结构图构成了一个无环有向图。

1.12 深层循环神经网络

  1. 深度RNN举例
    (1)符号说明:a[l]<t>a^{[l]<t>}a[l]<t>lll层第ttt时刻值。
    (2)网络架构举例在这里插入图片描述
    (3)每一层的权值相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值