为什么需要深度学习?

185 阅读8分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

为什么我们要deep learning?

你可能很直接说,这个答案很简单啊。因为越deep,performance就越好。

下面是一个很早年的一个实验(2011), Interspeech里面的某一篇paper

image-20210720183236758

你会发现越来越deep以后,它的performance ,error rate就越来越低。

但是如果你稍微有一个ML的常识的话,这个结果并没有让你太surprise,因为本来model越多的parameter它cover的function set就越大,它的bias就越小,如果你今天有够多的training data去控制它的 variance,一个参数比较多的model她performance比较好是很正常的

==真正要比较deep 和 shallow 的model的时候,应该调整deep 和shallow 的model 让它们的参数是一样多的。这样才是公平的评比==。

这种情况下,shallow的model就会是一个矮胖的model。deep的model就会是一个高瘦的model

image-20210727092136463

接下来的问题就是在公平的评比下,哪一个model比较强?

刚才那个实验结果是有后半段的。

image-20210727092429869

这个时候你会发现 一层的error rate 远比多层的大。

5x2k 和 1x 3772 参数数目差不多,但error rate却差很多。

(neuron 数目和参数数目是不一样的概念,参数是w 和b的数目。)

为什么会这样呢?

很多人认为,DL会work 是因为DL是暴力的方法,用一个很大很大的model,用一大堆的data,所以就得到了比较好的performance。其实不是这样的。

==如果今天只是单纯的增加parameters,但是你是让network变宽而不是长高的话,其实你对performance的帮助是比较小的==。

因为当我们 ==在做deep learning 的时候其实我们是在做模组化这件事==。

image-20210727104337347

==这样做的好处是有一些function是可以共用的。==

==提高了复用率,单位神经元效率更高。==

影像分类

假设我们要做影像分类

image-20210727104608291

我们要把image分成四类,就去train4个classifier,问题是长头发男生data是比较少的。

那怎么办呢?

你可以用==模组化==的概念。

假设我们现在不是直接去解这个问题,而是把原来的问题切成比较小的

image-20210727110030491

这样每个基本分类器都可以有足够的训练示例

image-20210727110812136

接下来每个classifier 就去参考这些basic classifier

所以后面这些classifier只需要用比较少的Training data就可以把结果做的很好。

image-20210727111107773

那deep 怎么跟modularization扯上关系呢?

==每一个neuron其实就是一个basic classifier==

在实做中,怎么做模组化这件事情,是machine 自动学到的。

==因为deep做的是modularization 所以deep 需要的Training data是比较少的==。

某种程度上machine learning 跟 big data 是相反的,如果数据足够多,那直接table look up就好了啊。

所以我们才需要machine去做举一反三这件事情,去做学习这件事情。

所以我们 ==在做deep learning 的时候就是因为我们没有足够的training data ,所以我们才需要deep learning 让它自己去学习,去举一反三==。

语音辨识

人类语言架构

image-20210728165940655

当你说一句话的时候,这句话是由一串 Phoneme组成。

同样的Phoneme可能会有不一样的发音,因为人类口腔器官的限制

为了表达这件事情,我们会给同样的Phoneme不同的model,叫做Tri-phone。

一个Phoneme可以拆成几个state。

语音辨识非常复杂,我们只讲它的第一步

image-20210728170735592

第一步你要做的事情:把acoustic feature 转成 state,决定这些acoustic feature 属于那些state。(要做语音辨识系统,还需要把states 转成Phoneme ,再把Phoneme转成文字,还要考虑同音异字的问题等等)

我想要比较一下过去用deep learning 之前和用deep learning 之后在语音辨识上模型有什么不同,这样就更能体会为什么deep learning 在语音上会有更显著的提升?

传统的方法:HMM-GMM

我们假设每个state 属于一个acoustic feature的 分布是stationary的。

image-20210728172129342

这一招其实根本不太work,因为Tri-phone的数目太多了。

大概两万七千个Tri-phone 每个Tri-phone又有3个state,每个state都要用一个Gaussian Mixture Model来描述,参数太多了,你的Training data根本不够。

有一些不同的state会共用同一个model,由经验决定那些state共用

image-20210728173353486

==在HMM-GMM中,所有的phoneme都是独立建模的,这不是模仿人类声音的有效方法==

image-20210728173533188

这张图画出来人类语言所有的母音,母音的发音只受到三件事情的影响。

舌头的前后位置,上下位置,嘴型

a -e-i 舌头是由低到高的。i和u的差别是舌头前后位置不同。

如果是Deep Learning

image-20210728174151283

最关键的一点是,==所有的state都共用一个DNN==。

如果今天你把DNN它的某一个hidden layer拿出来,颜色就是5个母音,神奇的是两者分布是大概相同的

image-20210728174607330

所以你会发现:

==DNN 比较 lower的layers 是检测发音方式==

==所有的音素共享来自同一套探测器的结果。==

==有效地使用参数==

比较lower(靠近input)的layer先知道了发音方式以后,接下来的layer再根据这个结果去决定说现在的发音是属于哪一种state或是哪一个phoneme(做到了模组化这件事)

甚至还有一个理论:任何连续的function,input 是一个n维的vector,output 是一个m维的vector,它都可以用一个hidden layer 的neural network来表示,只要你这个hidden layer的neuron 够多,它可以表示成任何function。

image-20210720184251287

那既然一个hidden layer的neural network 它可以表示成任何function,而我们在做machine learning 的时候想要的就只是一个function而已。

那做Deep 的意义何在呢?

但是这个理论,有一件事没有告诉我们的是,要做到这件事情效率如何

==是的,浅层网络可以代表任何函数。然而,使用深层结构更有效。==

如果上面模组化的概念你没有听太懂,那下面举另外一个例子

其实逻辑电路可以跟neural network类比

image-20210728180407124

逻辑电路:神经网络:
逻辑电路由gates组成神经网络由neuron组成
只要两层逻辑闸就可以表示任何Boolean function一个hidden layer可以表示任意连续函数
使用多层逻辑门来构建一些电路要简单得多 =》用多层神经元来表示某些功能要简单得多

两层逻辑闸就可以表示任何Boolean function ,你可以用两层逻辑闸就做一台电脑,但是没有人这么做。

如果没有听懂,在举一个生活中的例子。

image-20210728181413201

假设input的点有四个,红色的是一类,蓝色的是一类,之前我们说如果你没有deep learning ,只是linear的model话,无论你怎么做,都没有办法把它们分开。

当你加了hidden layer的时候,就做了一个feature transform,好像把这个平面折叠一样,这就好比说剪窗花的时候把纸折叠,如果你戳一个洞,展开后,折纸其他部分也会有洞。一个data就会发挥5个data的威力。

所以当你做deep learning 的时候,是比较有效率的来使用你的data。

下面是一个实例:

image-20210728195837261

有特别调整1个hidden layer 和3个hidden layer的参数,使其大概相同。

==用deep learning 另外一个好处是我们可以做End-to-end Learning==

所谓End-to-end Learning ==每个函数应该做什么是自动学习的==

有时候我们要处理的问题很负责,model 会是一个生产线,这个生产线由很多简单的function。

image-20210728202858904

没有deep learning之前:

image-20210728202939154

在整个生产线,只有GMM部分是由Training data学出来的,其他绿色都是由“古圣先贤”总结出来的。

用了deep learning 后每个函数应该做什么是自动学习的

image-20210728202954120

Deep Learning 还有什么好处呢?

image-20210728203537232

当面对更复杂的task的时候,如果你的network只有一层的话,你没有办法把一样的东西变成不一样的。没有办法把不一样的变的很想。

语音辨识的实例:

image-20210728203809524

image-20210728203832990

不同的颜色代表不同人说的话,这些人说的句子是一样的,同样的句子不同的说,声音讯号看其实是差别非常大的(左图),如果你只看第一次的hidden layer,不同人说的同样的句子看起来还是很不一样,如果你看第八个hidden layer的时候,不同人说的句子自动被 归类到一起。

也就是说DNN它把很多看起来很不像的东西,它知道说它们应该是一样的,在经过很多layer 转换的时候,就把它们归到一起。

手写数字识别的实例:

image-20210728204504850