本系列是七月算法nlp就业班学习笔记。
文章目录
1 DNN与词向量
1.1 DNN
神经网络中每一个神经单元是一个线性变化加一个激活函数
s = U T a s=U^Ta s=UTa
a = f ( z ) a=f(z) a=f(z)
z = W x + b z=Wx+b z=Wx+b
多层神经网络就是不断向前加。
1.2 skip-gram
通过中心词 预测周围词。
整体训练网络如上图。词表大小为N。
输入X是一个one-hot的表示形式。其形状是NxN。
第一层是一个线性变换 h= XxW (W是一个Nx100的一个矩阵),得到一个Nx100维的隐层矩阵。
最后在隐层上加一个线性变换: hxW’ 得到输出是这里(X周围的一个位置)应该是某个词的概率。W’是一个Nx100的矩阵。
对下游有用的是W,用做词向量表示。一般把W称作输入向量,W’称作输出向量。
(这里看到模型维度对不上,不能做矩阵乘法,可能有一个转置操作。)
1.3 简单句子分类模型DAN
使用词向量,判断两句话语义是否相近,可以使用的一种方法是:找出两句话中的词,分别找出每个词的词向量,对每个句子的词向量做平均,然后两个句子的向量计算点乘。如果值很低,说明语义相近。
可以给句子中的词向量做平均拿到平均值。经过2层神经网络,最后做softmax可以分类该句子的情感属性。
2 RNN+LSTM+GRU
2.1 RNN
RNN相当于是一个事情反复做了很多次。
每一时刻t 输入为 h ( t − 1 ) h^{(t-1)} h(t−1)、 x ( t ) x^{(t)} x(t)。
h ( t ) = f ( W x ( t ) + U h ( t − 1 ) ) h^{(t)}=f(Wx^{(t)}+Uh^{(t-1)}) h(t)=f(Wx(t)+Uh(t−1))
y ( t ) = s o f t m a x ( V h ( t ) ) y^{(t)}=softmax(Vh^{(t)}) y(t)=softmax(Vh(t))
目标函数
在做求导过程中得到
BPTT
()部分的连乘,在值<1的时候,连续乘,会趋近于0,发生梯度消失。在值>1的时候,连续乘会变成一个值很大的数,会发生梯度爆炸。
这里的值与激活函数有关系。非线性激活函数的导数一般都<1。所以更容易发生梯度消失。
怎么解决呢?可以选择一部分单元不进行更新,不计算梯度。从而引出了LSTM模型。
2.2 LSTM
LSTM相比较于RNN多了一个C,平行于h的C。
f t = σ ( W f . [ h t − 1 , x t ] + b f ) f_t=\sigma(W_f.[h_{t-1},x_t]+b_f) ft=σ(Wf.[ht−1,xt]+bf)
注意 [ h t − 1 , x t ] [h_{t-1},x_t] [ht−1,xt]是两个向量拼接。 W f W_f Wf与拼接向量是点乘. W f . [ h t − 1 , x t ] W_f.[h_{t-1},x_t] Wf.[ht−1,xt]最后结果是一个n维的向量。 f t f_t ft就表示在n个维度,哪些应该被遗忘。
i t = σ ( W i . [ h t − 1 , x t ] + b i ) i_t=\sigma(W_i.[h_{t-1},x_t]+b_i) it=σ(Wi.[ht−1,xt]+bi)
C ^ t = t a n h ( W C . [ h t − 1 , x t ] + b C ) \widehat{C}_t = tanh(W_C.[h_{t-1},x_t]+b_C) C t=tanh(WC.[ht−1,xt]+bC)
C t = f t ∗ C t − 1 + i t ∗ C ^ t C_t = f_t*C_{t-1}+i_t*\widehat{C}_t Ct=ft∗Ct−1+it∗C t
o t = σ ( W o . [ h t − 1 , x t ] + b o ) o_t = \sigma(W_o.[h_{t-1},x_t]+b_o) ot=σ(Wo.[ht−1,xt]+bo)
h t = o t ∗ t a n h ( C t ) h_t = o_t*tanh(C_t) ht=ot∗tanh(Ct)
这就是一个 C t , h t = f ( h t − 1 , x t , C t − 1 ) C_t,h_t = f(h_{t-1},x^t,C_{t-1}) Ct,ht=f(ht−1,xt,Ct−1)的函数。
2.3 LSTM变种
1 添加Peephole
让 C C C参与到结果计算中
2 forget while input
去掉 i t i_t it
3 GRU
Ref: Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation
去掉C,保留门结构。
2.4 递归神经网络
2.5 双向RNN
双向RNN的效果总是优于单向RNN。