欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

鉴往知来(一)--重温 RNN、LSTM、GRU--为什么是 LSTM?

最编程 2024-05-01 09:17:09
...

按理说ABC三个工人按照这样的机制,很快就能完成木雕的任务啊。但是,啊哈,总有幺蛾子出来,啥幺蛾子呢,A在第一天下班的时候,走的时候跟B说,“按照客户国字脸双眼皮的要求,我已经把木雕的国字脸搞出来了哈,你继续完善一下就好了。”,没想到这个B啊,搞着搞着搞忘了,就搞成瓜子脸了,这尼玛就有点离谱了,更离谱的是,B下班交接的时候跟C说要C把双眼皮雕出来,C也是半夜加班眼睛昏花脑子浆糊,把眼皮搞成单眼皮了,这尼玛就尴尬了,等A再来接班的时候他都崩溃了。。。。

故事编到这,我们回到RNN,由于RNN在长距离追踪的时候可能会出现梯度消失和梯度爆炸的风险(详见干货!RNN、LSTM、GRU学习笔记,累乘导致),就相当于B忘了A的交代一样,信息传递就会不准确甚至丢失,于是LSTM在RNN的基础上进行了改进,想要提高RNN的长距离信息记忆能力,于是有了LSTM(长的短时记忆网络,这个名字好好体会。)

那他是通过怎么样的方式来解决长距离记忆的问题的呢?不要着急,这一次我们把一个LSTM单元看成一个黑盒来看,它的输入和输出分别是什么,我们有必要搞明白:

在这中间继续编一小段故事,ABC 经历了上面的事之后商议出来一份规则:我们之间啊要有一个作品实现的草图,这个草图上呢画了前面所有人的构想和规划,当前雕刻的人假设是B,来接班的时候呢会接收到这个单子,上面有A画了一部分的轮廓图,跟草图一起交接的还有A雕了一半的那个木雕实体,接收之后B可以对它的这个草图中的某些部分进行取舍修改,画上自己构想的那一部分,同时还需要按照自己的能力进一步雕刻作品,然后再拿着草图和半成品交给C。这样来保证大家的工作。

按照上面的小故事,我们继续来看LSTM的输入:

  • 当前时刻的输入x_t(B今天来上班的灵感、想法和状态);
  • 上一时刻整个单元的输出h_t-1(A交接给B的木雕半成品);
  • 上一时刻延续下来的长期状态c_t-1(A交接给B的草图单子);

B早上来上班,看着A做了一半的木憨憨,和B的草图,还是决定擦去A画的国字脸,改为瓜子脸,但是保留A画的双眼皮,加上了一个张开的耳朵(B今天的灵感),然后又开始做了,最后传给C的图上是有瓜子脸、双眼皮和大耳朵的,当然木雕本体还是更加丰富一些。

输出:

  • 当前时刻的单元输出h_t(B雕过的木雕);
  • 当前时刻之后的长期状态c_t(B改过的草图);

这么对照着我们就发现B需要在这个过程中做几件事:

  • 删除原有草图中自己不满意的国字脸并保留其他部分(遗忘门);
  • 在草图中加入今天的灵感-大耳朵(输入门);
  • 按现有进度实际雕刻(输出门)。

我们可以参考详解LSTM一文中的图来进行理解:

image-20211016165432380

你品,你仔细品,如果还不够,我们再把原先的图拿过来,对照着品:

image-20211016174037135

这个字有点大,先凑活看吧。你品,你细品。再对照这一堆公式来看:

image-20211016174201455

三个控制门均采用sigmoid函数激活来控制各部分的贡献量,这一套下来,是不是就基本可以保障这个信息可以传承了,但是怎么去避免RNN出现的梯度消失或者爆炸问题呢,这个问题还是回到我这一篇干货!RNN、LSTM、GRU学习笔记中的LSTM如何解决传统RNN梯度消失/爆炸的问题?章节寻找详细答案吧。简单来说其实还是因为使用带sigmoid激活函数的门控结构带来的好处。

上一篇: Bootstrap 简介 - 优点:

下一篇: