深度學習面試100題(第11-15題)
1.請簡要介紹下tensorflow的計算圖。
解析:
Tensorflow是一個通過計算圖的形式來表述計算的程式設計系統,計算圖也叫資料流圖,可以把計算圖看做是一種有向圖,Tensorflow中的每一個節點都是計算圖上的一個Tensor, 也就是張量,而節點之間的邊描述了計算之間的依賴關係(定義時)和數學操作(運算時)。
如下兩圖表示:
a=x*y; b=a+z; c=tf.reduce_sum(b);
2.你有哪些deep learning(rnn、cnn)調參的經驗?
解析:
一、引數初始化
下面幾種方式,隨便選一個,結果基本都差不多。但是一定要做。否則可能會減慢收斂速度,影響收斂結果,甚至造成Nan等一系列問題。
下面的n_in為網路的輸入大小,n_out為網路的輸出大小,n為n_in或(n_in+n_out)*0.5
Xavier初始法論文:
http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
He初始化論文:
https://arxiv.org/abs/1502.01852
uniform均勻分佈初始化:
w = np.random.uniform(low=-scale, high=scale, size=[n_in,n_out])
Xavier初始法,適用於普通啟用函式(tanh,sigmoid):scale = np.sqrt(3/n)
He初始化,適用於ReLU:scale = np.sqrt(6/n)
normal高斯分佈初始化:w = np.random.randn(n_in,n_out) * stdev # stdev為高斯分佈的標準差,均值設為0
Xavier初始法,適用於普通啟用函式 (tanh,sigmoid):stdev = np.sqrt(n)
He初始化,適用於ReLU:stdev = np.sqrt(2/n)
svd初始化:對RNN有比較好的效果。
二、資料預處理方式
zero-center ,這個挺常用的.X -= np.mean(X, axis = 0) # zero-centerX /= np.std(X, axis = 0) # normalize
PCA whitening,這個用的比較少.
三、訓練技巧
要做梯度歸一化,即算出來的梯度除以minibatch size
clip c(梯度裁剪): 限制最大梯度,其實是value = sqrt(w1^2+w2^2….),如果value超過了閾值,就算一個衰減繫系數,讓value的值等於閾值: 5,10,15
dropout對小資料防止過擬合有很好的效果,值一般設為0.5,小資料上dropout+sgd在我的大部分實驗中,效果提升都非常明顯.因此可能的話,建議一定要嘗試一下。 dropout的位置比較有講究, 對於RNN,建議放到輸入->RNN與RNN->輸出的位置.關於RNN如何用dropout,可以參考這篇論文:http://arxiv.org/abs/1409.2329
adam,adadelta等,在小資料上,我這裡實驗的效果不如sgd, sgd收斂速度會慢一些,但是最終收斂後的結果,一般都比較好。如果使用sgd的話,可以選擇從1.0或者0.1的學習率開始,隔一段時間,在驗證集上檢查一下,如果cost沒有下降,就對學習率減半. 我看過很多論文都這麼搞,我自己實驗的結果也很好. 當然,也可以先用ada系列先跑,最後快收斂的時候,更換成sgd繼續訓練.同樣也會有提升.據說adadelta一般在分類問題上效果比較好,adam在生成問題上效果比較好。
除了gate之類的地方,需要把輸出限制成0-1之外,儘量不要用sigmoid,可以用tanh或者relu之類的啟用函式.1. sigmoid函式在-4到4的區間裡,才有較大的梯度。之外的區間,梯度接近0,很容易造成梯度消失問題。2. 輸入0均值,sigmoid函式的輸出不是0均值的。
rnn的dim和embdding size,一般從128上下開始調整. batch size,一般從128左右開始調整.batch size合適最重要,並不是越大越好。
word2vec初始化,在小資料上,不僅可以有效提高收斂速度,也可以可以提高結果。
四、儘量對資料做shuffle
LSTM 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的結果,來自這篇論文:http://jmlr.org/proceedings/papers/v37/jozefowicz15.pdf, 我這裡實驗設成1.0,可以提高收斂速度.實際使用中,不同的任務,可能需要嘗試不同的值.
Batch Normalization據說可以提升效果,不過我沒有嘗試過,建議作為最後提升模型的手段,參考論文:Accelerating Deep Network Training by Reducing Internal Covariate Shift
如果你的模型包含全連線層(MLP),並且輸入和輸出大小一樣,可以考慮將MLP替換成Highway Network,我嘗試對結果有一點提升,建議作為最後提升模型的手段,原理很簡單,就是給輸出加了一個gate來控制資訊的流動,詳細介紹請參考論文: http://arxiv.org/abs/1505.00387
來自@張馨宇的技巧:一輪加正則,一輪不加正則,反覆進行。
五、Ensemble
Ensemble是論文刷結果的終極核武器,深度學習中一般有以下幾種方式
同樣的引數,不同的初始化方式
不同的引數,通過cross-validation,選取最好的幾組
同樣的引數,模型訓練的不同階段,即不同迭代次數的模型。
不同的模型,進行線性融合. 例如RNN和傳統模型。
3.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。
4.LSTM結構推導,為什麼比RNN好?
解析:
推導forget gate,input gate,cell state, hidden information等的變化;因為LSTM有進有出且當前的cell informaton是通過input gate控制之後疊加的,RNN是疊乘,因此LSTM可以防止梯度消失或者爆炸。
5.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的缺點,但是引數數目翻倍。
資料來源:
1.寒小陽&AntZ,張雨石部落格等;
2.蕭瑟,
https://www.zhihu.com/question/41631631/answer/94816420;
3.許韓,
https://zhuanlan.zhihu.com/p/25005808;
4.《 CNN筆記:通俗理解卷積神經網路》,http://blog.csdn.net/v_july_v/article/details/51812459;
5.我愛大泡泡,
htp://blog.csdn.net/woaidapaopao/article/details/77806273。
為了幫助大家更好的學習和理解深度學習,我們特意推出了“深度學習第四期”課程,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題(第16-20題)深度學習面試
- 深度學習面試100題(第21-25題)深度學習面試
- 深度學習面試100題(第26-30題)深度學習面試
- 深度學習面試100題(第6-10題)深度學習面試
- 深度學習面試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面試