当前位置: 代码迷 >> 综合 >> 温故而知新(一)—— 再看RNN、LSTM、GRU
  详细解决方案

温故而知新(一)—— 再看RNN、LSTM、GRU

热度:82   发布时间:2023-12-17 21:20:55.0

子曰:“温故而知新,可以为师矣。” --《论语 为政》

老祖宗的话真香啊。今天复习以前学习的知识点的时候,看到LSTM,也算是一个八股文高频考点了,于是把自己以前写的旧文干货!RNN、LSTM、GRU学习笔记拿出来看了一下,发现还是不够透彻,文章中对一些关键状态的含义,以及为什么要这么做没有解析的很透彻,这样导致学习完容易忘,今天看完又深入看了一下,又有了一些新的理解,忍不住要写出来,相当于打了一剂加强针,果然是温故而知新啊!真香!

干货!RNN、LSTM、GRU学习笔记中基本已经把大部分的公式和原理说了一遍,今天我们跳出来问自己几个问题?把这个知识点再串一串,看看能不能拥有进一寸的欢喜。

Why RNN?

我们学习RNN系列模型的时候,一定不要忘记最开始最有可能要问的一个问题:我们为什么需要RNN?之前的文章中也有详细说过,这里一句话总结:因为彼时我们需要一个能处理序列信息的模型。

于是他来了。

image-20211016162042367

公式咱这先不看,它为什么就长这样呢?首先你要处理序列信息,就会涉及到时间问题,就会有先后顺序,所以需要区分时间步,所以有t的存在,然后光有t还不行啊,就像ABC三个人要赶制一个精美的木雕,大家规定好了,三班倒一人八小时,A在前八小时干了一些活,这个雕塑的基本形状有了,他得把这个木憨憨交给B继续雕啊,所以需要把他做的一个成果传给下一个人,s(t-1)就是这个载体,他要把这个状态传递给下一个时刻,这样之前序列的信息才能被当前的时刻用上。同样的的道理,当前时刻也要把当前时刻的产出的状态传递给下一个时刻,依此类推。同时基于当前的这个s(t)我们还可以经过一定变化,给一个输出,我们可以理解B给自己第一天晚上做的木憨憨拍了个照,到时候可以拿着这个快照去领工钱或者做其他事,这个就是O(t)。于是大家各司其职开始干起来了。

Why LSTM?

按理说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激活函数的门控结构带来的好处。

Why RGU?

直接先给答案:参数多,训练成本大,过拟合风险高。看上面那堆公式不难发现有八套参数(W),这家伙能不能既能实现LSTM的效果还能参数量稍微小一点呢?于是GRU来了,GRU将原先LSTM的输入门和遗忘门合并成更新门,另外还有一个重置门,看一下核心公式就知道了:

image-20211016181627870

还是原先的那个形态是不是,通过一个更新门Z把输入和遗忘全包了,其中h‘其中又应用了重置门来控制输入。

相当于原先A交接给B的两样东西变成了一样东西。因为图纸和实物本身也有大量信息重合的点啊。

这一部分的细节在中已经说明了关键点,这里不再赘述,放一个公式(途中公式有上标错误)就可以很明显地看明白,核心还是LSTM那点东西。

image-20211016182532366

参数6套(不算y_t部分),的确是少了哈,哈哈哈哈哈哈哈。

行行行,今天就到这吧,这是温故知新的第一篇,期待后面还会有温故知新的部分。

参考文章:

干货!RNN、LSTM、GRU学习笔记

人人都能看懂的LSTM

人人都能看懂的GRU

详解LSTM

  相关解决方案