简介
机器翻译、人机对话、聊天机器人(如小冰、小爱、小艺。。。)等等对话生成场景人物,这些都是应用在当今社会都或多或少的运用到了我们这里所说的Seq2Seq。
Seq2Seq模型是输出的长度不确定时采用的模型。seq2seq属于encoder-decoder结构的一种。
本质上就是两个RNN模型的合作,一个作为编码器、一个作为解码器。
这种情况一般是在机器翻译的任务中出现,将一句中文翻译成英文,那么这句英文的长度有可能会比中文短,也有可能会比中文长,所以输出的长度就不确定了。
如下图,输入的中文长度为4,输出的英文长度为2。
编码器encoder:负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码,如下图。
获取语义向量最简单的方式就是直接将最后一个输入的隐状态作为语义向量C。
也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。
解码过程:负责根据语义向量生成指定的序列,如下图。
将encoder得到的语义变量作为初始状态输入到decoder的RNN中,得到输出序列。
上一时刻的输出会作为当前时刻的输入,而且其中语义向量C只作为初始状态参与运算,后面的运算都与语义向量C无关。
解码方式还有另外一种,就是语义向量C参与了序列所有时刻的运算,如下图。
上一时刻的输出仍然作为当前时刻的输入,但语义向量C会参与所有时刻的运算。
Softmax激活函数。字面上来说,可以分成soft和max两个部分。
max故名思议就是最大值的意思。
Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。
很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。
hardmax有什么缺点呢?
soft的概念,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
激活函数
softmax是一种激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
单个输出节点的二分类问题一般在输出节点上使用Sigmoid函数。
拥有两个及其以上的输出节点的二分类或者多分类问题一般在输出节点上使用Softmax函数。