深度學習面試100題(第16-20題)
1、為什麼引入非線性激勵函式?
解析:
第一,對於神經網路來說,網路的每一層相當於f(wx+b)=f(w'x),對於線性函式,其實相當於f(x)=x,那麼線上性啟用函式下,每一層相當於用一個矩陣去乘以x,那麼多層就是反覆的用矩陣去乘以輸入。根據矩陣的乘法法則,多個矩陣相乘得到一個大矩陣。所以線性激勵函式下,多層網路與一層網路相當。比如,兩層的網路f(W1*f(W2x))=W1W2x=Wx。
第二,非線性變換是深度學習有效的原因之一。原因在於非線性相當於對空間進行變換,變換完成後相當於對問題空間進行簡化,原來線性不可解的問題現在變得可以解了。
下圖可以很形象的解釋這個問題,左圖用一根線是無法劃分的。經過一系列變換後,就變成線性可解的問題了。
如果不用激勵函式(其實相當於激勵函式是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函式,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。
正因為上面的原因,我們決定引入非線性函式作為激勵函式,這樣深層神經網路就有意義了(不再是輸入的線性組合,可以逼近任意函式)。最早的想法是sigmoid函式或者tanh函式,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋)。
2、請問人工神經網路中為什麼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).
3、為什麼LSTM模型中既存在sigmoid又存在tanh兩種啟用函式,而不是選擇統一一種sigmoid或者tanh?這樣做的目的是什麼?
解析:
sigmoid 用在了各種gate上,產生0~1之間的值,這個一般只有sigmoid最直接了。
tanh 用在了狀態和輸出上,是對資料的處理,這個用其他啟用函式或許也可以。
二者目的不一樣
另可參見A Critical Review of Recurrent Neural Networks for Sequence Learning的section4.1,說了那兩個tanh都可以替換成別的。
4、如何解決RNN梯度爆炸和彌散的問題?
解析:
為了解決梯度爆炸問題,Thomas Mikolov首先提出了一個簡單的啟發性的解決方案,就是當梯度大於一定閾值的的時候,將它截斷為一個較小的數。具體如演算法1所述:
演算法:當梯度爆炸時截斷梯度(虛擬碼)
下圖視覺化了梯度截斷的效果。它展示了一個小的rnn(其中W為權值矩陣,b為bias項)的決策面。這個模型是一個一小段時間的rnn單元組成;實心箭頭表明每步梯度下降的訓練過程。當梯度下降過程中,模型的目標函式取得了較高的誤差時,梯度將被送到遠離決策面的位置。截斷模型產生了一個虛線,它將誤差梯度拉回到離原始梯度接近的位置。
梯度爆炸,梯度截斷視覺化
為了解決梯度彌散的問題,我們介紹了兩種方法。第一種方法是將隨機初始化
改為一個有關聯的矩陣初始化。第二種方法是使用ReLU(Rectified Linear Units)代替sigmoid函式。ReLU的導數不是0就是1.因此,神經元的梯度將始終為1,而不會當梯度傳播了一定時間之後變小。
5、什麼樣的資料集不適合用深度學習?
解析:
(1)資料集太小,資料樣本不足時,深度學習相對其它機器學習演算法,沒有明顯優勢。
(2)資料集沒有區域性相關特性,目前深度學習表現比較好的領域主要是影象/語音/自然語言處理等領域,這些領域的一個共性是區域性相關性。影象中畫素組成物體,語音訊號中音位組合成單詞,文字資料中單片語合成句子,這些特徵元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的區域性相關性的資料集,不適於使用深度學習演算法進行處理。舉個例子:預測一個人的健康狀況,相關的引數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。
更多面試題可檢視七月線上面試題庫:https://www.julyedu.com/question/index,或者下載七月線上APP。
資料來源:
1.Begin Again,
https://www.zhihu.com/question/29021768
2.Begin Again,
https://www.zhihu.com/question/29021768
3.https://www.zhihu.com/question/46197687
4.http://blog.csdn.net/han_xiaoyang/article/details/51932536
5.抽象猴,
https://www.zhihu.com/question/41233373
為了幫助大家更好的學習和理解深度學習,我們特意推出了“深度學習第四期”課程,7月31日開課,每週二週四晚上8~10點直播上課,每次課至少2小時,共10次課;本課程提供以下服務:直播答疑、課後回放、佈置作業且解答、畢業考試且批改、面試輔導。課程詳情可點選文末“閱讀原文”進行檢視,或者加微信客服:julyedukefu_02進行諮詢。
相關文章
- 深度學習面試100題(第46-50題)深度學習面試
- 深度學習面試100題(第51-55題)深度學習面試
- 深度學習面試100題(第56-60題)深度學習面試
- 深度學習面試100題(第31-35題)深度學習面試
- 深度學習面試100題(第36-40題)深度學習面試
- 深度學習面試100題(第41-45題)深度學習面試
- 深度學習面試100題(第61-65題)深度學習面試
- 深度學習面試100題(第21-25題)深度學習面試
- 深度學習面試100題(第26-30題)深度學習面試
- 深度學習面試100題(第6-10題)深度學習面試
- 深度學習面試100題(第11-15題)深度學習面試
- 深度學習面試100題(第1-5題):經典常考點CNN深度學習面試CNN
- A-深度學習面試題深度學習面試題
- 10道機器學習、深度學習必會面試題機器學習深度學習面試題
- 機器學習及深度學習的知識點及面試題總結機器學習深度學習面試題
- 微軟面試100題微軟面試
- 淺談深度學習落地問題深度學習
- 常見面試題學習(4)面試題
- 學習面試題Day09面試題
- 【SQL 學習】一個面試題SQL面試題
- 100道JAVA面試題+JAVA面試題參考答案Java面試題
- 《統計學習方法》第11章習題
- 淺談深度學習的落地問題深度學習
- 深度學習 V.S. 謎題遊戲深度學習遊戲
- Java面試題全集學習筆記Java面試題筆記
- 100個前端面試題前端面試題
- Java最大棧深度有多大?-從一道面試題開始學習JVMJava面試題JVM
- 深度學習之新聞多分類問題深度學習
- DBA面試題集----我要好好學習面試題
- 資料結構面試100題資料結構面試
- 宅家學習第N天,我終於整理出了高階面試題合集!面試題
- 【深度學習】深度學習md筆記總結第1篇:深度學習課程,要求【附程式碼文件】深度學習筆記
- TensorFlow系列專題(三):深度學習簡介深度學習
- 100家IT 名企面試必考面試題java系列面試題Java
- 【Java面試題】之CAS原理深度分析Java面試題
- Python經典程式設計習題100例:第3例Python程式設計
- Python經典程式設計習題100例:第42例:學習使用auto定義變數Python程式設計變數
- mysql面試練習題MySql面試