CS224d lecture 6札记
哈哈哈,終于又到了每課的寫筆記時間。這次課程的內容比較少,可能是為了給Problem set 1空余時間吧。
廢話不多說。寫嘍
這次的video講的東西主要就是把推薦的論文稍微詳細的講解了一部分,然后外加給RNN模型開了個頭。
1.Multi-task learning / weight sharing
這個第一部分其實在NLP(almost) from scratch里也有講解它的理念就是,在DL model里面底下幾層里學到的feature是相同或者近似的,那么這樣的話,只需要統一給DL model的下面的幾層建模,然后根據不同的任務再在之上分別建立不同的模型就好。這樣可以大大簡化模型的復雜度,又可以最大限度的利用到現有的數據,提取出更多的features。
然后后面就列出來了幾個表格,說明俺們的multi-task learning就是好,用事實說話么。
?
2.Non-linearity
接下來就是每一層里對輸入數據進行non-linearity的操作了。主要有以下幾種:1.sigmoid function 2.hyperbolic tangent function 3.hard tanh function 4.soft sign 5.rectified linear function這五種函數根據實際情況的不同靈活選擇。具體怎么選課上也沒說- -,不過在推薦閱讀里給出了論文引用,具體遇到問題的時候參考這篇論文就會萬事OK啦。
這一段在推薦閱讀的第十四頁的左下角,每篇論文都有鏈接可以很方便的查到。
下面是五個常用non-linearities的函數表達式和對應的圖形:
其實tanh就是sigmoid rescaled及shifted后的產物。
tanh(z) = 2*logistic(2z) - 1
?
3.Gradient checks
哎呀這個gradient checks可是很厲害哦不過一定要使用精度高的那個公式,也就是f(x + e) - f(x - e) / 2e不能用f(x + e) - f(x) / e因為后面的那個精度低。
epsilon的選擇也很有講究哦,不能太大也不能太小。用paper里的話說就是:Contrary to naive expectiations, the relative difference may grow if we choose an eplison that is too small. i.e., the error should first decrease as eplison is decreased and then may worsen when numerical precision kicks in, due to non-linearities.
最終根據不斷的嘗試和經驗選擇我們發現eplison選為10^-4的效果最好。
如果gradient checks失敗了怎么辦呢?
首先第一步:簡化模型知道沒有bug
第二步:增加一個hidden layer
。。。。。。
就是一步又一步增加你模型的復雜度,然后在某一步出現bug了就知道bug出現在這里,排錯,然后接著增加復雜度,再排錯,直到恢復到原來的模型為止。
?
4.Parameter initialization
parameter initialization也很有講究,由于DL的node太多復雜度很高,所以一不小心就優化到local optimum里了。還容易使得初始值在一大段“高原”附近,優化時間就會很長。parameters也不能是對稱的否則往上一層輸出的結果就會太相似,無法進行優化。
綜合以上考慮,還有實際經驗,初始化parameters應當選用uniform distribution(uniform(-r, r)),當non-linear function是sigmoid function的時候 r = sqrt(6 / fan-in + fan-out),當non-linear function是tanh的時候 r = ?4 * sqrt(6 / fan-in + fan-out)其中fan-in和fan-out是當前layer的之前layer的size和之后的layer的size。
?
5.Learning rates
learning rates不能太大,太大容易over shooting太小的話訓練速度太慢。
有一個方法就是 epsilon_t = epsilon_0 * period / max(t, period)超過period的時候epsilon_t就會隨著時間減小。
另一個方法更神奇,不同的parameter有不同的learning rate,這個參數之前更新的梯度之和很大則learning rate就小,反之則大
實現方法就是用一個數組記錄下所有這個參數之前使用過的梯度,這次的learning rate = fixed number / sqrt(sum(all gradients used before))
?
6.Prevent overfitting
防止overfitting的出現的方法很多常用的有四種:1.降低模型的復雜度,減少模型每層的unit數量,或者直接減少layers 2.使用weight decay常用的就是L1 and L2 regularization on weights 3.訓練到一定程度就停止,使用有最佳validation error的parameters 4.sparsity contraints on hidden activations這個方法我在auto-encoder里見到過
?
7.Recurrent Neural network language model
這一課里對RNN的介紹很簡單就說了,這個模型叫recurrent是因為里面的parameters是recurrent使用的,有啥好處也沒介紹 - -
期待下一課詳細講解
總結
以上是生活随笔為你收集整理的CS224d lecture 6札记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Discuz中常用的编辑器代码
- 下一篇: 考研英语词汇背诵(第一天)