终于发完proposal 的邮件 深吸一口气
希望明天不要被怼的太惨
已经连续 高强度(hua shui) 看paper n天了
一切 索然无味
随着看到的paper层次越来越高
就越发羡慕搞NLP
的
昨天还在跟室友说 一开始觉得写SMN
的WuWei
dalao指不定是个中年油腻大叔
结果人家研究生还没毕业
哇 满脸的羡慕
言归正传 打算用两三篇blog 讲一下最近学习的多轮检索式对话这个领域
第一篇就来谈一谈 在检索式对话中用到最多的 RNN 模型
家族 (之所以 称之为 家族 因为变种太多了)
Naïve RNN
RNN = Recureent Neural Network
翻译成中文就是循环神经网络(注意不是递归,虽然它的过程很递归)
和传统的卷积神经网络CNN
全连接神经网络DNN
不同的是其包含时序信息
顺带说一下另外两者的特点
DNN
: n层与n-1层每个都有关, 参数数量级巨大;
CNN
: 卷积+pool,至于什么是卷积?加权叠加
这一点十分有利于用于训练和时间相关的Dataset 尤其是NLP方面
有没有觉得很像马尔科夫链
(en 不是过程 就是链)
事实上在有CNN之前 确实一般都做成隐马尔科夫链
NN起源于多层感知机MLP
感知机之所以能战胜同时期的元胞自动机异军突起 主要是其拥有反向传播算法
但NN随着训练层数的增大 会出现梯度消失
现象 但层度深 确实效果好呀
于是就有一堆学者提出了 各种办法 使得 NN的层数能够扩展
比如说预处理 高速公路网络(highway network)和深度残差学习(deep residual learning)
时序的效果不仅仅是训练结果和之前的转态有关 还带来了变长度输出的特性 这点和其他NN尤为不同
CNN 可以在下一个时间点 把输出作用在节点自身
如果按时间展开 就变成那张经典的图 作用在t+1
时刻输出o(t+1)
是该时刻输入和所有历史
共同作用的结果
可以看出 s t + 1 , o t = f ( s t , x t , U , V , W ) s_{t+1}, o_t = f(s_t, x_t, U, V, W) st+1,ot=f(st,xt,U,V,W)
和别的NN不同的是RNN所有步骤共享相同
的参数 U , V , W U, V, W U,V,W
有正向的RNN 很容易想到是不是还有双向的(Bidirectional RNN
) 深度(Deep Bidirectional RNN
)
但对于上述RNN都不可避免的会出现前面说的梯度消失
的现象
只不过在这里对的是时间维度上的消失(即 时序信息传播不过k间隔)
所以就有了一系列改进版RNN
LSTM
比如说最著名的LSTM[4]
LSTM = LONG SHORT-TERM MEMORY
其通过门
的设置来实现长时期的记忆能力
LSTM每个时刻的hidden state包含了多个memory blocks
每个block
包含了多个memory cell
每个memory cell
包含一个Cell和三个门
Gate: 输入门,输出门,遗忘门
Forward Pass
-
I n p u t G a t e Input Gate InputGate
a l t = ∑ i = 1 I w i l x i t + ∑ h = 1 H w h l b h t − 1 + ∑ c = 1 C w c l s c t − 1 a_l^t=\sum\limits_{i=1}^Iw_{il}x_i^t+\sum\limits_{h=1}^Hw_{hl}b_h^{t-1}+\sum\limits_{c=1}^Cw_{cl}s_c^{t-1} alt=i=1∑Iwilxit+h=1∑Hwhlbht−1+c=1∑Cwclsct−1b l t = f ( a l t ) b_l^t=f(a_l^t) blt=f(alt)
-
F o r g e t G a t e Forget Gate ForgetGate
a ϕ t = ∑ i = 1 I w i ϕ x i t + ∑ h = 1 H w h ϕ b h t − 1 + ∑ c = 1 C w c ϕ s c t − 1 a_\phi^t=\sum\limits_{i=1}^Iw_{i\phi}x_i^t+\sum\limits_{h=1}^Hw_{h\phi}b_h^{t-1}+\sum\limits_{c=1}^Cw_{c\phi}s_c^{t-1} aϕt=i=1∑Iwiϕxit+h=1∑Hwhϕbht−1+c=1∑Cwcϕsct−1b ϕ t = f ( a ϕ t ) b_\phi^t=f(a_\phi^t) bϕt=f(aϕt)
-
C e l l Cell Cell
a c t = ∑ i = 1 I w i c x i t + ∑ h = 1 H w h c b h t − 1 a_c^t=\sum\limits_{i=1}^Iw_{ic}x_i^t+\sum\limits_{h=1}^Hw_{hc}b_h^{t-1} act=i=1∑Iwicxit+h=1∑Hwhcbht−1s c t = b ϕ t s c t − 1 + b l t g ( a c t ) s_c^t=b_\phi ^ts_c^{t-1}+b_l^tg(a_c^t) sct=bϕt