00:15
然后呢,我们先讲一下深度学习的一个基本的一个网络模型啊,这是最原始的一个网络模型。最原始的网络模型是这样的,每一个圆都是一个神经元,就都是一个神经。这个这个东西详细理解起来呢,就好像是说,呃,有有针扎扎你那个皮肤一下,那么它肯定是一排神经元在接受刺激,对不对,它就不会是一个接受刺激,然后呢,这一排神经元决定你这个这个最后是不是响应这个刺激,这是神经神经元一神经元二神经元三,一直到后面。那每一个神经元呢,都有,就是都有一个输出权重。
01:01
都有一个数选中,比如说这个边上是二,这个边上三,这个边上四是吧,它如果神经元线值变成一的话,那它就得加二,它就得加三,它就加四,明白吧,就每一个神经元对下一层都得有一个输出权重。有一个输入选中有一个输入系数,本质上来看呢,这就是一个什么矩阵乘法。对吧?矩阵乘法就是你乘个矩阵,然后每一个值,比如说大方,呃A1A2A3A4 B1B2,咱们就先说,呃B1B2B3B4先说。矩阵相乘是什么意思呢?矩阵相乘就是说。A1A2乘B1B呃,A1乘B1A2乘B3加一块嘛,对不对,这不相当于给它加一个系数嘛,相当于把两个神经元,你看啊,两是不是两个神经元加一个系数合到这上面去了吗?对不对,这不是,这不是系数嘛,对吧?这不是系数嘛,对吧?这一层全做了,加了系数,然后合到这上面去,就相当于一个大矩阵乘了这个大矩阵呗,对不对,所以系数是一个大的矩阵,是一个W矩阵。
02:10
这个地方明白吧。是个矩阵,OK,下一层也是一样,那么这几层做下来,比如说第一个神经元决策,我现在应该激活是一,第二个神经元是负一,第三个还是一,后面全是一的话,那第二神经元很可能就被抑制了,就被pass掉了,对吧,它没有产生足够的这个作用,所以上面得出结果还是一对吧,那如果上面有两个是负一,或者有三个是负一,它这个如果上面就是二,然后下面还是一的话,它得出结果可能还是激活是一对吧。所以神经网络它这个拟合性能这么来看,其实就比SDM要强大的多。明白是吧,OK。接下来的问题就是说如何求解这里边的系数矩阵?
03:00
就是打个比方说啊,这个神经元它很可能很重要。这个神经元可能主管你某一个,呃,感觉,比如说类似于这个痛觉,他的这个系数必须得非常非常高,其他的神经元都无所谓,可能有都没有,都无所谓,那你这个权重怎么给呢?就人家人工神经网络,但你这个参数不能人工给,对不对?因为这个参数往往数量巨大,为什么第一层的这个神经元我们一般会有成百上千个,至少成百上千个。成百上千个的话,那就相当于你矩阵的行有多少个1000行嘛,对吧。然后下一下一层呢,可能100个,那你矩阵就是什么一一千乘100个对吧,反正至少是这个量级对吧,这个参数你怎么能手工挨个给呢,给不了对吧。怎么能把这个参数学到呢?我们有一个最简单的一个算法,就最好用的一个算法,不能说简单吧,叫BP算法,BP叫反向传播。
04:04
反向传播算法昨天给大家讲过,求导是现在神经网络里面用的非常多的,就最重要的一个技术,对吧,那BP怎么解决这个问题呢?现在有这个W是吧?啊听一下。现在我们有一个W矩阵,代表着这个映射,从第一个层的神经元到第二神经元的映射,对吧?W矩阵的我刚才说过可能是1000乘100的。我们现在随机的给这个神经元处置值,随机给的值,或者说接受一个输入,反正无所谓了,就是接受输入,那就是外界刺激嘛,对吧,比如说我用这个温水浇了一下这个皮肤,那他们神经元肯定有一个值,对吧,输入肯定有值嘛,对吧,然后经过一个W,最开始这个W啊,他不知道该怎么样向下传导,我就随便给他一个值。随便哪条。W,随便给之后呢,导致结果一定是下一层,这个判断结果就有问题。
05:04
然后导致你大脑可能判断也有问题,导致你做决策也有问题,对吧?因因为有问题跟你预期不一致,对吧?我的训练数据是有预期的,我的训练数据是给你50度的水,你一定要喊热对吧,但你现在喊的是冷,对吧,就产生了一个什么。产生一个损失。你你就有一个损失了,对吧,你这个损失呢,我不知道是因为谁产生的啊,但这个损失肯定跟所有人都有关系,跟所有人权都有关系,对吧?所以呢,我只要反向的去更新它的参数就OK了,就这就像什么呢?很简单的道理,就XY等于六,现在X等于一,Y等于一,它俩没达到预期,从Y等于一对吧,怎么办呢?X和Y分别那么大就可以了,对吧。那至于一次增加多少呢?你可以设定个不长,嗯,如能一次增增加1000,那一下出去了吧,肯定不收敛,一次增加0.1 1.1乘1.1,发现大一点二一了大了一点是吧,一会二乘二等于四,诶反现又好了是吧?最后当你拟合到六的时候,你这个神经网络就学到了,对吧?对于这个神经网络来说呢,也是一样的,虽然参数非常非常多,但是求导呢是链式的。
06:15
链式法则求导。明白吧,就是什么叫列式法呢?咱们就是说一句最简单的话,就是说比如前面有神经元,咱们用A表示,就只要你参与了成参与了加求导肯定有你份,不管谁只要参与了就肯定跑不了,对吧,所以说链式法则求导呢,就能把一层层把这个神经网络里边的所有的这个。这个这个参数全求到。所有的参数都会更新一次,所有的参数都会更新一次。对吧,然后所有有的同学就会问,那如果本来这个参数是好的,给他分析坏的怎么办呢?其实这个东西是涉及到一个什么问题啊,涉及到一个拟合和收敛,一个稳稳定稳定状态的一个问题,是一个稳态的问题。
07:07
大家明白啊,比如比如现在我有一个,我现在有一个,呃,有一个因素W里面有一个值,这个值非常好,这个值就能就能让我神经网络学的非常好,对吧?大家要想啊,如果你把V假设这个参数现在叫啊叫W1吧,假设你把W1更新错了,对吧。那么当他把其他那些所有的错误参数全更新的差不多的时候,他一定会关注到we现在还不够好。这个时候它,因为它现在离结果还有距离吧,对吧,肯定不可能那么好,因为因为我们说样本肯定不是一张图片或一个月,要么是1000个,要么是1万个,反正是很多很多机器肯定能看到we更新的不够好,机器会继续把we向更好的方向更新。所以当更新结束的时候,每一个值。不能说是最好的,但是他们放在一块儿一定是最有用的,一定能导致最好的结果。
08:05
这个这个这个原理就明白了是吧。至于这个数据的采集这个过程呢,跟以前还是完全一样的,什么网上数据这个点击日志啊,或者是这个浏览日志啊行为啊,对吧,这个打点呢,这个广告点击啊,对吧,还有像一些这个呃,图像的一些收集啊,对吧。标注啊,这些东西,以前我们做那个机器学习的时候,不得做图像标注嘛,对吧,语音标注吧,文本标注对吧,你像昨天做那个朴素贝叶斯,你手相标出哪些是垃圾文本,哪些是非垃圾文本,对吧,现在也要做这个事儿,你这个事儿是就是跑不掉的,只是现在做完之后呢,不用你在做什么公式啊,然后做这个词啊,什么这种,包括做图像的这个特征提取了,都不用你做了,直接扔到神经网络里去,神经网络的每一个神经元呢,要么是接收图像的一个像素。要么是接受一个像素,要么是接收文本的一个词的一个向量,反正你让他都接上,对上,他要神经网络自己去学就OK了,明白吗?
09:12
这这个意思明白了是吧。这个神经网络现有一个很大的一个问题啊,大家能看到这仅仅是就是一个三四层的一个神经网络,如果神经神经元是1000个,上面是100个这个,这个如果再是十个的话,那就是1000乘100乘十是吧,这个参数你需要学多少个参数呢?你要学这个100万个是吧。100万个参数。你用1000条的数据去拟合它呢,肯定像我们昨天讲的什么是欠拟合。肯定100%是千里盒,就像你一个人啊,一个人他学习能力非常强,你就扔给他两个,两两句话,你让他理解这其中的含义。他怎么可能理解得到呢,对不对?他会联想,浮想联翩,他会想到无数种可能,对吧?当你扔给他一个新华字典的时候呢,基本上就只有一种可能了,他就是这个,这都是标准答案,选答案背一下就OK了,对吧?
10:08
这就是神经网络要做的事,就你扔给他一个新华字典,这个数据量,这个这个规模的数据集,他能给你学生一个非常满意的结果,但是呢,神经网络也有一个弱点,就你扔给他新华字典的时候,他学的是新华字典的知识。学的是新华字典风格的。啊,你认为他是一个这个,呃,这个什么什么知知知心呢,还是什么这种杂志的知音的是吧,他学的就是情感的话题,很多人呢,拿这个人民九八年的人民日报去训,训练一个现在互联网上常用的一个这个文本的一个模型。当时九八年可能连阿里巴巴是什么,就是民众网都没有,但现在每天互联网上新闻可能是马云又这样了,马云就那样了是吧,可能都是这样的新闻,他肯定就分不好这个东西,对吧?所以当你做这个工作之前呢,你有一个强大的武器,但你一定要知道怎么用它,对吧。
11:03
刚才我们讲了这个链式求导的一个法则哈,我们看一个简单的小例子。最开始有一个A,有一个B,那么C呢是由A加B得到的,B呢是由B加一得到的,最后呢,导出了E对吧。E先是六,我最开始随便给A的一个值,给B的一个值,如果最后得到的结果一是五的话,怎么办呢?C和D都有份对吧?C得往上走,B得往上走对吧?所以它得往上走,它得往上走对吧?因为呃,加和的求导法则,A得往上走对吧,B得往上走,这里边B也得往上走对吧?啊,B的更新速度呢就快一些,所以呢,如果你看大家能看到,如果B这个算式里它的权重就大的话,它肯定是学的很快的,所以大家不不需要去担心说。是不是有的好的参数会被学坏了或之类之类的,这个可能都不需要担心啊。
12:02
那这里边儿呢,还有一个问题,就是说如果B,如果这个地方恰好是负B加一,如果B是相减的话,这个地方怎么办呢。其实直接做个做个梯度加和就就行了嘛,对吧。也很简单,就看它两边谁因素大呗,对不对。那两边现在既然是乘积,乘积的话,大家知道求导肯定是不一样的,对吧?比如说这个假设C现在是二,呃,D现在是2.5,那么对C求导就是2.5,对D求导就是二,对吧?它俩的导数肯定是不一样的,所以它俩这更新的这个权重是不一样的。明白。所以C和D就会按照自己的权重去更新,谁的权重大就更新谁,对吧,就OK了。然后呢,我们深度神经网络刚才说了这个,呃,参数的这个更新,其实参数更新呢,现在用的算法呢,基本上还是这个,我们昨天讲的这个梯度下降。
13:00
对吧,还是一次一次下一小步,一次下一小步,一下小步,然后到最后到这个位置上,这个时候我们发现准确率已经不再改变了。这个时候神经网络怎么样就收敛了?不管他80%还是70%啊,如果是80%,我们认为他结果还好一点,如果现在70%他就不动了,我们有几种想法啊,几种几种可能的想法,第一种是我这个,你看大家看到这是一个局部极效值,下面明显是更小的,对不对,但是如果我从这个地方让他去做初始化去训练的话,他只能到时看看不到其他地方。对吧,因为这这一边这个湖边它有点高,它它不知道这个方向是对是错的,走不下去啊,所以我要通过多加几个初始化,比如我在这个地方初始化它就下去了,对吧。对吧,这是初始化的一个方式方法,下一个。我不长,选择也可能也是有问题的,最开始的不长,我如果给的特别特别小的话,他就跨不过去这个坎。
14:03
如果现在不长的话,他在尝试着,尝试着试着,试100次可能没跨过,试1000次,突然发现这边有个地方能跨过,他直接就快下去,又开始接着走。对吧,不长也是一个参数。对吧。然后再一个呢,学习率呢,也是一个参数。学习率也是一三跟不长本质上是一样的,所以呢,呃这个地方大家都了解了,然后我们再回忆一下,为什么我们不用呃全局的那个求解方法,为什么我不拿到一些样本直接把这个全局最小值求出来呢?还能想起来吗?是这样的原因啊,我们深度神经网络刚才给大家说了,往往数据量都特别大,对吧。求解是求不出来最小值的。计算机硬件不允许几小时对吧,就是求计算机硬件不允许,并且他可能根本就求不出来。
15:03
明白吧,就是他这个全局,你去求这个东西,别人就求不出来,有可能。那我们用这个mini取SD的话,我就可以把很大的样本,很大的数据集,比如1000万的数据集。1000万切成十个一份的数据,十个十个,这样切成十个一份的数据,每次训练十个,每次训练十个,一直往前训练就OK了,对吧,所以训练100万次就把这些数据都训练完了,这个明白了是吧。那有人会问,这样训练和全局直接求是不是一样的?是不是一样的。其实呢,实验结果上来说呢,是差不多的。为什么呢?因为你最后肯定要顺选到一个什么呀,准确率差不多不变的地方了,对吧。这这个基本上你就可以认为是几小时,对不对,在远处有另外一个几小时特别好的那个几小时是90%,那你没看到这个东西,这个这个场景我们确实避选不了,但是我们可以通过多调几次参数,多跑几次模型,找到这个90%,如果我们怎么调参数都找不到这90%,那我就有理由认为70%就是它的几小时了,对吧。
16:21
可以吧,是吧。
我来说两句