【Python机器学习】3.3. 循环神经网络(RNN)理论(进阶)
喜欢的话别忘了点赞、收藏加关注哦关注即可查看全文对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω)本文紧承 3.2. 循环神经网络(RNN)理论(基础) 没看过的建议先看上文。3.3.1. 基础的RNN结构图示我们先来看最基础的RNN结构在MLP的基础上把前面序列的部分信息作处理之后给下一个序列。有的时候你也会看到这样的符号这是对应基础的RNN结构可以用来表示RNN模型相比于MLP多了一个表示自循环的箭头。输入输出输入x1,x2,x3,…,xix^1, x^2, x^3, \dots, x^ix1,x2,x3,…,xi输出y1,y2,y3,…,yiy^1, y^2, y^3, \dots, y^iy1,y2,y3,…,yi特点在于输入输出的序列是一样的输入有iii个输出就有iii个。这就是多输入对应多输出、维度相同的RNN结构。主要应用特定信息识别比如说判断句子中的哪些单词是人名。3.3.2. 多输入单输出的RNN架构图示输入输出输入x1,x2,x3,…,xix^1, x^2, x^3, \dots, x^ix1,x2,x3,…,xi输出y1y^1y1主要应用情感识别假如我有I feel happy and positive.这句话计算机需要判定这句话表达的是正面情绪还是负面情绪。3.3.3. 单输入多输出的RNN架构图示输入输出输入x1x^1x1输出y1,y2,y3,…,yiy^1, y^2, y^3, \dots, y^iy1,y2,y3,…,yi它一般作为序列数据生成器。主要应用文章生成给个标题生成一段话。音乐生成选定曲风/情感之类的参数来输出音乐。3.3.4. 多输入多输出的RNN架构图示它与基础RNN架构有什么不同吗不同之处在于输入数据的数量与输出数据可以不保持一致。输入输出输入x1,x2,x3,…,xix^1, x^2, x^3, \dots, x^ix1,x2,x3,…,xi输出y1,y2,y3,…,yjy^1, y^2, y^3, \dots, y^jy1,y2,y3,…,yj主要应用其主要应用是语言翻译虽然现在Transformer已经基本取代了RNN比如说我有下面这句话“What is artificial intelligence?”(4个单词不算标点)计算机把它翻译为中文“什么是人工智能”(7个单词不算标点)这里的输入输出单词数不一致。3.3.5. 普通RNN结构缺陷普通RNN都存在结构缺陷。前部序列信息在传递到后部的同时信息权重下降导致重要信息丢失。我们来看一个简单的例子(使用过去式填空)“The student, who got A in the exam, ___ excellent.”“The students, who got A in the exam, ___ excellent.”第一个题(关键字“student”)很明显是填was第二个题(关键字“students”)很明显是填were。但是循环神经网络会在每一次传递中损失信息最后“student”和“students”的差别就不会被体现。针对这个问题我们需要提高前部特定信息的决策权重。3.3.6. 长短期记忆网络(LSTM)简介图示特点增加了记忆细胞cic^ici可以传递前部远处部位信息。比如说上文的“student”和“students”的单复数差别就能被记忆细胞记住。简化理解相比aia^iai记忆细胞cic^ici重点记录前部序列重要信息且在传递过程中信息丢失少。3.3.7. 深入理解LSTM1. 输入与输出输入该 LSTM 单元的输入包括当前时刻的输入xix^ixi上一时刻的隐藏状态ai−1a^{i-1}ai−1上一时刻的细胞状态ci−1c^{i-1}ci−1红色标注输出当前时刻的隐藏状态aia^iai当前时刻的细胞状态cic^ici红色标注经过激活函数后的输出yiy^iyi2. 关键计算单元LSTM 的关键组件是遗忘门、输入门、输出门以及一个新的细胞状态计算方式(1) 遗忘门Forget Gate作用决定哪些信息应该从过去的细胞状态ci−1c^{i-1}ci−1中遗忘。计算方式fiσ(Wf[ai−1,xi]bf) f^i \sigma(W_f [a^{i-1}, x^i] b_f)fiσ(Wf[ai−1,xi]bf)其中σ\sigmaσ是 Sigmoid 激活函数WfW_fWf是权重矩阵bfb_fbf是偏置项计算出的fif^ifi介于0和1之间表示遗忘的比例(2) 输入门Update Gate作用决定哪些新的信息应该被加入到细胞状态中。计算方式gitanh(Wg[ai−1,xi]bg) g^i \tanh(W_g [a^{i-1}, x^i] b_g)gitanh(Wg[ai−1,xi]bg)其中gig^igi代表新信息候选细胞状态使用 tanh 进行归一化。同时另一个门控机制决定了信息加入的比例iiσ(Wi[ai−1,xi]bi) i^i \sigma(W_i [a^{i-1}, x^i] b_i)iiσ(Wi[ai−1,xi]bi)iii^iii也是 Sigmoid 计算出的值表示该信息对新细胞状态的影响程度。细胞状态更新cifi⋅ci−1ii⋅gi c^i f^i \cdot c^{i-1} i^i \cdot g^icifi⋅ci−1ii⋅gi(3) 输出门Output Gate作用决定当前隐藏状态即 a^i的值。计算方式oiσ(Wo[ai−1,xi]bo) o^i \sigma(W_o [a^{i-1}, x^i] b_o)oiσ(Wo[ai−1,xi]bo)其中oio^ioi控制了输出的程度。计算最终的隐藏状态aioi⋅tanh(ci) a^i o^i \cdot \tanh(c^i)aioi⋅tanh(ci)3. 关键连线说明红色的cic^ici和ci−1c^{i-1}ci−1表示 LSTM 细胞状态的传递aia^iai和ai−1a^{i-1}ai−1是隐藏状态的传递供下一时刻使用输入xix^ixi通过多个门控制其信息流激活函数如 tanh在细胞状态和输出门中起到了归一化作用3.3.8. 深层循环网络(DRNN)解决更复杂的序列任务可以把单层RNN叠起来或者在输出前和普通MLP结构结合使用1. 左图单层RNN这是最基本的RNN结构输入依赖于时间步time step并且隐藏层通过时间传播信息黑色节点表示隐藏状态箭头表示信息流动的方向由于仅有单层隐藏层该结构在建模复杂序列时存在局限性2. 中图多层RNN这一结构在时间维度上保持RNN特性同时在深度方向上叠加了多个隐藏层低层的隐藏状态不仅连接到下一个时间步还作为输入传递到上层隐藏状态使模型可以在不同层次学习不同级别的表示低层学习局部模式高层学习长期依赖这使得模型更具表达能力能够提取更复杂的特征3. 右图全连接的深度RNN该结构进一步增强了网络的建模能力每一层的隐藏状态都与下一层进行连接并且在时间步之间进行传播这种结构能够更好地捕捉长期依赖关系同时利用深度结构提升特征学习能力DRNN的关键特性深度结构相比单层RNNDRNN具有多个隐藏层使得模型在不同层级上学习不同的特征表示提升表达能力更强的时序建模能力深层结构可以更好地学习长期依赖关系减少梯度消失问题信息流的层次化传播信息在不同时间步和不同层之间进行传播提高模型的预测能力我们会在之后的实战环节进行更深入的了解