Skip to content

Commit

Permalink
Merge pull request #803 from d2l-ai/master
Browse files Browse the repository at this point in the history
v2.0.0-alpha1 release
  • Loading branch information
astonzhang authored May 8, 2021
2 parents 3640548 + 52ff6ee commit dae3fda
Show file tree
Hide file tree
Showing 106 changed files with 13,957 additions and 3,024 deletions.
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ stage("Build and Publish") {
sh label:"Release", script:"""set -ex
conda activate ${ENV_NAME}
d2lbook build pkg
d2lbook deploy html pdf pkg colab sagemaker slides --s3 s3://zh-v2.d2l.ai
d2lbook deploy html pdf pkg colab sagemaker --s3 s3://zh-v2.d2l.ai
"""

} else {
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[![Build Status](http://ci.d2l.ai/job/d2l-zh/job/master/badge/icon)](http://ci.d2l.ai/job/d2l-zh/job/master/)

[第一版:zh.D2L.ai](https://zh.d2l.ai/) | [第二版预览版:zh-v2.D2L.ai](https://zh-v2.d2l.ai) | 安装和使用书中源代码:[第一版](https://zh.d2l.ai/chapter_prerequisite/install.html) [第二版](https://zh-v2.d2l.ai/chapter_installation/index.html) | 版本号: v2.0.0-alpha0
[第一版:zh.D2L.ai](https://zh.d2l.ai/) | [第二版预览版:zh-v2.D2L.ai](https://zh-v2.d2l.ai) | 安装和使用书中源代码:[第一版](https://zh.d2l.ai/chapter_prerequisite/install.html) [第二版](https://zh-v2.d2l.ai/chapter_installation/index.html) | 当前版本: v2.0.0-alpha0

<h5 align="center"><i>理解深度学习的最佳方法是学以致用。</i></h5>

Expand Down
34 changes: 32 additions & 2 deletions TERMINOLOGY.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,26 @@

编码器,encoder

标记,token

标记化,tokenize

标签,label

步幅,stride

参数,parameter

长短期记忆网络,long short-term memory (LSTM)

超参数,hyper-parameter

层序softmax,hierarchical softmax

成本,cost

词汇表,vocabulary

词嵌入,word embedding

词向量,word vector
Expand Down Expand Up @@ -54,6 +62,8 @@

二元分类,binary classification

二元语法,bigram

二次采样,subsample

发散,diverge
Expand Down Expand Up @@ -120,6 +130,8 @@

困惑度,perplexity

拉普拉斯平滑,Laplace smoothing

连结,concatenate

类,class
Expand All @@ -132,6 +144,8 @@

流水线,pipeline

门控循环单元,gated recurrent units (GRU)

模型参数,model parameter

模型复杂度,model complexity
Expand All @@ -148,6 +162,8 @@

平均池化层,average pooling layer

齐普夫定律,Zipf's law

欠拟合,underfitting

情感分析,sentiment analysis
Expand All @@ -156,6 +172,8 @@

权重,weight

三元语法,trigram

上采样,upsample

实例,instance
Expand All @@ -170,8 +188,12 @@

数据样本,data instance

顺序分区,sequential partitioning

softmax回归,softmax regression

随机采样,random sampling

损失函数,loss function

双向循环神经网络,bidirectional recurrent neural network
Expand All @@ -186,19 +208,23 @@ softmax回归,softmax regression

梯度裁剪,gradient clipping

梯度消失,vanishing gradients

填充,padding

跳字模型,skip-gram model

调参,tune hyper-parameter

停用词,stop words

通道,channel

凸优化,convex optimization

图像,image

未知词符号,unknown token
未知词标记,unknown token

无偏估计,unbiased estimate

Expand All @@ -218,18 +244,22 @@ softmax回归,softmax regression

训练误差,training error

循环神经网络,recurrent neural network
循环神经网络,recurrent neural network (RNN)

样本,example

一维梯度下降,gradient descent in one-dimensional space

一元语法,unigram

隐藏变量,hidden variable

隐藏层,hidden layer

优化器,optimizer

语料库,corpus

运算符,operator

真实值,ground truth
Expand Down
2 changes: 1 addition & 1 deletion chapter_attention-mechanisms/attention-cues.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries')

在接下来的章节中,我们经常调用此函数来显示注意力权重。

## 摘要
## 小结

* 人类的注意力是有限、宝贵和稀缺的资源。
* 受试者使用非自主和自主提示有选择地专注注意力。前者基于显著程度,后者取决于任务。
Expand Down
124 changes: 59 additions & 65 deletions chapter_attention-mechanisms/attention-scoring-functions.md

Large diffs are not rendered by default.

34 changes: 17 additions & 17 deletions chapter_attention-mechanisms/bahdanau-attention.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# Bahdanau 关注
# Bahdanau 注意力
:label:`sec_seq2seq_attention`

我们在 :numref:`sec_seq2seq` 中研究了机器翻译问题,在那里我们设计了一个基于两个 RNN 的编码器解码器架构,用于顺序到序列的学习。具体来说,RNN 编码器将可变长度序列转换为固定形状的上下文变量,然后 RNN 解码器根据生成的令牌和上下文变量按令牌生成输出(目标)序列令牌。但是,即使并非所有输入(源)令牌都对解码某个标记都有用,但在每个解码步骤中仍使用编码整个输入序列的 *same* 上下文变量。
我们在 :numref:`sec_seq2seq` 中研究了机器翻译问题,在那里我们设计了一个基于两个循环神经网络的编码器-解码器架构,用于顺序到序列的学习。具体来说,循环神经网络编码器将可变长度序列转换为固定形状的上下文变量,然后循环神经网络解码器根据生成的标记和上下文变量按标记生成输出(目标)序列标记。但是,即使并非所有输入(源)标记都对解码某个标记都有用,但在每个解码步骤中仍使用编码整个输入序列的**相同**上下文变量。

在为给定文本序列生成手写的一个单独但相关的挑战中,格雷夫斯设计了一种可区分的注意力模型,将文本字符与更长的笔迹对齐,其中对齐方式仅向一个方向移动 :cite:`Graves.2013`。受学习对齐想法的启发,Bahdanau 等人提出了一个没有严格的单向对齐限制 :cite:`Bahdanau.Cho.Bengio.2014` 的可区分注意力模型。在预测令牌时,如果不是所有输入令牌都相关,模型将仅对齐(或参与)输入序列中与当前预测相关的部分。这是通过将上下文变量视为注意力集中的输出来实现的。
在为给定文本序列生成手写的一个单独但相关的挑战中,格雷夫斯设计了一种可区分的注意力模型,将文本字符与更长的笔迹对齐,其中对齐方式仅向一个方向移动 :cite:`Graves.2013`。受学习对齐想法的启发,Bahdanau 等人提出了一个没有严格的单向对齐限制 :cite:`Bahdanau.Cho.Bengio.2014` 的可区分注意力模型。在预测标记时,如果不是所有输入标记都相关,模型将仅对齐(或参与)输入序列中与当前预测相关的部分。这是通过将上下文变量视为注意力集中的输出来实现的。

## 模型

在下面描述 Bahdanau 对 RNN 编码器的关注时,我们将遵循 :numref:`sec_seq2seq` 中的相同符号。新的基于注意的模型与 :numref:`sec_seq2seq` 中的模型相同,只不过 :eqref:`eq_seq2seq_s_t` 中的上下文变量 $\mathbf{c}$ 在任何解码时间步骤 $t'$ 都会被 $\mathbf{c}_{t'}$ 替换。假设输入序列中有 $T$ 个令牌,解码时间步长 $t'$ 的上下文变量是注意力集中的输出:
在下面描述 Bahdanau 注意力对循环神经网络编码器的关注时,我们将遵循 :numref:`sec_seq2seq` 中的相同符号。新的基于注意的模型与 :numref:`sec_seq2seq` 中的模型相同,只不过 :eqref:`eq_seq2seq_s_t` 中的上下文变量 $\mathbf{c}$ 在任何解码时间步骤 $t'$ 都会被 $\mathbf{c}_{t'}$ 替换。假设输入序列中有 $T$ 个标记,解码时间步长 $t'$ 的上下文变量是注意力集中的输出:

$$\mathbf{c}_{t'} = \sum_{t=1}^T \alpha(\mathbf{s}_{t' - 1}, \mathbf{h}_t) \mathbf{h}_t,$$

其中,时间步骤 $t' - 1$ 时的解码器隐藏状态 $\mathbf{s}_{t' - 1}$ 是查询,编码器隐藏状态 $\mathbf{h}_t$ 既是键,也是值,注意权重 $\alpha$ 是使用 :eqref:`eq_attn-scoring-alpha` 所定义的加法注意力评分函数计算的。

与 :numref:`fig_seq2seq_details` 中的香草 RNN 编码器解码器架构略有不同,:numref:`fig_s2s_attention_details` 描述了巴赫达瑙关注的同一架构
与 :numref:`fig_seq2seq_details` 中的基础循环神经网络编码器-解码器架构略有不同,:numref:`fig_s2s_attention_details` 描述了 Bahdanau 注意力的架构

![Layers in an RNN encoder-decoder model with Bahdanau attention.](../img/seq2seq-attention-details.svg)
:label:`fig_s2s_attention_details`
Expand All @@ -32,9 +32,9 @@ import torch
from torch import nn
```

## 注意定义解码器
## 定义注意力解码器

要在 Bahdanau 关注的情况下实现 RNN 编码器-解码器,我们只需重新定义解码器即可。为了更方便地显示学习的注意力权重,以下 `AttentionDecoder` 类定义了具有注意机制的解码器的基本接口。
要用 Bahdanau 注意力实现循环神经网络编码器-解码器,我们只需重新定义解码器即可。为了更方便地显示学习的注意力权重,以下 `AttentionDecoder` 类定义了具有注意机制的解码器的基本接口。

```{.python .input}
#@tab all
Expand All @@ -49,7 +49,7 @@ class AttentionDecoder(d2l.Decoder):
raise NotImplementedError
```

现在让我们在接下来的 `Seq2SeqAttentionDecoder` 课程中以 Bahdanau 关注的情况下实施 RNN 解码器。解码器的状态初始化为 i) 编码器在所有时间步长的最终层隐藏状态(作为关注的键和值);ii) 最后一个时间步长的编码器全层隐藏状态(初始化解码器的隐藏状态);和 iii) 编码器有效长度(排除在注意力池中填充令牌)。在每个解码时间步骤中,解码器上一个时间步的最终层隐藏状态将用作关注的查询。因此,注意力输出和输入嵌入都连接为 RNN 解码器的输入
现在让我们在接下来的 `Seq2SeqAttentionDecoder` 类中以 Bahdanau 注意力实现循环神经网络解码器。初始化解码器的状态 1) 编码器在所有时间步长的最终层隐藏状态(作为注意力的键和值);2) 最后一个时间步长的编码器全层隐藏状态(初始化解码器的隐藏状态);和 3) 编码器有效长度(排除在注意力池中填充标记)。在每个解码时间步骤中,解码器上一个时间步的最终层隐藏状态将用作关注的查询。因此,注意力输出和输入嵌入都连接为循环神经网络解码器的输入

```{.python .input}
class Seq2SeqAttentionDecoder(AttentionDecoder):
Expand Down Expand Up @@ -151,7 +151,7 @@ class Seq2SeqAttentionDecoder(AttentionDecoder):
return self._attention_weights
```

在以下内容中,我们使用包含 7 个时间步长的 4 个序列输入的小批量测试已实施的解码器,使用 Bahdanau 的注意力
接下来,我们使用包含 7 个时间步长的 4 个序列输入的小批量测试我们实现的 Bahdanau 注意力解码器

```{.python .input}
encoder = d2l.Seq2SeqEncoder(vocab_size=10, embed_size=8, num_hiddens=16,
Expand Down Expand Up @@ -180,9 +180,9 @@ output, state = decoder(X, state)
output.shape, len(state), state[0].shape, len(state[1]), state[1][0].shape
```

## 培训
## 训练

与 :numref:`sec_seq2seq_training` 类似,我们在这里指定超级测量器,实例化一个编码器和解码器,并在 Bahdanau 关注的情况下对这个模型进行机器翻译培训。由于新增的关注机制,这项培训比没有注意力机制的 :numref:`sec_seq2seq_training` 慢得多。
与 :numref:`sec_seq2seq_training` 类似,我们在这里指定超参数,实例化一个 Bahdanau 注意力编码器和解码器,并对这个模型进行机器翻译训练。由于新增的注意力机制,这项训练要比没有注意力机制的 :numref:`sec_seq2seq_training` 慢得多。

```{.python .input}
#@tab all
Expand All @@ -199,7 +199,7 @@ net = d2l.EncoderDecoder(encoder, decoder)
d2l.train_seq2seq(net, train_iter, lr, num_epochs, tgt_vocab, device)
```

模型训练完毕后,我们用它将几个英语句子翻译成法语并计算它们的 BLEU 分数。
模型训练后,我们用它将几个英语句子翻译成法语并计算它们的 BLEU 分数。

```{.python .input}
#@tab all
Expand All @@ -219,7 +219,7 @@ attention_weights = d2l.reshape(
(1, 1, -1, num_steps))
```

通过将翻译最后一个英语句子时的注意力权重可视化,我们可以看到每个查询都会在键值对上分配不均匀的权重。它显示,在每个解码步骤中,输入序列的不同部分都会有选择地聚合在注意力池中
训练结束后通过可视化注意力权重,我们可以看到,每个查询都会在键值对上分配不同的权重。它显示,在每个解码步骤中,输入序列的不同部分被选择性地聚集在注意力池中

```{.python .input}
# Plus one to include the end-of-sequence token
Expand All @@ -236,15 +236,15 @@ d2l.show_heatmaps(
xlabel='Key posistions', ylabel='Query posistions')
```

## 摘要
## 小结

* 在预测令牌时,如果不是所有输入令牌都是相关的,那么具有 Bahdanau 关注的 RNN 编码器会有选择地聚合输入序列的不同部分。这是通过将上下文变量视为加法注意力池的输出来实现的。
* 在 RNN 编码器解码器中,Bahdanau 的注意力将上一个时间步的解码器隐藏状态视为查询,编码器在所有时间步长的隐藏状态同时视为键和值
* 在预测标记时,如果不是所有输入标记都是相关的,那么具有 Bahdanau 注意力的循环神经网络编码器-解码器会有选择地统计输入序列的不同部分。这是通过将上下文变量视为加法注意力池的输出来实现的。
* 在循环神经网络编码器-解码器中,Bahdanau 注意力将上一个时间步的解码器隐藏状态视为查询,在所有时间步长编码器隐藏状态同时视为键和值

## 练习

1. 在实验中用 LSTM 替换 GRU。
1. 修改实验以将加法注意力评分功能替换为缩放的点积。它如何影响培训效率
1. 修改实验以将加法注意力评分功能替换为缩放的点积。它如何影响训练效率

:begin_tab:`mxnet`
[Discussions](https://discuss.d2l.ai/t/347)
Expand Down
12 changes: 5 additions & 7 deletions chapter_attention-mechanisms/index.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
# 注意机制
# 注意力机制
:label:`chap_attention`

灵长类动物视觉系统的视神经接受大量的感官输入,远远超过了大脑能够完全处理的程度。幸运的是,并非所有的刺激都是平等的。意识的聚集和集中使灵长类动物能够在复杂的视觉环境中将注意力引向感兴趣的物体,例如猎物和掠食动物。只关注一小部分信息的能力具有进化意义,使人类能够生存和成功。
灵长类动物视觉系统的视神经接受大量的感官输入,远远超过了大脑能够完全处理的程度。幸运的是,并非所有的刺激都是平等的。意识的聚集和集中使灵长类动物能够在复杂的视觉环境中将注意力引向感兴趣的物体,例如猎物和捕食者。只关注一小部分信息的能力具有进化意义,使人类能够生存和成功。

自 19 世纪以来,科学家们一直在研究认知神经科学领域的注意力。在本章中,我们将首先回顾一个热门框架,解释如何在视觉场景中部署注意力。受此框架中的注意线索的启发,我们将设计利用这些关注线索的模型。值得注意的是,1964 年的 Nadaraya-Waston 内核回归是具有 * 注意力机制 * 的机器学习的简单演示。
自 19 世纪以来,科学家们一直在研究认知神经科学领域的注意力。在本章中,我们将首先回顾一个热门框架,解释如何在视觉场景中部署注意力。受此框架中的注意线索的启发,我们将设计利用这些关注线索的模型。值得注意的是,1964 年的 Nadaraya-Waston 内核回归是具有 *注意力机制* 的机器学习的简单演示。

接下来,我们将继续介绍在深度学习中注意力模型设计中广泛使用的注意力函数。具体来说,我们将展示如何使用这些函数来设计 *Bahdanau 注意力 *,这是深度学习中的突破性注意力模型,可以双向对齐并且可以区分
接下来,我们将继续介绍在深度学习中注意力模型设计中广泛使用的注意力函数。具体来说,我们将展示如何使用这些函数来设计 *Bahdanau 注意力*,这是深度学习中的突破性注意力模型,可以双向对齐并且可区分

最后,配备了最近的
*多头关注 *
和 * 自我关注 * 设计,我们将仅基于注意机制来描述 *Transer* 架构。自 2017 年提出建议以来,变形金刚一直在现代深度学习应用中普遍存在,例如语言、视觉、语音和强化学习领域。
最后,配备了最近的 *多头注意力**自注意力* 设计,我们将仅基于注意机制来描述 *Transformer* 架构。自 2017 年提出建议以来,Transformers 一直在现代深度学习应用中普遍存在,例如语言、视觉、语音和强化学习领域。

```toc
:maxdepth: 2
Expand Down
6 changes: 3 additions & 3 deletions chapter_attention-mechanisms/multihead-attention.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 多头关注
# 多头注意力
:label:`sec_multihead-attention`

实际上,鉴于查询、键和值集相同,我们可能希望我们的模型将来自同一注意机制不同行为的知识结合起来,例如捕获序列内各种范围的依赖关系(例如,短范围与长距离)。因此,允许我们的注意机制共同使用查询、键和值的不同表示子空间可能是有益的。
Expand Down Expand Up @@ -36,7 +36,7 @@ import torch
from torch import nn
```

## 实施
## 实现

在我们的实施过程中,我们为多头关注的每个人选择缩放的点产品注意力。为避免计算成本和参数化成本的显著增长,我们设置了 $p_q = p_k = p_v = p_o / h$。请注意,如果我们将查询、键和值的线性变换的输出数量设置为 $p_q h = p_k h = p_v h = p_o$,则可以并行计算 $h$ 头。在下面的实现中,$p_o$ 是通过参数 `num_hiddens` 指定的。

Expand Down Expand Up @@ -207,7 +207,7 @@ Y = d2l.ones((batch_size, num_kvpairs, num_hiddens))
attention(X, Y, Y, valid_lens).shape
```

## 摘要
## 小结

* 多头关注通过查询、键和值的不同表示子空间将同一注意力集中的知识结合起来。
* 要并行计算多头多头注意力,需要适当的张量操作。
Expand Down
Loading

0 comments on commit dae3fda

Please sign in to comment.