深度学习100题(1)
來源:BAT面試1000題https://zhuanlan.zhihu.com/c_140166199
1、梯度下降算法的正確步驟是什么?
a.計(jì)算預(yù)測(cè)值和真實(shí)值之間的誤差
b.重復(fù)迭代,直至得到網(wǎng)絡(luò)權(quán)重的最佳值
c.把輸入傳入網(wǎng)絡(luò),得到輸出值
d.用隨機(jī)值初始化權(quán)重和偏差
e.對(duì)每一個(gè)產(chǎn)生誤差的神經(jīng)元,調(diào)整相應(yīng)的(權(quán)重)值以減小誤差
A.abcde B.edcba C.cbaed D.dcaeb
解析:正確答案D,考查知識(shí)點(diǎn)-深度學(xué)習(xí)。
?
2、已知:
- 大腦是有很多個(gè)叫做神經(jīng)元的東西構(gòu)成,神經(jīng)網(wǎng)絡(luò)是對(duì)大腦的簡(jiǎn)單的數(shù)學(xué)表達(dá)。
- 每一個(gè)神經(jīng)元都有輸入、處理函數(shù)和輸出。
- 神經(jīng)元組合起來形成了網(wǎng)絡(luò),可以擬合任何函數(shù)。
- 為了得到最佳的神經(jīng)網(wǎng)絡(luò),我們用梯度下降方法不斷更新模型
給定上述關(guān)于神經(jīng)網(wǎng)絡(luò)的描述,什么情況下神經(jīng)網(wǎng)絡(luò)模型被稱為深度學(xué)習(xí)模型?
A.加入更多層,使神經(jīng)網(wǎng)絡(luò)的深度增加
B.有維度更高的數(shù)據(jù)
C.當(dāng)這是一個(gè)圖形識(shí)別的問題時(shí)
D.以上都不正確
解析:正確答案A,更多層意味著網(wǎng)絡(luò)更深。沒有嚴(yán)格的定義多少層的模型才叫深度模型,目前如果有超過2層的隱層,那么也可以及叫做深度模型。
?
3、訓(xùn)練CNN時(shí),可以對(duì)輸入進(jìn)行旋轉(zhuǎn)、平移、縮放等預(yù)處理提高模型泛化能力。這么說是對(duì),還是不對(duì)?
A.對(duì) B.不對(duì)
解析:對(duì)。如寒sir所說,訓(xùn)練CNN時(shí),可以進(jìn)行這些操作。當(dāng)然也不一定是必須的,只是data augmentation擴(kuò)充數(shù)據(jù)后,模型有更多數(shù)據(jù)訓(xùn)練,泛化能力可能會(huì)變強(qiáng)。
?
3、訓(xùn)練CNN時(shí),可以對(duì)輸入進(jìn)行旋轉(zhuǎn)、平移、縮放等預(yù)處理提高模型泛化能力。這么說是對(duì),還是不對(duì)?
A.對(duì) B.不對(duì)
解析:對(duì)。如寒sir所說,訓(xùn)練CNN時(shí),可以進(jìn)行這些操作。當(dāng)然也不一定是必須的,只是data augmentation擴(kuò)充數(shù)據(jù)后,模型有更多數(shù)據(jù)訓(xùn)練,泛化能力可能會(huì)變強(qiáng)。
4、下面哪項(xiàng)操作能實(shí)現(xiàn)跟神經(jīng)網(wǎng)絡(luò)中Dropout的類似效果?
A.Boosting B.Bagging C.Stacking D.Mapping
解析:正確答案B。Dropout可以認(rèn)為是一種極端的Bagging,每一個(gè)模型都在單獨(dú)的數(shù)據(jù)上訓(xùn)練,同時(shí),通過和其他模型對(duì)應(yīng)參數(shù)的共享,從而實(shí)現(xiàn)模型參數(shù)的高度正則化。
?
5、下列哪一項(xiàng)在神經(jīng)網(wǎng)絡(luò)中引入了非線性?
A.隨機(jī)梯度下降
B.修正線性單元(ReLU)
C.卷積函數(shù)
D.以上都不正確
解析:正確答案B。修正線性單元是非線性的激活函數(shù)。
?
6、CNN的卷積核是單層的還是多層的?
解析:
一般而言,深度卷積網(wǎng)絡(luò)是一層又一層的。層的本質(zhì)是特征圖, 存貯輸入數(shù)據(jù)或其中間表示值。一組卷積核則是聯(lián)系前后兩層的網(wǎng)絡(luò)參數(shù)表達(dá)體, 訓(xùn)練的目標(biāo)就是每個(gè)卷積核的權(quán)重參數(shù)組。
描述網(wǎng)絡(luò)模型中某層的厚度,通常用名詞通道channel數(shù)或者特征圖feature map數(shù)。不過人們更習(xí)慣把作為數(shù)據(jù)輸入的前層的厚度稱之為通道數(shù)(比如RGB三色圖層稱為輸入通道數(shù)為3),把作為卷積輸出的后層的厚度稱之為特征圖數(shù)。
卷積核(filter)一般是3D多層的,除了面積參數(shù), 比如3x3之外, 還有厚度參數(shù)H(2D的視為厚度1). 還有一個(gè)屬性是卷積核的個(gè)數(shù)N。
卷積核的厚度H, 一般等于前層厚度M(輸入通道數(shù)或feature map數(shù)). 特殊情況M > H。
卷積核的個(gè)數(shù)N, 一般等于后層厚度(后層feature maps數(shù),因?yàn)橄嗟人砸灿肗表示)。
卷積核通常從屬于后層,為后層提供了各種查看前層特征的視角,這個(gè)視角是自動(dòng)形成的。
卷積核厚度等于1時(shí)為2D卷積,對(duì)應(yīng)平面點(diǎn)相乘然后把結(jié)果加起來,相當(dāng)于點(diǎn)積運(yùn)算;
卷積核厚度大于1時(shí)為3D卷積,每片分別平面點(diǎn)求卷積,然后把每片結(jié)果加起來,作為3D卷積結(jié)果;1x1卷積屬于3D卷積的一個(gè)特例,有厚度無面積, 直接把每片單個(gè)點(diǎn)乘以權(quán)重再相加。
歸納之,卷積的意思就是把一個(gè)區(qū)域,不管是一維線段,二維方陣,還是三維長(zhǎng)方塊,全部按照卷積核的維度形狀,對(duì)應(yīng)逐點(diǎn)相乘再求和,濃縮成一個(gè)標(biāo)量值也就是降到零維度,作為下一層的一個(gè)feature map的一個(gè)點(diǎn)的值!
可以比喻一群漁夫坐一個(gè)漁船撒網(wǎng)打魚,魚塘是多層水域,每層魚兒不同。
船每次移位一個(gè)stride到一個(gè)地方,每個(gè)漁夫撒一網(wǎng),得到收獲,然后換一個(gè)距離stride再撒,如此重復(fù)直到遍歷魚塘。
A漁夫盯著魚的品種,遍歷魚塘后該漁夫描繪了魚塘的魚品種分布;
B漁夫盯著魚的重量,遍歷魚塘后該漁夫描繪了魚塘的魚重量分布;
還有N-2個(gè)漁夫,各自興趣各干各的;
最后得到N個(gè)特征圖,描述了魚塘的一切!
2D卷積表示漁夫的網(wǎng)就是帶一圈浮標(biāo)的漁網(wǎng),只打上面一層水體的魚;
3D卷積表示漁夫的網(wǎng)是多層嵌套的漁網(wǎng),上中下層水體的魚兒都跑不掉;
1x1卷積可以視為每次移位stride,甩鉤釣魚代替了撒網(wǎng);
下面解釋一下特殊情況的 M > H:
實(shí)際上,除了輸入數(shù)據(jù)的通道數(shù)比較少之外,中間層的feature map數(shù)很多,這樣中間層算卷積會(huì)累死計(jì)算機(jī)(魚塘太深,每層魚都打,需要的魚網(wǎng)太重了)。所以很多深度卷積網(wǎng)絡(luò)把全部通道/特征圖劃分一下,每個(gè)卷積核只看其中一部分(漁夫A的漁網(wǎng)只打撈深水段,漁夫B的漁網(wǎng)只打撈淺水段)。這樣整個(gè)深度網(wǎng)絡(luò)架構(gòu)是橫向開始分道揚(yáng)鑣了,到最后才又融合。這樣看來,很多網(wǎng)絡(luò)模型的架構(gòu)不完全是突發(fā)奇想,而是是被參數(shù)計(jì)算量逼得。特別是現(xiàn)在需要在移動(dòng)設(shè)備上進(jìn)行AI應(yīng)用計(jì)算(也叫推斷), 模型參數(shù)規(guī)模必須更小, 所以出現(xiàn)很多減少握手規(guī)模的卷積形式, 現(xiàn)在主流網(wǎng)絡(luò)架構(gòu)大都如此。
?
7、什么是卷積?
解析:
對(duì)圖像(不同的數(shù)據(jù)窗口數(shù)據(jù))和濾波矩陣(一組固定的權(quán)重:因?yàn)槊總€(gè)神經(jīng)元的多個(gè)權(quán)重固定,所以又可以看做一個(gè)恒定的濾波器filter)做內(nèi)積(逐個(gè)元素相乘再求和)的操作就是所謂的『卷積』操作,也是卷積神經(jīng)網(wǎng)絡(luò)的名字來源。
非嚴(yán)格意義上來講,下圖中紅框框起來的部分便可以理解為一個(gè)濾波器,即帶著一組固定權(quán)重的神經(jīng)元。多個(gè)濾波器疊加便成了卷積層。
?
OK,舉個(gè)具體的例子。比如下圖中,圖中左邊部分是原始輸入數(shù)據(jù),圖中中間部分是濾波器filter,圖中右邊是輸出的新的二維數(shù)據(jù)。
?
?
中間濾波器filter與數(shù)據(jù)窗口做內(nèi)積,其具體計(jì)算過程則是:4*0 + 0*0 + 0*0 + 0*0 + 0*1 + 0*1 + 0*0 + 0*1 + -4*2 = -8
?
8、什么是CNN的池化pool層?
解析:
池化,簡(jiǎn)言之,即取區(qū)域平均或最大,如下圖所示(圖引自cs231n)
?
上圖所展示的是取區(qū)域最大,即上圖左邊部分中 左上角2x2的矩陣中6最大,右上角2x2的矩陣中8最大,左下角2x2的矩陣中3最大,右下角2x2的矩陣中4最大,所以得到上圖右邊部分的結(jié)果:6 8 3 4。
?
9、簡(jiǎn)述下什么是生成對(duì)抗網(wǎng)絡(luò)。
解析:
GAN之所以是對(duì)抗的,是因?yàn)镚AN的內(nèi)部是競(jìng)爭(zhēng)關(guān)系,一方叫g(shù)enerator,它的主要工作是生成圖片,并且盡量使得其看上去是來自于訓(xùn)練樣本的。另一方是discriminator,其目標(biāo)是判斷輸入圖片是否屬于真實(shí)訓(xùn)練樣本。
更直白的講,將generator想象成假幣制造商,而discriminator是警察。generator目的是盡可能把假幣造的跟真的一樣,從而能夠騙過discriminator,即生成樣本并使它看上去好像來自于真實(shí)訓(xùn)練樣本一樣。
?
11、請(qǐng)簡(jiǎn)要介紹下tensorflow的計(jì)算圖。
解析:
Tensorflow是一個(gè)通過計(jì)算圖的形式來表述計(jì)算的編程系統(tǒng),計(jì)算圖也叫數(shù)據(jù)流圖,可以把計(jì)算圖看做是一種有向圖,Tensorflow中的每一個(gè)節(jié)點(diǎn)都是計(jì)算圖上的一個(gè)Tensor, 也就是張量,而節(jié)點(diǎn)之間的邊描述了計(jì)算之間的依賴關(guān)系(定義時(shí))和數(shù)學(xué)操作(運(yùn)算時(shí))。
如下兩圖表示:
?
?
13、CNN最成功的應(yīng)用是在CV,那為什么NLP和Speech的很多問題也可以用CNN解出來?為什么AlphaGo里也用了CNN?這幾個(gè)不相關(guān)的問題的相似性在哪里?CNN通過什么手段抓住了這個(gè)共性?
解析:
Deep Learning -Yann LeCun, Yoshua Bengio & Geoffrey Hinton
Learn TensorFlow and deep learning, without a Ph.D.
The Unreasonable Effectiveness of Deep Learning -LeCun 16 NIPS Keynote
以上幾個(gè)不相關(guān)問題的相關(guān)性在于,都存在局部與整體的關(guān)系,由低層次的特征經(jīng)過組合,組成高層次的特征,并且得到不同特征之間的空間相關(guān)性。如下圖:低層次的直線/曲線等特征,組合成為不同的形狀,最后得到汽車的表示。
CNN抓住此共性的手段主要有四個(gè):局部連接/權(quán)值共享/池化操作/多層次結(jié)構(gòu)。
局部連接使網(wǎng)絡(luò)可以提取數(shù)據(jù)的局部特征;權(quán)值共享大大降低了網(wǎng)絡(luò)的訓(xùn)練難度,一個(gè)Filter只提取一個(gè)特征,在整個(gè)圖片(或者語音/文本) 中進(jìn)行卷積;池化操作與多層次結(jié)構(gòu)一起,實(shí)現(xiàn)了數(shù)據(jù)的降維,將低層次的局部特征組合成為較高層次的特征,從而對(duì)整個(gè)圖片進(jìn)行表示。如下圖:
上圖中,如果每一個(gè)點(diǎn)的處理使用相同的Filter,則為全卷積,如果使用不同的Filter,則為L(zhǎng)ocal-Conv。
14、LSTM結(jié)構(gòu)推導(dǎo),為什么比RNN好?
解析:
推導(dǎo)forget gate(遺忘門),input gate(輸入門),cell state, hidden information等的變化;因?yàn)長(zhǎng)STM有進(jìn)有出且當(dāng)前的cell informaton是通過input gate控制之后疊加的,RNN是疊乘,因此LSTM可以防止梯度消失或者爆炸。
15、Sigmoid、Tanh、ReLu這三個(gè)激活函數(shù)有什么缺點(diǎn)或不足,有沒改進(jìn)的激活函數(shù)。
解析:
sigmoid、Tanh、ReLU的缺點(diǎn)在121問題中已有說明,為了解決ReLU的dead cell的情況,發(fā)明了Leaky Relu, 即在輸入小于0時(shí)不讓輸出為0,而是乘以一個(gè)較小的系數(shù),從而保證有導(dǎo)數(shù)存在。同樣的目的,還有一個(gè)ELU,函數(shù)示意圖如下。
?
還有一個(gè)激活函數(shù)是Maxout,即使用兩套w,b參數(shù),輸出較大值。本質(zhì)上Maxout可以看做Relu的泛化版本,因?yàn)槿绻惶譿,b全都是0的話,那么就是普通的ReLU。Maxout可以克服Relu的缺點(diǎn),但是參數(shù)數(shù)目翻倍。
?
16、為什么引入非線性激勵(lì)函數(shù)?
解析:
第一,對(duì)于神經(jīng)網(wǎng)絡(luò)來說,網(wǎng)絡(luò)的每一層相當(dāng)于f(wx+b)=f(w'x),對(duì)于線性函數(shù),其實(shí)相當(dāng)于f(x)=x,那么在線性激活函數(shù)下,每一層相當(dāng)于用一個(gè)矩陣去乘以x,那么多層就是反復(fù)的用矩陣去乘以輸入。根據(jù)矩陣的乘法法則,多個(gè)矩陣相乘得到一個(gè)大矩陣。所以線性激勵(lì)函數(shù)下,多層網(wǎng)絡(luò)與一層網(wǎng)絡(luò)相當(dāng)。比如,兩層的網(wǎng)絡(luò)f(W1*f(W2x))=W1W2x=Wx。
第二,非線性變換是深度學(xué)習(xí)有效的原因之一。原因在于非線性相當(dāng)于對(duì)空間進(jìn)行變換,變換完成后相當(dāng)于對(duì)問題空間進(jìn)行簡(jiǎn)化,原來線性不可解的問題現(xiàn)在變得可以解了。
下圖可以很形象的解釋這個(gè)問題,左圖用一根線是無法劃分的。經(jīng)過一系列變換后,就變成線性可解的問題了。
如果不用激勵(lì)函數(shù)(其實(shí)相當(dāng)于激勵(lì)函數(shù)是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數(shù),很容易驗(yàn)證,無論你神經(jīng)網(wǎng)絡(luò)有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當(dāng),這種情況就是最原始的感知機(jī)(Perceptron)了。
正因?yàn)樯厦娴脑?#xff0c;我們決定引入非線性函數(shù)作為激勵(lì)函數(shù),這樣深層神經(jīng)網(wǎng)絡(luò)就有意義了(不再是輸入的線性組合,可以逼近任意函數(shù))。最早的想法是sigmoid函數(shù)或者tanh函數(shù),輸出有界,很容易充當(dāng)下一層輸入(以及一些人的生物解釋)。
?
17、請(qǐng)問人工神經(jīng)網(wǎng)絡(luò)中為什么ReLu要好過于tanh和sigmoid function?
解析:
先看sigmoid、tanh和RelU的函數(shù)圖:
第一,采用sigmoid等函數(shù),算激活函數(shù)時(shí)(指數(shù)運(yùn)算),計(jì)算量大,反向傳播求誤差梯度時(shí),求導(dǎo)涉及除法和指數(shù)運(yùn)算,計(jì)算量相對(duì)大,而采用Relu激活函數(shù),整個(gè)過程的計(jì)算量節(jié)省很多。
第二,對(duì)于深層網(wǎng)絡(luò),sigmoid函數(shù)反向傳播時(shí),很容易就會(huì)出現(xiàn)梯度消失的情況(在sigmoid接近飽和區(qū)時(shí),變換太緩慢,導(dǎo)數(shù)趨于0,這種情況會(huì)造成信息丟失),這種現(xiàn)象稱為飽和,從而無法完成深層網(wǎng)絡(luò)的訓(xùn)練。而ReLU就不會(huì)有飽和傾向,不會(huì)有特別小的梯度出現(xiàn)。
第三,Relu會(huì)使一部分神經(jīng)元的輸出為0,這樣就造成了網(wǎng)絡(luò)的稀疏性,并且減少了參數(shù)的相互依存關(guān)系,緩解了過擬合問題的發(fā)生(以及一些人的生物解釋balabala)。當(dāng)然現(xiàn)在也有一些對(duì)relu的改進(jìn),比如prelu,random relu等,在不同的數(shù)據(jù)集上會(huì)有一些訓(xùn)練速度上或者準(zhǔn)確率上的改進(jìn),具體的大家可以找相關(guān)的paper看。
多加一句,現(xiàn)在主流的做法,會(huì)多做一步batch normalization,盡可能保證每一層網(wǎng)絡(luò)的輸入具有相同的分布[1]。而最新的paper[2],他們?cè)诩尤隻ypass connection之后,發(fā)現(xiàn)改變batch normalization的位置會(huì)有更好的效果。大家有興趣可以看下。
?
[1] Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.
[2] He, Kaiming, et al. "Identity Mappings in Deep Residual Networks." arXiv preprint arXiv:1603.05027 (2016).
?
18、為什么LSTM模型中既存在sigmoid又存在tanh兩種激活函數(shù),而不是選擇統(tǒng)一一種sigmoid或者tanh?這樣做的目的是什么?
解析:
sigmoid 用在了各種gate上,產(chǎn)生0~1之間的值,這個(gè)一般只有sigmoid最直接了。
tanh 用在了狀態(tài)和輸出上,是對(duì)數(shù)據(jù)的處理,這個(gè)用其他激活函數(shù)或許也可以。
二者目的不一樣
另可參見A Critical Review of Recurrent Neural Networks for Sequence Learning的section4.1,說了那兩個(gè)tanh都可以替換成別的。
19、如何解決RNN梯度爆炸和彌散的問題?
解析:
為了解決梯度爆炸問題,Thomas Mikolov首先提出了一個(gè)簡(jiǎn)單的啟發(fā)性的解決方案,就是當(dāng)梯度大于一定閾值的的時(shí)候,將它截?cái)酁橐粋€(gè)較小的數(shù)。具體如算法1所述:
算法:當(dāng)梯度爆炸時(shí)截?cái)嗵荻?#xff08;偽代碼)
下圖可視化了梯度截?cái)嗟男ЧK故玖艘粋€(gè)小的rnn(其中W為權(quán)值矩陣,b為bias項(xiàng))的決策面。這個(gè)模型是一個(gè)一小段時(shí)間的rnn單元組成;實(shí)心箭頭表明每步梯度下降的訓(xùn)練過程。當(dāng)梯度下降過程中,模型的目標(biāo)函數(shù)取得了較高的誤差時(shí),梯度將被送到遠(yuǎn)離決策面的位置。截?cái)嗄P彤a(chǎn)生了一個(gè)虛線,它將誤差梯度拉回到離原始梯度接近的位置。
梯度爆炸,梯度截?cái)嗫梢暬?/p>
為了解決梯度彌散的問題,我們介紹了兩種方法。第一種方法是將隨機(jī)初始化,改為一個(gè)有關(guān)聯(lián)的矩陣初始化。第二種方法是使用ReLU(Rectified Linear Units)代替sigmoid函數(shù)。ReLU的導(dǎo)數(shù)不是0就是1.因此,神經(jīng)元的梯度將始終為1,而不會(huì)當(dāng)梯度傳播了一定時(shí)間之后變小。
?
20、什麼樣的資料集不適合用深度學(xué)習(xí)?
解析:
(1)數(shù)據(jù)集太小,數(shù)據(jù)樣本不足時(shí),深度學(xué)習(xí)相對(duì)其它機(jī)器學(xué)習(xí)算法,沒有明顯優(yōu)勢(shì)。
(2)數(shù)據(jù)集沒有局部相關(guān)特性,目前深度學(xué)習(xí)表現(xiàn)比較好的領(lǐng)域主要是圖像/語音/自然語言處理等領(lǐng)域,這些領(lǐng)域的一個(gè)共性是局部相關(guān)性。圖像中像素組成物體,語音信號(hào)中音位組合成單詞,文本數(shù)據(jù)中單詞組合成句子,這些特征元素的組合一旦被打亂,表示的含義同時(shí)也被改變。對(duì)于沒有這樣的局部相關(guān)性的數(shù)據(jù)集,不適于使用深度學(xué)習(xí)算法進(jìn)行處理。舉個(gè)例子:預(yù)測(cè)一個(gè)人的健康狀況,相關(guān)的參數(shù)會(huì)有年齡、職業(yè)、收入、家庭狀況等各種元素,將這些元素打亂,并不會(huì)影響相關(guān)的結(jié)果。
?
21、廣義線性模型是怎被應(yīng)用在深度學(xué)習(xí)中?
解析:
A Statistical View of Deep Learning (I): Recursive GLMs
深度學(xué)習(xí)從統(tǒng)計(jì)學(xué)角度,可以看做遞歸的廣義線性模型。
廣義線性模型相對(duì)于經(jīng)典的線性模型(y=wx+b),核心在于引入了連接函數(shù)g(.),形式變?yōu)?#xff1a;y=g?1(wx+b)。
深度學(xué)習(xí)時(shí)遞歸的廣義線性模型,神經(jīng)元的激活函數(shù),即為廣義線性模型的鏈接函數(shù)。邏輯回歸(廣義線性模型的一種)的Logistic函數(shù)即為神經(jīng)元激活函數(shù)中的Sigmoid函數(shù),很多類似的方法在統(tǒng)計(jì)學(xué)和神經(jīng)網(wǎng)絡(luò)中的名稱不一樣,容易引起初學(xué)者(這里主要指我)的困惑。
?
?
22、如何解決梯度消失和梯度膨脹?
解析:
(1)梯度消失:
根據(jù)鏈?zhǔn)椒▌t,如果每一層神經(jīng)元對(duì)上一層的輸出的偏導(dǎo)乘上權(quán)重結(jié)果都小于1的話,那么即使這個(gè)結(jié)果是0.99,在經(jīng)過足夠多層傳播之后,誤差對(duì)輸入層的偏導(dǎo)會(huì)趨于0
可以采用ReLU激活函數(shù)有效的解決梯度消失的情況,也可以用Batch Normalization解決這個(gè)問題。關(guān)于深度學(xué)習(xí)中 Batch Normalization為什么效果好?
(2)梯度膨脹
根據(jù)鏈?zhǔn)椒▌t,如果每一層神經(jīng)元對(duì)上一層的輸出的偏導(dǎo)乘上權(quán)重結(jié)果都大于1的話,在經(jīng)過足夠多層傳播之后,誤差對(duì)輸入層的偏導(dǎo)會(huì)趨于無窮大
可以通過激活函數(shù)來解決,或用Batch Normalization解決這個(gè)問題。
?
23、簡(jiǎn)述神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史。
解析:
1949年Hebb提出了神經(jīng)心理學(xué)學(xué)習(xí)范式——Hebbian學(xué)習(xí)理論
1952年,IBM的Arthur Samuel寫出了西洋棋程序
1957年,Rosenblatt的感知器算法是第二個(gè)有著神經(jīng)系統(tǒng)科學(xué)背景的機(jī)器學(xué)習(xí)模型.
3年之后,Widrow因發(fā)明Delta學(xué)習(xí)規(guī)則而載入ML史冊(cè),該規(guī)則馬上就很好的應(yīng)用到了感知器的訓(xùn)練中
感知器的熱度在1969被Minskey一盆冷水潑滅了。他提出了著名的XOR問題,論證了感知器在類似XOR問題的線性不可分?jǐn)?shù)據(jù)的無力。
盡管BP的思想在70年代就被Linnainmaa以“自動(dòng)微分的翻轉(zhuǎn)模式”被提出來,但直到1981年才被Werbos應(yīng)用到多層感知器(MLP)中,NN新的大繁榮。
1991年的Hochreiter和2001年的Hochreiter的工作,都表明在使用BP算法時(shí),NN單元飽和之后會(huì)發(fā)生梯度損失。又發(fā)生停滯。
時(shí)間終于走到了當(dāng)下,隨著計(jì)算資源的增長(zhǎng)和數(shù)據(jù)量的增長(zhǎng)。一個(gè)新的NN領(lǐng)域——深度學(xué)習(xí)出現(xiàn)了。
簡(jiǎn)言之,MP模型+sgn—->單層感知機(jī)(只能線性)+sgn— Minsky 低谷 —>多層感知機(jī)+BP+sigmoid—- (低谷) —>深度學(xué)習(xí)+pre-training+ReLU/sigmoid
24、深度學(xué)習(xí)常用方法。
解析:
全連接DNN(相鄰層相互連接、層內(nèi)無連接):
AutoEncoder(盡可能還原輸入)、Sparse Coding(在AE上加入L1規(guī)范)、RBM(解決概率問題)—–>特征探測(cè)器——>棧式疊加 貪心訓(xùn)練
RBM—->DBN
解決全連接DNN的全連接問題—–>CNN
解決全連接DNN的無法對(duì)時(shí)間序列上變化進(jìn)行建模的問題—–>RNN—解決時(shí)間軸上的梯度消失問題——->LSTM
DNN是傳統(tǒng)的全連接網(wǎng)絡(luò),可以用于廣告點(diǎn)擊率預(yù)估,推薦等。其使用embedding的方式將很多離散的特征編碼到神經(jīng)網(wǎng)絡(luò)中,可以很大的提升結(jié)果。
CNN主要用于計(jì)算機(jī)視覺(Computer Vision)領(lǐng)域,CNN的出現(xiàn)主要解決了DNN在圖像領(lǐng)域中參數(shù)過多的問題。同時(shí),CNN特有的卷積、池化、batch normalization、Inception、ResNet、DeepNet等一系列的發(fā)展也使得在分類、物體檢測(cè)、人臉識(shí)別、圖像分割等眾多領(lǐng)域有了長(zhǎng)足的進(jìn)步。同時(shí),CNN不僅在圖像上應(yīng)用很多,在自然語言處理上也頗有進(jìn)展,現(xiàn)在已經(jīng)有基于CNN的語言模型能夠達(dá)到比LSTM更好的效果。在最新的AlphaZero中,CNN中的ResNet也是兩種基本算法之一。
GAN是一種應(yīng)用在生成模型的訓(xùn)練方法,現(xiàn)在有很多在CV方面的應(yīng)用,例如圖像翻譯,圖像超清化、圖像修復(fù)等等。
RNN主要用于自然語言處理(Natural Language Processing)領(lǐng)域,用于處理序列到序列的問題。普通RNN會(huì)遇到梯度爆炸和梯度消失的問題。所以現(xiàn)在在NLP領(lǐng)域,一般會(huì)使用LSTM模型。在最近的機(jī)器翻譯領(lǐng)域,Attention作為一種新的手段,也被引入進(jìn)來。
除了DNN、RNN和CNN外, 自動(dòng)編碼器(AutoEncoder)、稀疏編碼(Sparse Coding)、深度信念網(wǎng)絡(luò)(DBM)、限制玻爾茲曼機(jī)(RBM)也都有相應(yīng)的研究。
?
25、請(qǐng)簡(jiǎn)述神經(jīng)網(wǎng)絡(luò)的發(fā)展史。
解析:
sigmoid會(huì)飽和,造成梯度消失。于是有了ReLU。
ReLU負(fù)半軸是死區(qū),造成梯度變0。于是有了LeakyReLU,PReLU。
強(qiáng)調(diào)梯度和權(quán)值分布的穩(wěn)定性,由此有了ELU,以及較新的SELU。
太深了,梯度傳不下去,于是有了highway。
干脆連highway的參數(shù)都不要,直接變殘差,于是有了ResNet。
強(qiáng)行穩(wěn)定參數(shù)的均值和方差,于是有了BatchNorm。
在梯度流中增加噪聲,于是有了 Dropout。
RNN梯度不穩(wěn)定,于是加幾個(gè)通路和門控,于是有了LSTM。
LSTM簡(jiǎn)化一下,有了GRU。
GAN的JS散度有問題,會(huì)導(dǎo)致梯度消失或無效,于是有了WGAN。
WGAN對(duì)梯度的clip有問題,于是有了WGAN-GP。
?
26、神經(jīng)網(wǎng)絡(luò)中激活函數(shù)的真正意義?一個(gè)激活函數(shù)需要具有哪些必要的屬性?還有哪些屬性是好的屬性但不必要的?
解析:
(1)非線性:即導(dǎo)數(shù)不是常數(shù)。這個(gè)條件是多層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ),保證多層網(wǎng)絡(luò)不退化成單層線性網(wǎng)絡(luò)。這也是激活函數(shù)的意義所在。
(2)幾乎處處可微:可微性保證了在優(yōu)化中梯度的可計(jì)算性。傳統(tǒng)的激活函數(shù)如sigmoid等滿足處處可微。對(duì)于分段線性函數(shù)比如ReLU,只滿足幾乎處處可微(即僅在有限個(gè)點(diǎn)處不可微)。對(duì)于SGD算法來說,由于幾乎不可能收斂到梯度接近零的位置,有限的不可微點(diǎn)對(duì)于優(yōu)化結(jié)果不會(huì)有很大影響[1]。
(3)計(jì)算簡(jiǎn)單:非線性函數(shù)有很多。極端的說,一個(gè)多層神經(jīng)網(wǎng)絡(luò)也可以作為一個(gè)非線性函數(shù),類似于Network In Network[2]中把它當(dāng)做卷積操作的做法。但激活函數(shù)在神經(jīng)網(wǎng)絡(luò)前向的計(jì)算次數(shù)與神經(jīng)元的個(gè)數(shù)成正比,因此簡(jiǎn)單的非線性函數(shù)自然更適合用作激活函數(shù)。這也是ReLU之流比其它使用Exp等操作的激活函數(shù)更受歡迎的其中一個(gè)原因。
(4)非飽和性(saturation):飽和指的是在某些區(qū)間梯度接近于零(即梯度消失),使得參數(shù)無法繼續(xù)更新的問題。最經(jīng)典的例子是Sigmoid,它的導(dǎo)數(shù)在x為比較大的正值和比較小的負(fù)值時(shí)都會(huì)接近于0。更極端的例子是階躍函數(shù),由于它在幾乎所有位置的梯度都為0,因此處處飽和,無法作為激活函數(shù)。ReLU在x>0時(shí)導(dǎo)數(shù)恒為1,因此對(duì)于再大的正值也不會(huì)飽和。但同時(shí)對(duì)于x<0,其梯度恒為0,這時(shí)候它也會(huì)出現(xiàn)飽和的現(xiàn)象(在這種情況下通常稱為dying ReLU)。Leaky ReLU[3]和PReLU[4]的提出正是為了解決這一問題。
(5)單調(diào)性(monotonic):即導(dǎo)數(shù)符號(hào)不變。這個(gè)性質(zhì)大部分激活函數(shù)都有,除了諸如sin、cos等。個(gè)人理解,單調(diào)性使得在激活函數(shù)處的梯度方向不會(huì)經(jīng)常改變,從而讓訓(xùn)練更容易收斂。
(6)輸出范圍有限:有限的輸出范圍使得網(wǎng)絡(luò)對(duì)于一些比較大的輸入也會(huì)比較穩(wěn)定,這也是為什么早期的激活函數(shù)都以此類函數(shù)為主,如Sigmoid、TanH。但這導(dǎo)致了前面提到的梯度消失問題,而且強(qiáng)行讓每一層的輸出限制到固定范圍會(huì)限制其表達(dá)能力。因此現(xiàn)在這類函數(shù)僅用于某些需要特定輸出范圍的場(chǎng)合,比如概率輸出(此時(shí)loss函數(shù)中的log操作能夠抵消其梯度消失的影響[1])、LSTM里的gate函數(shù)。
(7)接近恒等變換(identity):即約等于x。這樣的好處是使得輸出的幅值不會(huì)隨著深度的增加而發(fā)生顯著的增加,從而使網(wǎng)絡(luò)更為穩(wěn)定,同時(shí)梯度也能夠更容易地回傳。這個(gè)與非線性是有點(diǎn)矛盾的,因此激活函數(shù)基本只是部分滿足這個(gè)條件,比如TanH只在原點(diǎn)附近有線性區(qū)(在原點(diǎn)為0且在原點(diǎn)的導(dǎo)數(shù)為1),而ReLU只在x>0時(shí)為線性。這個(gè)性質(zhì)也讓初始化參數(shù)范圍的推導(dǎo)更為簡(jiǎn)單[5][4]。額外提一句,這種恒等變換的性質(zhì)也被其他一些網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)所借鑒,比如CNN中的ResNet[6]和RNN中的LSTM。
(8)參數(shù)少:大部分激活函數(shù)都是沒有參數(shù)的。像PReLU帶單個(gè)參數(shù)會(huì)略微增加網(wǎng)絡(luò)的大小。還有一個(gè)例外是Maxout[7],盡管本身沒有參數(shù),但在同樣輸出通道數(shù)下k路Maxout需要的輸入通道數(shù)是其它函數(shù)的k倍,這意味著神經(jīng)元數(shù)目也需要變?yōu)閗倍;但如果不考慮維持輸出通道數(shù)的情況下,該激活函數(shù)又能將參數(shù)個(gè)數(shù)減少為原來的k倍。
(9)歸一化(normalization):這個(gè)是最近才出來的概念,對(duì)應(yīng)的激活函數(shù)是SELU[8],主要思想是使樣本分布自動(dòng)歸一化到零均值、單位方差的分布,從而穩(wěn)定訓(xùn)練。在這之前,這種歸一化的思想也被用于網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計(jì),比如Batch Normalization[9]。
?
27、梯度下降法的神經(jīng)網(wǎng)絡(luò)容易收斂到局部最優(yōu),為什么應(yīng)用廣泛?
解析:
深度神經(jīng)網(wǎng)絡(luò)“容易收斂到局部最優(yōu)”,很可能是一種想象,實(shí)際情況是,我們可能從來沒有找到過“局部最優(yōu)”,更別說全局最優(yōu)了。
很多人都有一種看法,就是“局部最優(yōu)是神經(jīng)網(wǎng)絡(luò)優(yōu)化的主要難點(diǎn)”。這來源于一維優(yōu)化問題的直觀想象。在單變量的情形下,優(yōu)化問題最直觀的困難就是有很多局部極值,如
人們直觀的想象,高維的時(shí)候這樣的局部極值會(huì)更多,指數(shù)級(jí)的增加,于是優(yōu)化到全局最優(yōu)就更難了。然而單變量到多變量一個(gè)重要差異是,單變量的時(shí)候,Hessian矩陣只有一個(gè)特征值,于是無論這個(gè)特征值的符號(hào)正負(fù),一個(gè)臨界點(diǎn)都是局部極值。但是在多變量的時(shí)候,Hessian有多個(gè)不同的特征值,這時(shí)候各個(gè)特征值就可能會(huì)有更復(fù)雜的分布,如有正有負(fù)的不定型和有多個(gè)退化特征值(零特征值)的半定型
?
在后兩種情況下,是很難找到局部極值的,更別說全局最優(yōu)了。
現(xiàn)在看來,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練的困難主要是鞍點(diǎn)的問題。在實(shí)際中,我們很可能也從來沒有真的遇到過局部極值。Bengio組這篇文章Eigenvalues of the Hessian in Deep Learning(https://arxiv.org/abs/1611.07476)里面的實(shí)驗(yàn)研究給出以下的結(jié)論:
? Training stops at a point that has a small gradient. The norm of the gradient is not zero, therefore it does not, technically speaking, converge to a critical point.
? There are still negative eigenvalues even when they are small in magnitude.
另一方面,一個(gè)好消息是,即使有局部極值,具有較差的loss的局部極值的吸引域也是很小的Towards Understanding Generalization of Deep Learning: Perspective of Loss Landscapes。(https://arxiv.org/abs/1706.10239)
For the landscape of loss function for deep networks, the volume of basin of attraction of good minima dominates over that of poor minima, which guarantees optimization methods with random initialization to converge to good minima.
所以,很可能我們實(shí)際上是在“什么也沒找到”的情況下就停止了訓(xùn)練,然后拿到測(cè)試集上試試,“咦,效果還不錯(cuò)”。
補(bǔ)充說明,這些都是實(shí)驗(yàn)研究結(jié)果。理論方面,各種假設(shè)下,深度神經(jīng)網(wǎng)絡(luò)的Landscape 的鞍點(diǎn)數(shù)目指數(shù)增加,而具有較差loss的局部極值非常少。
28、簡(jiǎn)單說說CNN常用的幾個(gè)模型。
?
29、為什么很多做人臉的Paper會(huì)最后加入一個(gè)Local Connected Conv?
DeepFace 先進(jìn)行了兩次全卷積+一次池化,提取了低層次的邊緣/紋理等特征。后接了3個(gè)Local-Conv層,這里是用Local-Conv的原因是,人臉在不同的區(qū)域存在不同的特征(眼睛/鼻子/嘴的分布位置相對(duì)固定),當(dāng)不存在全局的局部特征分布時(shí),Local-Conv更適合特征的提取。
30、什么是梯度爆炸?
解析:
誤差梯度是神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中計(jì)算的方向和數(shù)量,用于以正確的方向和合適的量更新網(wǎng)絡(luò)權(quán)重。
在深層網(wǎng)絡(luò)或循環(huán)神經(jīng)網(wǎng)絡(luò)中,誤差梯度可在更新中累積,變成非常大的梯度,然后導(dǎo)致網(wǎng)絡(luò)權(quán)重的大幅更新,并因此使網(wǎng)絡(luò)變得不穩(wěn)定。在極端情況下,權(quán)重的值變得非常大,以至于溢出,導(dǎo)致 NaN 值。
網(wǎng)絡(luò)層之間的梯度(值大于 1.0)重復(fù)相乘導(dǎo)致的指數(shù)級(jí)增長(zhǎng)會(huì)產(chǎn)生梯度爆炸。
總結(jié)
以上是生活随笔為你收集整理的深度学习100题(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DeepFM原理及tensorflow代
- 下一篇: 家庭用服务器的作用,家庭网络存储服务器四