00:00
呃,大家好,今天给大家讲一个test rn模型,以及它的拍拓实现。嗯,现在已经是晚上11点了,我就尽量讲的快一点。啊,因为这个视频今天要上传到B站。OK,呃,首先这个呃模型的话,呃,我会用一个呃做一个实实际的一个问题吧,就是说呃这个问题的背景就是说我有N句话,然后每句话都是由三个单词组成的,我现在要做的是将每句话的前两个单词作为输入,最后一个单词作为输出,训练一个RN模型。举个简单例子,比方说我现在有三句话。呃,每每句话都是由三个单词构成的。呃,我现在要输入I like,然后我我要通过一个模型之后让它预测出dog。让我输入I love,我让他预测输入coffee。呃,不知道这个声音会不会太大了。
01:00
呃,就是这样一个问题吧。关于test r的话,呃,大家可以有可以看一下这篇论文,当然这篇论文如果你对R有一定的了解。其实是可以不用看的。OK,那我下面就直接开始讲代码吧,因为呃,这个结构还是比较简单的,首先你就是把啊等会等会讲到网络架构的时候再说吧,OK啊,首先看代码,前面是呃倒库,没什么说的。然后后面是定义啊,运行一下。然后后面是定义数据集啊,这里我就用一个非常简单的三个句子,Sentence,然后world。然后vocabulary vocabulary就是说我看就是把这里面每个单词都取出来,然后驱虫转成一个list。OK,然后呢,Word图就是说把每个词。和它的索引进行一个映射。这样的话得到比方说呃。
02:05
啊,这个大家应该都可以理解吧,就是说把一个词转换成一个索引,然后呢,To word,就是说把一个索引转换成一个。的词word。然后,呃。大家可以仔细想一下,这个问题应该怎么样实现,比方说我输入I like,那么我让他怎么预测出多少个呢?我们可以就把它想象成一个分类任务,对吧。呃,比方说我I like,然后呢,我去,呃,比方说我输入I like,然后我让它分成什么类,我让它分成dog这个类对吧,就是就是说输出是个dog,那么这个类它有多少类呢?有。这么大小的嘞。就是说你把这些词都去重以后,然后看它有多少个词,那我就有多少类,然后这里一共有1234567有七个不同的词,那么我就有七类,那么我输入I like,然后它可能会预测出love,对,那那那就是I like love。
03:02
但是正确的输出预测应该是I like,然后然后分类成dog对吧。这样就class就是这个含义,就是说有多少类。然后呢,下面是test r的一些参数。首先是by side,因为我这里就三句话嘛,然后我就BY设置为小一点,设置为二就可以了,呃,然后n step step这个怎么理解呢?就是说你的输入一句话里面是有多少个单词。因为我这里一共有一句话,里面一共就三个词,然后呢,我要用前两个词作为输入,所以说我就step等于二。比方说我这里有三个词,哦,有有有四个词,比方说I like dog and。对吧,那就是一共有五个词,比方说每句话都是五个词的,那么我我我就可能是以前四个作为输入,前四个词作为输入,然后最后一个词作为输入,作为预测输出,那么这里就应该是四。
04:00
然后呢,后面呃,A step讲完了,当然这里有一个注释,Number of cell,就是说a step,它除了表示这个含义以外,它其实还表示一个含义,就是a number of cell,就是说细胞的个数。这个如何去理解呢?嗯,我找一下。找找一张图看看啊,这里。呃,大家我想的话,大家应该没有不理解老人的话,希望你去就是。啊,仔细看一下我这篇文章。然后去了解一下RN,那么RN里面的话,它其实是XT减1XTXT加一,它是一个时间上的一个呃不呃,时间上的展开,那么对于XT减一,比方说X时刻吧,那我会输入I。然后X1时刻我会输入like。那么在这里。这个。这里的输出就应该输出dog。或者说多个对应的向量,对吧,那么这里的cell就是说number of cell,其实指的就是这个圆圆的这个,呃,隐藏状态,或者说你也叫细胞,也可以就是这样一个东西,因为我这里只有两个两两个单词作为输入,所以说它其实就只有两个细胞。
05:10
所以说为什么这里二,也就是说step同时既表示一个词的输入有多少个单词,也表示我的细胞有多少个number of cells。呃,然后下面,呃,当然它其实是有约束的,大家也明白了,约束就是说你输入的词。是多少个?而这个N黑它是没有任何限制的。N黑代表什么呢?呃,我们知道,比方说大家如果了解word to vector的话,就是说一个词,我要用多少维的向量去编码。那么我可能用一个比方说,我有一个词用50的向量去编码,然后呢,我把这个呃,编码后的这个向量送入RN之后,我要把这个一个词啊,它是原来是50维的嘛,因为通过word to VE,它变它是50位的,那我要通过RN之后,我要给它把50位转换成多少维呢?比方说我要转换成100位,那这里嗯黑的就写上100。
06:06
当然我这里写上我,因为我的数据集比较小,小一点就可以了,那么它表示的意思就是说你输入的数据输出之后要转换成多少维的。就是这个意思,Hidden就是表示这个含义,那么就是number of hidden UN in oneself,嗯,就是就是这个意思,OK,然后下面就是定义呃,Data set,然后构建呃呃,构建data size,然后定义data load就非常简单了,就是。呃,大概就是这样子吧,首先啊,然后然后呢,首先把一句话过来之后,把一句话按照空格进行分分切分开,那么得到是个list,这个word里面是list,就I like dog,它是个list,然后呢,便利,这个list除了最后一个词以外的所有词从最开始便利,然后最后一个词不要。就是这样编完后呢,通过它呃获每一个索引,索引之后呢是一个list,然后再套入一个list连续。
07:04
在勾N派点I,这个函数表示什么意思呢?呃,给大家看一下吧,N派点I,就是说你会构建一个呃呃,这里写上嗯,那么就会构建一个N行N列的一个。呃,对角矩阵,对角线上全是一的一个矩阵。呃,这个叫什么单位之间吧,呃,我有点不太记得了,比方说我这里写上呃三,那么它就会构建一个三乘三的。这么一个矩阵。呃,OK,然后呢,我关你一个这么一个间之后,我后面还呃再对于我这个问题来说是七,然后后面呢,它是一个向量,再套一个呃,List,再套一个list,因为这个input它是个list,然后这里有个框框又是个list,所list套list,那比方说我这里有一个词是索引是一,然后还有个词,所以是二,那么它就会构建一,可能它就会把第呃下边从零开始的第零行,第一行,这样那么它就会把第一行。
08:03
取出来,然后把第二行也取出来。比方说,我要把第一行、第二行和第五行取出来。那么它就是,呃,像一位置上它就是一,然后二位置上是一,然后五位置上是一,下标是从零开始的,我我现在说的都是下标从零开零开始的,OK,呃,这里就大家好理解了,嗯,那么target就非常简单。把最后一个词取出来,然后转换成呃,转换成索引,然后放进去就OK,呃,后面的话就呃获取,然后定义data size,然后构建一个data load。OK,很简单。我给大家看一下,就是说input它是一个什么样子,呃,大家了解的话,应该就是说,呃,我这里面有三个句子对吧,三个句子,然后每个句子我只用两个词,然后每个词呢,我使用的一个。One hot来编码的,因为这里有I,它它它其实是一个one hot编码嘛,大家也刚刚也看到了,所以说它的维度就应该是三个句子吧,就是。
09:06
就是三,然后呢,一每个句子里面两个词,所以就是三二,然后每个词是一个七维的一个向量,用one hot就变成码了,所以说它的维度就是372,那么它就有三行,然后每行里面呃。哦不不不,它是一个,它是一个立方体也是不不能叫行,反正就是372,呃呃,327327这样的一个维度,我们也看一下它的。呃,我先说一下,比方说这里。就是第一句话。然后这个呢,表示的是第一句话,第一个词它的万豪。然后这个是第一句话,第二个词它的one hot,然后这个是第二句话,然后里面也以此类推,然后这个是第三句话。然后可以看一下它的shape。就是327就是三句话,每句话两个词,每个词用一个七尾的向量去表示啊。为什么我会在这里给大家就是费这么多口舌去介绍这个she啊之类的,因为说实话拍拓它定义呃网络还是不是非常困难的,但是很多包括数学者,包括我一开始的时候也是对呃看大家看各种大神写的代码,都是很不太理解它里面的那种维度的是什什么东西,所以我想这里讲的清楚一点的话,大家呃可以理解的更更更好一点。
10:26
OK,然后呃,这里就介绍完了,介绍完之后呢,那么就是下面这里,呃,构建网络结构,这里就要好好呃非常仔细的讲讲一下了。首先一开始。RN对吧,然后n.RN就是这样拍里面的这个n.RN这个东西,然后它里面有个两个参数。其实是有很多参数的,但主要的必须要填的是这两个。Input size和hidden size size的。不是说你一个句子里面有多少个单词,而是说你每个单词用了多少维的向量去编码。
11:04
这个要记住啊,可以给他写一下啊,Input。Size指的是。每个单词。用多少维的向量?去背嘛,因为我这里one hot嘛,所以就是七尾的,就是有七个单词。那么所以说n class就是class class就是七。然后呢,黑塞。指的是就是说你。你的输出。输出。输出维度是多少?就是我刚刚已经讲过了,在这里呃,N黑的,比方说你这里输入是个每个词是用个七位的向量去表示,那么我输出之后呢。我的每个词我就会变成用一个N,用hidden size这么多维度,那么hidden size这里是n hidden n hidden是五,也就是说我要把一个七维的每个词原来是七维的输入,我要把每个词变成一个五维的。
12:10
一个向量去变嘛,输出的时候是个五维的,这里大家也应该可以理解了吧。然后我想想这里,呃,大家如果不理解的话,可以还是就是要仔细看一下我这个这篇博客N点,嗯,Layer这个东西,这里面讲的非常清楚。嗯。OK,然后这里就往先留着吧,然后呃,这里X它的,呃。OK,那么这里RN讲完之后,下面这个啊,Ly connected FC就是。Fully。呃,福利是这么打的吧,好像是吧。Car。嗯。可以,就是全连接神经网络。呃,后面这个前面神经网络后面再讲吧,我先讲一下这个for里面的参数。
13:00
大家可以看这啊这里啊,这这这个图。就是我R那页里面的一张图。把我对这个也解解释了,在博客里面解释了,那么我这里再简单解解释一下吧,就是说你forward里面你要传一个X,一个H0,这个H0指的是什么呢?H0指的就是。对,因为你一开始你你你要为了保证这个结构的这么一个,呃。就是为了保证这么一个结构吧,它每次都会有一个隐藏层进行一个输入,那你如果一开始。你是没有上一时刻的,对吧,你X0时刻是没有上一个时刻的,那你也要有一个输入进来。呃,这么一个HT进来。所以说就是H0就是这里。OK,所以我们需要一个X和一个H0,那么X它的维度。需要的是SE。By size,然后world worldw。
14:00
就是这是一个维度啊,维度就是就是说呃,一一你的输入是有几个单词,那么对于我这里来说就是两个单词,然后呢,By size by size,就是by size嘛,然后word vector,就是说你每个词,每个词是用了多少位的向量去编码的。但是呢,我这里的输入啊,大家可以看一下是by size,然后n step step其实就是。Six。就是这个。因为我前面也讲了嘛,它的含义大家可以在,如果忘了的话,可以再去听听一下,然后呢,啊后面是class class其实就是我的word,就是说一个词用多少的量去编码。但是它,但是对于这个它里面要求是这样的一个,就是说size它是在第二个位置,呃位置上,而我一开始赛在第一个位置上,所以说我必须要调用方法把零和一位置上的维度去交换。是这样后。
15:05
这也是为了呃保证就是说和拓他的要求,RN这个方法去呃去。呃,契合他的要求吧。好,然后H0它是个什么维度呢?H0和HT的维度是一样的,就是number of layers,那么这个H0我是在哪里,哪里定义的呢?是在这。H这个就是H0,我在这里用一个,呃,全零的一个去弄的。H0的向量,它的维度要求是number of layers by side,然后h dimension number of lays。指的是什么呢?指的就是。嗯,这里怎么给大家解释呢。就是大家可以看到在RN里面,它其实有两个方向去拓展,首先第一个方向是这样的,呃,就是说有一行,两行,三行这样的,我们叫行行方向它是有有有,你可以加深这个行的方向。还有一种方向是。
16:10
啊。就像这样子吧,它是列的方向,就是说一列两列三列,那么列的方向其实就是时间步,时间,呃,时间步。至是零时刻至一时刻对吧?那么时间部你是已经固定好的,因为你有多少个单词作为输入,那么你时间部是固定好的,而这个你的层层数就是说一行两一层两层,这个没有任何要求,你比方说你想要它呃层数更深一点,那么你就先做一个输入,然后通过一个RN,把这个通过RN的output再传到下一层,再去通过一个RN。然后你还想再深一点,再通过R这样子的,那么这里的number of layers指的就是这个。行方向上的这样的一个深度,就说你有多少层。
17:00
你有多少层,比方说这是一层,这两层,所以说对于这个图来说,它就两层,而我这里设置的比较简单,就用一层就够了。所以这里是一。也就是说。也就是这样子的,这就只有一层。这样的一张图,首先输入,然后经过一层,然后就得到输出,就是非常简单,然后呢,By size就是by size嘛,就不用说了啊h dimension指的就是这里的hidden size,就是你要输出,你要编码为多少。呃,什么维度的,所以说H0和HT都是这样的一个结构,那么我们看一下代码,这里H0我听的就是。一对吧。然后呢,Size的话,我就直接调用I的这个shape。零。然后H就是N的N点就是这里。嗯,黑的就是五。哦,喝口水。
18:07
好,那么。呃,然后呢,它的输出HT,它也是number of layers size,然后H。就可以看这里HT其实就是这里的hidden对吧,Hidden这double players是1亿嘛,然后呃。这些大家可以不用管了,因为这个后面是那个。就是说涉及到呃。By directional,就是呃,就是说双向RN的时候才会用到,那这里就大家可以不用管,不用管这里其实它就是以。然后呢,后面是。Size,然后dimension对吧,Size,然后hidden对吧,没有问题。然后呢,这里out。它的维度是什么呢?所以它因为你呃作为输入X和H0作为输入之后呢,R它会返回两个结果,一个是AL1HHT等会我会讲解这两个东西有什么。
19:00
就代表什么东西有什么区别。我先先说一下他们的维度,然后呢,Out它的维度是second,就是说一句话,呃,这个大家都很理解了吧,一句话多少个单词,然后呢,By size,然后dimension都一样的,就是这里不一样而已,HT和out,它就是第一个维度上不一样,一个是number of layers,一个是。那么这里大家也,我不知道大家有没有那种感觉啊,他们后面都是一样的啊,唯度前面不一样,呃,可以给大家介绍一下吧。Out指的就是因为你是sequence嘛,你有多少个单词嘛,而你有多少这种列就是多少单词是吧,所以说这个红框。这个红色的框框起来的就是out。对吧,这也很符合它是C分之,比方说我现在有一共21234,我有四个单词作为输入,那么我就会得到一个,呃,第一个维度是四的这么一个向量,对吧。然后呢,HT就是指的这个蓝色的框。
20:01
这个很好理解,Number of layers嘛,比方说我这个图它是个两层的一个R,那么它就会有一个,最后它会有一个两层的。所以说呃,这里我想画画图大家应该很好理解,那么我就文字介绍一下的话,就是说HT指的是最后一个时间戳,时间戳就是说啊,就是每一列就是一个时间戳,那么最后一个时间戳就是这个。就是这个。最后一个时间,抽上面的所有memory状态。就是说。最后一个时间说是这嘛,那么它它的是呃,Memory状态,就是说这个和这个,如果说你还有一层的话,那是这个这个,然后再继续往后。而out指的是所有时间戳上的最后一个memory状态。所有的时间戳在这儿吗?然后最后一个memory状态在哪呢?在这儿,这是最后的memory状态,这是中间的,这都不算我要的,是最后的。所以说al和HHT。就是和HT就给大家解释清楚了。
21:02
呃,这里我我花很多时间去解释啊,因为这个地方实在是太重要了,因为当时我学二的时候就这里就云里雾里的,希望我这里能给大家讲清楚吧。嗯,然后。OK,那么我就得到奥和HN,把X和黑传进去,然后呢,我现在得到的一个,我现在得到。就是说比方说我现在有四,我一句话有五个词构成。我现在输了四个词,那我要得到,我要预测第五个词,那我要取哪一个向量呢?我取这个吗?不对,取这个吗,也不对,要取的是这个,比方说。比方说什么I like,不拉不拉啦,然后到最后一个词的时候,比方说比方说这个词是like,那我让他预测出dog对吧?啊,或者说什么乱七八的,我让他预测出一个词,那我肯定要取这一个向量。并不是这一整个,而是这一个,我只要取最后最后的这一个,最后一个时间戳上的最后一个,呃。
22:00
隐藏层的一个,呃呃,输出就可以了,所是这个,那么这一个向量它是哪,它是怎么怎么获取呢?可以就直接通过out对吧,我说了out是最后一个,是所有时间说唱的最后一个。啊哎,这个就不说了,反正out的最后一个东西吧,啊,而out的最后一个就out负一。来取就可以了,负一就代表着最后一个,就是这样的一个东西。那么负一之后呢,它out原本是n step对吧,然后BY,因为n step它原来是二。是有两个词,那么取最后一个之后呢,它就就会变成一。嗯,那它那它就没有了,其实就是因为它是就就是这样取的话就没有了,那么它就会少一个维度,只会有by size,然后嗯,By size,然后嗯,Hidden这样的一个维度,我就打型号表示,这里特别重要,因为大家可能不太理解为什么这里这个负一是代表什么意思啊之类的。OK,然后呃,接下来的话就通过权力神经网络吧,就非常简单,因为这是白棋,然后N黑嘛,N黑的话,那我就输入也是N黑,然后输出这个n class就完事了。
23:06
OK,呃,这里的话。这个网络架构花了非常多时间去讲,应该讲清楚了,就大家应该理解了,OK,就这么多,然后呢,因为是个分类问题,所以我用这个都是老师常的事了。然后下面开始训练,首先呃,我要有一个,哎,这个这个黑的其实指的就是H0。H0,然后我输入,然后X0中输入,然后呢,呃,去这都没什么好说的吧,这里。去训练,OK,好,训练是这样子,然后下面测试的话,测试代码也不是很重要,大家就抄一抄,然后自己去理解一下就可以了,这里这里一点都不重要,这里。OK,然后它就会预测出I like,然后输dog,然后I love,它会是coffee,然后I hate,它是milk OK,就这么多,嗯,我想的话应该就这么多了吧。
24:03
然后大家如果不理解的话,首先把我的这一篇博客看一下,就是r layer,看懂了以后再去看我这个test r的实现,这篇文章其实就是对于这个代码的一个讲解,也就是我这个视频的一个讲解。大家可以去看一下,OK,呃,大概今天就说这么多吧,嗯。嗯,11:35了啊,大家如果有问题的话,可以在评论区提出来,然后我看到的话,我会回答的。啊,希望我讲清楚了吧,好,谢谢大家。
我来说两句