提交 c755a32e 编写于 作者: W wizardforcel

2021-01-18 15:33:14

上级 8ccc6e24
......@@ -248,7 +248,7 @@ class MNISTClassifier(nn.Module):
self.dropout = nn.Dropout(p=0.2)
```
辍学是一种规范化我们的神经网络以防止过拟合的方法。 在每个训练纪元上,对于已应用丢包的层中的每个节点,都有可能(此处定义为`p`= 20% )该层内的每个节点将不用于训练/反向传播 。 这意味着,在训练时,我们的网络会针对过拟合变得健壮,因为在训练过程的每次迭代中都不会使用每个节点。 这可以防止我们的网络过于依赖网络中特定节点的预测。
辍学是一种规范化我们的神经网络以防止过拟合的方法。 在每个训练纪元上,对于已应用丢包的层中的每个节点,都有可能(此处定义为`p`= 20%)该层内的每个节点将不用于训练/反向传播 。 这意味着,在训练时,我们的网络会针对过拟合变得健壮,因为在训练过程的每次迭代中都不会使用每个节点。 这可以防止我们的网络过于依赖网络中特定节点的预测。
## 定义前向通行证
......
......@@ -121,7 +121,7 @@ cosine_similarity(predicted_king_embedding.reshape(1, -1), glove['king'].reshape
图 3.7 – GLoVe 向量的输出
尽管 GLoVe 嵌入是非常有用的预先计算的嵌入,但实际上我们可以计算自己的嵌入。 当我们分析特别独特的语料库时,这可能很有用。 例如,Twitter 上使用的语言可能与 Wikipedia 上使用的语言不同,因此在一个语言上训练的嵌入可能对另一个语言没有用。 现在,我们将演示如何使用连续的词袋来计算自己的嵌入。
尽管 GLoVe 嵌入是非常有用的预先计算的嵌入,但实际上我们可以计算自己的嵌入。 当我们分析特别独特的语料库时,这可能很有用。 例如,Twitter 上使用的语言可能与维基百科上使用的语言不同,因此在一个语言上训练的嵌入可能对另一个语言没有用。 现在,我们将演示如何使用连续的词袋来计算自己的嵌入。
# 探索 CBOW
......
......@@ -172,7 +172,7 @@ BERT 是按照**转换器**的原理构建的,现在将对其进行详细说
既然我们知道了如何计算每个向量,那么了解每个向量代表什么就很重要。 从本质上讲,每一个都是注意机制内概念的抽象。 一旦我们看到它们是如何计算的,这将变得显而易见。
让我们继续我们的工作示例。 我们需要依次考虑输入句子中的每个单词。 为此,我们为句子中的每对查询/关键字向量计算得分。 这是通过获取输入句子中每个单词的每个查询/关键字向量对的点积来完成的。 例如,要计算句子“ this”中第一个单词的分数,我们计算“ this”的查询向量与位置 0 处的键向量之间的点积。我们在所有其他位置的键向量中重复此点积 输入句子中的位置,因此我们获得输入句子中第一个单词的`n`分,其中`n`是句子的长度:
让我们继续我们的工作示例。 我们需要依次考虑输入句子中的每个单词。 为此,我们为句子中的每对查询/关键字向量计算得分。 这是通过获取输入句子中每个单词的每个查询/关键字向量对的点积来完成的。 例如,要计算句子中第一个单词`this`的分数,我们计算`this`的查询向量与位置 0 处的键向量之间的点积。我们在所有其他位置的键向量中重复此点积 输入句子中的位置,因此我们获得输入句子中第一个单词的`n`分,其中`n`是句子的长度:
**分数(`"this"`)**
......@@ -214,7 +214,7 @@ E0 = Embedding with Time Signal
x0 + t0 = E0
```
我们的模型为每个位置学习不同的位置编码向量(`t`0,`t`1,依此类推),然后我们将应用于输入句子中的每个单词,然后再输入 甚至输入我们的编码器:
我们的模型为每个位置学习不同的位置编码向量(`t0``t1`,依此类推),然后我们将应用于输入句子中的每个单词,然后再输入 甚至输入我们的编码器:
![Figure 9.8 – Adding input to the encoder ](img/B12365_09_8.jpg)
......@@ -339,7 +339,7 @@ This is only the first th
随着“假新闻”的兴起和使用互联网的错误信息的传播,类似的示例说明了使用这些模型生成逼真的文本是多么简单。 让我们考虑一个示例,其中代理希望在线上生成有关多个主题的虚假新闻。 现在,他们甚至不需要自己编写虚假信息。 从理论上讲,他们可以训练 NLP 模型为他们执行此操作,然后再在互联网上散布这些虚假信息。 GPT-2 的作者在训练并将模型发布给公众时特别注意这一点,并指出该模型有可能被滥用和滥用,因此只有在他们看不到证据的情况下才向公众发布更大更复杂的模型。 较小型号的误用。
这可能成为 NLP 深度学习向前发展的重点。 当我们使用可以接近人类复杂程度的聊天机器人和文本生成器(例如 GPT-2)时,需要充分了解对这些模型的使用和误用。 研究表明,GPT-2 生成的文本被认为与《纽约时报》的真实人类书面文章(83% )几乎一样可信(72% )。 随着将来我们继续开发更复杂的深层 NLP 模型,随着模型生成的文本变得越来越现实,这些数字可能会收敛。
这可能成为 NLP 深度学习向前发展的重点。 当我们使用可以接近人类复杂程度的聊天机器人和文本生成器(例如 GPT-2)时,需要充分了解对这些模型的使用和误用。 研究表明,GPT-2 生成的文本被认为与《纽约时报》的真实人类书面文章(83%)几乎一样可信(72%)。 随着将来我们继续开发更复杂的深层 NLP 模型,随着模型生成的文本变得越来越现实,这些数字可能会收敛。
此外,GPT-2 的作者还证明可以对模型进行微调以防滥用。 通过在意识形态极端立场上微调 GPT-2 并生成文本,可以证明可以生成支持这些意识形态的宣传文本。 虽然还显示可以训练反模型来检测这些模型生成的文本,但是随着这些模型变得更加复杂,我们将来可能在这里再次面临进一步的问题。
......@@ -426,7 +426,7 @@ Jeff the chef drinks…
![Figure 9.17 Breaking down a sentence into its constituent parts ](img/B12365_09_17.jpg)
图 9.17 将句子分为几个组成部分
图 9.17 将句子分为几个组成部分
句子的这些部分具有特定的语义角色。 任何给定句子的**谓词**表示该句子内发生的事件,而该句子的所有其他部分都与给定谓词相关。 在这句话中,我们可以将“谁”标记为谓词的代理。 **代理**是导致事件的原因。 我们还可以将`Whom`标记为谓词的主题。 **主题**是我们句子中受相关事件影响最大的元素:
......@@ -512,7 +512,7 @@ Figure 9.20 – Bi-directional LSTM (SLING)
在这里,使用模型来量化文本的含义特别有用。 文本蕴含也是一个独特的问题,因为两个句子可能没有完全相同的含义,但是仍然可以从另一个推断出一个句子。 这需要在大多数语言模型中不存在的语言推论元素。 通过将语言推论的元素纳入我们未来的模型中,我们可以更好地捕获文本的含义,并且能够确定两个文本是否包含相同的信息,而无论它们的表示形式是否相似。
幸运的是,创建简单的文本包含模型并不困难,并且已证明基于 LSTM 的模型是有效的。 可能证明有效的一种设置是 Siamese LSTM 网络的设置。
幸运的是,创建简单的文本包含模型并不困难,并且已证明基于 LSTM 的模型是有效的。 可能证明有效的一种设置是连体 LSTM 网络的设置。
我们将模型设置为多类分类问题,其中两个文本可以是正数或负数,也可以是零数。 我们将两个文本输入到双输入模型中,从而获得两个文本的嵌入,然后将它们传递到双向 LSTM 层。 然后,将这两个输出以某种方式(使用一些张量操作)进行比较,然后再将它们输出给最终的 LSTM 层。 最后,我们使用 softmax 层对输出执行分类:
......@@ -550,9 +550,9 @@ A: No
图 9.22 –查找信息的过程
在此示例中,为回答`What is the boiling point of water`,我们首先提出问题。 然后,我们在搜索引擎上搜索主题。 这可能是该问题的某种简化表示; 例如,`boiling point of water`。 然后,我们的搜索引擎将返回一些相关文档,最有可能是 Wikipedia 中关于水的条目,然后我们将不得不手动搜索并使用它来推断问题的答案。 尽管此方法有效,但机器理解模型将使此过程有所简化。
在此示例中,为回答`What is the boiling point of water`,我们首先提出问题。 然后,我们在搜索引擎上搜索主题。 这可能是该问题的某种简化表示; 例如,`boiling point of water`。 然后,我们的搜索引擎将返回一些相关文档,最有可能是维基百科中关于水的条目,然后我们将不得不手动搜索并使用它来推断问题的答案。 尽管此方法有效,但机器理解模型将使此过程有所简化。
假设我们有一个完美的模型,能够完全理解并回答文本语料库上的问题。 我们可以在大量数据源(例如,互联网或 Wikipedia 的大型文本抓图)上训练该模型,并形成充当大型知识库的模型。 这样,我们便可以查询具有实际问题的知识库,并且答案将自动返回。 这消除了我们图的推理步骤,因为推理已由模型处理,因为该模型已经对主题有所了解:
假设我们有一个完美的模型,能够完全理解并回答文本语料库上的问题。 我们可以在大量数据源(例如,互联网或维基百科的大型文本抓图)上训练该模型,并形成充当大型知识库的模型。 这样,我们便可以查询具有实际问题的知识库,并且答案将自动返回。 这消除了我们图的推理步骤,因为推理已由模型处理,因为该模型已经对主题有所了解:
![Figure 9.23 – New process using a model ](img/B12365_09_23.jpg)
......@@ -560,7 +560,7 @@ A: No
在理想情况下,这就像键入搜索引擎`What is the boiling point of water`,并返回`100 °C (212 °F)`作为答案一样简单。
假设我们首先有此模型的简化版本。 假设我们已经知道该问题的答案已出现在文档中。因此,鉴于有关水的 Wikipedia 页面,我们能否训练一个模型来回答问题`What is the boiling point of water`。首先做一个简单的方法,而不是合并完整语言模型的元素,而是简单地返回包含我们问题答案的 Wikipedia 页面的段落。
假设我们首先有此模型的简化版本。 假设我们已经知道该问题的答案已出现在文档中。因此,鉴于有关水的维基百科页面,我们能否训练一个模型来回答问题`What is the boiling point of water`。首先做一个简单的方法,而不是合并完整语言模型的元素,而是简单地返回包含我们问题答案的维基百科页面的段落。
我们可以训练以完成此任务的架构可能看起来像这样:
......
......@@ -14,7 +14,7 @@
### 注意
根据 Wikipedia 的说法,Fizz buzz [1]是一款针对儿童的小组文字游戏,可以教他们有关分裂的知识。 玩家轮流进行递增计数。 被三整除的任何数字[2]被单词 fizz 替换,被五整除的任何数字被 buzz 单词替换。 两者均分的数字成为嘶嘶声。
根据维基百科的说法,Fizz buzz [1]是一款针对儿童的小组文字游戏,可以教他们有关分裂的知识。 玩家轮流进行递增计数。 被三整除的任何数字[2]被单词 fizz 替换,被五整除的任何数字被 buzz 单词替换。 两者均分的数字成为嘶嘶声。
**艾伦人工智能研究所****AI2**)的研究工程师之一乔尔·格鲁斯(Joel Grus)在一个有趣的示例中使用了 Fizz 嗡嗡声,而则在博客中发文[ 3]在 TensorFlow 上。 尽管该示例没有解决任何实际问题,但该博客文章颇具吸引力,很高兴看到神经网络如何学会从数字流中找到数学模式。
......@@ -596,7 +596,7 @@ for epoch in range(epochs):
## 参考
1. [Fizz buzz Wikipedia 页面](https://en.wikipedia.org/wiki/Fizz_buzz)
1. [Fizz buzz维基百科页面](https://en.wikipedia.org/wiki/Fizz_buzz)
2. [除法(数学)维基百科页面](https://en.wikipedia.org/wiki/Division_(mathematics))
3. Joel Grus,[《Tensorflow 中的 Fizz buzz》](http://joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow/)
4. Ian Goodfellow,Yoshua Bengio 和 Aaron Courville,[《深度学习》](http://www.deeplearningbook.org/)
\ No newline at end of file
......@@ -100,7 +100,7 @@ array([[O., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
Word2vec 是一种无监督的学习算法,在这种算法中,网络未经训练就进行嵌入。 这意味着您可以在一个英语数据集上训练 word2vec 模型,并使用它为另一模型生成嵌入。
另一种流行的单词嵌入算法叫做 GloVe(我们将在本章中使用它),它来​​自斯坦福大学 NLP 小组。 尽管两种实现都试图解决相同的问题,但是它们都使用了截然不同的方法。 Word2vec 正在使用嵌入来提高预测能力; 也就是说,算法尝试通过使用上下文词来预测目标词。 随着预测精度的提高,嵌入变得更强。 GloVe 是一个基于计数的模型,其中我们制作了一个庞大的表,该表显示每个单词与其他单词对应的频率。 显然,如果词汇量很高,并且使用的是诸如 Wikipedia 之类的大型文本集,那么这将构成一个巨大的表格。 因此,我们对该表进行降维,以获得大小合理的嵌入矩阵。
另一种流行的单词嵌入算法叫做 GloVe(我们将在本章中使用它),它来​​自斯坦福大学 NLP 小组。 尽管两种实现都试图解决相同的问题,但是它们都使用了截然不同的方法。 Word2vec 正在使用嵌入来提高预测能力; 也就是说,算法尝试通过使用上下文词来预测目标词。 随着预测精度的提高,嵌入变得更强。 GloVe 是一个基于计数的模型,其中我们制作了一个庞大的表,该表显示每个单词与其他单词对应的频率。 显然,如果词汇量很高,并且使用的是诸如维基百科之类的大型文本集,那么这将构成一个巨大的表格。 因此,我们对该表进行降维,以获得大小合理的嵌入矩阵。
像其他 PyTorch 层一样,PyTorch 在`torch.nn`中创建了一个嵌入层。 尽管我们可以使用预训练的模型,但它对于我们的自定义数据集是可训练的。 嵌入层需要词汇量和我们要保留的嵌入尺寸的大小。 通常,我们使用`300`作为嵌入维度:
......
......@@ -422,7 +422,7 @@ Forward: 349.335 us | Backward 443.523 us
```
我们已经可以看到前进功能的明显提速(超过 30% )。 对于后退功能,可以看到加速,尽管不是很大。 我在上面编写的后向通行证没有特别优化,并且肯定可以改进。 而且,PyTorch 的自动微分引擎可以自动并行化计算图,可以整体上使用更高效的操作流程,并且也可以用 C++ 来实现,因此有望实现更快的速度。 不过,这是一个良好的开始。
我们已经可以看到前进功能的明显提速(超过 30%)。 对于后退功能,可以看到加速,尽管不是很大。 我在上面编写的后向通行证没有特别优化,并且肯定可以改进。 而且,PyTorch 的自动微分引擎可以自动并行化计算图,可以整体上使用更高效的操作流程,并且也可以用 C++ 来实现,因此有望实现更快的速度。 不过,这是一个良好的开始。
#### GPU 设备上的性能
......
......@@ -18,7 +18,7 @@
* BERT,或者说 Transformers 的双向嵌入表示,是一种预训练语言表示的新方法,它可以在许多常见的自然语言处理(NLP)任务(例如问题解答,文本分类, 和别的。 可以在此处找到[](https://arxiv.org/pdf/1810.04805.pdf)
* PyTorch 中的动态量化支持将浮点模型转换为具有静态 int8 或 float16 数据类型的权重和动态量化激活的量化模型。 当权重量化为 int8 时,激活(每批)动态量化为 int8。 在 PyTorch 中,我们有 [torch.quantization.quantize_dynamic API](https://pytorch.org/docs/stable/quantization.html#torch.quantization.quantize_dynamic) ,该 API 用仅动态权重的量化版本替换了指定的模块,并输出了量化模型。
* 我们在通用语言理解评估基准[(GLUE)](https://gluebenchmark.com/)中演示了 [Microsoft Research Paraphrase 语料库(MRPC)任务](https://www.microsoft.com/en-us/download/details.aspx?id=52398)的准确率和推理性能结果。 MRPC(Dolan 和 Brockett,2005 年)是从在线新闻源中自动提取的句子对的语料库,带有人工注释,说明句子中的句子在语义上是否等效。 由于班级不平衡(正向为 68%,负向为 32% ),我们遵循常规做法并报告 [F1 得分](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html)。 MRPC 是用于语言对分类的常见 NLP 任务,如下所示。
* 我们在通用语言理解评估基准[(GLUE)](https://gluebenchmark.com/)中演示了 [Microsoft Research Paraphrase 语料库(MRPC)任务](https://www.microsoft.com/en-us/download/details.aspx?id=52398)的准确率和推理性能结果。 MRPC(Dolan 和 Brockett,2005 年)是从在线新闻源中自动提取的句子对的语料库,带有人工注释,说明句子中的句子在语义上是否等效。 由于班级不平衡(正向为 68%,负向为 32%),我们遵循常规做法并报告 [F1 得分](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html)。 MRPC 是用于语言对分类的常见 NLP 任务,如下所示。
![../_img/bert.png](img/b43b70d8a6eef9ea4f75867b5e83b483.png)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册