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