00:13
我们接着来说这个循环神经网络。循环神经网络呢,就是RN对吧?好了,这大家都取得了共识,循环神经网络就是RN,不是第一位神经网络啊,因为这两个都是二打头。循环神经网络有一个关键性的问题啊,它特别难训练,它比CNN还难训练,为什么呢?大家可以想一想啊,CNN的每一层的那个权重都是我们随机初始化的,对吧?我们昨天讲过一个矩阵,自己连乘,假设是W,它自己乘自己不断的成列去。会怎么样呢?要么爆炸,要么怎么样消失,对吧。为什么一个矩阵是一个线性变换对吧?它在很多维度上都有它的什么,要么是膨胀分量,要么是缩放的一个收缩分量,对吧?矩阵自身连成的时候呢,就会导致它在某个轴上,本来是比如0.9,它越乘越小,就这个轴最后就成没了,就没东西了,而它某个轴上可能1.1乘了300多次以后,这个轴变得无限大。
01:24
明白吧,所以呢,我们想接收一个300个字的一个文本就变得不可能了,因为我现在要要训练它,对吧,我要那个把这个三百三百个字的文本啊扔进来,扔到神经网络里训练,至少要循环300字对吧?那每循环一次呢,你W就要乘自身一次,因为你是W乘完之后加上来,然后你在W再乘一次,再再不是不是乘完加上来啊,就乘完就是它,再乘完就是它,这个W是连乘的对吧?那相当于W300次幂。这个矩阵要么就膨胀了,要么就彻底就消失了,前者对应着你这个梯度,到后面没法没有办法训练了,梯度特别大,无穷大,那后者对应的什么呢?也没有办法训练的,因为你说扔了一个300个字的文本给他,前面两个字是新闻,这个文本呢,跟新闻关系非常大,最后两个字呢,是好的。
02:21
所以呢,深度学深度这个模型的R呢,就学到了好的他看不到新闻,因为它这个梯度消失了,他永远看不到新闻,对吧,后边不管多大的梯度,经过W的传导,前面都没有梯度,对吧。所以呢,这个文本呢,就不能被正确的分类。这个循环神经网络效果就不好,对不对。关键的问题在哪里呢?就在于连乘上就这个乘法,怎么能让这个乘法不存在,或者说让它变成一个可以求导的一个就是良良性求导的一个东西呢?就一个就提了一个一个西。
03:01
在他提出来RTM之前啊,我们先回顾一下ne里面啊,刚才我给大家讲过。就是躺着放到那个中间就是各种就这样那个大家还记得是吧,这是他为什么在中间加这么多这个直连线呢。为什么呢?那我们再回顾一下这个直连线这个地方是什么,什么操作啊,是加对不对。加法有什么好处呢?它对导数不会有。倍率效应。比如说A加B这一级,对A求导,对B求导,都不涉及到一个什么连续连乘的问题。明白吧?比如说这个地方啊,这个地方大家可以看数据流是这么留的,数据流是这么留的,反向求导是怎么求的呢?是这么求的,对不对,是这么求的,那这是其中一条路,另外一条路是这么求的。
04:01
对吧,这两个地方的导数要合并在一块儿,即使这个地方出现了一些类似于连成的效应,但是这个地方是直连链路是吧。这个地方的函数我们就可以写成FX加X嘛,对不对,对吧,就这就是就你你乘过去的,比如说你这个地方,假设这个点是X,那它经过一个F的作用变成了什么FX,对吧,你你又有一个直接接入过来,那就FX加X,对对不对,我至少可以保证,即使FX出现问题,我可以保证什么X的导数是正是正常成绩的。这就是为什么做了152层还能训练的原因。明白吧,而我们现在的关键的问题就在于什么呢?我们RS就是R里边是没有上面这个东西的,我们只有一个数据流,而且这个数据流就是测,测出尾的连乘W,不断的乘,不断乘W,怎么去解决这个问题呢?其实也很简单,你就给它加一个反向的一个直接线路就可以了。明白吧,我们的目的是让什么导数传回去,对不对,你要导数传回去就可以了,那另外一种解决方法就是什么呢?WX乘完之后和下一个WX什么呢做加。
05:12
对吧。就每一个节点和下边组合做加和的。写个垂直公式啊,比如现在有一个在第一个节点上有一个X值,我们FX完事之后呢,这FX可能结果它并不是这个求导并不好求,你再在外边再套一个FX,再套一个FX,它肯定就没法求导了。对吧,但是我们可以让它求完之后啊和下一个节点是什么呢?做求和的运算。我们可以让他。呃,我们可以这样做。假设这一层。假设这一层是那个,诶。
06:23
假设我们还是这么说,这只一个数据流是这么流动的,现在呢,假设这是X经过F的作用变成了FX,又经过F的作用又变成了FFX,它没有办法求导了,对吧,很难,我们怎么办呢?加起来就可以了,对吧?FX你来了之后怎么着呢?跟内部的状态去做个求和对不对。加内部的一个C状态对不对,然后呢,接下来又经过一个F,然后还是求和对吧,一直求和这一项我们的确是控制不住对吧,但是呢,我们这些都能控制住啊,对吧?这些只是可以让让我们可以正常的学到这个这个这个呃呃,这个信息的一个传递的对吧,这是没问题的。
07:08
所以呢,这RCM呢,就基于这个思想。LSTM是它的这个细胞啊,就是我刚才说过一个细胞,LSTM这个细胞呢,是这么样一个细胞,非常复杂。呃,这这个细胞可能很多人看了好多年也看不懂。啊,真的是看不懂,我最开始也看不懂,直到最后我看了一下那个RTM那个有一篇比较好的一篇经典的文章哈,他就讲这个东西为什么是这样的,后来我发现其实他也可以不是这样的。其实他是这样的,没有任何的必然的原因,打个比方,我们现在把它做简化,这个边不要了,这个边不要了,他很可能也是正常工作,没准准确率还更高一些。所以这就是深度神经网络里边的一个一个问题,就我们现在有些model,但是我们不知道为什么这个model好,那个model不好,没有人能说的出来到底哪个东西需要。
08:05
今年我看了一篇研究文章,就说LTM这三个路,这这是相当于三个路嘛,对吧,这是一个,这是一个,这是一个,这三个节点并不是都有必要存在,仅仅存在一个遗忘文,效果也不错啊,但是我们现在从第一次学来说呢,我们还是呃,就是一次性把它就是学学扎实一遍啊。LGM简单来说呢,它是有三个门。第一个门叫做。输入门。第二个门叫做输出门,对。第三个门叫做什么呢?他能想能想到是什么。想到咱已经跟大家说过了。遗忘文。你必须得把前面东西给忘掉才行啊,你不能一直在里边,比如好的在这个细胞里一直存在着它,它就这个就就不行了,对吧,所以呢,LGM在训练的时候呢,就这个三个门的一个状态在训练,三个门不断的在学习什么样的词扔进来,我应该把它丢掉。
09:12
在什么样的上下文的条件下才丢,并不是说所有资生家都丢,对吧,因为我们刚才说过。我们刚才说过,刚才那个图像是吧,一个新词进来,进到一个细胞里去,要细胞出去的一个向量,对吧,但是同时呢,细胞会把自己的这次的一个状态怎么样回传给自己的下一时刻,对吧。会回传给自己下一时刻,所以并不是什么词来都会丢,也不是什么词来都会记住,怎么是什么时候会丢,什么时候会记住呢?就看它的这个分类结果,打个比方说,我现在做文本分类啊,我要做文本分类,那么我输出的向量现在对分类这个任务来说呢,就是做的不好,分类效果精确度、准确度非常差。
10:00
那么LTM就发现了我现在的输入门,输入门和遗忘门的配置是有问题的,我肯定是忘了不该忘的东西,而选择了不该选择的东西,他就会去求导,就会去把这个遗忘门和这个输入门和输入门变得跟数据更匹配一些。因为啊。至于具体是怎么工作的,没有人看过其中的状态,就是说这个数字是怎么变的,他我们只看最终的准确率,我们只知道它准确率确实上来了,确实好用,对吧?那为什么有三个门呢?为什么没有这个,呃,为什么是输入输入门,为什么还有输出门呢?是吧,有输有一忘我刚才我们说过了,是吧,我们要把之前的细化,为什么要输出文呢?因为我们在做各种各样的自然语言处理的任务的时候。我们都需要一个向量,对吧。对吧,我现在做文本分类最后一层,假如分十类的话,你至少得有一个向量过来乘个矩阵,然后乘出来一个十,得到十个分数才行,对不对,那你现在向量都没有,怎么去怎么去做这个事了,对吧?所以它必须得有一个输出门,那输入门就不用说了,肯定就是输入进来就要接收嘛,对吧?然后我们看这个图里哈,这个XT呢,就是一个输入,它就是一个向量。
11:15
它不是词,也不是句子,是一个向量。明白吧,是一个是一个向量,刚才我们说过word in bedding,一个一个词,比如说你好,它是可以in bedding成一个256个向量的,对吧。那这个地方就相当于你拿一个256个向量放在这里边,然后呢,在这个位置上,这个细胞内部的位置上,它有256个单元,也256感知点,再跟你这个256个这个数数值相结合。明白吧?就很简单对吧,结合以后呢,他们再去做一些类似于这个西格目的函数,或者是他去这个函数去做激活,再做乘法,然后这样的话,最后得到两个状态,一个是输出的,一个是给自己下意识和要用的。
12:05
从这张图上呢,我们具体分析不出来这个信息是怎么流动的,我们可以看下一张图。我看下一张图啊,现在呢,我们再来说这样一个事情,就是我们有一个矩阵4N乘2N。为什么是这样一个矩阵呢?这个矩阵呢,就是相当于我一个,呃,现在有的一个状态,然后呢,4N呢,我只是为了这个行,这个就扩展,我给它扩展成了这个四倍。换成四倍,然后呢,我要乘那4N乘2N,这边肯定得是什么,肯定是这个高度得是2N,对吧,对吧,因为你这个这个你这个列数是2N,那肯定高度也是2N,乘完之后乘出来的四个矩阵,这个到现在为止啊,这四个矩阵是什么,我们用什么乘出来的,我们什么都不知道,什么什么都不知道对吧?但是呢,我们就死劲硬背,就把这四个矩阵,就这一个矩阵切成四份。
13:02
一个呢叫它是input,一个呢叫它是盖,一个叫它output,另外一个叫它是另外一个参数,就什么都不管,就叫它这个参数,前面三个用c Mo去激活,最后用弹性来去激活。到现在为止,我们还什么都不知道,对吧,我我什么都知道,就就随便拿个矩阵去乘对吧,那么之后呢,我再做一个公式,就是一个呃,这是一个input吧,对吧,Input我设设它为I,我用input和这个G相乘。做惩罚。然后呢,让forget去乘上一次的状态,乘CT减一。它们的相加得到这一次的状态。对吧,到现在为止我还是不懂,但是我有一点可以肯定,输入门肯定是被加进来了,对吧,而且成了个G,这个G是什么呢?我也不知道,对吧,那实际上呢,这气也不知道,我们也不知道它是什么,只是为了让它增加一次非线性。
14:06
只是为了增加非线性对吧,因为因为你这你这个地方是什么,经历过一个非线性变换得到的记忆,对不对,相当于打比方说啊,你看一个事情从两面看更合理一些,对不对,你光用I去加上的话,可能你就是很很片面用G去乘,乘了一下呢,你对这个事情就产生了两个角度去看。因为它是非线性变换嘛,非线性变换就相当于你变换到一个高位空间的,或者是其他空间,对吧,肯定不是线性变换,你换一个角度,这样的话呢,它这个非线性增加了表达能力就增加了,前面呢是遗忘门,遗忘门成上一次的这个状态,把上一次状态忘掉。对吧,那一门可以是0.1,可以0.2,选择它棒的强度大小,对吧,这都可以改。得到了这一次状态输出呢,就很简单,就是output。乘上一个这个唐,在这位这个位置上,Out,乘一个弹。
15:04
就这条路。就是这样一条路,然后大家看到这里边呢,还是会觉得云里无比说这个矩阵是什么,这个矩阵是什么可以告诉大家啊,都没有关系,它是什么都没关系,还是我们最开始说的什么求导原则,只要最后你的结果,反正反正经过这么一堆计算是吧,我得到了一个细胞状态,细胞状态是肯定要往下传的,对不对。我还有一个输出状态,是肯定要拿出去做输出的,对吧,这次的输出呢,往往是一些预测,打个比方啊,我要预测名词或者动词,那我就得用这个输出去预测对不对。他就可以预预测名词还是动词,还是形容词,如果这次预测错了的话,他们都跑不了,都得跟着求导对吧,都得跟着更新,这个矩阵就是RSTM内部的一个状态,他们都要跟着去更新。反正最后肯定能更新好。明白了是吧,那如果你这个,如果这个地方你搞错了,搞错了,那么下一个可能过了这个地方分错了,有些错误。
16:07
然后呢,导致你这个C被错误的带到下一个细胞源,这个是这个神经元去是吧,下一个就下一个细胞,下一个时刻对下进入到下一个词,本来应该是动词分成名词了。他们这一次的这个值固然得更新,但是你作为上一次的一个信息输入,你也跑不了,对吧,因为你参与这个计算了对不对。对吧,就比如说现在我我我是一个工人,我不断的接收新的信息,对吧,我某一时刻接收错了。然后过了两个时刻,我才发现我错了,我不能说过两个时刻,那个那个那个地方是我错了,对吧?他有嫌疑对吧?但是我还是会觉得我之前一定是某个时间段有错,所以我会回溯,我会一直向前求导,对吧。我们会一直上去求导,这就是和CNN不太一样的地方,如果一个CNN是什么一个地方有错了,它整个网络往往回求导一次就求完了,就就一个神经元就求一次,对吧,过去就完事对吧?RN不是这样的,这RCM也不是这样的,它向回求导的时候呢,它是自己不断的循环求导。
17:17
因为他每一时刻都参与了下一时刻的一个工作,对吧,如果你最后那个时刻错了的话,前面谁也跑不掉,大家都得都得跟着更新一次。明白吗?就是加法原则乘法原则吧,对吧,循环就是乘法对不对。所以大家了解到啊,就是你去搞这个深度学习,包括搞这些现在的一些所谓的一些算法的时候,你可能都不知道它是怎么出来的。甚至有些数学推导我们根本也看不懂,但是这没关系,不影响你的使用。你只要把握住这个基本原则,把握住信息论这个基本原则,你就会知道他到底是行还是不行的,他能不能工作。
18:00
明白是吧。
我来说两句