Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v2.0.0-alpha1 release #803

Merged
merged 107 commits into from
May 8, 2021
Merged
Changes from 1 commit
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
dcf2150
fix typo in ndarray.md
xyw5vplus1 Mar 10, 2021
48f46d1
rebase (#692)
goldmermaid Mar 19, 2021
e71b41f
Update softmax-regression-concise.md
astonzhang Mar 19, 2021
261fc60
rebase (#690)
goldmermaid Mar 19, 2021
8736e46
Update mlp.md
astonzhang Mar 19, 2021
ca58c67
Update Jenkinsfile
mli Mar 19, 2021
7deda48
Update README.md
astonzhang Mar 23, 2021
2bcc398
fix typo. (#702)
Sliverwing Mar 24, 2021
ffb7f99
minor (#703)
goldmermaid Mar 24, 2021
dd8924e
typo (#705)
goldmermaid Mar 24, 2021
4ae3eea
fix typo and change one sentence in ndarray.md (#707)
thebesttv Mar 26, 2021
bc9d49d
Update index.md (#704)
zppet Mar 26, 2021
05852d2
fix 4.4.1.2. Model Complexity translation issues (#706)
WilliamWuLH Mar 26, 2021
d275241
nvcc程序ubuntu安装命令 (#701)
dxzhan Mar 26, 2021
666328a
Update index.md
astonzhang Mar 27, 2021
c4e6685
update translations in probability.md (#710)
thebesttv Mar 29, 2021
4e82fc6
fix typo and translation issues in kaggle-house-price.md (#709)
WilliamWuLH Mar 29, 2021
b7c810e
revise (#708)
goldmermaid Mar 29, 2021
a048729
Update index.md (#711)
ShixiangWang Mar 29, 2021
0f3eaed
unrendered slides rebase (#712)
goldmermaid Mar 29, 2021
257c9ac
Update optimization-intro.md
astonzhang Mar 29, 2021
f69c972
Retrigger slides (#713)
goldmermaid Mar 31, 2021
3a90849
update translations in softmax-regression.md
thebesttv Apr 1, 2021
e8e8cac
Merge pull request #691 from xyw5vplus1/master
xiaotinghe Apr 1, 2021
ac34a81
Merge pull request #716 from thebesttv/master
xiaotinghe Apr 1, 2021
19881b5
Correct some translation errors. (#717)
zhuyuanxiang Apr 4, 2021
248d5e3
Correct incorrect reference information in chapter_introduction/index.md
Apr 6, 2021
e6c0e45
typo
goldmermaid Apr 7, 2021
1858c22
Merge pull request #719 from liu-mengyang/master
xiaotinghe Apr 7, 2021
573202e
Merge pull request #722 from goldmermaid/typos
xiaotinghe Apr 7, 2021
8964b7a
Fix: typo (#733)
aekst Apr 10, 2021
9fa8743
add my name in preface/index.md (#721)
zhuyuanxiang Apr 11, 2021
4e8fbf8
update translations in mlp.md (#734)
thebesttv Apr 11, 2021
a9a0597
clarify ex3.2 (#720)
tian3rd Apr 12, 2021
fad4586
fix typo and translation issues in transformer.md (#732)
zhuyuanxiang Apr 12, 2021
893f503
add my name in preface/index.md and update mlp.md (#735)
thebesttv Apr 12, 2021
860f056
fix typo and translation issues in alexnet.md (#736)
WilliamWuLH Apr 12, 2021
250f3cd
fix typo in calculus.md (#740)
liu-mengyang Apr 13, 2021
9fe4290
Translation issue in chp #5 computation GPU (#738)
zppet Apr 13, 2021
dafe60d
[slides] kaggle (#742)
goldmermaid Apr 15, 2021
4bd2c89
add ch12 first 3 sections
astonzhang Apr 15, 2021
2a3161c
[slides] dl computation (#749)
mli Apr 16, 2021
21caeb2
translations issue in chapter_preliminaries/probability (#751)
npudqsz Apr 18, 2021
b6278c9
fix grammar problem in index.md (#750)
luzixiao Apr 18, 2021
e942baf
Update index.md (#747)
nickeaglenny Apr 18, 2021
c848c64
fix typo in vgg.md (#745)
WilliamWuLH Apr 18, 2021
24a5695
[slides] fix linear reg slides bug
Apr 19, 2021
3be2ac0
+ch9 (#755)
xiaotinghe Apr 19, 2021
19550e7
translation issue in chapter_linear-networks/linear_regression_scratc…
npudqsz Apr 19, 2021
00d9a06
[slides] kaggle-house-price (#743)
goldmermaid Apr 19, 2021
fd98cb8
chapter_recurrent-modern/gru (#724)
xiaotinghe Apr 20, 2021
b2d5799
chapter_recurrent-modern/lstm (#725)
xiaotinghe Apr 20, 2021
915c22d
chapter_recurrent-modern/bi-rnn (#726)
xiaotinghe Apr 20, 2021
52f2877
chapter_recurrent-modern/deep-rnn (#731)
xiaotinghe Apr 20, 2021
7431b20
d2l (#757)
xiaotinghe Apr 20, 2021
ba34cd7
fix translation in chapter_linear-networks/image-classification (#756)
npudqsz Apr 20, 2021
c2ad179
fix typo in resnet.md (#758)
WilliamWuLH Apr 20, 2021
3ca9c2a
chapter_recurrent-modern/beam-search (#730)
xiaotinghe Apr 20, 2021
110133f
translation issue in chapter_linear-networks/linear-regression (#752)
npudqsz Apr 20, 2021
b4522da
chapter_recurrent-modern/seq2seq (#729)
xiaotinghe Apr 20, 2021
1955446
chapter_recurrent-modern/machine-translation-and-dataset (#727)
xiaotinghe Apr 20, 2021
7de7cef
chapter_recurrent-modern/encoder-decoder (#728)
xiaotinghe Apr 20, 2021
6c4029e
[slides] CNN (#753)
goldmermaid Apr 21, 2021
1650462
translation issue in autograd.md (#761)
npudqsz Apr 21, 2021
f25cb68
translation issue in chapter_linear-networks/softmax-regression-scrat…
npudqsz Apr 21, 2021
a6d31a2
add ch12
astonzhang Apr 23, 2021
66dd24a
translation issue in mlp.md (#762)
npudqsz Apr 23, 2021
a5479de
Update lookup-api.md (#763)
LenovoLRSH Apr 23, 2021
74d5091
update translations in underfit-overfit.md (#746)
thebesttv Apr 26, 2021
f92e3e5
fix typo in sequence.md (#766)
WilliamWuLH Apr 26, 2021
3ab4585
Update index.md (#768)
PEGASUS1993 Apr 26, 2021
27db816
fix errors in 11. Optimization Algorithms (#776)
zhuyuanxiang Apr 27, 2021
f24541f
fix errors in 9. Modern Recurrent Neural Networks (#775)
zhuyuanxiang Apr 27, 2021
474b5d0
Update index.md
astonzhang Apr 27, 2021
cfc13b9
english name of terms in underfit_overfit (#777)
npudqsz Apr 28, 2021
e618763
revise ch12 imgs
astonzhang Apr 29, 2021
4451279
Chapter optimization/optimization intro (#780)
zhuyuanxiang Apr 30, 2021
9b5f533
Chapter recurrent neural networks/text preprocessing (#782)
zhuyuanxiang May 1, 2021
9d0caa6
add terminology for 8. Recurrent Neural Networks (#784)
zhuyuanxiang May 3, 2021
0d61c07
add ch13.1 ch13.2
astonzhang May 3, 2021
e558594
add ch13.13 13.14
astonzhang May 5, 2021
225e6bd
Update index.md (#786)
LenovoLRSH May 5, 2021
d511b06
润色翻译 (#785)
LenovoLRSH May 5, 2021
4ff3143
Chapter recurrent neural networks/language models and dataset (#783)
zhuyuanxiang May 5, 2021
0f77f19
Chapter_recurrent-modern/seq2seq.md (#764)
zhuyuanxiang May 5, 2021
21265ee
fix errors in recurrent-modern/encoder-decoder.md (#765)
zhuyuanxiang May 5, 2021
7698c20
Chapter recurrent modern/machine translation and dataset (#767)
zhuyuanxiang May 5, 2021
6e1fbc4
Chapter recurrent modern/beam search (#769)
zhuyuanxiang May 5, 2021
d3c04cd
Chapter recurrent neural networks/sequence (#781)
zhuyuanxiang May 5, 2021
ef4688f
chapter_recurrent-modern/index (#787)
xiaotinghe May 6, 2021
0b52a1e
chapter_computational-performance/index (#792)
xiaotinghe May 7, 2021
6fa3b69
chapter_computational-performance/hybridize (#793)
xiaotinghe May 7, 2021
5434ee1
chapter_computational-performance/async-computation (#794)
xiaotinghe May 7, 2021
d9cf60a
chapter_computational-performance/hardware (#796)
xiaotinghe May 7, 2021
160c68c
chapter_computational-performance/multiple-gpus-concise (#800)
xiaotinghe May 7, 2021
04349d4
chapter_computational-performance/parameterserver (#799)
xiaotinghe May 7, 2021
9758a91
chapter_computational-performance/multiple-gpus (#797)
xiaotinghe May 7, 2021
72eae5a
chapter_computational-performance/auto-parallelism (#795)
xiaotinghe May 7, 2021
0e45022
Update multiple-gpus.md
astonzhang May 7, 2021
d58f821
add ch12 (#801)
xiaotinghe May 7, 2021
cc786e5
fix ch12 ref (#802)
xiaotinghe May 7, 2021
af91607
fix translate (#791)
LenovoLRSH May 7, 2021
dee730d
Update frontpage.html
astonzhang May 7, 2021
dab13ab
Update frontpage.html
astonzhang May 7, 2021
bf1ea23
Update build.yml
astonzhang May 7, 2021
e3d093b
bump to 2.0.0-alpha1
astonzhang May 8, 2021
52ff6ee
forum link (#805)
xiaotinghe May 8, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
chapter_recurrent-modern/beam-search (#730)
* chapter_recurrent-modern/beam-search

* Update beam-search.md

* Update beam-search.md

Co-authored-by: goldmermaid <goldpiggy@berkeley.edu>
  • Loading branch information
xiaotinghe and goldmermaid authored Apr 20, 2021
commit 3ca9c2a814616b2f1e3d131a9fd0085d843799f6
61 changes: 30 additions & 31 deletions chapter_recurrent-modern/beam-search.md
Original file line number Diff line number Diff line change
@@ -1,75 +1,74 @@
# 束搜索
:label:`sec_beam-search`

在 :numref:`sec_seq2seq` 中,我们通过令牌预测了输出序列令牌,直到特殊的序列结束 “<eos>” 令牌被预测为止。在本节中,我们将从正式确定这个 * 贪婪的搜索 * 策略并探索问题开始,然后将此策略与其他备选方案进行比较:
*详尽搜索 * 和 * 束搜索 *。
在:numref:`sec_seq2seq`中,我们逐个标记地预测输出序列令牌,直到预测出序列结束标记“&lt;eos&gt;”。在本节中,我们将首先对这种*贪心搜索*(greedy search)策略进行介绍,并探讨其存在的问题,然后将这种策略与其他替代策略进行比较:*穷举搜索*(exhaustive search)和*束搜索*(beam search)。

在正式介绍贪婪搜索之前,让我们使用 :numref:`sec_seq2seq` 的相同数学符号将搜索问题正式化。在任何时间步骤 $t'$,解码器输出 $y_{t'}$ 的概率取决于 $t'$ 之前的输出子序列 $y_1, \ldots, y_{t'-1}$ 和编码输入序列信息的上下文变量 $\mathbf{c}$。要量化计算成本,用 $\mathcal{Y}$(包含 <eos> “”)表示输出词汇表。因此,这套词汇集的基数 $\left|\mathcal{Y}\right|$ 就是词汇量大小。让我们还将输出序列的最大令牌数指定为 $T'$。因此,我们的目标是从所有 $\mathcal{O}(\left|\mathcal{Y}\right|^{T'})$ 可能的输出序列中寻找理想的输出。当然,对于所有这些输出序列,包括 “<eos>” 之后的部分将被丢弃在实际输出中
在正式介绍贪心搜索之前,让我们使用 :numref:`sec_seq2seq` 中相同的数学符号定义搜索问题。在任何时间步$t'$,解码器输出$y_{t'}$的概率取决于$t'$之前的输出子序列$y_1, \ldots, y_{t'-1}$和编码输入序列信息的上下文变量$\mathbf{c}$。为了量化计算成本,用$\mathcal{Y}$(它包含“&lt;eos&gt;”)表示输出词汇表。所以这个词汇集合的基数$\left|\mathcal{Y}\right|$就是词汇大小。我们还将输出序列的最大标记数指定为$T'$。因此,我们的目标是从所有$\mathcal{O}(\left|\mathcal{Y}\right|^{T'})$个可能的输出序列中寻找理想的输出。当然,对于所有这些输出序列,包括“&lt;eos&gt;”和之后的部分将在实际输出中丢弃

## 贪婪搜索
## 贪心搜索

首先,让我们来看一个简单的策略:* 贪心搜索 *。该策略已被用来预测 :numref:`sec_seq2seq` 中的序列。在贪婪搜索中,在输出序列的任何时间步骤 $t'$,我们搜索条件概率从 $\mathcal{Y}$ 起最高的令牌,即
首先,让我们看看一个简单的策略:*贪心搜索*。该策略已用于:numref:`sec_seq2seq`的序列预测。在贪心搜索中,在输出序列的任何时间步$t'$,我们从$\mathcal{Y}$中搜索具有最高条件概率的标记,即:

$$y_{t'} = \operatorname*{argmax}_{y \in \mathcal{Y}} P(y \mid y_1, \ldots, y_{t'-1}, \mathbf{c}),$$
$$y_{t'} = \operatorname*{argmax}_{y \in \mathcal{Y}} P(y \mid y_1, \ldots, y_{t'-1}, \mathbf{c})$$

作为输出。一旦输 <eos> 出 “” 或输出序列达到最大长度 $T'$,输出序列就完成
一旦输出“&lt;eos&gt;”或输出序列达到其最大长度$T'$,输出序列即完成

那么贪婪的搜索会出什么问题?事实上,* 最佳序列 * 应该是最大 $\prod_{t'=1}^{T'} P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \mathbf{c})$ 的输出序列,这是基于输入序列生成输出序列的条件概率。不幸的是,不能保证贪婪的搜索能够获得最佳顺序
那么贪心搜索会出什么问题呢?实际上,*最优序列*(optimal sequence)应该是最大化$\prod_{t'=1}^{T'} P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \mathbf{c})$值的输出序列,这是基于输入序列生成输出序列的条件概率。不幸的是,不能保证通过贪心搜索得到最优序列

![At each time step, greedy search selects the token with the highest conditional probability.](../img/s2s-prob1.svg)
![在每个时间步,贪心搜索选择具有最高条件概率的标记。](../img/s2s-prob1.svg)
:label:`fig_s2s-prob1`

让我们用一个例子来说明它。假设 <eos> 输出字典中有四个标记 “A”、“B”、“C” 和 “”。在 :numref:`fig_s2s-prob1` 中,每个时间步长下的四个数字分别代表在 <eos> 该时间步长生成 “A”、“B”、“C” 和 “” 的条件概率。在每个时间步骤中,贪婪搜索都会选择条件概率最高的令牌。因此,输出序列 “A”、“B”、“C” 和 “<eos>” 将在 :numref:`fig_s2s-prob1` 中进行预测。此输出序列的条件概率为 $0.5\times0.4\times0.4\times0.6 = 0.048$。
让我们用一个例子来说明这一点。假设输出中有四个标记“A”、“B”、“C”和“&lt;eos&gt;”。 在:numref:`fig_s2s-prob1` 中,每个时间步下的四个数字分别表示在该时间步生成“A”、“B”、“C”和“&lt;eos&gt;”的条件概率。在每个时间步,贪心搜索选择具有最高条件概率的令牌。因此,将在 :numref:`fig_s2s-prob1` 中预测输出序列“A”、“B”、“C”和“&lt;eos&gt;”。这个输出序列的条件概率是$0.5\times0.4\times0.4\times0.6 = 0.048$。

![The four numbers under each time step represent the conditional probabilities of generating "A", "B", "C", and "&lt;eos&gt;" at that time step. At time step 2, the token "C", which has the second highest conditional probability, is selected.](../img/s2s-prob2.svg)
![每个时间步下的四个数字表示在该时间步生成“A”、“B”、“C”和“&lt;eos&gt;”的条件概率。在时间步2,选择具有第二高条件概率的令牌“C”。](../img/s2s-prob2.svg)
:label:`fig_s2s-prob2`

接下来,让我们看一下 :numref:`fig_s2s-prob2` 中的另一个例子。与 :numref:`fig_s2s-prob1` 不同,我们在时间步骤 2 中选择 :numref:`fig_s2s-prob2` 中的令牌 “C”,该代币的条件概率为 * 秒 * 最高。由于时间步骤 1 和 2 的输出子序列(时间步骤 3 所基于的时间步骤 1 和 2)已从 :numref:`fig_s2s-prob1` 中的 “A”“B” 变为 :numref:`fig_s2s-prob2` 中的 “A”“C”,因此,时间步骤 3 中每个令牌的条件概率也在 :numref:`fig_s2s-prob2` 中发生了变化。假设我们在时间步骤 3 中选择令牌 “B”。现在,时间步长 4 取决于前三个时间步长 “A”、“C”“B” 的输出子序列,这与 :numref:`fig_s2s-prob1` 中的 “A”、“B”“C” 不同。因此,在 :numref:`fig_s2s-prob2` 的时间步骤 4 生成每个令牌的条件概率也与 :numref:`fig_s2s-prob1` 中的不同。因此,<eos> :numref:`fig_s2s-prob2` 中输出序列 “A”、“C”、“B” 和 “” 的条件概率为 $0.5\times0.3 \times0.6\times0.6=0.054$,:numref:`fig_s2s-prob1` 中贪婪搜索的概率大。在此示例中,<eos> 贪婪搜索获得的输出序列 “A”、“B”、“C” 和 “” 不是最佳序列。
接下来,让我们看看 :numref:`fig_s2s-prob2` 中的另一个例子。与 :numref:`fig_s2s-prob1` 不同,在时间步2中,我们选择 :numref:`fig_s2s-prob2` 中的令牌“C”,它具有第二高的条件概率。由于时间步3所基于的时间步1和2处的输出子序列已从 :numref:`fig_s2s-prob1` 中的“A”“B”改变为 :numref:`fig_s2s-prob2` 中的“A”“C”,因此时间步3处的每个标记的条件概率也在 :numref:`fig_s2s-prob2` 中改变。假设我们在时间步3选择令牌“B”。现在,时间步4以前三个时间步“A”、“C”“B”的输出子序列为条件,这与 :numref:`fig_s2s-prob1` 中的“A”、“B”“C”不同。因此,在 :numref:`fig_s2s-prob2` 中的时间步4生成每个标记的条件概率也不同于 :numref:`fig_s2s-prob1` 中的条件概率。结果,:numref:`fig_s2s-prob2`中的输出序列“A”、“C”、“B”和“&lt;eos&gt;”的条件概率为$0.5\times0.3 \times0.6\times0.6=0.054$,这大于:numref:`fig_s2s-prob1`中的贪心搜索的条件概率。在本例中,通过贪心搜索获得的输出序列“A”、“B”、“C”和“&lt;eos&gt;”不是最佳序列。

## 详尽搜索
## 穷举搜索

如果目标是获得最佳序列,我们可以考虑使用 * 详尽无遗的搜索 *:用条件概率详尽枚举所有可能的输出序列,然后输出条件概率最高的输出序列
如果目标是获得最优序列,我们可以考虑使用*穷举搜索*(exhaustive search):穷举地枚举所有可能的输出序列及其条件概率,然后输出条件概率最高的一个

尽管我们可以使用详尽搜索来获得最佳序列,但其计算成本 $\mathcal{O}(\left|\mathcal{Y}\right|^{T'})$ 可能会过高。例如,当 $|\mathcal{Y}|=10000$$T'=10$ 时,我们需要评估 $10000^{10} = 10^{40}$ 序列。这几乎是不可能的另一方面,贪婪搜索的计算成本是 $\mathcal{O}(\left|\mathcal{Y}\right|T')$:它通常远低于详尽搜索。例如,当 $|\mathcal{Y}|=10000$$T'=10$ 时,我们只需要评估 $10000\times10=10^5$ 序列
虽然我们可以使用穷举搜索来获得最优序列,但其计算量$\mathcal{O}(\left|\mathcal{Y}\right|^{T'})$可能过高。例如,当$|\mathcal{Y}|=10000$$T'=10$时,我们需要评估$10000^{10} = 10^{40}$序列。这几乎是不可能的另一方面,贪心搜索的计算量是$\mathcal{O}(\left|\mathcal{Y}\right|T')$:它通常明显小于穷举搜索。例如,当$|\mathcal{Y}|=10000$$T'=10$时,我们只需要评估$10000\times10=10^5$个序列

## 束搜索

关于序列搜索策略的决策取决于一个范围,在任何极端都很容易提出问题。如果只有准确性重要呢?显然,详尽的搜索。如果只有计算成本重要,该怎么办?显然,贪婪的搜索。真实世界的应用程序通常会提出一个复杂的问题,介于这两个极端之间
关于序列搜索策略的决定取决于一个范围,在任何一个极端都有问题。如果只有准确性才重要呢?显然,穷举搜索。如果计算成本很重要呢?显然,贪心搜索。实际应用介于这两个极端之间

*Beam search * 是贪婪搜索的改进版本。它有一个名为 * 束尺寸 * 的超参数,$k$。
在时间步骤 1,我们选择了条件概率最高的 $k$ 令牌。他们每个人都将分别成为 $k$ 个候选输出序列的第一个令牌。在后续的每个时间步中,根据上一个时间步的 $k$ 个候选输出序列,我们继续选择 $k$ 个候选输出序列,其条件概率为 $k\left|\mathcal{Y}\right|$ 个可能的选择
*束搜索*(beam search)是贪心搜索的改进版本。它有一个超参数,名为*束宽*(beam size)$k$。
在时间步1,我们选择具有最高条件概率的$k$个标记。它们中的每一个将分别是$k$个候选输出序列的第一个标记。在随后的每个时间步,基于上一时间步的$k$个候选输出序列,我们继续从$k\left|\mathcal{Y}\right|$个可能的选择中选择具有最高条件概率的$k$个候选输出序列

![The process of beam search (beam size: 2, maximum length of an output sequence: 3). The candidate output sequences are $A$, $C$, $AB$, $CE$, $ABD$, and $CED$.](../img/beam-search.svg)
![束搜索过程(束宽:2,输出序列的最大长度:3)。候选输出序列是$A$$C$$AB$$CE$$ABD$$CED$](../img/beam-search.svg)
:label:`fig_beam-search`

:numref:`fig_beam-search` 以示例演示了光束搜索的过程。假设输出词汇表只包含五个元素:$\mathcal{Y} = \{A, B, C, D, E\}$,其中一个是 “<eos>”。让波束大小为 2,输出序列的最大长度为 3。在时间步骤 1,假设条件概率最高 $P(y_1 \mid \mathbf{c})$ 的令牌分别为 $A$$C$。在时间步骤 2,我们计算了所有 $y_2 \in \mathcal{Y},$
:numref:`fig_beam-search`演示了束搜索的过程。假设输出词表只包含五个元素:$\mathcal{Y} = \{A, B, C, D, E\}$,其中一个是“&lt;eos&gt;”。让束宽为2,输出序列的最大长度为3。在时间步1,假设具有最高条件概率$P(y_1 \mid \mathbf{c})$的标记是$A$$C$。在时间步2,我们计算所有$y_2 \in \mathcal{Y}$:

$$\begin{aligned}P(A, y_2 \mid \mathbf{c}) = P(A \mid \mathbf{c})P(y_2 \mid A, \mathbf{c}),\\ P(C, y_2 \mid \mathbf{c}) = P(C \mid \mathbf{c})P(y_2 \mid C, \mathbf{c}),\end{aligned}$$

然后选择这十个值中最大的两个,比如 $P(A, B \mid \mathbf{c})$$P(C, E \mid \mathbf{c})$。然后在时间步骤 3,对于所有 $y_3 \in \mathcal{Y}$,我们计算
从这十个值中选择最大的两个,比如$P(A, B \mid \mathbf{c})$$P(C, E \mid \mathbf{c})$。然后在时间步3,对于所有$y_3 \in \mathcal{Y}$,我们计算

$$\begin{aligned}P(A, B, y_3 \mid \mathbf{c}) = P(A, B \mid \mathbf{c})P(y_3 \mid A, B, \mathbf{c}),\\P(C, E, y_3 \mid \mathbf{c}) = P(C, E \mid \mathbf{c})P(y_3 \mid C, E, \mathbf{c}),\end{aligned}$$

然后选择这十个值中最大的两个,比如 $P(A, B, D \mid \mathbf{c})$$P(C, E, D \mid \mathbf{c}).$ 因此,我们得到了六个候选输出序列:(i) $A$; (ii) $C$; (iii) 73229293617; (iv) 73229293617; (iv) 73229293614; (v) 73229293618, $E$; (v) $A$ 17,$D$; 以及 (六) $C$、$D$、$D$。
然后从这十个值中选择最大的两个,即$P(A, B, D \mid \mathbf{c})$$P(C, E, D \mid \mathbf{c}).$。结果,我们得到六个候选输出序列:(1)$A$;(2)$C$;(3)$B$;(4)$C$、$E$;(5)$A$、$B$、$D$以及(6)$C$、$D$。

最后,我们获得基于这六个序列的最终候选输出序列集(例如,丢弃包括 “<eos>” 之后的部分)。然后我们选择以下分数最高的序列作为输出序列
最后,我们基于这六个序列(例如,包括“&lt;eos&gt;”和之后的丢弃部分)获得最终候选输出序列集合。然后我们选择以下得分最高的序列作为输出序列

$$ \frac{1}{L^\alpha} \log P(y_1, \ldots, y_{L}) = \frac{1}{L^\alpha} \sum_{t'=1}^L \log P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \mathbf{c}),$$
:eqlabel:`eq_beam-search-score`

其中 $L$ 是最终候选序列的长度,$\alpha$ 通常设置为 0.75。由于在 :eqref:`eq_beam-search-score` 的总和中,较长的序列具有更多的对数术语,分母中的术语 $L^\alpha$ 将处罚长序列
其中$L$是最终候选序列的长度,$\alpha$通常设置为0.75。因为一个较长的序列在:eqref:`eq_beam-search-score`的总和中有更多的对数项,分母中的$L^\alpha$惩罚长序列

光束搜索的计算成本为 $\mathcal{O}(k\left|\mathcal{Y}\right|T')$。这种结果介于贪婪搜索和详尽搜索的结果之间。事实上,贪婪搜索可以被视为波束大小为 1 的特殊类型的光束搜索。通过灵活选择光束尺寸,光束搜索可在准确性与计算成本之间进行权衡
束搜索的计算量为$\mathcal{O}(k\left|\mathcal{Y}\right|T')$。这个结果介于贪心搜索和穷举搜索之间。实际上,贪心搜索可以看作是一种特殊类型的束搜索,束宽为1。通过灵活选择束宽,束搜索可以在精度和计算成本之间进行权衡

## 摘要
## 小结

* 序列搜索策略包括贪婪搜索、详尽搜索和束搜索
* 光束搜索通过灵活选择光束尺寸,在准确性与计算成本之间进行权衡
* 序列搜索策略包括贪心搜索、穷举搜索和束搜索
* 束搜索通过灵活选择束宽,在精度和计算成本之间找到平衡

## 练习

1. 我们可以将详尽搜索视为一种特殊类型的光束搜索吗?为什么或为什么不
1. 在 :numref:`sec_seq2seq` 中的机器翻译问题中应用束搜索。光束大小如何影响翻译结果和预测速度
1. 我们使用语言建模在 :numref:`sec_rnn_scratch` 中用户提供的前缀生成文本。它使用哪种搜索策略?你能改进吗
1. 我们能把穷举搜索看作一种特殊的束搜索吗
1. 在 :numref:`sec_seq2seq` 机器翻译问题中应用束搜索。束宽如何影响结果和预测速度
1. :numref:`sec_rnn_scratch` 中,我们使用语言模型来生成用户提供前缀的文本。它使用了哪种搜索策略?你能改进一下吗

[Discussions](https://discuss.d2l.ai/t/338)