seq2seq最早用于Neural Machine Translation(NMT)领域(与之相对应的有Statistical Machine Translation)。训练后的seq2seq模型,可以根据输入语句,自动生成翻译后的输出语句。
上图是seq2seq的结构图。可以看出seq2seq实际上是一种Encoder-Decoder结构。
在Encoder阶段,RNN依次读入输入序列。但由于这时,没有输出序列与之对应,因此这仅仅相当于一个对隐层的编码过程,即将句子的语义编码为隐层的状态向量。
从中发现一个问题:状态向量的维数决定了存储的语义的内容上限(显然不能指望,一个200维的向量,能够表示一部百科全书。)因此,seq2seq通常只用于短文本的翻译。
在Decoder阶段,我们根据输出序列,反向修正RNN的参数,以达到训练神经网络的目的。
https://guillaumegenthial.github.io/sequence-to-sequence.html
Seq2Seq with Attention and Beam Search
https://blog.csdn.net/mr_tyting/article/details/78604721
Seq2Seq Learning(Encoder-Decoder,Beam Search,Attention)
https://github.com/ematvey/tensorflow-seq2seq-tutorials
一步步的seq2seq教程
http://blog.csdn.net/sunlylorn/article/details/50607376
seq2seq模型
http://datartisan.com/article/detail/120.html
Seq2Seq的DIY简介
https://mp.weixin.qq.com/s/U5yqXBHFD9LgIQJrqOlXFw
机器翻译不可不知的Seq2Seq模型
http://www.cnblogs.com/Determined22/p/6650373.html
DL4NLP——seq2seq+attention机制的应用:文档自动摘要(Automatic Text Summarization)
https://mp.weixin.qq.com/s/m-Z0UBgmFQ4CE0yLKYoHZw
seq2seq和attention如何应用到文档自动摘要
http://blog.csdn.net/young_gy/article/details/73412285
基于RNN的语言模型与机器翻译NMT
http://karpathy.github.io/2015/05/21/rnn-effectiveness/
The Unreasonable Effectiveness of Recurrent Neural Networks
https://mp.weixin.qq.com/s/8u3v9XzECkwcNn5Ay-kYQQ
基于Depthwise Separable Convolutions的Seq2Seq模型_SliceNet原理解析
https://mp.weixin.qq.com/s/H6eYxS7rXGDH_B8Znrxqsg
seq2seq中的beam search算法过程
https://mp.weixin.qq.com/s/U1yHIc5Zq0yKCezRm185VA
Attentive Sequence to Sequence Networks
https://mp.weixin.qq.com/s/cGXANj7BB2ktTdPAL4ZEWA
图解神经网络机器翻译原理:LSTM、seq2seq到Zero-Shot
https://mp.weixin.qq.com/s/jYUAKyTpm69J6Q34A06E-w
百度提出冷聚变方法:使用语言模型训练Seq2Seq模型
https://mp.weixin.qq.com/s/Fp6G1aI_utDd_kTbdHvEVQ
完全基于卷积神经网络的seq2seq
http://localhost:4500/theory/2017/06/21/Deep_Learning_6.html
从2017年顶会论文看Attention Model
https://mp.weixin.qq.com/s/Op_oYiNvaTXvsvAnl8Heew
基于Self-attention的文本向量表示方法,悉尼科技大学和华盛顿大学最新工作
https://mp.weixin.qq.com/s/fBrt4g_Kjmt1tGVZw5KgrQ
从LSTM到Seq2Seq
https://mp.weixin.qq.com/s/riIC6ybvqAJx9mzb-AQIOw
Facebook AI发布新版本FairSeq序列到序列(Seq2Seq)学习工具,可生成故事与快速推断
https://mp.weixin.qq.com/s/DIqjVxF_kACkivzez4_Hog
编码器-解码器网络:神经翻译模型详解
https://mp.weixin.qq.com/s/Alg4rOXNvb4GA8N4Joy-Jg
Seq2seq强化,Pointer Network简介
https://mp.weixin.qq.com/s/kdmmgVdWxz2nJPmjcprvqg
机器学习中的编码器-解码器结构哲学
https://mp.weixin.qq.com/s/OcrT2-sAWJg-ILdHwi4t5Q
seq2seq最新变体,稀疏序列模型
https://mp.weixin.qq.com/s/_1lr612F3x8ld9gvXj9L2A
推断速度达seq2seq模型的100倍,谷歌开源文本生成新方法LaserTagger
在《深度学习(三)》中,我们已经简单的介绍了Batch Normalization的基本概念。这里主要讲述一下它的实现细节。
我们知道在神经网络训练开始前,都要对输入数据做一个归一化处理,那么具体为什么需要归一化呢?归一化后有什么好处呢?
原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
对输入数据归一化,早就是一种基本操作了。然而这样只对神经网络的输入层有效。更好的办法是对每一层都进行归一化。
然而简单的归一化,会破坏神经网络的特征。(归一化是线性操作,但神经网络本身是非线性的,不具备线性不变性。)因此,如何归一化,实际上是个很有技巧的事情。
首先,我们回顾一下归一化的一般做法:
\[\hat x^{(k)} = \frac{x^{(k)} - E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}\tag{1}\]其中,\(x = (x^{(0)},x^{(1)},…x^{(d)})\)表示d维的输入向量。
接着,定义归一化变换函数:
\[y^{(k)}=\gamma^{(k)}\hat x^{(k)}+\beta^{(k)}\tag{2}\]这里的\(\gamma^{(k)},\beta^{(k)}\)是待学习的参数。
BN的主要思想是用同一batch的样本分布来近似整体的样本分布。显然,batch size越大,这种近似也就越准确。
用\(\mathcal{B}=\{x_{1,\dots,m}\}\)表示batch,则BN的计算过程如下:
Step 1.计算mini-batch mean。
\[\mu_\mathcal{B}\leftarrow \frac{1}{m}\sum_{i=1}^mx_i\tag{3}\]Step 2.计算mini-batch variance。
\[\sigma_\mathcal{B}^2\leftarrow \frac{1}{m}\sum_{i=1}^m(x_i-\mu_\mathcal{B})^2\tag{4}\]Step 3.normalize。
\[\hat x_i\leftarrow \frac{x_i-\mu_\mathcal{B}}{\sqrt{\sigma_\mathcal{B}^2+\epsilon}}\tag{5}\]这里的\(\epsilon\)是为了数值的稳定性而添加的常数。
Step 4.scale and shift。
\[y_i=\gamma\hat x_i+\beta\equiv BN_{\gamma,\beta}(x_i)\tag{6}\]在实际使用中,BN计算和卷积计算一样,都被当作神经网络的其中一层。即:
\[z=g(Wx+b)\rightarrow z=g(BN(Wx+b))=g(BN(Wx))\tag{7}\]从另一个角度来看,BN的均值、方差操作,相当于去除一阶和二阶信息,而只保留网络的高阶信息,即非线性部分。因此,上式最后一步中b被忽略,也就不难理解了。
BN的误差反向算法相对复杂,这里不再赘述。
在inference阶段,BN网络忽略Step 1和Step 2,只计算后两步。
\(\beta,\gamma\)由之前的训练得到。
\(\mu,\sigma\)原则上要求使用全体样本的均值和方差,但样本量过大的情况下,也可使用训练时的若干个mini batch的均值和方差的FIR滤波值。因此,这两个参数也是训练得到的。
由公式7可以看出,BN不是针对x(输入的),而是针对Wx+b的。而W每个channel都不同。因此,对于Layer: batch*channel*height*width
来说,对batch*height*width
个像素点统计得到一个均值和一个标准差,这样总共会得到channel组参数。
前面章节曾指出:
relu得用Kaiming初始化。
tanh得用Xavier初始化。
而在网络层的激活函数前加上BN的话,采用什么初始化都无所谓。
BN的缺点参见:
https://mp.weixin.qq.com/s/l2N_cQAzy_mubCeok1qfnA
Batch Normalization的诅咒
BN推理加速参见:
https://mp.weixin.qq.com/s/fAiIGJnciAi3pf8MQ7UqKg
使用Batch Normalization折叠来加速模型推理
Instance Normalization主要用于CV领域。
论文:
《Instance Normalization: The Missing Ingredient for Fast Stylization》
首先我们列出对图片Batch Normalization的公式:
\[y_{tijk}=\frac{x_{tijk}-\mu_i}{\sqrt{\sigma_i^2+\epsilon}}, \mu_i=\frac{1}{HWT}\sum_{t=1}^T \sum_{l=1}^W \sum_{m=1}^Hx_{tilm}, \sigma_i^2=\frac{1}{HWT}\sum_{t=1}^T \sum_{l=1}^W \sum_{m=1}^H(x_{tilm}-m\mu_i)^2\]其中,T为图片数量,i为通道,j、k为图片的宽、高。
Instance Normalization的公式:
\[y_{tijk}=\frac{x_{tijk}-\mu_{ti}}{\sqrt{\sigma_{ti}^2+\epsilon}}, \mu_{ti}=\frac{1}{HW} \sum_{l=1}^W \sum_{m=1}^Hx_{tilm}, \sigma_{ti}^2=\frac{1}{HW} \sum_{l=1}^W \sum_{m=1}^H(x_{tilm}-m\mu_{ti})^2\]从中可以看出Instance Normalization实际上就是对一张图片的一个通道内的值进行归一化,因此又叫做对比度归一化(contrast normalization)。
参考:
http://www.jianshu.com/p/d77b6273b990
论文中文版
https://mp.weixin.qq.com/s/EOuuW5R1_4RU-mabSJeKWQ
Instance Norm梯度公式推导
从上图可以看出,BN是对input tensor的每个通道进行mini-batch级别的Normalization。而LN则是对所有通道的input tensor进行Normalization。
BN的特点:
对于batch size比较小的时候,效果非常不好,而batch size越大,那么效果则越好,因为其本质上是要通过mini-batch得到对整个数据集的无偏估计;
在训练阶段和推理阶段的计算过程是不一样的;
在CNN上表现较好,而不适用于RNN甚至LSTM。
和BN一样,\(\beta,\gamma\)由训练得到。
由于它是针对x的,因此对每个样本都要统计它的均值和方差,这对于inference来说,计算量是偏大的。
LN的特点:
不依赖于batch size的大小,即使对于batch size为1的在线学习,也可以完美适应;
适用于RNN或LSTM,而在CNN上表现一般。
和BN一样,LN通常也忽略公式7中的b。
从实践来看,LN在NLP任务上的表现比BN好。
参考:
https://mp.weixin.qq.com/s/-QzsVs6V2pwvFQlRVYVx2Q
LayerNorm是Transformer的最优解吗?
https://www.zhihu.com/question/395811291
transformer为什么使用layer normalization,而不是其他的归一化方法?
WN的公式如下:
\[w=\frac{g}{\|v\|}v\]WN将权重分为模和方向两个分量,并分别进行训练。
论文:
《Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks》
WN的特点:
计算简单,易于理解。
相比于其他两种方法,其训练起来不太稳定,非常依赖于输入数据的分布。
参考:
https://mp.weixin.qq.com/s/merU6hjBVuNN2C84Rp2RkA
Weight Standarization:携手GN,超越BN
http://mlexplained.com/2018/01/13/weight-normalization-and-layer-normalization-explained-normalization-in-deep-learning-part-2/
Weight Normalization and Layer Normalization Explained
https://zhuanlan.zhihu.com/p/114314389
weight normalization原理和实现
您的打赏,是对我的鼓励