提交 6ae00503 编写于 作者: W wizardforcel

2021-01-18 17:37:37

上级 22b26079
......@@ -12,7 +12,7 @@
几次迭代和多年的研究得出了 RNN 架构设计的几种不同方法。 最新的模型现在使用**长短期记忆****LSTM**)实现或**门控循环单元****GRU**)。 这两种实现都将 RNN 单元内的门用于不同目的,例如遗忘门,它使网络忘记不必要的信息。 这些架构具有香草 RNN 所存在的长期依赖性问题,因此使用门不仅要忘记不必要的信息,而且要记住在长距离移动到最后一个单元时所必需的信息。
注意是下一个重大发明,它可以帮助网络将注意力集中在输入的重要部分上,而不是搜索整个输入并试图找到答案。 实际上,来自 Google Brain 和多伦多大学的一个团队证明,注意力可以击败 LSTM 和 GRU 网络[1]。 但是,大多数实现都同时使用 LSTM / GRU 和注意力。
注意是下一个重大发明,它可以帮助网络将注意力集中在输入的重要部分上,而不是搜索整个输入并试图找到答案。 实际上,来自 Google Brain 和多伦多大学的一个团队证明,注意力可以击败 LSTM 和 GRU 网络[1]。 但是,大多数实现都同时使用 LSTM/GRU 和注意力。
嵌入是通过比较单词在单词簇中的分布来找到单词的概念含义的另一种革命性思想。 嵌入保持单词之间的关系,并将这种关系(它从单词簇中的单词分布中找到)转换为一组浮点数。 嵌入大大减少了输入大小,并极大地提高了性能和准确率。 我们将使用 word2vec 进行实验。
......@@ -333,7 +333,7 @@ class RNNClassifier(nn.Module):
##### 辍学
辍学是 Apple 的机器学习工程师 Nitish Srivastava 提出的革命性想法。 它消除了对通常的正则化技术的需要,该技术在引入辍学之前一直很普遍。 借助 dropout,我们丢弃了网络中神经元之间的随机连接,因此网络必须泛化并且不能偏向任何类型的外部因素。 要删除神经元,只需将​​其输出设置为零即可。 丢弃随机神经元可防止网络共同适应,因此在很大程度上减少了过拟合。
辍学是 Apple 的机器学习工程师 Nitish Srivastava 提出的革命性想法。 它消除了对通常的正则化技术的需要,该技术在引入辍学之前一直很普遍。 借助丢弃,我们丢弃了网络中神经元之间的随机连接,因此网络必须泛化并且不能偏向任何类型的外部因素。 要删除神经元,只需将​​其输出设置为零即可。 丢弃随机神经元可防止网络共同适应,因此在很大程度上减少了过拟合。
![Dropout](img/B09475_05_05.jpg)
......@@ -407,7 +407,7 @@ class Encoder(nn.Module):
##### LSTMCell 和 GRUCell
`LSTMCell``GRUCell`的函数式 API 绝对相似,这也正是定制`RNNCell`的方式。 它们接受输入大小和初始化程序的隐藏大小。 `forward`调用接受具有输入大小的微型输入批量,并为该实例创建单元状态和隐藏状态,然后将其传递给下一个执行输入。 在静态图框架中实现这种的实现非常困难,因为该图在整个执行期间都是预先编译的并且是静态的。 循环语句也应作为图节点作为图的一部分。 这需要用户学习那些额外的 op 节点或其他在内部处理循环的函数式 API。
`LSTMCell``GRUCell`的函数式 API 绝对相似,这也正是定制`RNNCell`的方式。 它们接受输入大小和初始化程序的隐藏大小。 `forward`调用接受具有输入大小的微型输入批量,并为该实例创建单元状态和隐藏状态,然后将其传递给下一个执行输入。 在静态图框架中实现这种的实现非常困难,因为该图在整个执行期间都是预先编译的并且是静态的。 循环语句也应作为图节点作为图的一部分。 这需要用户学习那些额外的操作节点或其他在内部处理循环的函数式 API。
#### LSTM 和 GRU
......@@ -467,7 +467,7 @@ RNN 实现通常是单向的,这就是到目前为止我们已经实现的。
高级`RNNClassifier`与简单`RNNClassifier`完全相同,唯一的例外是 RNN 编码器已被 LSTM 或 GRU 编码器替代。 但是,高级分类器由于使用了高度优化的 cuDNN 后端,因此可以显着提高网络性能,尤其是在 GPU 上。
我们为高级 RNN 开发的模型是多层双向 LSTM / GRU 网络。 增加对配方的关注可大大提高性能。 但这不会改变分类器,因为所有这些组件都将使用`Encoder`方法包装,并且分类器仅担心`Encoder`的功能 API 不会改变。
我们为高级 RNN 开发的模型是多层双向 LSTM/GRU 网络。 增加对配方的关注可大大提高性能。 但这不会改变分类器,因为所有这些组件都将使用`Encoder`方法包装,并且分类器仅担心`Encoder`的功能 API 不会改变。
##### 注意
......@@ -566,7 +566,7 @@ class SPINN(nn.Module):
self.tracker = Tracker(config.d_hidden, config.d_tracker,predict=config.predict)
```
`forward`调用的主要部分是对`Tracker``forward`方法的调用,该方法将处于循环中。 我们遍历输入序列,并为转换序列中的每个单词调用`Tracker``forward`方法,然后根据转换实例将输出保存到上下文向量列表中。 如果转换是“ shift”,则堆栈将在后面附加当前单词;如果转换是“ reduce”,则将调用`Reduce`并创建跟踪,并在最左边和最右边的单词, 这将从左侧和右侧列表中弹出。
`forward`调用的主要部分是对`Tracker``forward`方法的调用,该方法将处于循环中。 我们遍历输入序列,并为转换序列中的每个单词调用`Tracker``forward`方法,然后根据转换实例将输出保存到上下文向量列表中。 如果转换是`shift`,则堆栈将在后面附加当前单词;如果转换是`reduce`,则将调用`Reduce`并创建跟踪,并在最左边和最右边的单词, 这将从左侧和右侧列表中弹出。
```py
def forward(self, buffers, transitions):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册