从序列到序列的seq2seq模型中,存在着label bias和exposure bias问题。这两个偏差问题是由于不同的原因导致的。先给出结论在分别解释
- label bias:根本原因是我们真实的目标与建模的目标不一致,导致模型最终求得的输出和我们真实想要的输出存在偏差。体现在联合概率分布上就是,真实想要的分布应该是全局归一化得到的。而建模得到的分布是局部归一化得到的。
- exposure bias是由于seq2seq训练难以收敛,而引入了teacher forcing训练技巧,使得训练更容易收敛。由于techer forceing的引入带来了训练和预测时输入值的不一致,导致了exposure bias问题。
1.label bias标签偏差
上面说了label bias根本上是由于真实目标与建模目标不一致导致。我们以教模型写诗为例。
在seq2seq模型中,想要生成一个序列。真实的目的应该是从所有可能的序列结果中选择联合概率最大的那个做为输出。用概率描述就是:
m
a
x
p
(
y
1
y
2
.
.
.
y
n
∣
x
1
x
2
.
.
.
x
n
)
\mathop{max}p(y_1y_2...y_n|x_1x_2...x_n)
maxp(y1y2...yn∣x1x2...xn)
真实目的是找到使得上式概率最大的序列作为输出。计算一句话的概率就是语言模型(Language Model,LM)要做的事情。即计算一句话
w
1
,
w
2
,
.
.
.
,
w
l
w_1,w_2,...,w_l
w1,w2,...,wl出现的概率
p
(
w
1
w
2
.
.
.
w
l
)
p(w_1w_2...w_l)
p(w1w2...wl)。只是我们这里是条件概率,所以也可以叫做条件语言模型。下面都是关于语言模型的一些内容,熟悉的跳过。
单向语言模型
如果假定当前词只与他前面的词有关,这种假设的语言模型称之为单向语言模型。在单向语言模型中,可以将上式的概率表示为:
p
(
y
1
y
2
.
.
.
y
n
)
=
p
(
y
1
)
p
(
y
2
∣
y
1
)
p
(
y
3
∣
y
1
y
2
)
.
.
.
p
(
y
n
∣
y
1
y
2
.
.
.
y
n
−
1
)
∏
i
=
1
n
p
(
y
i
∣
y
1
y
2
.
.
.
y
i
−
1
)
p(y_1y_2...y_n)=p(y_1)p(y_2|y_1)p(y_3|y_1y_2)...p(y_n|y_1y_2...y_{n-1})\\\prod_{i=1}^np(y_i|y_1y_2...y_{i-1})
p(y1y2...yn)=p(y1)p(y2∣y1)p(y3∣y1y2)...p(yn∣y1y2...yn−1)i=1∏np(yi∣y1y2...yi−1)
这样,求一句话的概率就转化成了求每个词的条件概率。为了进一步简化,引入马尔科夫假设:任意一个状态出现的概率只与他前面的一个或多个状态有关。这时的语言模型也称作n-gram语言模型。
- 一元模型(unigram):做了条件独立性假设
p ( y 1 y 2 . . . y n ) ≃ p ( y 1 ) p ( y 2 ) . . . p ( y n ) p(y_1y_2...y_n)\simeq p(y_1)p(y_2)...p(y_n) p(y1y2...yn)≃p(y1)p(y2)...p(yn)
- **二元模型(bigram):**每个词出现的概率只依赖前面一个词。
p ( y 1 y 2 . . . y n ) ≃ p ( y 1 ) p ( y 2 ∣ y 1 ) p ( y 3 ∣ y 2 ) . . . p ( y n ∣ y n − 1 ) p(y_1y_2...y_n)\simeq p(y_1)p(y_2|y_1)p(y_3|y_2)...p(y_n|y_{n-1}) p(y1y2...yn)≃p(y1)p(y2∣y1)p(y3∣y2)...p(yn∣yn−1)
- N元模型:假设当前词只与前N-1个词有关。
seq2seq建模就是二元语言模型,同时它是给定条件x下的语言模型。其一句话的概率可以表示为:
p
(
y
1
y
2
.
.
.
y
n
∣
X
)
≃
p
(
y
1
∣
X
)
p
(
y
2
∣
y
1
,
X
)
.
.
.
p
(
y
n
∣
y
n
−
1
,
X
)
(1)
p(y_1y_2...y_n|X)\simeq p(y_1|X)p(y_2|y_1,X)...p(y_n|y_{n-1},X)\tag{1}
p(y1y2...yn∣X)≃p(y1∣X)p(y2∣y1,X)...p(yn∣yn−1,X)(1)
seq2seq模型一般用RNN来实现,每个时刻生成一个字,连起来构成一个序列。具体在decoder阶段,当前时刻t接受当前的输入x和前一时间步的输出作为输入,预测当前的字。
公式(1)左侧使我们的真实目标。右侧是建模得到的概率。左侧是序列整体的概率,在得出序列得分后要进行整体归一化,而右侧用每个词的概率连乘来近似序列的概率。每个词的概率要进行局部归一化。做个局部归一化后,在计算最大联合概率时,模型倾向于选择候选个数较少的分支路线。贴一张烂大街的解释图。
用Viterbi算法解码MEMM,状态1倾向于转换到状态2,同时状态2倾向于保留在状态2。
P(1-> 1-> 1-> 1)= 0.4 x 0.45 x 0.5 = 0.09 ,
P(2->2->2->2)= 0.2 X 0.3 X 0.3 = 0.018,
P(1->2->1->2)= 0.6 X 0.2 X 0.5 = 0.06,
P(1->1->2->2)= 0.4 X 0.55 X 0.3 = 0.066
但是得到的最优的状态转换路径是1->1->1->1,为什么呢?因为状态2可以转换的状态比状态1要多,从而使转移概率降低,即MEMM倾向于选择拥有更少转移的状态。
2 exposure bias
2.1 导致exposure bias的原因
seq2seq字预测的模型,每个时间步接受上一时刻的输出和当前输入,预测当前的词。是一个多分类问题。在训练过程中,直接使用上一时间步作为输入,训练很难收敛。因为模型在训练初期预测的值大多都是错的。每次基于错误的预测作为当前输入,让模型训练。并且错误的输入还在不断的变。模型很难学习收敛。针对这个问题,提出了一个优化方法:teacher forcing。下面给出这两种训练方式的定义:
- Autoregressive:训练过程中,每个时间步使用上一时间步的预测值作为输入。
- teacher forcing:训练过程中,使用上一时间步的真实值作为输入。
teacher foring固定了每一个时间步的输入,让每一个时间步的输入不在变来变去。使得模型训练更加容易收敛。同时也使得训练可以并行化进行。因为当前时间步不依赖于上一时间步的输出。但同时也带来了exposure bias问题:
exposure bias问题是指训练时使用上一时间步的真实值作为输入;而预测时,由于没有标签值,只能使用上一时间步的预测作为输入。由于模型都是把上一时间步正确的值作为输入,所以模型不具备对上一时间步的纠错能力。如果某一时间步出现误差,则这个误差会一直向后传播。
2.1 缓解方法
scheduled sampling:
在训练时已 ε \varepsilon ε的概率选择使用teacher forcing的方式, 1 − ε 1-\varepsilon 1−ε的概率选择使用Autogressive的方式。训练初期 ε \varepsilon ε接近1,多选择teacher forcing的方式,然后 ε \varepsilon ε逐渐衰减只0。后期尽可能多使用Autoregressive的训练方式,多使用自己的预测结果作为输入。
3 beam search
在使用动态规划求解最大联合概率时,我们叫熟悉的是HMM和CRF中常用的viterbi算法。我们先来评估下各算法的时间复杂度。假设有T个时间步,每个时间步共有V中可能的状态值。那么不使用动态规划暴力求解的时间复杂度是 T V T TV^T TVT。使用动态规划viterbi算法的时间复杂度是 T V 2 TV^2 TV2。在seq2seq模型中,每个时间步的可能取值个数V等于词库中词的个数。这个V一般是很大的。为了进一步降低时间负责度。采用beam-search算法。每步只保留K个最优解。即时间复杂度为 T K V TKV TKV。
参考:
[1]知乎: 概率图模型体系:HMM、MEMM、CRF
[2]知乎:《Sequence-to-Sequence Learning as Beam-Search Optimization》阅读笔记