根据官网教程
模型的细节和代码我都不想详细讲了,但是会列出几条看代码之前没有注意到或者和我想象的不同的细节:
1.softmax层只完成了从数字到概率的映射,并不包含任何权重矩阵。
2.tqdm作为进度条工具可以节省很多打印语句
3.网络调优的时候,embedding 后面是可以直接跟relu或者dropout层的。
4. log_softmax+NLLLoss=cross entropy loss
5.encoder和decoder是两个不同的rnn网络,通过隐状态链接起来。
6.decoder的第一个输入是开始标签,接下来的输入可以是上一个timestep的目标单词(训练时),也可以是上一个timestep预测出来的结果单词(预测时)
7.训练时如果提前预测出结束标签,应当立即终止训练,防止错误的影响扩大。
下面稍微详细的讲解一下这里用到的attention的机制,重点就是这张图啦,这张图可是了不得啦!为什么了不得呢!因为是我画的,哈哈哈。。。
attention的本质呢就是前面encoder的所有输出(其实也是隐状态)的加权平均,关键问题就在于这个权重是怎么获取的。先不去想这个问题,我们考虑一下假如说这个加权平均得到了之后,我们该怎么使用这个向量?最简单的操作就是直接接在原来的输入上,但是呢,作者6的不行,并没有这么做,而是把得出来的attention向量,拼接在原来输入上之后,又接了一个前馈神经网络,输出了一个和原来输入一样维度大小的向量。换句话说,attention在这里就是用一个包含记忆信息的向量取代来原来的纯输入的向量。具体看图吧,图画的多好呀。