本篇是记录深度学习中自然语言处理的一些思想和实践,尚处于整理中
CNN网络
- 参考李宏毅2020深度学习课程
引出问题
卷积运算
- 卷积计算是通过将图像上与filter大小相同的部分(蓝框)与filter做内积后,再把每一个channel上都做同样的运算后相加即得到针对蓝框中部分做卷积的结果;这篇讲的比较详细
池化层
- 池化层不包含参数,它的目的是下采样
CNN网络整体概览
可以看到filter的size一般为(filter_size1, filter_size2, channel_size),这里的channel_size在最开始是初始图像的颜色通道数或是文本中的embedding_size,后续的则为上一步中filter的个数
在NLP中的应用
- 想提的一点是,虽然CNN网络做并行有优势,但是在NLP领域由于词序的存在,如果使用Pooling层,将不可避免地丢掉词序信息,即下采样在NLP领域一般是不做这一步的,我看到的资料显示,一般CNN网络在NLP中将使用全卷积来在抓到长距离依赖的同时也不丢掉词序信息。(待实践)
RNN网络
SimpleRNN
由于store的a值的存在,网络有了记忆能力,从而能对同样的词Taipei作出符合语境的标记
LSTM
LSTM Cell
LSTM网络结构
- 拿出一个Cell的一个状态来看
- 简化版,在权重固定的情况下,由(x1,x2,x3)计算y的输出
- 多层概览
- 注意这里可以看到每个状态除了x输入之外,还需要有上一个状态的记忆状态c和上一个状态的输出状态h作为输入,也就是之前在tensorflow中需要提前定义并初始化的两个状态
LSTM网络误差分析
平坦的地方很平坦(梯度消失,LSTM可以依靠与RNN不同的门控机制避免这一问题),陡峭的地方很陡峭(梯度爆炸,使用梯度Clip)
关于梯度消失和梯度爆炸
Seq2Seq
Encoder编码一个句子的所有信息作为初始状态,输入到Decoder中,然后将输出的结果输入到下一个LSTM Cell的状态中,直到输出结束符为止
Encoder-Decoder结构
- Encoder向量仅用作Decoder初始化状态
- Encoder向量在Decoder中均作为输入参与运算
Attention-based Model
引出:比如人脑中在考虑一个问题时,总是关注某些重要的事情
思想1
- 有一个读功能组件,能从Memory base中读取你想要的输入
思想2
- 有读写头,可以修改你的Memory base
原理
Z
0
Z^0
Z0计算与
h
1
h^1
h1,
h
2
h^2
h2,
h
3
h^3
h3,
h
4
h^4
h4的Match Score
α
0
1
\alpha_0^1
α01,
α
0
2
\alpha_0^2
α02,
α
0
3
\alpha_0^3
α03,
α
0
4
\alpha_0^4
α04,,然后经过Softmax层转化为概率值,然后分别与隐层向量做加权和,得到的
c
0
c^0
c0即作为模型的输入,和
Z
0
Z^0
Z0一起输入模型
第二个状态的输入为
Z
1
Z^1
Z1和由
Z
1
Z^1
Z1经过Attention计算得到的
c
1
c^1
c1和模型上一个状态的输出一起作为当前输入
应用
Transformer
CNN用作NLP,依靠层数学习长距离句子关系
Self-Attention Layer用作NLP,取代RNN
计算
q
i
,
k
i
,
v
i
q^i,k^i,v^i
qi,ki,vi
计算
b
1
b^1
b1,同时也可以并行计算
b
2
b^2
b2
并行计算
α
i
,
j
\alpha_{i,j}
αi,j
并行计算
b
i
b^i
bi
模型总览,得到跟RNN一样的输出序列
Multi-head Self-attention
不同的head会捕捉到不同的信息(local/global)
由于模型中不包含词序信息,所以有一个Positional Encoding
解释了,为什么要相加,是将
x
i
x^i
xi和
p
i
p^i
pi(表示位置的one-hot vector)做concatenate后利用分块矩阵相乘,得到相加的逻辑
在Seq2Seq中代替其中的RNN部分
Transformer Model
Encoder部分自注意力机制可视化
不同的句子的it关注的部分不同
Application
Word Embedding
无监督的,基本思想是通过语境能够理解中心词的意思
Glove
- 两个词如果经常在语料库中一起出现,则这两个词语义接近,相应的词向量也在空间上接近
Prediction-based
- 初级版,只用前一个词预测下一个词
语境对中心词的权重要相同,这样中心词才只有唯一的向量表示