在胳膊骨折修养的这段期间,系统的学习了一下强化学习相关的知识。正好今天看到了黄民烈老师团队2018年在AAAI上发表的paper《Learning Structured Representation for Text Classification via Reinforcement Learning》。
这篇paper以文本分类作为主要的任务,运用强化学习提出了两个模型:ID-LSTM和HS-LSTM,其中ID-LSTM用来自动地把一句话中和目标任务无关的词语删除掉,起到简化句子的作用;HS-LSTM则是用来自动地从句子中抽取phrase,从而更好的帮助模型进行文本分类。
首先这两个模型都由三个部分组成:Policy Network(PNet),structured representation models和Classification Network (CNet)。这里的PNet对应t时刻采用动作
α
\alpha
α 动作的概率为:
π
(
α
t
∣
s
t
;
θ
)
=
σ
(
W
∗
s
t
+
b
)
\pi( \alpha_t |s_t; \theta )=\sigma(W*s_t+b)
π ( α t ∣ s t ; θ ) = σ ( W ∗ s t + b ) 。公式中的
W
W
W 和
b
b
b 都是PNet的网络参数。在训练阶段,采用的动作
α
t
\alpha_t
α t 由上述公式根据概率分布采样得到;而在预测阶段,则是直接挑选概率最大的
α
t
\alpha_t
α t 所对应的动作。很显然,在该场景下的reward其实就是经过处理之后,该句子被CNet预测为正确label的概率。最终PNet网络的梯度计算公式为:
∇
θ
J
(
θ
)
=
∑
t
=
1
L
R
L
∇
θ
l
o
g
π
θ
(
α
t
∣
s
t
)
\nabla_{\theta}J(\theta)=\sum_{t=1}^LR_L\nabla_{\theta} log \pi_{\theta}(\alpha_t|s_t)
∇ θ J ( θ ) = ∑ t = 1 L R L ∇ θ l o g π θ ( α t ∣ s t ) .
Information Distilled LSTM (ID-LSTM) 在该模型中,action集合中总共有两个动作:Retain和Delete,使用的基础模型是基于LSTM的,只不过不同时刻针对不同动作LSTM的运作方式和传统的比稍有不同: if
α
t
=
r
e
t
a
i
n
\alpha_t=retain
α t = r e t a i n then
c
t
,
h
t
=
L
S
T
M
(
c
t
−
1
,
h
t
−
1
,
x
t
)
c_t,h_t=LSTM(c_{t-1},h_{t-1},x_t)
c t , h t = L S T M ( c t − 1 , h t − 1 , x t ) if
α
t
=
d
e
l
e
t
e
\alpha_t=delete
α t = d e l e t e then
c
t
,
h
t
=
c
t
−
1
,
h
t
−
1
c_t,h_t=c_{t-1},h_{t-1}
c t , h t = c t − 1 , h t − 1 具体流程如下图所示: 而对于state的定义则有
s
t
=
c
t
−
1
⨁
h
t
−
1
⨁
x
t
s_t=c_{t-1} \bigoplus h_{t-1} \bigoplus x_t
s t = c t − 1 ⨁ h t − 1 ⨁ x t 那么很简单,CNet对应的分类公式为
P
(
y
∣
X
)
=
s
o
f
t
m
a
x
(
W
s
∗
h
L
+
b
s
)
P(y|X)=softmax(W_s*h_L+b_s)
P ( y ∣ X ) = s o f t m a x ( W s ∗ h L + b s ) 最终PNet部分的Reward定义为:
R
L
=
l
o
g
P
(
c
t
r
u
e
∣
X
)
+
γ
L
‘
/
L
R_L=log P(c_{true} | X)+\gamma L^`/L
R L = l o g P ( c t r u e ∣ X ) + γ L ‘ / L ,其中
L
‘
L^`
L ‘ 代表了被删除的word数量(意思是鼓励机器去多删除一些word),
γ
\gamma
γ 用来权衡这个力度。
Hierarchically Structured LSTM (HS-LSTM) 在该模型中,action集合中总共有两个动作:Inside和End,使用的模型是2个层次化的LSTM,一个用来将word转化成phrase向量,另一个将生成的phrase向量转化成Sentence 向量。 针对phrase向量生成器来说,其LSTM运作公式如下: if
α
t
=
E
n
d
\alpha_t=End
α t = E n d then
c
t
w
,
h
t
w
=
ϕ
w
(
0
,
0
,
x
t
)
c_t^w,h_t^w=\phi^w (0,0,x_t)
c t w , h t w = ϕ w ( 0 , 0 , x t ) if
α
t
=
I
n
s
i
d
e
\alpha_t=Inside
α t = I n s i d e then
c
t
w
,
h
t
w
=
ϕ
w
(
c
t
−
1
w
,
h
t
−
1
w
,
x
t
)
c_t^w,h_t^w=\phi^w (c_{t-1}^w,h_{t-1}^w,x_t)
c t w , h t w = ϕ w ( c t − 1 w , h t − 1 w , x t )
对于Sentence向量生成器来说,其LSTM运作公式如下: if
α
t
=
E
n
d
\alpha_t=End
α t = E n d then
c
t
p
,
h
t
p
=
ϕ
p
(
c
t
−
1
p
,
h
t
−
1
p
,
h
t
w
)
c_t^p,h_t^p=\phi^p(c_{t-1}^p,h_{t-1}^p,h_t^w)
c t p , h t p = ϕ p ( c t − 1 p , h t − 1 p , h t w ) if
α
t
=
I
n
s
i
d
e
\alpha_t=Inside
α t = I n s i d e then
c
t
p
,
h
t
p
=
c
t
p
−
1
,
h
t
p
−
1
c_t^p,h_t^p=c_t^{p-1},h_t^{p-1}
c t p , h t p = c t p − 1 , h t p − 1 具体方式如下图所示: 在该场景下,对于state的定义则有
s
t
=
c
t
−
1
p
⨁
h
t
−
1
p
⨁
c
t
w
⨁
h
t
w
s_t=c_{t-1}^p \bigoplus h_{t-1}^p \bigoplus c_t^w \bigoplus h_t^w
s t = c t − 1 p ⨁ h t − 1 p ⨁ c t w ⨁ h t w CNet对应的分类公式为
P
(
y
∣
X
)
=
s
o
f
t
m
a
x
(
W
s
∗
h
L
p
+
b
s
)
P(y|X)=softmax(W_s*h_L^p+b_s)
P ( y ∣ X ) = s o f t m a x ( W s ∗ h L p + b s ) 最终PNet部分的Reward定义为:
R
L
=
l
o
g
P
(
c
t
r
u
e
∣
X
)
+
γ
(
L
‘
/
L
+
0.1
L
/
L
‘
)
R_L=log P(c_{true} | X)+\gamma (L^`/L +0.1L/L ^`)
R L = l o g P ( c t r u e ∣ X ) + γ ( L ‘ / L + 0 . 1 L / L ‘ ) ,其中
L
‘
L^`
L ‘ 代表了被删除的word数量,当
L
‘
取
值
为
0.316
L
时
L ^`取值为0.316L时
L ‘ 取 值 为 0 . 3 1 6 L 时
L
‘
/
L
+
0.1
L
/
L
‘
L^`/L +0.1L/L ^`
L ‘ / L + 0 . 1 L / L ‘ 会取到最大的Reward。作者之所以这样设置参数,是因为他发现在他的语料库中,一个包含了L个word的一句话中,平均的phrase个数为0.316L。
和所有的深度强化学习网络一样,这样的网络是十分难以训练的(即直接训练的话,网络损失函数机会不会收敛)。因此在训练的时候,需要一定的技巧,作者分为以下3个步骤:
1 预训练CNet网络和分类网络参数;对于ID-LSTM直接使用原始的不经过删减的句子进行预训练;对于HD-LSTM则先使用简单的启发式算法对原始句子中的word进行划分phrase处理; 2 固定住CNet部分网络参数,对PNet网络参数进行预训练操作; 3 Jointly 训练整个网络参数。
这篇paper提出的模型其实可以用到任何序列处理的任务中去(比方说对于CTR预估场景下的用户一系列行为的建模),这也是未来值得探索的方向之一。