李宏毅机器学习系列-深度学习的模块化

更深的网络更好么

通常来说,我们深度越深,参数越多,表现应该越好,这个是很正常的:
在这里插入图片描述
但是我们也可以考虑不要深度,要宽度,如果不同的结构,同样的参数,到底哪个更好一点呢:
在这里插入图片描述
我们做实验之后发现深度确实是比宽度效果要好,同样深度,参数越多越好:
在这里插入图片描述

模块化

那为什么深的比宽的好呢,我们可以用模块化来解释啊下,深度可以看成模块化了,也就是把问题分解成小步骤,小模块,一步步来,就像我们写程序,一般不会把所有的功能都写在一个函数里,而是会分成几个子函数,然后相互调用,这样同样的功能就可以复用,而且结构清晰,方便维护,减少了复杂度:
在这里插入图片描述
那这个用在机器学习里是怎么样的呢,我们举个例子,我们要做图像分类,分成四类,长发女,长发男,短发女,短发男这四类,当然我们可以训练四个分类器分别去训练,但是你会发现长发男的训练样本比较少,因此可能直观分类器能力会比较弱:
在这里插入图片描述
那怎么用模块化的思想来解决呢,我们可以提取特征,将这个问题先分成两部分,分成男女,长断头发的分类,这样男女的样本和长短发的样本就多了,我们首先通过两个分类器将这些分出来:
在这里插入图片描述
然后我们后面再接刚才的四个分类器,他们的输入是刚才两个分类器的输出,这样就可以用较少的训练样本做训练,而且输入就四个特征,,男女,长发,短发,一下子就可以区分了,比去提取整张图片特征的复杂度降低好多了:
在这里插入图片描述
所以我们推广到神经网路上,其实每一层都可以看做是一个模块,每一层模块经过处理后把处理好的结果给下一层的输入,其实就是简化了下一层的处理,也就可以看成子函数一个个调用,当然这个分模块的功能是网络自己学出来的:
在这里插入图片描述
所以我们可以看到神经网络在图像识别的时候,每一层都有学习到的图案,可以看到下图,开始模块学习到纹理,然后给第二个模块去拼装,第二个模块学习到了一些图案,然后再给第三个模块处理,第三个模块又进行拼装,学习到了更加具体图像,就像程序的子函数一步步拼装成整个程序并完成任务:
在这里插入图片描述

模块化在语音上的应用

一般来说,我们的一句话的发音是可以用很多的音素组成的,音素就是最小的发音单位,可以看成音标,拼音:
在这里插入图片描述
我们可以看到,通常一个单词由多个音素组成,但是同样的音素可能会有不同的发音,因为由于人类发音器官的限制,这个音素的前后音素的发音会影响中间的音素发音,就可能会连起来,所以我们给同样的音素不一样的模型,比如考虑他的前后音素:
在这里插入图片描述
每个模型还有不同的状态:
在这里插入图片描述

语音识别

通长我们的输入是一段音频,我们需要把他转成声学特征:
在这里插入图片描述
我们会间隔取一个窗口,比如250毫秒,然后用一个向量来描述,得到的一各序列状态也就是声学特征:
在这里插入图片描述
我们来看看传统做法是怎么做的,传统的做法是把每一个状态用一个高斯混合模型来拟合:
在这里插入图片描述
但是问题来了,我们有很多个音素就会有很多个状态,每一个状态一个模型,这样太多了,后来就提出了多个状态共享一个模型,就好比在程序中不同的变量指向同一个地址一样,那怎么样的状态要共享一个模型呢,这个凭经验了,所以还是比较麻烦的:
在这里插入图片描述
在刚才所说的方法中,每个模型是独立的,但是这个跟人发音的缺不同,我们的音素其实有很多是相关的,比如我们发a,e,i的时候舌头会从下往上,发i,o,u的时候嘴型又不一样,所以他们之间是有关系的,那给每一个音素搞一个模型其实是没效率的:
在这里插入图片描述
如果用DNN做呢,我们只需要一个模型,训练一个分类器,输入就是声学特征,输出就是某个音素的状态概率:
在这里插入图片描述
我们将DNN输出层压缩到2维,可以看到他和我们的音素图的分布很像,他的低层网络学到的就是人类怎么发音的,舌头怎么变得,口型怎么变得,而高层网络学到的才是这个是什么音素,这样看来就像是模块化的分工解决问题,所有音素都用同一个鉴别器,而且参数更少:
在这里插入图片描述
有一个理论说,一层的神经网络可以逼近任意的连续函数,这个或许可以,但是他没说效率怎么样,而用更深的网络可以提高效率:
在这里插入图片描述
我们还可以用逻辑电路和神经网络类比下,我们的电路是由很多个逻辑器件组成的,我们知道,两层的逻辑门组合可以表示任意的布尔函数,这个跟神经网络类比就是一层的神经网络可以表示任意连续函数。然后我们要搭出复杂的电路功能的时候,我们通常不会就用一层,我们会用多层,这样简单,类别神经网络里的更深的网络表达复杂的函数更简单,这样参数也更少,因此不容易过拟合,也不需要很多的训练样本,貌似跟我们的对深度学习的常识有出入,我们一般认为深度学习就是拿很多数据训练的,其实深度学习可以用比较少的训练数据完成任务:
在这里插入图片描述
举个用逻辑电路实现奇偶校验的问题,输入是一串0和1,如果个数为d,要判断奇偶性的复杂读为 O ( 2 d ) O(2^d) O(2d),而用分层的结构,只需要 O ( d ) O(d) O(d)
在这里插入图片描述
上面例子可能不太好理解,需要专业知识,下面就举一个剪窗花的例子,我们不会真的拿一张纸去剪出花的样子,而是折起来,剪几刀,然后展开:
在这里插入图片描述
那这个跟深度学习有什么关系呢,拿上次我们分类的例子,一般的线性不可分问题,在一个空间内没办法分的时候,我们将其接入到后面一层,经过非线性变幻,将坐标映射到了可以线性分割的空间,看起来就是我们沿着红色的线去对折这个平面,把蓝色的点重合到一边了。就好像说我们在这个平面里戳了一个蓝色的洞,把他展开后,在另外一边也有一个洞了,这个跟剪窗花道理一样的,我们可以在折叠起来的窗花上剪一些形状,然后展开,就发现一个很好的图案,我们并没有去剪这个个图案。如果我们在窗花上剪了一个黄洞,展开后变成了5个,这样是不是提高了效率呢,所以说我们只需要用少量的数据训练,因为深层的结构让数据的效率增加了 :
在这里插入图片描述
后来又做了个例子,输入是二维的,输出是0,1,代表不同的颜色的菱形块,我们分别用1层和3层来训练,当训练集是100000的时候,效果好像还是3层的好一点,当训练集减少到20000的时候,1层就开始出问题了,而3层也有问题,但是比一层要好多了,就好比在剪窗花的时候,剪坏了点,但是展开整体没那么糟糕:
在这里插入图片描述

端到端的学习

所谓端到端就是我们把本来要做一系列处理的步骤,全部放进了模型里,他自己会处理,最后给出答案,具体每一步是怎么做的,是他自己学出来的,也即将是只要给原始输入,就会得到输出:
在这里插入图片描述
我们来看看传统的语音识别的整个步骤,前面绿色部分都是我们要编码处理的,而最后的蓝色GMM模型才是学出来的:
在这里插入图片描述
当然就有人会说,能不能用深度学习来进行端到端的学习,叠一个很深的网络,把每个步骤都放进模型里,确实这个是可行的,模型可以学习每个步骤要做的事,最后的结果基本是信号处理的极限结果:
在这里插入图片描述
其实端到端的图像识别也是一样:
在这里插入图片描述
我们可以看到他的每一层学到的东西,每一层又基于前一层的东西进行学习:
在这里插入图片描述
深度学习还有什么好处呢,比如我们做图像识别,我们要把很相似的东西识别为不一样的类,比如下面的萨摩和狗很像,但是不是同类,还要把不太像的东西识别为同一类,比如下面的火车,其实都是火车,只是面向不同,如果仅仅是浅层的神经网络,没办法进行很好的分离,得需要更多的转换:
在这里插入图片描述
再举一个说话人识别的例子,下面左边是MFCC特征投影到二维的图像,不同颜色对应不同的人说的话,他们说的句子是相同的,如果我们用一个神经网络来做,右边是用第一层的特征映射,不同的人说的同一个句子还是不一样:
在这里插入图片描述
但是如果是第八层,那就不一样了,可以看到不同颜色开始聚在一起了,也就说明不同人说的相同的句子开始靠近了,可见深的神经网络可以把本来看起来不像的东西给找出相似的特征来:
在这里插入图片描述
如果这个不熟悉的话,我们再举一个MNIST手写数字识别的例子,这个应该熟悉。我们把28x28的图像映射到二维,就是下图的左上角的部分,然后我们去观察前三层,会发现相同的数字他们慢慢的聚在一起了,不同的分开,也就是同一个数字被选出来放一起了:
在这里插入图片描述
最后还说了,单单用一层的网络去做某些复杂的任务,可能处理不好,但是用三层的网路去做,然后让一层网络去模拟倒是可以的,说明了深度学习效果是不错的:
在这里插入图片描述
还有一些课外的补充资料,有兴趣的可以去看看:
在这里插入图片描述

总结

本篇主要介绍了为什么要用深层的网络,以及模块化的理解和一些应用,思维导图:
在这里插入图片描述
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值