RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体.doc

上传人:白大夫 文档编号:3272604 上传时间:2019-08-07 格式:DOC 页数:8 大小:29.50KB
返回 下载 相关 举报
RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体.doc_第1页
第1页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体.doc》由会员分享,可在线阅读,更多相关《RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体.doc(8页珍藏版)》请在三一文库上搜索。

1、RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体主要内容上节学习了语言模型和循环神经网络(RNN)。这一节主要讨论RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体。梯度问题梯度消失梯度爆炸梯度剪裁LSTMGRURNN变体双向RNN多层RNN梯度补充梯度向量化梯度推广:雅可比矩阵链式法则重要等式下节预告阅读更多梯度问题梯度消失梯度消失根据链式法则:梯度可以分解成若干中间梯度的乘积。现在的问题是,如果,这三项数值量级都很小,那么反向传播越远,则梯度信号越弱!这就是梯度消失问题!形式化表述:由于:所以:考虑第i步损失,对之前的某步j的隐层状态求梯度。表示如下:考虑矩阵的L2范数:这里

2、的关键是矩阵。Pascanu等人证明,如果的最大特征值小于1,经过多次自乘后,梯度会表现出指数级缩小。由于使用sigmoid非线性激活函数,上界恰好是1,所以会出现梯度消失。如果梯度随距离明显减弱,则无法判断t步和t+n步数据之间的依赖关系。举例:When she tried to print her tickets, she found that the printer was out of toner. She went to the stationery store to buy more toner. It was very overpriced. After installing t

3、he toner into the printer, she finally printed her_RNN语言模型需要学习第7步tickets和末尾tickets之间的依赖关系。但如果梯度过小,则模型无法学习这种依赖关系,进而在测试时也无法预测长距离的依赖关系。再来看一个例子:The writer of the books _现在有两个选项:(is) (are)。正确的应该是is。语义上,is和writer的距离更近;但顺序上,are和books的距离更近。由于梯度消失的问题,RNN语言模型更善于学习顺序距离近的关系,这可能导致学习错误,从而导致预测错误。梯度爆炸同梯度消失相对的是梯度爆炸,

4、这是由于矩阵最大特征值1。如果梯度过大,则会导致SGD更新过大:这不利于参数调整(损失较大)。在极端情况下,如果步长过大,还会导致训练中出现Inf或NaN。梯度剪裁梯度爆炸的解决办法是,如果梯度范数超过某个阈值,则进行缩小,然后再SGD更新。相当于,方向不变,调小步子。梯度剪裁示意LSTMRNN的主要问题是无法学会保存很多时间步前的信息。1997年Hochreiter和Schmidhuber提出Long Short-Term Memory(LSTM),这也是一种RNN,用以解决梯度消失的问题。与RNN只有一种状态相比,LSTM在第t步,共有两种状态:hidden state 和 cell st

5、ate 两者都是n维向量cell用于存储长距离信息,亦称为记忆单元LSTM可以擦除、写入和读取 cell信息信息的擦/写/读由相应的门进行控制gate也是n维向量每一步t,gate各个元素可以是open(1), closed(0),或二者之间。如果门打开,则表示信息通过;如果门关闭,则表示信息不能通过gate是动态的,其值根据当前语境计算现根据t步输入,计算hidden state 和 cell state :遗忘门:决定保留或忘记之前cell state的哪些内容输入门:决定当前cell的哪些内容写入cell输出门:决定当前cell的哪些内容输出到hidden state新cell内容:要写

6、入cell的新内容cell state:擦掉(忘记)上个cell state的部分内容,写入(输入)新cell内容hidden state:读取(输出)cell的某些内容具体如下图所示:LSTM cellLSTM结构让RNN更容易保存很多步以前的信息LSTM并不保证不出现梯度消失/梯度爆炸LSTM实际上是非常成功的2013-2015年,LSTM取得了一流的效果手写识别、语音识别、机器翻译、句法分析、看图说话LSTM由于效果好,成为主流方法2019年,在某些领域,其他方法(如Transformer)成为了主流方法WMT 2016,总结报告出现RNN 44次WMT 2018,总结报告出现 RNN

7、9次,Transformer 63次。GRU2014年Cho 等人提出GRU(Gated Recurrent Units),在保留LSTM优点的同时,去除其不必要的繁杂。在每一步t,只有输入和hidden state ,没有cell state:update gate:决定更新hidden state的哪些部分内容,相当于LSTM中的遗忘门和输入门。reset gate:决定前一hidden state哪些部分用于计算新hidden state的内容新hidden state内容:reset gate选择前一hidden state的有用信息,并输入新的hidden statehidden s

8、tate:综合了前一hidden state和当前hidden state的内容,并在两者之间寻找平衡点和LSTM一样,GRU也更容易保存长期信息。除此之外,研究人员提出了很多门控RNN,但LSTM和GRU使用最为广泛。LSTM和GRU的最大区别是,后者计算速度更快,参数更少。但并没有严格证据表明孰优孰劣。所以在实践中,可以先使用LSTM,然后再试试GRU。RNN变体梯度爆炸/消失不仅仅是RNN存在的问题。由于链式法则和非线性激活函数,所有神经网络(包括前向和卷积神经网络),尤其是深度神经网络,都会出现梯度消失/爆炸问题。这导致低层网络训练非常缓慢。那么解决办法就是在神经网络之间添加直接连接,

9、使梯度传播更顺畅。例如:残差连接,亦称ResNet。它直接将输入信息原封不动地加在其他隐层上。残差网络构件稠密连接,亦称DenseNet,把所有层都连接起来。效果更好。稠密连接:每一层以之前所有层feature-maps为输入高速连接,亦称HighwayNet,类似于残差连接,但identity连接和transformation层由动态门控制结论:虽然梯度消失/爆炸是个普遍存在的问题,但由于相同矩阵连续相乘导致RNN尤其不稳定。双向RNN在情绪分类任务中,假如输入是某个影评,我们希望了解是好评还是差评。一般可以使用简单RNN进行情绪分类。RNN可以编码句子。RNN的隐层状态就是句子表示。下图蓝

10、色方框的隐藏状态可以看作词terribly的语境表示。情绪分析任务但是这些语境表示仅仅考虑了词的左侧语境。很明显,terribly右侧的exciting修改了terribly的词义,将整个句子的负面情绪扭转为正面情绪。右侧语境同样重要!这导致了双向RNN的出现。双向RNN由两个RNN组成:正向RNN和反向RNN。反向RNN和正向RNN一样,只不过它从右到左开始编码。在隐层状态,则将两个RNN输出进行拼接。双向RNN在第t步:正向RNN:反向RNN:隐层状态拼接:通常正向RNN和反向RNN权重不同。下面是双向RNN简化图。双向RNN简化图注意:只有当输入序列完整时,才适用双向RNN。例如语言模型

11、就不能使用双向RNN,因为在语言模型中,只能使用左侧语境。最近很火的BERT(BidirectionalEncoder Representations from Transformers)就使用了双向信息。后面还会谈到BERT。多层RNN虽然RNN展开后在一个维度已经很深了,我们还可以在另外一个维度增加深度,这就是多层RNN。多层RNN可以实现更加复杂的表示。低层RNN计算低层特征;高层RNN计算高层特征。多层RNN在实践中,高性能RNN通常都是多层RNN(但一般达不到前向网络或卷积网络的深度)。例如,在2017年的论文中,Britz 等人发现,在神经机器翻译中,encoder RNN 最好使

12、用2-4层,decoder RNN 最好使用4层。要训练更深的RNN,则需要跨层连接或稠密连接。基于Transformer的神经网络(如BERT)则高达24层。总结:LSTM效果很好,GRU速度很快梯度剪裁可以避免NaN如果有完整信息,尽量使用双向RNN如果有计算资源,尽量使用多层RNN,层数过多时,则需要跨层/稠密连接。梯度补充以下作为CS224N-2019-3的补充。梯度计算是神经网络训练的核心。逐个推导神经网络各个参数的梯度冗长复杂,因此有必要使用矩阵/向量形式进行计算。梯度向量化给定1个输出和n个输入的函数:其梯度就是每个输入的偏导的向量:梯度推广:雅可比矩阵给定m个输出和n个输入的函数:其偏导数就是mxn矩阵,即雅可比梯度矩阵。:其中单个元素就是普通的标量梯度:雅可比矩阵非常有用。链式法则一元函数:导数相乘多元函数:雅可比矩阵相乘重要等式矩阵乘以列向量,对列向量求梯度(,?)行向量乘以矩阵,对行向量求梯度(,?)对向量本身求梯度(,?)使用链式法则时,该项会消掉,因为矩阵或向量乘以单位矩阵,还是原矩阵或向量。对向量各个元素施加同一函数后,对向量求梯度(,?)矩阵乘以列向量,对矩阵求梯度(,?)行向量乘以矩阵,对矩阵求梯度(,?)交叉熵损失,对logits求梯度(,?)这些等式可用于快速计算很多神经网络的梯度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1