Sequence to sequence models:由encoder和decoder组成。decoder的前一个输出为当前输入。
应用1:文本翻译
应用2:图像标注。用CNN训练得到特征作为encoder,在后面加上decoder。
文本翻译
文本翻译与语言模型不同之处在于:语言模型在训练好之后是随机输出一个句子,而文本翻译需要找出最有可能的翻译句子。实现这种搜索的启发式搜索方式叫beam search(集束搜索)。(它不一定能够找到全局最优解)
beam search算法
参数:beam width:表示一次考虑的几种可能。例如B=3表示每次考虑3种可能的输出。
第一步:计算
P
(
Y
<
1
>
∣
x
)
P(Y^{<1>}|x)
P(Y<1>∣x),假设单词表中有1000个单词,那么分别计算1000个单词的概率,选出其中概率最大的B个单词,假设这B个单词分别为:in ,Jane,september.
第二步:计算
P
(
y
<
1
>
,
y
<
2
>
∣
x
)
=
P
(
y
<
1
>
∣
x
)
P
(
y
<
2
>
∣
y
<
1
>
,
x
)
P(y^{<1>},y^{<2>}|x)=P(y^{<1>}|x)P(y^{<2>}|y^{<1>},x)
P(y<1>,y<2>∣x)=P(y<1>∣x)P(y<2>∣y<1>,x),也就是分别为3个单词计算后面连接1000个单词的概率,也就是3000个
P
(
y
<
1
>
,
y
<
2
>
∣
x
)
P(y^{<1>},y^{<2>}|x)
P(y<1>,y<2>∣x),选出其中概率最高的三种。
第三步同样如此,直到句子结束。(遇到结束的特殊符号)。
当B=1时,beam search就是greedy search.
beam search的改进
原始计算概率:
arg
max
y
∏
t
=
1
T
y
P
(
y
<
t
>
∣
x
,
y
<
1
>
,
.
.
.
,
y
<
t
−
1
>
)
\arg \max_y \prod_{t=1}^{T_y}P(y^{<t>}|x,y^{<1>},...,y^{<t-1>})
argymaxt=1∏TyP(y<t>∣x,y<1>,...,y<t−1>)时,有以下两个问题:
1.多次乘积容易导致计算机小数位溢出,解决方法:在计算结果前面加上log,将乘积变成Log的加法;
arg
max
y
∑
t
=
1
T
y
log
P
(
y
<
t
>
∣
x
,
y
<
1
>
,
.
.
.
,
y
<
t
−
1
>
)
\arg \max_y \sum_{t=1}^{T_y}\log P(y^{<t>}|x,y^{<1>},...,y^{<t-1>})
argymaxt=1∑TylogP(y<t>∣x,y<1>,...,y<t−1>)
2.为了使概率更高,为了使概率更高,会趋向于选择更短的句子,因此将概率做归一化:
1
T
y
α
arg
max
y
∑
t
=
1
T
y
log
P
(
y
<
t
>
∣
x
,
y
<
1
>
,
.
.
.
,
y
<
t
−
1
>
)
\frac{1}{Ty^\alpha}\arg \max_y \sum_{t=1}^{T_y}\log P(y^{<t>}|x,y^{<1>},...,y^{<t-1>})
Tyα1argymaxt=1∑TylogP(y<t>∣x,y<1>,...,y<t−1>)
其中,
α
\alpha
α的经验值一般取0.7.
对模型做误差分析
计算人类翻译的最优解的概率与学习得到的最优解概率。若前者得分高,说明是beam search出了问题,应该增加B的数值,若后者高,说明RNN模型出了问题,可能需要对模型做进一步改进。
用多个例子来对模型作分析,最后找出问题比较严重的部分是RNN还是beam search。
attention model
没有attention机制的encoder-decoder结构通常把encoder的最后一个状态作为decoder的输入(可能作为初始化,也可能作为每一时刻的输入),但是encoder的state毕竟是有限的,存储不了太多的信息,对于decoder过程,每一个步骤都和之前的输入都没有关系了,只与这个传入的state有关。attention机制的引入之后,decoder根据时刻的不同,让每一时刻的输入都有所不同。
模型简介:
首先根据初始的隐藏单元和输入计算出权重系数,也就是"match"过程,match的方法有几种:
1.利用余弦相似度计算两个向量间的相似度;
2.利用简单的神经网络进行训练;
预测出权重系数之后,利用权重系数计算出
c
0
c^0
c0,作为rnn的输入部分,与隐藏单元
z
0
z^0
z0一起作为输入预测第二个时刻的隐藏单元
z
1
z^1
z1
然后继续用
z
1
z^1
z1和各个输入一起预测第二个时刻的权重系数,继续用于第二个时刻的输出,直到翻译结束。
因此在输出每个时刻y时,都利用了不同输入的不同注意力,且这些注意力权重都是通过训练得到的。