“e983cc90fcee4e5b73bce9d4853b85aac4661e3a”上不存在“python/paddle/fluid/tests/unittests/test_rank_loss_op.py”
text.html 5.1 KB
Newer Older
ToTensor's avatar
ToTensor 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
 
<p class="content">Simple RNN不是唯一的循环神经网络类型,它只是其中一种最简单的实现。本节中要讲一讲目前更常用的循环神经网络LSTM。</p> 
<h3 class="thirdTitle" id="bw208"><a >7.5.1 SimpleRNN的局限性</a></h3> 
<p class="content">Simple RNN有一定的局限性。还记得瞬时记忆、短时记忆和长时记忆的区别吗?Simple RNN可以看作瞬时记忆,它对近期序列的内容记得最清晰。但是有时候,序列中前面的一些内容还是需要记住,完全忘了也不行。</p> 
<p class="content">举例来说,看一下这段话:</p> 
<div class="content_106"> 
 <p class="content_105">小猫爱吃鱼,</p> 
 <p class="content_105">小狗捉老鼠,</p> 
 <p class="content_105">蝴蝶喜欢停在鲜花上。</p> 
</div> 
<p class="content">机器经过学习类似的文本之后,要回答一些问题:</p> 
<div class="content_106"> 
 <p class="content_105">小猫爱吃__,</p> 
 <p class="content_105">小狗捉___,</p> 
 <p class="content_105">蝴蝶喜欢停在___上。</p> 
</div> 
<p class="content">对Simple RNN来说,答这些填空问题应该是其强项。</p> 
<p class="content">如果换下面这段话试一试。</p> 
<div class="content_106"> 
 <p class="content_105">我从小出生在美国,后来我的爸爸妈妈因为工作原因到了日本,我就跟他们在那里住了10多年。</p> 
 <p class="content_105">……</p> 
 <p class="content_105">后来我回到美国,开始读大学,我学习的专业是酒店管理,</p> 
 <p class="content_105">在大学校园里,我交了很多朋友。</p> 
 <p class="content_105">……</p> 
</div> 
<p class="content">机器学习问题:我除了英语之外,还精通哪种语言?___________。</p> 
<p class="content">这个问题对Simple RNN这种短记忆网络来说会比较难处理,这后面的根本原因在于我们曾经提起过的<span class="bold">梯度消失</span>。梯度消失广泛存在于深度网络。循环神经网络通过短记忆机制,梯度消失有所改善,但是不能完全幸免。其实也就是<span class="italic">Uh</span><span class="sub">t</span>这一项,随着时间轴越来越往后延伸的过程中,前面的状态对后面权重的影响越来越弱了。</p> 
<p class="content">基于这个情况,神经网络的研究者正继续寻找更好的循环神经网络解决方案。</p> 
<h3 class="thirdTitle" id="bw209"><a >7.5.2 LSTM网络的记忆传送带</a></h3> 
<p class="content">LSTM网络是Simple RNN的一个变体,也是目前更加通用的循环神经网络结构,全称为Long Short-Term Memory,翻译成中文叫作“长‘短记忆’”网络。读的时候,“长”后面要稍作停顿,不要读成“长短”记忆网络,因为那样的话,就不知道记忆到底是长还是短。本质上,它还是短记忆网络,只是用某种方法把“短记忆”尽可能延长了一些。</p> 
<p class="content">简而言之,LSTM就是携带一条记忆轨道的循环神经网络,是专门针对梯度消失问题所做的改进。它增加的记忆轨道是一种携带信息跨越多个时间步的方法。可以先想象有一条平行于时间序列处理过程的传送带,序列中的信息可以在任意位置“跳”上传送带,然后被传送到更晚的时间步,并在需要时原封不动地“跳”过去,接受处理。这就是LSTM的原理:就像大脑中的记忆存储器,保存信息以便后面使用,我们回忆过去,较早期的信息就又浮现在脑海中,不会随着时间的流逝而消失得无影无踪。</p> 
<p class="content">这个思路和残差连接非常相似,其区别在于,残差连接解决的是层与层之间的梯度消失问题,而LSTM解决的是循环层与神经元层内循环处理过程中的信息消失问题。</p> 
<p class="content">简单来说,<span class="italic">C</span>轨道将携带着跨越时间步的信息。它在不同的时间步的值为<span class="italic">C</span><span class="sub">t</span>,这些信息将与输入连接和循环连接进行运算(即与权重矩阵进行点积,然后加上一个偏置,以及加一个激活过程),从而影响传递到下一个时间步的状态如右图所示。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0255-0349.jpg"> 
 <p class="imgtitle">LSTM—增加了一条记忆轨道,携带序列中较早的信息</p> 
</div> 
<p class="content">运算规则如下:</p> 
<p class="content_100">Output_t=activation(dot(state_t,U)+dot(input_t,W)+dot(C_t,V)+b)</p> 
<p class="content">不过,LSTM实际上的架构要比这里所解释的复杂得多,涉及3种不同权重矩阵的变换,有的书中将这些变换规则解释为遗忘门、记忆门等。这些细节对于初学者来说,并没有很多的实用价值。因此,大家目前所需要了解的是,LSTM增添了一条记忆携带轨道,用以保证较前时间点读入的信息没有被完全遗忘,继续影响后续处理过程,从而解决梯度消失问题。</p>