为什么要深度学习
矮胖结构 v.s. 高瘦结构
结论
- network变高对performance是很有帮助的,network变宽对performance帮助没有那么好的
原因
-
假设使用上图的模型去train,由于boys with long hair的data较少(没有太多的training data),所以这个boys with long hair的classifier就比较weak(performance比较差)
-
现在就是不直接去分类长头发男生还是短头发男生,而是我们先输入一张图片,判断是男生还是女生和是长头发还是短头发,虽然说长头发的男生很少,但通过女生的数据和男生的数据都很多,虽然长头发的男生数据很少,但是短发的人和长发的人的数据都很多。所以,这样训练这些基分类器就不会训练的太差(有足够的数据去训练)
本质
-
解决真正问题的时候,你的每个分类器就可以去参考输出的基本特征,最后要下决定的分类器,它是把前面的基分类器当做模组,每一个分类器都共用同一组模型(只是用不同的方式来使用它而已)。对分类器来说,它看到前面的基分类器告诉它说是长头发是女生,这个分类器的输出就是yes,反之就是no。
所以他们可以对后面的classifier来说就可以利用前面的classifier(中间),所以它就可以用比较少的训练数据就可以把结果训练好。
引申
- 在深度学习中,每一层neural可以被看做是一个basic classifier,第一层的neural就是最基分类器,第二层的neural是比较复杂的classifier,把第一层basic classifier 的output当做第二层的input(把第一层的classifier当做module),第三层把第二层当做module,以此类推。
- 而模组化这件事,是机器自动学到的。做odularization这件事,把我们的模型变简单了(把本来复杂的问题变得简单了),把问题变得简单了,就算训练数据没有那么多,我们也就可以把这个做好
普遍性定理
- 过去有一个理论告诉我们说,任何continuous function,它都可以用一层neural network来完成(只要那一层只要够宽的话)。这是90年代,很多人放弃做deep learning的原因,只要一层hidden layer就可以完成所有的function,那做deep learning的意义何在呢?,所以很多人说做deep是很没有必要的,我们只要一个hidden layer就好了。
- 但是这个理论没有告诉我们的是,它只告诉我们可能性,但是它没有告诉我们说要做到这件事情到底有多有效率。当你有more layer(high structure)你用这种方式来描述你的function的时候,它是比较有效率的。
语音识别的例子
原理
- 一句话是由大量的音素组成(理解为音标类似),因为人发音口腔器官的限制,你的phoneme发音会受到前后的影响,故我们使用Tri-phone描述单个phone
过程
- 先将声音特征转成state,(在这个声音讯号上每隔一段时间来取一个window,声音讯号就变成一串的vector sequence)把state转成phone,phoneme,在把phoneme转成文字,接下来考虑同音异字的问题
决定一个acoustic feature属于哪一个state,传统方式是做GNN
- 比如第一个state,可以用GNN来描述;另外一个state,可以用另外一个GNN来描述。这时候给你一个feature,你就可以说每一个acoustic feature从每一个state产生出来的几率,这个就叫做Gaussian Mixture Model
- 你有30的三次方的Tri-phone(27000),每个Tri-phone有三个state,所以,你有数万的state,而你每一个state都要用Gaussian Mixture Model来描述,参数太多了。
深度学习的实现方法 DNN
- 仔细想想刚才讲的HMM-GMM的方式,所有困惑的是state是independently,每个phoneme都搞一个model这件事是不effection对model人类的声音来说。
- 想看人类的声音来说,不同的phoneme虽然归为不同的因素,分类归类为不同的class,但这些phoneme不是完全无关的。
- 母音的发音其实就只是受到三件事的影响。一个是你舌头前后的位置,一个是你舌头上下的位置,还有一个是你的嘴型
- 深度学习模型,input是一个acoustic feature,然后output就是告诉你说,acoustic feature属于每个state的几率,那最关键的一点是所有的state都共用同一个DNN,在这整个辨识里面就做一个DNN而已,你没有每一个state都有一个DNN。
对比
- 根据后面分析登出DNN在做什么,DNN做的事情比较low layer的事情它其实是在它并不是真的要马上去侦测这个发音是属于哪个state。它的做事是它先观察说,当你听到这个发音的时候,人是用什么方式在发这个声音的,它的石头的位置在哪里(舌头的位置是高还是低呢,舌头位置是在前还是后呢等等)。然后lower layer比较靠近input layer先知道发音的方式以后,接下来的layer在根据这个结果去说现在的发音是属于哪个state/phone
端到端的学习
- 意思就是说你只给你的model input跟output,你不告诉它说中间每一个function要咋样分工(只给input跟output,让它自己去学),让它自己去学中间每一个function(生产线的每一个点)应该要做什么事情。
- 但以语音识别为例,目前还没看到input一个声音讯号,比Fourier transform结果比这要好的。