提交 764e88b9 编写于 作者: A Aston Zhang

rnn and nlp qr

上级 9c76e6b7
......@@ -114,7 +114,7 @@ fastText对于一些语言较重要,例如阿拉伯语、德语和俄语。例
## 结论
## 小结
* GloVe用词向量表达共现词频的对数。
* fastText用子词向量之和表达整词。
......@@ -126,6 +126,6 @@ fastText对于一些语言较重要,例如阿拉伯语、德语和俄语。例
* 如果丢弃GloVe中的偏移项,是否也可以满足任意一对词共现的对称性?
* 在fastText中,子词过多怎么办(例如,6字英文组合数为$26^6$)?(可参考[fastText论文](https://arxiv.org/pdf/1607.04606.pdf)3.2节)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4372)
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4372)
![](../img/qr_glove-fasttext.svg)
......@@ -390,7 +390,7 @@ $$ \exp(\min(0, 1 - \frac{len_{ref}}{len_{MT}})) \prod_{i=1}^k p_n^{1/2^n}$$
需要注意的是,随着$n$的提高,n-gram的精度的权值随着$p_n^{1/2^n}$中的指数减小而提高。例如$0.5^{1/2} \approx 0.7, 0.5^{1/4} \approx 0.84, 0.5^{1/8} \approx 0.92, 0.5^{1/16} \approx 0.96$。换句话说,匹配4-gram比匹配1-gram应该得到更多奖励。另外,模型输出越短往往越容易得到较高的n-gram的精度。因此,BLEU公式里连乘项前面的系数为了惩罚较短的输出。例如当$k=2$时,参考输出为ABCDEF,而模型输出为AB,此时的$p_1 = p_2 = 1$,而$\exp(1-6/3) \approx 0.37$,因此BLEU=0.37。当模型输出也为ABCDEF时,BLEU=1。
## 结论
## 小结
* 我们可以将编码器—解码器和注意力机制应用于神经机器翻译中。
* 束搜索有可能提高输出质量。
......@@ -402,5 +402,6 @@ $$ \exp(\min(0, 1 - \frac{len_{ref}}{len_{MT}})) \prod_{i=1}^k p_n^{1/2^n}$$
* 试着使用更大的翻译数据集来训练模型,例如[WMT](http://www.statmt.org/wmt14/translation-task.html)[Tatoeba Project](http://www.manythings.org/anki/)。调一调不同参数并观察实验结果。
* Teacher forcing:在模型训练中,试着让解码器使用当前时刻的正确结果(而不是预测结果)作为下一时刻的输入。结果会怎么样?
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4689)
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4689)
![](../img/qr_nmt.svg)
......@@ -247,7 +247,7 @@ get_top_k_by_analogy(glove_6b50d, 1, 'bad', 'worst', 'big')
get_top_k_by_analogy(glove_6b50d, 1, 'do', 'did', 'go')
```
## 结论
## 小结
* 使用`mxnet.contrib.text`可以轻松载入预训练的词向量。
* 我们可以应用预训练的词向量求相似词和类比词。
......@@ -260,4 +260,6 @@ get_top_k_by_analogy(glove_6b50d, 1, 'do', 'did', 'go')
* 如果在[使用循环神经网络的语言模型](../chapter_recurrent-neural-networks/rnn-gluon.md)中将Embedding层初始化为预训练的词向量,效果如何?
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4373)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4373)
![](../img/qr_pretrained-embedding.svg)
......@@ -133,7 +133,7 @@ $$\boldsymbol{z}_{t^\prime} = \sigma(\boldsymbol{W}_{yz} \boldsymbol{y}_{t^\prim
$$\tilde{\boldsymbol{s}}_{t^\prime} = \text{tanh}(\boldsymbol{W}_{ys} \boldsymbol{y}_{t^\prime-1} + \boldsymbol{W}_{ss} (\boldsymbol{s}_{t^\prime - 1} \odot \boldsymbol{r}_{t^\prime}) + \boldsymbol{W}_{cs} \boldsymbol{c}_{t^\prime} + \boldsymbol{b}_s)$$
## 结论
## 小结
* 编码器-解码器(seq2seq)的输入和输出可以都是不定长序列。
* 在解码器上应用注意力机制可以在解码器的每个时刻使用不同的背景向量。每个背景向量相当于对输入序列的不同部分分配了不同的注意力。
......@@ -149,4 +149,6 @@ $$\tilde{\boldsymbol{s}}_{t^\prime} = \text{tanh}(\boldsymbol{W}_{ys} \boldsymbo
* 除了自然语言处理,注意力机制还可以应用在哪些地方?
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4523)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4523)
![](../img/qr_seq2seq-attention.svg)
......@@ -168,7 +168,7 @@ $$\mathbb{P}(w_3 \mid w_i) = \sigma(\mathbf{u}_{n(w_3,1)}^\top \mathbf{v}_i)) \c
## 结论
## 小结
word2vec工具中的跳字模型和连续词袋模型可以使用两种负采样和层序softmax减小训练开销。
......@@ -179,5 +179,6 @@ word2vec工具中的跳字模型和连续词袋模型可以使用两种负采样
* 一些"the"和"a"之类的英文高频词会对结果产生什么影响?该如何处理?(可参考[word2vec论文](https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf)第2.3节)
* 如何训练包括例如"new york"在内的词组向量?(可参考[word2vec论文](https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf)第4节)。
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4203)
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4203)
![](../img/qr_word2vec.svg)
......@@ -111,7 +111,7 @@ $$
还有需要注意的是,反向传播对于各层中变量和参数的梯度计算可能会依赖通过正向传播计算出的各层变量和参数的当前值。举例来说,参数梯度$\partial L/\partial \boldsymbol{W}_{hh}$的计算需要依赖隐含层变量在时刻$t = 1, \ldots, T-1$的当前值$\boldsymbol{h}_t$($\boldsymbol{h}_0$是初始化得到的)。这个当前值是通过从输入层到输出层的正向传播计算并存储得到的。
##
##
* 所谓通过时间反向传播只是反向传播在循环神经网络的具体应用。
* 当每个时序训练数据样本的时序长度$T$较大或者时刻$t$较小,目标函数有关隐含层变量梯度较容易出现衰减和爆炸。
......@@ -122,4 +122,6 @@ $$
- 在循环神经网络中,梯度裁剪是否对梯度衰减和爆炸都有效?
- 你还能想到别的什么方法可以应对循环神经网络中的梯度衰减和爆炸现象?
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/3711)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/3711)
![](../img/qr_bptt.svg)
......@@ -174,7 +174,7 @@ utils.train_and_predict_rnn(rnn=gru_rnn, is_random_iter=False, epochs=200,
可以看到一开始学到简单的字符,然后简单的词,接着是复杂点的词,然后看上去似乎像个句子了。
## 结论
## 小结
* 门控循环单元的提出是为了更好地捕捉时序数据中间隔较大的依赖关系。
* 重置门有助于捕捉时序数据中短期的依赖关系。
......@@ -186,4 +186,6 @@ utils.train_and_predict_rnn(rnn=gru_rnn, is_random_iter=False, epochs=200,
* 调调参数(例如数据集大小、序列长度、隐含状态长度和学习率),看看对运行时间、perplexity和预测的结果造成的影响。
* 在相同条件下,比较门控循环单元和循环神经网络的运行效率。
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4042)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4042)
![](../img/qr_gru-scratch.svg)
......@@ -196,7 +196,7 @@ utils.train_and_predict_rnn(rnn=lstm_rnn, is_random_iter=False, epochs=200,
可以看到一开始学到简单的字符,然后简单的词,接着是复杂点的词,然后看上去似乎像个句子了。
## 结论
## 小结
* 长短期记忆的提出是为了更好地捕捉时序数据中间隔较大的依赖关系。
* 长短期记忆的结构比门控循环单元的结构较复杂。
......@@ -207,4 +207,6 @@ utils.train_and_predict_rnn(rnn=lstm_rnn, is_random_iter=False, epochs=200,
* 调调参数(例如数据集大小、序列长度、隐含状态长度和学习率),看看对运行时间、perplexity和预测的结果造成的影响。
* 在相同条件下,比较长短期记忆和门控循环单元以及循环神经网络的运行效率。
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4042)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4042)
![](../img/qr_lstm-scratch.svg)
......@@ -282,7 +282,7 @@ test_L = model_eval(test_data)
print('Test loss %.2f, test perplexity %.2f' % (test_L, math.exp(test_L)))
```
## 结论
## 小结
* 我们可以使用Gluon轻松训练各种不同的循环神经网络,并设置网络参数,例如网络的层数。
* 训练迭代中需要将隐含状态从计算图中分离,使模型参数梯度计算只依赖当前的时序数据批量采样。
......@@ -292,4 +292,6 @@ print('Test loss %.2f, test perplexity %.2f' % (test_L, math.exp(test_L)))
* 调调参数(例如epochs、隐含层的层数、序列长度、隐含状态长度和学习率),看看对运行时间、训练集、验证集和测试集上perplexity造成的影响。
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/4089)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/4089)
![](../img/qr_rnn-gluon.svg)
......@@ -467,7 +467,7 @@ train_and_predict_rnn(rnn=rnn, is_random_iter=False, epochs=200, num_steps=35,
可以看到一开始学到简单的字符,然后简单的词,接着是复杂点的词,然后看上去似乎像个句子了。
## 结论
## 小结
* 通过隐含状态,循环神经网络适合处理前后有依赖关系时序数据样本。
* 对前后有依赖关系时序数据样本批量采样时,我们可以使用随机批量采样和相邻批量采样。
......@@ -479,4 +479,6 @@ train_and_predict_rnn(rnn=rnn, is_random_iter=False, epochs=200, num_steps=35,
* 调调参数(例如数据集大小、序列长度、隐含状态长度和学习率),看看对运行时间、perplexity和预测的结果造成的影响。
* 在随机批量采样中,如果在同一个epoch中只把隐含变量在该epoch开始的时候初始化会怎么样?
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/989)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/989)
![](../img/qr_rnn-scratch.svg)
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册