我们好啊,我是董董灿。

刚开始做程序开发时,提交代码前需要让大佬review,大佬们看完,总会在谈论区打出一串”LGTM”。 作为小白的我,天真的以为大佬觉得我的代码质量很好,在开玩笑的夸我说”老哥太猛”。

后来才知道,这原来是review的一种黑话,look good to me的意思,也便是说”我觉得没问题”。

后来学算法,看到了LSTM,心想,这又是个啥,不会是”教师太猛”吧!

当然不是!LSTM —— long short term memory,长短时记忆,是一种特殊的循环神经网络。

这个网络的主要是用来处理具有时间序列的数据使命,比方文本翻译、文本转语音等等。

LSTM 的文章有很多,一百度形形色色,基本上来便是公式一扔,三个门一讲完事。看完之后,也便是看完之后了,仍是不能有感性知道,“为啥,LSTM处理这种具有时间序列的使命效果会很好呢?”

浅显的比方,才是了解的王道,下面是我用一个小比方来阐明这个原理。浅显的解说,或许会丢掉算法的谨慎,但不阻碍对lstm有个感性知道(比方思路参阅B站up主 @老弓的学习日记 的一个课程)。

请跟上我的思路,文章不长,读完后,期望你会有一个全新的知道。

进入假设

首要咱们假设一个场景,咱们是大学生,现在正处于期末考试阶段,并且现已考完了线性代数,接下来还有一门高数要考,而咱们作为学生,很天然的要开始温习(学习)高数的内容了。

在这个场景中,运用LSTM来处理这种带有时间序列的使命,即考完了线性代数,接着去学习高数。咱们来看看,LSTM是怎样和人相同,学到了高数的内容的。

尽管不打算说技术细节,可是LSTM里的一些概念仍是要结合比方来说。首要,LSTM的结构大致如下面这样。

LSTM最通俗的解释

咱们只看中心的一个方框,他接受了前面方框的两个输出(一个是上一层真实的输出状况—上面的黑色箭头,一个是上一层输出的躲藏状况—下面的输出箭头),一起接受了一个新的Xt作为输入。

好,那咱们就从这儿开始。

咱们现在要参加高数考试了,在学习高数常识。咱们必定是期望把一切与高数有关的内容都记住,与高数无关的都忘记,最好便是在参加高数考试时,大脑里满是高数常识,其他的什么物理化学常识全部忘记。

咱们从中心的大方框的最左边来剖析。

首要这个时分,咱们接受了上一个单元时间的输出,上一个时间咱们考线性代数,输出的状况是刚考完线性代数的状况,那咱们这个时分最想做的是什么?

当然是把之前学的与本次考高数无关的都忘记(选择性忘记),为什么说是选择性忘记呢?咱们上一场考的是线性代数,那本场接着考高数,其实线性代数和高数之间仍是有很多常识相关的,所以这个时分咱们必定期望把相关的部分留下来,把不相关的忘记。

那如果上一场咱们考的是英语,那么大概率一切常识都是不相关的,咱们简直都能够忘记。

ok,提到这,怎样把上一个方框单元的输出状况进行选择性忘记呢?这儿就遇到了 LSTM 结构中的第一个门 —— 忘记门。

忘记门

LSTM最通俗的解释

咱们能够看第一个忘记门是由一个激活函数和一个乘法来完成的,它接受了本次状况的信息(xt),也便是咱们正在温习的高数的常识,一起接受了上一个方框单元的躲藏状况(ht-1, 上一场考试后咱们的大脑状况),然后经过激活函数后与上一个单元的输出(Ct-1)做乘法。

形象的解释一下这个进程。咱们学习了高数的内容(xt),大脑中还保存了一部分上一场线性代数的内容,也便是躲藏状况(ht-1),这两个状况经过激活函数激活,选择性的保存,谁的权严重,那么谁最终保存下来的信息就多。

所以,这一步,咱们吃苦温习高数和不吃苦温习高数,对应xt的权重是不相同的,必定吃苦温习高数会使得高数的权重更大,那么保存下来的信息就多,经过激活函数之后,咱们以为保存下来的更多的是和高数有关的信息。

那么这个信息去和上一场考试完成时的输出状况相乘(得到的信息便是和高数有关的信息(这个信息会持续往后传),其他的与高数无关的信息因为激活后简直为零,也就被忘记了。

到了这,咱们把之前该忘记的都忘记了,可是要参加高数考试,光忘记(清空大脑无用信息)是远远不够的,更重要的是要把咱们学到的高数常识(xt)给记住。

那咱们需要给大脑输入新学到的高数常识,也便是LSTM要学习高数常识,接下来就到了第二个门 – 输入门。

输入门

从姓名也很好了解,输入本层想学的常识,所以叫做输入门。

LSTM最通俗的解释

看上图,本次学习的高数常识(xt)和前次隐层的状况结合后,经过一个激活,然后还经过了一个tanh,然后两者相乘。

本次的激活与忘记门的激活不同之处在于,忘记门的激活输出是作用在上一层的输出上,而输入门的激活是作用在tanh的输出上。

浅显的了解,这样会选择咱们本次学习的高数的内容(因为不是一切的高数内容都会被考到),两者相乘起到一个信息过滤的作用,乘法的输出为提纯后的高数常识(这些高数常识大概率会被考到)。

然后和上面经过忘记门筛选过的信息相加,就得到了一个新的考高数时的常识库(在这儿,有上一层(考完线性代数后)遗留下来的与高数考试相关的常识,比方最简略的加减乘除等通用运算常识,也有本次温习高数之后经过提纯的常识,比方微积分,能够说是必考题)。

那到了这一步,基本上咱们就能够去参加考试了,下面便是输出门。

输出门

LSTM最通俗的解释

输入门和忘记门的信息相加之后(Ct),直接输出到下一层。

LSTM最通俗的解释

输出门还有个分支,xt经过激活之后和tanh的输出相乘,然后作为躲藏状况传给下一层。

那这是在干嘛呢?还记得咱们的目的是干什么?考试!

这儿就了解为正在考高数好了。带着之前提纯过的常识以及本次学的常识,做了几道高数题,然后考完了高数(又是一次信息过滤,只记住了考完高数后的考的那几道题),作为躲藏状况传给下一层。

有或许基层又要考数理统计了,数理统计或许又要用到本层的高数常识以及前一层的线性代数的常识了,又一个循环,直到一切的考试结束。

用这个考试的比方,浅显的描绘了下忘记门、输入门和输出门的作用,以及LSTM是如何做到选择性忘记和信息过滤的。期望能协助到学习LSTM的你。

至于为什么在LSTM中,忘记门能够忘记记咱们不想要的信息,输入门能够提纯信息,输出门去考试的时分能够发挥最好的状况去做题呢?那是LSTM网络训练的事了。

在训练LSTM的时分,最终网络收敛会得到一系列的权值,用于协助忘记门更好的忘记,输入门更好的输入,输出门更好的输出。

最终,一些技术细节比方为什么要选sigmoid激活,我们感兴趣能够去Google,这儿不再赘述了。期望你看完能对LSTM有个感性的知道。

本文作者原创,请勿转载,如需转载请与作者联系。