深度學習面試100題(第61-65題)
點選藍字關注我們,小七等你好久嘍
深度學習
面試大題第61-65題
61題
深度學習中有什麼加快收斂/降低訓練難度的方法?
解析:
瓶頸結構
殘差
學習率、步長、動量
優化方法
預訓練
62題
請簡單說下計算流圖的前向和反向傳播
解析:
63題
請寫出鏈式法則並證明
解析:
鏈式法則或鏈鎖定則(英語:chain rule),是求複合函式導數的一個法則。設f和g為兩個關於x的可導函式,則複合函式
的導數
為
以下是一個簡單的例子
以下的簡單的一個證明
64題
請寫出Batch Normalization的計算方法及其應用
解析:
機器學習流程簡介
1)一次性設定(One time setup)
- 啟用函式(Activation functions)
- 資料預處理(Data Preprocessing)
- 權重初始化(Weight Initialization)
- 正則化(Regularization:避免過擬合的一種技術)
- 梯度檢查(Gradient checking)
2)動態訓練(Training dynamics)
- 跟蹤學習過程 (Babysitting the learning process)
- 引數更新 (Parameter updates)
- 超級引數優化(Hyperparameter optimization)
- 批量歸一化(Batch Normalization簡稱BN,其中,Normalization是資料標準化或歸一化、規範化,Batch可以理解為批量,加起來就是批量標準化。解決在訓練過程中中間層資料分佈發生改變的問題,以防止梯度消失或爆炸、加快訓練速度)
3)評估(Evaluation)
- 模型組合(Model ensembles)
(訓練多個獨立的模型,測試時,取這些模型結果的平均值)
為什麼輸入資料需要歸一化(Normalized Data),或者說,歸一化後有什麼好處呢?
原因在於神經網路學習過程本質就是為了學習資料分佈,一旦訓練資料與測試資料的分佈不同,那麼網路的泛化能力也大大降低,所以需要使用輸入資料歸一化方法,使訓練資料與測試資料的分佈相同。
另外一方面,加之神經網路訓練時一旦網路某一層的輸入資料的分佈發生改變,那麼這一層網路就需要去適應學習這個新的資料分佈,所以如果訓練過程中,訓練資料的分佈一直在發生變化,那麼將會影響網路的訓練速度。
為了讓訓練深度網路簡單高效,研究者提出了隨機梯度下降法(SGD),但是它有個毛病,就是需要我們人為的去選擇引數,比如學習率、引數初始化、權重衰減係數、Drop out比例等。這些引數的選擇對訓練結果至關重要,以至於我們很多時間都浪費在這些的調參上。
舉個例子,比如某個神經元 x = 1, 某個 Weights 的初始值為 0.1, 這樣後一層神經元計算結果就是 Wx 0.1 *1 = 0.1;
如果 x = 20, 這樣 Wx = 0.1 * 20 = 2。現在還不能看出什麼問題, 但是, 當我們加上一層激勵函式, 啟用這個 Wx 值的時候, 問題就來了。
如果使用 像 tanh 的激勵函式, Wx 的啟用值就變成了 ~0.1 和 ~1, 接近於 1 的部已經處在了 激勵函式的飽和階段, 也就是如果 x 無論再怎麼擴大, tanh 激勵函式輸出值也還是 接近1。
換句話說, 神經網路在初始階段已經不對那些比較大的 x 特徵範圍 敏感了. 這樣很糟糕, 想象我輕輕拍自己的感覺和重重打自己的感覺居然沒什麼差別, 這就證明我的感官系統失效了. 當然我們是可以用之前提到的對資料做 normalization 預處理, 使得輸入的 x 變化範圍不會太大, 讓輸入值經過激勵函式的敏感部分. 但剛剛這個不敏感問題不僅僅發生在神經網路的輸入層, 而且在隱藏層中也經常會發生。
既然 x 換到了隱藏層當中, 我們能不能對隱藏層的輸入結果進行像之前那樣的normalization 處理呢? 答案是可以的, 因為大牛們發明了一種技術, 叫做 batch normalization, 正是處理這種情況。
Batch Normalization由Google提出在這篇論文中《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出。
與啟用函式層、卷積層、全連線層、池化層一樣,BN(Batch Normalization)也屬於網路的一層。
BN的本質原理:在網路的每一層輸入的時候,又插入了一個歸一化層,也就是先做一個歸一化處理(歸一化至:均值0、方差為1),然後再進入網路的下一層。不過歸一化層可不像我們想象的那麼簡單,它是一個可學習、有引數(γ、β)的網路層。
歸一化公式:
以下是Normalization過程(引用Google論文中的解釋):
輸入:輸入資料x1..xm(這些資料是準備進入啟用函式的資料)
計算過程中可以看到,
1.求資料均值;
2.求資料方差;
3.資料進行標準化(個人認為稱作正態化也可以)
4.訓練引數γ,β
5.輸出y通過γ與β的線性變換得到新的值
How to BN?
怎樣學BN的引數就是經典的chain rule。
在正向傳播的時候,通過可學習的γ與β引數求出新的分佈值
在反向傳播的時候,通過鏈式求導方式,修正γ與β以及相關權值
Why is BN?
因為BN保證每一層的輸入分佈穩定,這一點本身可以使得訓練加速,而且另一方面它也可以幫助減少梯度消失和梯度爆炸的現象。
梯度消失
關於梯度消失,以sigmoid函式為例子,sigmoid函式使得輸出在[0,1]之間。
事實上x到了一定大小,經過sigmoid函式的輸出範圍就很小了,參考下圖
如果輸入很大,其對應的斜率就很小,我們知道,其斜率(梯度)在反向傳播中是權值學習速率。所以就會出現如下的問題,
在深度網路中,如果網路的啟用輸出很大,其梯度就很小,學習速率就很慢。假設每層學習梯度都小於最大值0.25,網路有n層,因為鏈式求導的原因,第一層的梯度小於0.25的n次方,所以學習速率就慢,對於最後一層只需對自身求導1次,梯度就大,學習速率就快。
這會造成的影響是在一個很大的深度網路中,淺層基本不學習,權值變化小,後面幾層一直在學習,結果就是,後面幾層基本可以表示整個網路,失去了深度的意義。
梯度爆炸
關於梯度爆炸,根據鏈式求導法,第一層偏移量的梯度=啟用層斜率1x權值1x啟用層斜率2x…啟用層斜率(n-1)x權值(n-1)x啟用層斜率n。假如啟用層斜率均為最大值0.25,所有層的權值為100,這樣梯度就會指數增加。
65題
神經網路中會用到批量梯度下降(BGD)嗎?為什麼用隨機梯度下降(SGD)?
解析:
1)一般不用BGD
2)a. BGD每次需要用到全量資料,計算量太大
b. 引入隨機因素,即便陷入區域性極小,梯度也可能不為0,這樣就有機會跳出區域性極小繼續搜尋(可以作為跳出區域性極小的一種方式,但也可能跳出全域性最小。還有解決區域性極小的方式:多組引數初始化、使用模擬退火技術)
分享一哈:之前公司三週年慶活動,推出新人大禮包的活動,註冊即送免費課程,此活動還在繼續,此活動有超6千人報名了,現在免費,免費,免費送嘍,親們抓緊時間噢,掃碼檢視詳情~~
長按二維碼檢視
福利時刻:為了幫助大家更多的學習課程的相關知識,我們特意推出了深度學習系列課程。
更多資訊
請戳一戳
點選“閱讀原文”,可線上報名參加
相關文章
- 深度學習面試100題(第46-50題)深度學習面試
- 深度學習面試100題(第51-55題)深度學習面試
- 深度學習面試100題(第56-60題)深度學習面試
- 深度學習面試100題(第31-35題)深度學習面試
- 深度學習面試100題(第36-40題)深度學習面試
- 深度學習面試100題(第41-45題)深度學習面試
- 深度學習面試100題(第16-20題)深度學習面試
- 深度學習面試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面試