深度学习教程(14) | 序列模型与RNN网络(吴恩达·完整版)

花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN 目录 0. 前言 1. RNN 计算图 2. RNN 前向传播 3. RNN 反向传播 4. 导师驱动过程(teacher forcing) 5. 不同序列长度的 RNN 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN 花书+吴恩达深度学习(十六)序列模型之双向循环网络 BRNN 和深度循环网... 阅读详情


第5门课 序列模型,第1周:循环序列模型

本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在这里查看。

引言

在ShowMeAI前一篇文章 CNN应用:人脸识别和神经风格转换 中我们对以下内容进行了介绍:

  • 人脸识别
  • Siamese网络
  • 三元组损失Triplet loss
  • 人脸验证
  • CNN表征
  • 神经网络风格迁移
  • 1D与3D卷积

本篇内容开始我们将对吴恩达老师的第5门课《Recurrent Neural Networks》进行总结梳理。这门课主要介绍循环神经网络(RNN)的基本概念、模型结构细节和具体应用。

为什么选择序列模型? Why Sequence Models?

自然语言(文本)和音频都是时序前后相互关联的数据,对于这些序列数据我们会使用特殊的神经网络:循环神经网络(Recurrent Neural Network,RNN)来进行处理。使用RNN实现的应用包括下图中所示:

使用RNN实现的应用

  • 语音识别
  • 音乐发生器
  • 情感分类
  • DNA序列分析
  • 机器翻译
  • 视频动作识别
  • 命名实体识别

1.数学符号

数学符号 Notation

我们来看一个自然语言处理中「命名实体识别」的例子,了解一下序列模型的数学符号命名规则。

示例语句为:王刚和李明去上班了

该句话包含9个字,简单地表示 y y y即为 1 × 9 1 \times 9 1×9向量,每位对应字是否为人名的一部分, 1 1 1表示是, 0 0 0表示否。很明显,该句话中「王」,「刚」,「李」,「明」均是人名成分,所以,对应的输出 y y y可表示为:

y = [ 1 1 0 1 1 0 0 0 0 ] y = \begin{bmatrix} 1\\ 1\\ 0\\ 1\\ 1\\ 0\\ 0\\ 0\\ 0 \end{bmatrix} y=⎣ ⎡​110110000​⎦ ⎤​

用 y ⟨ t ⟩ y^{\left \langle t \right \rangle} y⟨t⟩表示序列对应位置的输出,使用 T y T_y Ty​表示输出序列长度,我们有 1 ≤ t ≤ T y 1\leq t\leq T_y 1≤t≤Ty​。

我们把输入 x x x表示为:

x = [ x ⟨ 1 ⟩ x ⟨ 2 ⟩ x ⟨ 3 ⟩ x ⟨ 4 ⟩ x ⟨ 5 ⟩ x ⟨ 6 ⟩ x ⟨ 7 ⟩ x ⟨ 8 ⟩ x ⟨ 9 ⟩ ] x = \begin{bmatrix} x^{\left \langle 1 \right \rangle}\\ x^{\left \langle 2 \right \rangle}\\ x^{\left \langle 3 \right \rangle}\\ x^{\left \langle 4 \right \rangle}\\ x^{\left \langle 5 \right \rangle}\\ x^{\left \langle 6 \right \rangle}\\ x^{\left \langle 7 \right \rangle}\\ x^{\left \langle 8 \right \rangle}\\ x^{\left \langle 9 \right \rangle} \end{bmatrix} x=⎣ ⎡​x⟨1⟩x⟨2⟩x⟨3⟩x⟨4⟩x⟨5⟩x⟨6⟩x⟨7⟩x⟨8⟩x⟨9⟩​⎦ ⎤​

其中, x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩表示序列对应位置的输入, T x T_x Tx​表示输入序列长度。注意,在当前序列标注示例汇总, T x = T y T_x=T_y Tx​=Ty​,其他序列问题也存在 T x ≠ T y T_x\neq T_y Tx​=Ty​的情况。

我们用什么样的方式来表示 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩呢,在机器学习场景下我们依旧希望是向量化的表征,一种方法是我们会构建一个囊括大部分出现的字的词汇库vocabulary。例如一个包含10000个字的词汇库为:

[ 我 你 ⋅ ⋅ ⋅ 王 ⋅ ⋅ ⋅ 刚 ⋅ ⋅ ⋅ 置 ] \left[ \begin{matrix} 我 \\ 你 \\ \cdot \\ \cdot \\ \cdot \\ 王 \\ \cdot \\ \cdot \\ \cdot \\ 刚 \\ \cdot \\ \cdot \\ \cdot \\ 置 \end{matrix} \right] ⎣ ⎡​我你⋅⋅⋅王⋅⋅⋅刚⋅⋅⋅置​⎦ ⎤​

该词汇库可看成是 10000 × 1 10000 \times 1 10000×1的向量。注意,在自然语言处理中,针对不同的问题,我们构建的词汇库的基础元素是不一样的,命名实体识别场景下会用字,有些场景下会用词(中文有分词操作),有些大型任务下的词汇库可达百万级别的词汇量。

构建了词汇库之后,可以基于one-hot编码,把居中每个 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩都表示成 10000 × 1 10000 \times 1 10000×1的向量,词汇表中与 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩对应的位置为1,其它位置为0。有时候会出现词汇表之外的单词,可以使用UNK或其他字符串来占位表示。

多样本的情况,以上序列模型对应的命名规则可表示为: X ( i ) ⟨ t ⟩ X^{(i){\left \langle t \right \rangle}} X(i)⟨t⟩, y ( i ) ⟨ t ⟩ y^{(i){\left \langle t \right \rangle}} y(i)⟨t⟩, T x ( i ) T_x^{(i)} Tx(i)​, T y ( i ) T_y^{(i)} Ty(i)​。其中, i i i表示第 i i i个样本。不同样本的 T x ( i ) T_x^{(i)} Tx(i)​或 T y ( i ) T_y^{(i)} Ty(i)​都有可能不同。

2.循环神经网络模型

循环神经网络模型 Recurrent Neural Network Model

对于序列模型,如果使用标准的神经网络,其模型结构如下:

循环神经网络模型

使用标准的神经网络模型存在两个问题:

① 不同样本的输入序列长度或输出序列长度不同,即 T x ( i ) ≠ T x ( j ) T_x^{(i)}\neq T_x^{(j)} Tx(i)​=Tx(j)​, T y ( i ) ≠ T y ( j ) T_y^{(i)}\neq T_y^{(j)} Ty(i)​=Ty(j)​,造成模型难以统一。

  • 解决办法之一是设定一个最大序列长度,对每个输入和输出序列补零并统一到最大长度。但是这种做法实际效果并不理想。

② 标准神经网络结构无法共享序列不同 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩之间的特征。

  • 例如,如果某个 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩即「王」是人名成分,那么句子其它位置出现了「王」,也很可能也是人名。这是共享特征的结果,如同CNN网络特点一样。但是,上图所示的网络不具备共享特征的能力。

  • 共享特征还有助于减少神经网络中的参数数量,一定程度上减小了模型的计算复杂度。例如上图所示的标准神经网络,假设每个 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩扩展到最大序列长度为100,且词汇表长度为10000,则输入层就已经包含了 100 × 10000 100 \times 10000 100×10000个神经元了,权重参数很多,运算量将是庞大的。

综上,我们了解到标准神经网络和CNN都不适合解决序列建模问题,而有一类神经网络:循环神经网络(Recurrent Neural Network,RNN)非常擅长处理序列建模问题的。它的典型结构如下:

循环神经网络模型

这是一个沿着序列从左到右依次传递(展开)的模型。上面的例子中,输入输出长度直接有 T x = T y T_x=T_y Tx​=Ty​的关系。模型里 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩与 y ^ ⟨ t ⟩ \hat{y}^{\left \langle t \right \rangle} y^​⟨t⟩之间是隐藏神经元。 a ⟨ t ⟩ a^{\left \langle t \right \rangle} a⟨t⟩会传入到第 t + 1 t+1 t+1个元素中,作为输入。初始的 a ⟨ t ⟩ a^{{\left \langle t \right \rangle}} a⟨t⟩一般为零向量。

RNN包含三类权重系数 W y a , W a a , W a x W_{ya},W_{aa},W_{ax} Wya​,Waa​,Wax​且每个时间步是共享这3组权重的。如下图所示:

循环神经网络模型

2.1 前向传播(Forward Propagation)

我们来展开看看RNN,下图是每个时间步的神经元展开的内部结构:

循环神经网络模型

前向传播过程的计算公式如下:

循环神经网络模型

公式中:

  • g 1 g_1 g1​是激活函数,通常选择 t a n h tanh tanh,有时也用ReLU。
  • g 2 g_2 g2​可选sigmoid或Softmax,取决于解决的问题和需要的输出类型。
  • 图示中RNN Cell的函数,是上方公式的一个特例,是最常用的原始形态RNN。

我们简化一下公式,把 W a a W_{aa} Waa​、 W a x W_{ax} Wax​水平并列为一个矩阵 W a W_a Wa​,同时 a ⟨ t − 1 ⟩ a^{\left \langle t-1 \right \rangle} a⟨t−1⟩和$ x^{\left \langle t \right \rangle}$堆叠成一个矩阵。可以得到如下的简化版前向传播计算公式:

W a = [ W a a , W a x ] W_a = [W_{aa}, W_{ax}] Wa​=[Waa​,Wax​]

a ⟨ t ⟩ = g 1 ( W a [ a ⟨ t − 1 ⟩ ; x ⟨ t ⟩ ] + b a ) a^{\left \langle t \right \rangle} = g_1(W_a [a^{\left \langle t-1 \right \rangle}; x^{\left \langle t \right \rangle}] + b_a) a⟨t⟩=g1​(Wa​[a⟨t−1⟩;x⟨t⟩]+ba​)

y ^ ⟨ t ⟩ = g 2 ( W y a a ⟨ t ⟩ + b y ) \hat{y}^{\left \langle t \right \rangle} = g_2(W_{ya}a^{\left \langle t \right \rangle} + b_y) y^​⟨t⟩=g2​(Wya​a⟨t⟩+by​)

我们上面介绍到的RNN为单向RNN,按照时间步从左到右单向依次运算得到结果, y ^ ⟨ t ⟩ \hat{y}^{\left \langle t \right \rangle} y^​⟨t⟩只与前序的元素有关。但有些情况下 y ^ ⟨ t ⟩ \hat {y}^{\left \langle t \right \rangle} y^​⟨t⟩也与后续元素有关。如下例,单凭前面的字,无法确定「王」是否为人名的一部分,而添加后续(右侧)的信息可以有效辅助判断。

  • 他说,「王刚已经离开学校了」
  • 他说,「王府内已经没有差事可做了」

依赖两侧信息的RNN叫做「双向RNN」,简称为**BRNN(Bidirectional RNN)**后面的内容部分会再介绍到。

2.2 反向传播(Backpropagation)

通过时间的反向传播 Backpropagation through Time

我们先为RNN场景定义一个损失函数。假如我们的问题是判断序列当前输入的字是否是人名的一部分,这是典型的二分类问题,我们采用交叉熵损失函数,计算公式如下所示:

L ⟨ t ⟩ ( y ^ ⟨ t ⟩ , y ⟨ t ⟩ ) = − y ⟨ t ⟩ l o g y ^ ⟨ t ⟩ − ( 1 − y ⟨ t ⟩ ) l o g ( 1 − y ^ ⟨ t ⟩ ) L^{\left \langle t \right \rangle}(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle}) = -y^{\left \langle t \right \rangle}log\hat {y}^{\left \langle t \right \rangle} - (1 - y^{\left \langle t \right \rangle})log(1-\hat {y}^{\left \langle t \right \rangle}) L⟨t⟩(y^​⟨t⟩,y⟨t⟩)=−y⟨t⟩logy^​⟨t⟩−(1−y⟨t⟩)log(1−y^​⟨t⟩)

我们沿着序列把每个位置的损失函数相加,得到整个序列的成本函数如下:

J = L ( y ^ , y ) = ∑ t = 1 T x L ⟨ t ⟩ ( y ^ ⟨ t ⟩ , y ⟨ t ⟩ ) J = L(\hat {y}, y) = \sum^{T_x}_{t=1} L^{\left \langle t \right \rangle}(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle}) J=L(y^​,y)=t=1∑Tx​​L⟨t⟩(y^​⟨t⟩,y⟨t⟩)

因为损失函数本身计算依赖时序上每个时间点,RNN的反向传播也被称为沿着时间的反向传播(Backpropagation through time),这里的反向传播从右向左计算的过程就像是沿着时间倒推。

详细的计算公式如下所示:

循环神经网络模型

a ⟨ t ⟩ = tanh ⁡ ( W a x x ⟨ t ⟩ + W a a a ⟨ t − 1 ⟩ + b ) a^{\left \langle t \right \rangle}=\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right) a⟨t⟩=tanh(Wax​x⟨t⟩+Waa​a⟨t−1⟩+b)

∂ tanh ⁡ ( x ) ∂ x = 1 − tanh ⁡ ( x ) 2 \frac{\partial \tanh (x)}{\partial x}=1-\tanh (x)^{2} ∂x∂tanh(x)​=1−tanh(x)2

∂ a ⟨ t ⟩ ∂ W a x = ( 1 − tanh ⁡ ( W a x x ⟨ t ⟩ + W a a a ⟨ t − 1 ⟩ + b ) 2 ) x T \frac{\partial a^{\left \langle t \right \rangle}}{\partial W_{a x}}=\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right) x^{ T} ∂Wax​∂a⟨t⟩​=(1−tanh(Wax​x⟨t⟩+Waa​a⟨t−1⟩+b)2)xT

∂ a ⟨ t ⟩ ∂ W a a = ( 1 − tanh ⁡ ( W a x x ⟨ t ⟩ + W a a a ⟨ t − 1 ⟩ + b ) 2 ) a T \frac{\partial a^{\left \langle t \right \rangle}}{\partial W_{a a}}=\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right) a^{T} ∂Waa​∂a⟨t⟩​=(1−tanh(Wax​x⟨t⟩+Waa​a⟨t−1⟩+b)2)aT

∂ a ⟨ t ⟩ ∂ b = ∑ b a t c h ( 1 − tanh ⁡ ( W a x x ⟨ t ⟩ + W a a a ⟨ t − 1 ⟩ + b ) 2 ) \frac{\partial a^{\left \langle t \right \rangle}}{\partial b}=\sum_{b a t c h}\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right) ∂b∂a⟨t⟩​=batch∑​(1−tanh(Wax​x⟨t⟩+Waa​a⟨t−1⟩+b)2)

∂ a ⟨ t ⟩ ∂ x ⟨ t ⟩ = W a x T ⋅ ( 1 − tanh ⁡ ( W a x x ⟨ t ⟩ + W a a a ⟨ t − 1 ⟩ + b ) 2 ) \frac{\partial a^{\left \langle t \right \rangle}}{\partial x^{\left \langle t \right \rangle}}=W_{a x}{ }^{T} \cdot\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right) ∂x⟨t⟩∂a⟨t⟩​=Wax​T⋅(1−tanh(Wax​x⟨t⟩+Waa​a⟨t−1⟩+b)2)

∂ a ⟨ t ⟩ ∂ a ⟨ t − 1 ⟩ = W a a T ⋅ ( 1 − tanh ⁡ ( W a x x ⟨ t − 1 ⟩ + W a a a ( t − 1 ⟩ + b ) 2 ) \frac{\partial a^{\left \langle t \right \rangle}}{\partial a^{\left \langle t-1 \right \rangle}}=W_{a a}{ }^{T} \cdot\left(1-\tanh \left(W_{a x} x^{\left \langle t-1 \right \rangle}+W_{a a} a^{(t-1\rangle}+b\right)^{2}\right) ∂a⟨t−1⟩∂a⟨t⟩​=Waa​T⋅(1−tanh(Wax​x⟨t−1⟩+Waa​a(t−1⟩+b)2)

2.3 RNN不同结构

不同类型的循环神经网络 Different Types of RNNs

前面我们提到的RNN,都是满足输入输出长度一致的,即 T x = T y T_x=T_y Tx​=Ty​,但实际有很多类型的RNN输入长度和输出长度不一致。根据输入及输出长度关系,RNN可以分为以下结构:

循环神经网络模型

  • 一对一(One to one): T x = 1 , T y = 1 T_x=1,T_y=1 Tx​=1,Ty​=1
  • 一对多(One to many): T x = 1 , T y > 1 T_x=1,T_y>1 Tx​=1,Ty​>1
  • 多对一(Many to one): T x > 1 , T y = 1 T_x>1,T_y=1 Tx​>1,Ty​=1
  • 多对多(Many to many): T x = T y T_x=T_y Tx​=Ty​
  • 多对多(Many to many): T x ≠ T y T_x\neq T_y Tx​=Ty​

3.语言模型

语言模型和序列生成 Language Model and Sequence Generation

语言模型(Language Model)是自然语言处理(NLP)中最基本和最重要的任务之一。即使到今天大家看到很多新型神经网络模型训练使用的基础任务之一都还是语言模型。RNN模型能比较好地建立语言模型。

我们以一个例子来解释一下什么是语言模型。我们用算法进行语音识别时,一句语音有两种识别结果:

  • 历史总是不断重演
  • 力使总事不断虫眼

我们都能判断,第二句话更有可能是正确的识别结果。语言模型是一个可以计算出这两句话各自的出现概率的模型。比如预估第一句话概率为 1 0 − 13 10^{-13} 10−13,第二句话概率为 1 0 − 10 10^{-10} 10−10。

在语音识别的场景下,我们就可以利用语言模型得到各自语句的概率,选择概率最大的语句作为正确的识别结果。概率计算的表达式为:

P ( y ⟨ 1 ⟩ , y ⟨ 2 ⟩ , ⋯   , y ⟨ T y ⟩ ) P(y^{\left \langle 1 \right \rangle},y^{\left \langle 2 \right \rangle},\cdots,y^{\left \langle T_y \right \rangle}) P(y⟨1⟩,y⟨2⟩,⋯,y⟨Ty​⟩)

那么这个有用的语言模型如何构建呢,又和我们这里提到的RNN有什么关系呢,我们会按照如下步骤来操作:

  • ① 采集数据构建一个足够大的训练集(当前很多大模型都是以千万和亿为数据量级的),训练集由大量的语句语料库(corpus)构成。
  • ② 对语料库的句子进行切分词(tokenize)。对英文可以做单词归一化和切分单词,中文按照字或者词做切分(词用得更多)。
  • ③ 基于分词过后的句库,建立vocabulary,对每个字/词进行one-hot编码。

例如下面这句话:

我爱吃油泼辣子彪彪面,味道非常好。

我们会给每句话结束末尾,加上< EOS >作为语句结束符。如果语句中遇到词汇表中没有的单词,用< UNK >表示。假设单词「彪」不在词汇表中,则上面这句话可表示为:

我爱吃油泼辣子 < UNK > < UNK >面,味道非常好。< EOS >

将标志化后的训练集用于训练RNN,过程如下图所示:

语言模型

训练过程解析:

① 第1个时间步中,输入的 a ⟨ 0 ⟩ a^{\left \langle 0 \right \rangle} a⟨0⟩和 x ⟨ 1 ⟩ x^{\left \langle 1 \right \rangle} x⟨1⟩都是零向量, y ^ ⟨ 1 ⟩ \hat {y}^{\left \langle 1 \right \rangle} y^​⟨1⟩是通过Softmax预测出的字典中每个词作为第一个词出现的概率;

② 第2个时间步中,输入的 x ⟨ 2 ⟩ x^{\left \langle 2 \right \rangle} x⟨2⟩是训练样本的标签中的第一个单词 y ⟨ 1 ⟩ y^{\left \langle 1 \right \rangle} y⟨1⟩(即「我」)和上一层的激活项 a ⟨ 1 ⟩ a^{\left \langle 1 \right \rangle} a⟨1⟩,输出的 y ⟨ 2 ⟩ y^{\left \langle 2 \right \rangle} y⟨2⟩表示的是通过Softmax预测出的、词语「我」后面出现字典中的其他每个词的条件概率。

③ 以此类推,最后就可以得到整个句子出现的概率。

定义损失函数为:
L ( y ^ ⟨ t ⟩ , y ⟨ t ⟩ ) = − ∑ t y i ⟨ t ⟩ l o g y ^ ⟨ t ⟩ L(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle}) = -\sum_t y_i^{\left \langle t \right \rangle} log \hat {y}^{\left \langle t \right \rangle} L(y^​⟨t⟩,y⟨t⟩)=−t∑​yi⟨t⟩​logy^​⟨t⟩

则成本函数为:
J = ∑ t L ⟨ t ⟩ ( y ^ ⟨ t ⟩ , y ⟨ t ⟩ ) J = \sum_t L^{\left \langle t \right \rangle}(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle}) J=t∑​L⟨t⟩(y^​⟨t⟩,y⟨t⟩)

4.采样-序列生成

对新序列采样 Sampling Novel Sequences

对于训练好的语言模型,可以通过采样(Sample)构建新的序列(对应上例就是产出新的句子),也可以进而了解这个模型学习到了一些什么。

采样 – 序列生成

具体过程如下:

① 第1个时间步输入 a ⟨ 0 ⟩ a^{\left \langle 0 \right \rangle} a⟨0⟩和 x ⟨ 1 ⟩ x^{\left \langle 1 \right \rangle} x⟨1⟩为零向量,输出预测出的字典中每个词作为第一个词出现的概率,根据Softmax的分布进行随机采样(np.random.choice)

② 将上一步采样得到的 y ^ ⟨ 1 ⟩ \hat {y}^{\left \langle 1 \right \rangle} y^​⟨1⟩作为第二个时间步的输入 x ⟨ 2 ⟩ x^{\left \langle 2 \right \rangle} x⟨2⟩。

③ 以此类推,直到采样到EOS,至此基于语言模型生成的一个完整句子序列生成完毕。

我们可以通过模型生成的句子,理解模型通过语料库学习到的知识(词语组合与分布)。

以中文为例,上面构建语言模型,很多时候会基于「词」来构建,但因为中文词汇非常多,难免会出现未知标识(UNK)。

一种处理方式是可以基于「字」粒度建模,因为字总体数量有限得多,出现位置标识的可能性也更小。但这种方法也有缺点:得到的序列过多过长,且训练成本更高。

总体来说,大家看到基于词汇构建的语言模型更为常用。

5.RNN 梯度消失与梯度爆炸

循环神经网络的梯度消失 Vanishing Gradients with RNNs

梯度消失与梯度爆炸是深度神经网络中很重要的问题,对于RNN而言,序列较长也容易有对应的问题,我们来对这两个问题做一点展开讲解。

RNN梯度消失与梯度爆炸

5.1 梯度消失

序列数据的特点是:可能存在距离上跨度很大的依赖关系,在我们前面提到的语言模型例子中,体现的就是某个词对与其相距较远的一个词有强依赖。如下有2句英文句子:

The cat, which already ate a bunch of food, was full.

The cats, which already ate a bunch of food, were full.

很显然两句话里,主语数量级和对应的be动词是相互对应的:was受cat影响;were受cats影响。而它们之间都相隔了很多单词。而一般的RNN模型每个元素受其周围附近的影响较大,不擅长捕获这种长期依赖关系。上面两句话的这种依赖关系,由于跨度很大,普通的RNN网络容易出现梯度消失,捕捉不到它们之间的依赖,造成语法错误。

普通RNN里的梯度消失问题比较难解决,可以使用调整结构的GRU和LSTM (下文会介绍到)作为缓解梯度消失问题的方案。

RNN不同结构

5.2 梯度爆炸

在反向传播时,随着层数的增多,梯度不仅可能指数型下降,也有可能指数型上升,即梯度爆炸。不过梯度爆炸比较容易发现,因为参数会急剧膨胀到数值溢出(可能显示为 NaN)。

对于梯度爆炸,常用的处理办法是采用梯度修剪(Gradient Clipping):观察梯度向量,如果它大于某个阈值,则缩放梯度向量以保证其不会太大。

RNN梯度爆炸梯度裁剪

6.GRU(门控循环单元)

GRU单元 Gated Recurrent Unit GRU

GRU(Gated Recurrent Units, 门控循环单元)改善了RNN的隐藏层,使其可以更好地捕捉深层连接,并改善了梯度消失问题。

GRU门控循环单元

依旧以前面提到的这个句子为例:

The cat, which already ate a bunch of food, was full.

模仿人类从左到右读上面这个句子的方式:

  • GRU单元有一个新的变量称为 c c c,代表记忆细胞(Memory Cell),其作用是提供记忆的能力,记住例如前文主语是单数还是复数等信息。在时间 t t t,记忆细胞的值 c ⟨ t ⟩ c^{\left \langle t \right \rangle} c⟨t⟩等于输出的激活值 a ⟨ t ⟩ a^{\left \langle t \right \rangle} a⟨t⟩; c ~ ⟨ t ⟩ \tilde{c}^{\left \langle t \right \rangle} c~⟨t⟩代表下一个 c c c的候选值。

  • Γ r \Gamma_r Γr​代表相关门(Relevance Gate),表示 c ~ ⟨ t ⟩ \tilde{c}^{\left \langle t \right \rangle} c~⟨t⟩和 c ⟨ t ⟩ c^{\left \langle t \right \rangle} c⟨t⟩的相关性。

  • $ \Gamma_u$代表更新门(Update Gate),用于决定什么时候更新记忆细胞的值。

GRU 门控循环单元

以上结构的具体公式为:

Γ r = σ ( W r [ c ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b r ) \Gamma _r = \sigma(W_r[c^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_r) Γr​=σ(Wr​[c⟨t−1⟩,x⟨t⟩]+br​)

Γ u = σ ( W u [ c ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b u ) \Gamma _u = \sigma(W_u[c^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_u) Γu​=σ(Wu​[c⟨t−1⟩,x⟨t⟩]+bu​)

c ~ ⟨ t ⟩ = t a n h ( W c [ Γ r ∗ c ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b c ) \tilde{c}^{\left \langle t \right \rangle} = tanh(W_c[\Gamma _r \ast c^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_c) c~⟨t⟩=tanh(Wc​[Γr​∗c⟨t−1⟩,x⟨t⟩]+bc​)

c ⟨ t ⟩ = ( 1 − Γ u ) × c ⟨ t − 1 ⟩ + Γ u × c ~ ⟨ t ⟩ c^{\left \langle t \right \rangle} = (1 - \Gamma _u) \times c^{\left \langle t-1 \right \rangle} + \Gamma _u \times \tilde{c}^{\left \langle t \right \rangle} c⟨t⟩=(1−Γu​)×c⟨t−1⟩+Γu​×c~⟨t⟩

a ⟨ t ⟩ = c ⟨ t ⟩ a^{\left \langle t \right \rangle} = c^{\left \langle t \right \rangle} a⟨t⟩=c⟨t⟩

当使用sigmoid作为激活函数 σ \sigma σ来得到 Γ u \Gamma_u Γu​时, Γ u \Gamma_u Γu​的值在0到1的范围内,且大多数时间非常接近于0或1。当 Γ u = 1 \Gamma _u = 1 Γu​=1时, c ⟨ t ⟩ c^{\left \langle t \right \rangle} c⟨t⟩被更新为 c ~ ⟨ t ⟩ \tilde{c}^{\left \langle t \right \rangle} c~⟨t⟩,否则保持为 c ⟨ t − 1 ⟩ c^{\left \langle t-1 \right \rangle} c⟨t−1⟩。因为 Γ u \Gamma_u Γu​可以很接近0,因此 c ⟨ t ⟩ c^{\left \langle t \right \rangle} c⟨t⟩几乎就等于 c ⟨ t − 1 ⟩ c^{\left \langle t-1 \right \rangle} c⟨t−1⟩。在经过很长的序列后, c c c的值依然被维持,从而实现「记忆」的功能。

相关论文:

Cho et al., 2014. On the properties of neural machine translation: Encoder-decoder approaches

Chung et al., 2014. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling

7.LSTM(长短期记忆)

长短期记忆 LSTM Long Short Term Memory Unit

LSTM(Long Short Term Memory,长短期记忆)网络比GRU更加灵活和强大,它额外引入了遗忘门(Forget Gate) Γ f \Gamma _f Γf​和输出门(Output Gate) Γ o \Gamma_o Γo​。其结构图和公式如下:

LSTM 长短期记忆

Γ u = σ ( W u [ a ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b u ) \Gamma _u = \sigma(W_u[a^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + 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^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_f) Γf​=σ(Wf​[a⟨t−1⟩,x⟨t⟩]+bf​)

c ~ ⟨ t ⟩ = t a n h ( W c [ a ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b c ) \tilde{c}^{\left \langle t \right \rangle} = tanh(W_c[a^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_c) c~⟨t⟩=tanh(Wc​[a⟨t−1⟩,x⟨t⟩]+bc​)

c ⟨ t ⟩ = Γ u ⟨ t ⟩ × c ~ ⟨ t ⟩ + Γ f ⟨ t ⟩ × c ⟨ t − 1 ⟩ c^{\left \langle t \right \rangle} = \Gamma^{\left \langle t \right \rangle}_u \times \tilde{c}^{\left \langle t \right \rangle} + \Gamma^{\left \langle t \right \rangle}_f \times {c}^{\left \langle t-1 \right \rangle} c⟨t⟩=Γu⟨t⟩​×c~⟨t⟩+Γf⟨t⟩​×c⟨t−1⟩

Γ o = σ ( W o [ a ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b o ) \Gamma_o = \sigma(W_o[a^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_o) Γo​=σ(Wo​[a⟨t−1⟩,x⟨t⟩]+bo​)

a ⟨ t ⟩ = Γ o ⟨ t ⟩ × t a n h ( c ⟨ t ⟩ ) a^{\left \langle t \right \rangle} = \Gamma _o^{\left \langle t \right \rangle} \times tanh(c^{\left \langle t \right \rangle}) a⟨t⟩=Γo⟨t⟩​×tanh(c⟨t⟩)

以上为1个LSTM单元的结构,多个LSTM单元按时间次序连接起来,就得到LSTM网络。

上面讲到的是简化版的LSTM。在更为常用的版本中,几个门值不仅取决于 a ⟨ t − 1 ⟩ a^{\left \langle t-1 \right \rangle} a⟨t−1⟩和 x ⟨ t ⟩ x^{\left \langle t \right \rangle} x⟨t⟩,有时也可以关联上一个记忆细胞输入的值 c ⟨ t − 1 ⟩ c^{\left \langle t-1 \right \rangle} c⟨t−1⟩,这被称为窥视孔连接(Peephole Connection)。这时,和GRU不同, c ⟨ t − 1 ⟩ c^{\left \langle t-1 \right \rangle} c⟨t−1⟩和门值是一对一的。

c 0 c^{0} c0常被初始化为零向量。

相关论文:Hochreiter & Schmidhuber 1997. Long short-term memory

8.双向循环神经网络(BRNN)

双向循环神经网络 Bidirectional RNN

我们前面提到了,单向的RNN在某一时间步只能使用之前输入的序列信息。双向循环神经网络(Bidirectional RNN,BRNN)可以在序列的任意位置使用之前和之后的数据。其工作原理是增加一个反向循环层,结构如下图所示:

BRNN 双向循环神经网络

因此,有 y ^ ⟨ t ⟩ = g ( W y [ a → ⟨ t ⟩ , a ← ⟨ t ⟩ ] + b y ) \hat{y}^{\left \langle t \right \rangle}= g(W_y[\overrightarrow{a}^{\left \langle t \right \rangle}, \overleftarrow{a}^{\left \langle t \right \rangle}] + b_y) y^​⟨t⟩=g(Wy​[a ⟨t⟩,a ⟨t⟩]+by​)

这个改进的方法不仅能用于基本的RNN,也可以用于GRU或LSTM。缺点是需要完整的序列数据,才能预测任意位置的结果。例如构建语音识别系统,需要等待用户说完并获取整个语音表达,才能处理这段语音并进一步做语音识别。因此,实际应用会有更加复杂的模块。

9.深度循环神经网络(DRNN)

深层循环神经网络 Deep RNNs

为了进一步提升模型的学习能力,我们可以在RNN的每个时间步上,也增加隐层数量,构建深度循环神经网络(Deep RNN)。结构如下图所示:

DRNN 深度循环神经网络

以 a [ 2 ] ⟨ 3 ⟩ a^{[2]\left \langle 3 \right \rangle} a[2]⟨3⟩为例,有 a [ 2 ] ⟨ 3 ⟩ = g ( W a [ 2 ] [ a [ 2 ] ⟨ 2 ⟩ , a [ 1 ] ⟨ 3 ⟩ ] + b a [ 2 ] ) a^{[2]\left \langle 3 \right \rangle} = g(W_a^{[2]}[a^{[2]\left \langle 2 \right \rangle}, a^{[1]\left \langle 3 \right \rangle}] + b_a^{[2]}) a[2]⟨3⟩=g(Wa[2]​[a[2]⟨2⟩,a[1]⟨3⟩]+ba[2]​)。

参考资料

ShowMeAI系列教程推荐

推荐文章

吴恩达深度学习笔记——循环神经网络(RNN) 目录 一、为什么使用序列模型(Why sequence models) 二、数学符号(Notation) 三、循环神经网络(Recurrent neural network) 四、通过时间的反向传播(Backpropagation through time) 五、不同类型的循环神经网络(Different types of RNNs) 六、语言模型和序列生成(Language mode... 阅读详情

相关推荐

吴恩达RNN作业:Building your Recurrent Neural Network - Step by Step

吴恩达RNN作业:Building your Recurrent Neural Network - Step by Step

学习笔记——吴恩达《神经网络与深度学习》

吴恩达老师关于《神经网络与深度学习》课程的学习笔记

Concise200的博客 2852

Qwen-Image-2.1本地图像生成整合包:8G显存一键部署指南

文生图模型是AI视觉创作的核心技术,其本地化部署需兼顾模型能力、硬件适配与工程易用性。Qwen-Image-2.1作为支持文本生成、图像编辑与多图参考的统一架构模型,突破了传统Diffusion模型在消费级显卡上的运行瓶颈。通过AWQ量化、vLLM推理优化与ComfyUI节点重构,实现8G显存稳定运行,显著降低CUDA环境配置复杂度。该方案面向设计师、教师与普通用户,提供开箱即用的本地AI图像工作流,适用于电商主图迭代、教学配图生成与IP角色延展等真实场景,让高质量图像生成真正走出云端,落地桌面。

weixin_29082143的博客 401

吴恩达深度学习笔记13(15)-序列模型、RNN

输入一个句子,判断其中哪个单词是人名缺点:只能利用输入序列之前的数据,后边的没法用反向传播:为了进行反向传播需要一个损失函数(基于时间的反向传播算法)

weixin_43899239的博客 324

Starlink第三代终端与第二代终端的差异分析

SpaceX星链第三代终端实现显著升级,硬件售价维持599美元不变但性能全面提升。相比第二代产品,第三代终端取消自动调节电机改为手动定向,防水防尘等级提升至IP67,天线面积扩大46%,支持235台设备连接(提升87%),下载速度可达1Gbps(提升4倍),延迟降至20ms以下。新增3个千兆接口和WiFi6支持,同时推出199美元单独路由器选项。这些改进使第三代终端在保持价格优势的同时,更好地满足户外、移动和商业场景需求,标志着SpaceX卫星互联网服务从亏损销售转向盈利模式的重要转折。

通信行业老兵、物联网从业者,做一个有趣的普通人。 3033

详解如何用爬虫工具批量采集阿里巴巴批发网商品数据

本文主要介绍如何使用后羿采集器的智能模式,免费采集阿里巴巴批发网商品的批发价格、发货时间、是否代发等信息。 采集字段: 商品标题、商品链接、图片链接、标签1、标签2、标签3、价格、30天成交数、 评价、店铺 功能点目录: 如何对采集字段进行配置 如何采集列表+详情页类型网页 采集结果预览: 下面我们来详细介绍一下如何免费采集1688批发网的商品数据,我们以“羽绒服女”为例,具体步骤如下: 步骤一...

weixin_43777427的博客 1万+

Python吴恩达深度学习作业18 -- 手把手实现循环神经网络(RNN)

在此作业中,你将使用numpy实现你的第一个循环神经网络。循环神经网络(RNN)在解决自然语言处理和其他序列任务上非常有效,因为它们具有“记忆”,可以一次读取一个输入xx^{}x(例如单词),并通过从一个时间步传递到下一个时间步的隐藏层激活来记住一些信息/上下文。这使得单向RNN可以提取过去的信息以处理之后的输入。双向RNN则可以借鉴过去和未来的上下文信息。符号: 1 循环神经网络的正向传播 在本周之后的作业,你将使用RNN生成音乐。你将实现的基本RNN具有以下结构。在此示例中,Tx=Ty......

qq_41476257的博客 3329

基于fMRI数据计算脑脊液(CSF)与全脑BOLD信号的时间耦合分析

BOLD和CSF信号有多相似CSF信号要延迟多少时间才能最匹配BOLD信号BOLD-CSF的互相关公式lag:时间延迟采样点数BOLD信号CSF信号延迟时间点对应的相关系数。

Rose9614的博客 2983

《吴恩达深度学习笔记》之RNN

之前我们是用one-hot编码来表示单词的:假设一个单词在词汇表里的序号是t,词汇表大小是T,则这个单词的编码是一个长度为T的向量,向量只有第t维是1,其他维是0。我们用来表示这个单词的one-hot编码。如下图:这种表示法能区分每个词,但是,它有一个缺陷:one-hot向量两两之间的乘积为0,不能通过向量的相似度推理出单词的相似度。因此,在NLP中,一个重要的任务就是找到一个合理的词表示方法,使得我们能够利用向量的某些性质来表示单词之间的某些特性。我们来看一种新的词表示方法。

weixin_41554699的博客 1172

Android Audio - 支持多应用同时录音_Android8.1修改方法

支持多应用同时录音_Android8.1修改方法 源码路径: sdk\frameworks\av\services\audiopolicy\managerdefault\AudioPolicyManager.cpp 需要修改两个位置: audio_io_handle_t AudioPolicyManager::getInputForDevice() 在mpClientInterface-&gt...

iFinelio Tower 的博客 5759

建立时间与保持时间

建立时间与保持时间的计算 文章目录1、建立时间与保持时间概述及模型2、寄存器之间数据传输时建立时间与保持时间3、寄存器之间数据传输时建立时间余量与保持时间余量计算4、 FPGA允许的最大时钟频率或最小时钟周期5、计算FPGA时钟所允许的最大频率或最小时钟周期6、违反建立和保持时间会发生什么? 1、建立时间与保持时间概述及模型 建立时间(Tsu): 在时钟采样之前,输入必须稳定一段时间,该时间量称为建立时间。 理想最优建立时间: 保持时间(Th): 在时钟沿之后输入到触发器稳定所需的最短时间。 理想最优

Crazzy_M的博客 3万+

吴恩达深度学习笔记-循环神经网络(RNN) (第13课)

循环神经网络笔记

GuoShao_的博客 1212

uniapp(微信小程序):实现PDF在线预览+在线预览pdf文件完整示例源码,支持文件来源:服务器pdf外链URL预览、调用后端API接口获取PDF文件流二进制下载及解析打开、上传本地PDF文件预览

uni-app实现PDF预览功能,uniapp微信小程序预览PDF,uniapp开发微信小程序在线预览pdf等文件,uniApp微信小程序实现PDF在线预览,Uniapp app在线预览pdf文件流,微信小程序实现pdf预览(苹果安卓兼容),uniapp-微信小程序 实现pdf外链在线预览,uniapp小程序如何做在线预览pdf功能,uniapp小程序端 实现pdf文件预览,微信小程序(uniapp)PDF预览完整实现方案示例demo源码,uni-app预览PDF,小程序pdf预览插件插件,Uniapp微信

✅ 精选推荐文章 4706

吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(5-1)-- 循环神经网络

序列模型 --- 循环神经网络

大树先生的博客 1万+

YOLOv11 模型改进:利用新型损失函数实现精度跃升(含代码全解析)

在目标检测领域,损失函数的选择直接决定模型的精度上限。某自动驾驶公司将 YOLOv11 原有损失替换为新型损失后,障碍物检测 mAP 提升 10%,夜间场景误检率降低 22%;某物流分拣项目中,采用新损失的 YOLOv11 模型对小包裹的识别准确率从 82% 升至 96%。如果你也在为模型精度瓶颈、样本不平衡问题困扰,这篇教程将带你掌握 YOLOv11 损失函数的进阶技巧,真正帮你在检测性能上实现突破。损失函数是模型训练的“指南针”,它定义了模型“学习的方向”。传统损失(如 BCE、Focal Loss)在

m0_71589036的博客 715

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Coursera吴恩达《深度学习》课程总结(全)

01 神经网络和深度学习(Neural Networks and Deep Learning) 1-1 深度学习概论 主要介绍:主要对深度学习进行了简要概述。首先,我们使用房价预测的例子来建立最简单的单个神经元组成的神经网络模型。然后,我们将例子复杂化,建立标准的神经网络模型结构。接着,我们从监督式学习入手,介绍了不同的神经网络类型,包括Standard NN,CNN和RNN。不同的神经网络模型适合处理不同类型的问题。对数据集本身来说,分为结构化数据和非结构化数据。近些年来,深度学习对非结构化数据的处理

csdn_xmj的博客 5万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

5-1 Coursera吴恩达《序列模型》 第一周课程笔记-循环序列网络(RNN)

记录吴恩达Andrew Ng深度学习专项课程笔记,方便之后回顾,共5门课。第一门课《神经网络与深度学习》(Neural Networks and Deep Learning)的4周课程笔记请见如下链接: 1-1 Coursera吴恩达《神经网络与深度学习》第一周课程笔记-深度学习概论 1-2 Coursera吴恩达《神经网络与深度学习》第二周课程笔记-神经网络基础 1-3 Coursera吴恩达《神经网络与深度学习》第三周课程笔记-浅层神经网络 1-4 Coursera吴恩达《神经网络与深度学习》第

csdn_xmj的博客 5289

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

吴恩达老师深度学习课程完整笔记

为了方便学习深度学习课程,转载一个吴恩达老师的一个深度学习笔记,转载的网站是下面这个 https://blog.youkuaiyun.com/red_stone1/article/details/80207815 从去年8月份开始,AI界大IP吴恩达在coursera上开设了由5们课组成的深度学习专项课程,掀起了一股人工智能深度学习热潮。这里附上deeplearning.ai的官网: deeplearnin...

Miracle8070 6万+

深度学习教程(1) | 深度学习概论(吴恩达·完整版)

本篇为深度学习系列教程的引言,以房价预测为例,讲解神经网络(Neural Network)模型结构和基础知识,并介绍针对监督学习的几类典型神经网络:Standard NN,CNN和RNN等知识

ShowMeAI研究中心 1万+

吴恩达深度学习——循环神经网络

文章目录引言序列模型能解决什么问题符号定义循环神经网络通过时间的方向传播不同类型的循环神经网络语言模型和序列生成 引言 本文是吴恩达深度学习第五课:序列模型。本次课程将会学到如何为自然语言、语言和其他序列数据构建模型。会了解如何构建并训练一个循环神经网络,和常用的变体,比如GRU和LSTM。能应用序列模型到自然语音处理,包括情感分析。能应用序列模型到语音应用,包括语音识别和智能作曲。 第五课有以下三个部分,本文是第一部分。 循环神经网络 自然语音处理与词嵌入 序列模型与注意力机制 序列模型能解决什么问题

日积月累,天道酬勤 1574

吴恩达《序列模型》01——循环神经网络RNN

文章目录一、序列模型1. 什么是序列模型?2. 数学符号(Notation)二、循环神经网络1. 标准NN存在的问题2. RNN3. 通过时间反向传播(Backpropagation through time)4. 不同结构三、语言模型1. Language model and sequence generation2. 采样(Sampling novel sequences)四、GRU和LSTM1. RNN 的梯度消失(Vanisging gradients with RNNs)2. GRU(门控循环单元

Serendipity_zyx的博客 2930

[笔记]|[DL]|[RNN]吴恩达深度学习10——序列模型

[笔记]|[DL]|[RNN]吴恩达深度学习10——序列模型 文章目录[笔记]|[DL]|[RNN]吴恩达深度学习10——序列模型序列模型能够运用的领域:one-hot编码:传统神经网络在处理序列数据上的问题:RNN暴露出的问题:前向传播的推导:RNN的反向传播:RNN的一般类型:RNN model解释:RNN对新序列进行采样的过程:梯度消失的原因:GRU:GRU的推导:完整的GRP:GRU与LS...

weixin_43991786的博客 763

吴恩达《序列模型》课程笔记(1)-- 循环神经网络(RNN)

序列模型 — 循环神经网络 1. 序列模型的应用 序列模型能解决哪些激动人心的问题呢? 语音识别:将输入的语音信号直接输出相应的语音文本信息。无论是语音信号还是文本信息均是序列数据。 音乐生成:生成音乐乐谱。只有输出的音乐乐谱是序列数据,输入可以是空或者一个整数。 情感分类:将输入的评论句子转换为相应的等级或评分。输入是一个序列,输出则是一个单独的类别。 DNA序列分析:找到输入的DN...

Linias的博客 5350

吴恩达 深度学习 编程作业(5-1)Part 1 - Building your Recurrent Neural Network

一步步建立一个RNN:Building your Recurrent Neural Network - Step by Step

大树先生的博客 1万+

深度学习教程 | 序列模型与RNN网络

本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在查看。

weixin_42907150的博客 1058

吴恩达深度学习——序列模型

吴恩达深度学习——序列模型一、定义序列模型的数学符号二、循环神经网络1.对于序列模型为什么不采用标准的神经网络进行处理呢?2.循环神经网络的结构3.循环神经网络的损失函数4.不同类型的循环神经网络三、语言模型与序列生成四、GRU(Gated Recurrent或者叫做门控循环)单元五、长短期记忆单元(LSTM)六、双向循环神经网络(BRNN)七、深度循环神经网络(Deep RNN) 引言:序列模型可以是一段音频,一段视频,一句话等等! 一、定义序列模型的数学符号 对于输入x,我们通常使用x<n>

kiminoamae的博客 737
上一篇: 深度学习教程(11) | 经典CNN网络实例详解(吴恩达·完整版)
下一篇: 深度学习教程(15) | 自然语言处理与词嵌入(吴恩达·完整版)
ShowMeAI
博客等级 码龄5年 6514粉丝 672原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShowMeAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值