目录
1.RNN:处理序列数据
循环神经网络是一类以序列数据为输入,在序列的演进方向进行递归,且所有节点(循环单元)按链式连接形成闭合回路的递归神经网络。
RNN的独特价值: 它能有效的处理序列数据。因为序列中,前面的输入也会影响到后面的输出。RNN相当于有了记忆功能。
缺点: 严重的短期记忆问题,长期的数据影响很小(哪怕是重要的信息)。越晚的输入影响越大,越早的输入影响越小。
变种算法LSTM和GRU等的特点:
- 长期信息可以有效的保留
- 挑选重要信息保留,不重要的信息会选择“遗忘”
1.1.为什么需要RNN?
CNN和普通的算法大都是输入和输出的一一对应,也就是一个输入得到一个输出,不同的输入之间是没有联系的。
序列数据:一串相互依赖的数据流。(考虑词序)
对于序列数据,因为要考虑词之间的依赖性、顺序,则一个输入就不够了。因此,需要RNN。
1.2.基本原理
RNN跟传统神经网络最大的区别:将前一次的输出结果,带到下一次的隐藏层中,一起训练。
下图中,输入 “time” 的时候,前面 “what” 的输出也产生了影响(隐藏层中有一半是黑色的)。以此类推,前面所有的输入都对未来的输出产生了影响,大家可以看到圆形隐藏层中包含了前面所有的颜色。当我们判断意图的时候,只需要最后一层的输出。
1.3.缺点
1.3.1.短期记忆、训练成本大
根据上图的最后一个hidden layer(下图):短期的记忆影响较大(如橙色区域),但是长期的记忆影响就很小(如黑色和绿色区域),这就是RNN存在的短期记忆问题。
RNN有短期记忆问题,无法处理很长的输入序列。而且训练RNN需要投入极大的成本。
越晚的输入影响越大,越早的输入影响越小。
1.3.2.梯度消失/爆炸
BPTT:Back propogation through time
求导过程的链太长。
太长的求导链在以tanh为激活函数(其导数值在0~1之间)的BPTT中,连乘就会使得最终的求导为0,导致梯度消失。因此,t时刻已经学习不到t-N时刻的参数了。
解决方法: LSTM、设计更好的初始参数、更换激活函数ReLU等。
1.4.LSTM:RNN的优化算法
长短期记忆(LSTM) 单位是递归神经网络的单位。由LSTM单元组成的RNN常简称为LSTM。
公共LSTM单元由单元、输入门、输出门和忘记门组成。该单元记住任意时间间隔内的值,并且三个门控制进出单元的信息流。
1.4.1.与RNN相比
- 保留较长序列数据中的重要信息,忽略不重要的信息,解决了RNN短期记忆的问题。
- 处理了在训练传统RNN时,可能遇到的梯度爆炸和消失的问题。
- 所有递归神经网络都具有神经网络的链式重复模块。
在标准的RNN中,这个重复模块具有非常简单的结构,例如只有单个tanh层。
LSTM的链式结构重复模块:不是一个单独的神经网络层,而是4个非常特殊的方式进行交互的层。而且多了一个控制长时记忆的Cell state(细胞状态)。
1.4.2.核心步骤(前向计算过程)
该小节的图中:
- 最上面线的状态代表了长时记忆
- 最下面的线代表了工作记忆或短时记忆
门结构:用来控制增加或删除信息的程度,一般由 sigmoid函数(值域 (0,1))和向量点乘来实现。
LSTM共包含3个门结构(遗忘门、输入门、隐藏门),来控制细胞状态和隐藏状态。
- 遗忘门:确定什么样的信息要被丢弃。
决定上一时刻细胞状态中的多少信息(由控制)可以传递到当前时刻中。
- 输入门:确定什么样的新信息被存放在细胞状态中。
控制当前输入新生成的信息中有多少信息(由控制)可以加入到细胞状态中。
- tanh层:产生当前时刻新的信息
- sigmoid层:控制有多少新信息可以传递给细胞状态
- 更新细胞状态:丢弃需要丢弃的、保留需要保留的。
基于遗忘门和输入门的输出,来更新细胞状态。更新后的细胞状态有两部分构成:
(1) 来自上一时刻、旧的细胞状态信息,由遗忘门控制:
(2) 当前输入新生成的信息,由输入门控制:
- 输出门:基于更新的细胞状态,输出隐藏状态。
sigmoid层:输出门,用来控制有多少细胞状态信息。
将细胞状态缩放至 (−1,1),使之作为隐藏状态的输出。
1.4.3.反向传播算法BPTT
详见博客
1.4.4.python实现
1.4.5.LSTM变体
1.4.5.1.在门上增加窥视孔
1.4.5.2.整合遗忘门和输入门
1.5.GRU:LSTM 的变体
- 将忘记门和输入门合成为更新门
- 还混合了细胞状态和隐藏状态
- 其他一些改动…
最终的模型比标准的LSTM模型要简单,效果和LSTM差不多,但是参数少了1/3,不容易过拟合。
1.6.应用
- 文本生成:类似填空题,给出前后文,然后预测空格中的词是什么。
- 机器翻译:翻译工作也是典型的序列问题,词的顺序直接影响了翻译的结果。
- 语音识别:根据输入音频判断对应的文字是什么。
- 生成图像描述:类似看图说话,给一张图,能够描述出图片中的内容。这个往往是 RNN和CNN的结合。
- 视频标记:将视频分解为图片,然后用文字来描述图片内容。
3.【科普】NLP
详见博客
3.1.核心任务
3.1.1.自然语言理解 – NLU | NLI
希望机器像人一样,具备正常人的语言理解能力。
难点:
- 语言的多样性
- 语言的歧义性
- 语言的鲁棒性
- 语言的知识依赖
- 语言的上下文
详见博文
3.1.2.自然语言生成 – NLG
将非语言格式的数据转换成人类可以理解的语言格式,如文章、报告等。
步骤:
- 内容确定 – Content Determination
- 文本结构 – Text Structuring
- 句子聚合 – Sentence Aggregation
- 语法化 – Lexicalisation
- 参考表达式生成 – Referring Expression Generation|REG
- 语言实现 – Linguistic Realisation
详见博文
3.2.难点
- 语言是规律复杂的。
- 语言是可以自由组合的,可以组合复杂的语言表达。
- 语言是一个开放集合,我们可以任意的发明创造一些新的表达方式。
- 语言需要联系到实践知识,有一定的知识依赖。
- 语言的使用要基于环境和上下文。
3.3.流程步骤
3.3.1.语料预处理
3.3.2.特征工程
特征提取、特征选择
3.3.3.选择分类器/设计DL模型
3.4.典型应用
参考
https://easyai.tech/ai-definition/rnn/
https://easyai.tech/ai-definition/lstm/
https://easyai.tech/ai-definition/nlp/
https://blog.csdn.net/flyinglittlepig/article/details/72229041
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
https://www.cnblogs.com/jins-note/p/9715610.html
https://www.jianshu.com/p/daedde46eae5
https://blog.csdn.net/u012735708/article/details/82769711