2016/9/24 去中研院參加李宏毅老師的一天搞懂深度學習課程,收穫蠻多的,投影片在這裡。對我來說 Part 2 收穫最多,Part 3 是我第一次開始了解 CNN 和 RNN,一時無法完全理解其運算過程,大概了解原理而已。以下是一些筆記:
Part1: DNN 簡介
因為修過台大林軒田老師的機器學習課的背景,簡介的內容輕鬆聽。主就是介紹機器學習的過程、什麼是類神經網路和 Gradient Descent。但有點驚訝的是,老師完全不著墨教如何計算 Backpropagation,他說太多 toolkits 現成工具可以處理了,可以當它是個黑箱子,哈哈。
另外還有探討了一下為什麼類神經網路的發展是 Deep 而不是 Fat,這兩種的神經元可以一樣多啊。經過實驗 Fat+Short v.s. Thin + Tail 可以發現後者的結果比較好。老師沒有給證明,而是給了一個直觀的類比:就像 Logic circuits (果然是電機系的老師),用多層的邏輯閘可以有效率的組出複雜 function。
Part2: Recipe of Deep Learning
- 老師用 Keras 作現場示範,這是一個 TensorFlow 和 theano 的包裝函式庫,API 更好用。如果電腦有 Nvidia 顯示卡,可以用 GPU 平行運算加速,超快der~~~(羨慕)
- 呼叫 Keras API 很簡單,但是如果不會調參數,馬上讓你從入門到放棄。
- 深度學習的 Hello World 就是拿 MNIST 資料集做手寫辨識
- 不會調參數是準確率只有 11%,會簡單調參數馬上變 80%,學會後可以提升到 97%
- 調參數要先判斷是不是從 training set 就沒訓練好,還是只有 test set 不好。
- 加多參數,效能變爛,不一定是 overfitting,要看是不是 training set 結果就不好。例如 dropout 技巧是針對 overfiiting 問題處理,你不能拿這招去處理 training set 問題。
以下處理 training data 準確率問題
- 首先是 loss function 選擇
- 在 softmaxoutput layer,可以選擇用 cross entropy 來處理分類問題
- 因為 entropy 的微分山坡比較陡峭
- 不要用 mse 就差很多,馬上準確率從 11% 到 8X%
- Mini-batch
- 有兩個參數 batch size 跟迭代次數
- batch size 調小會比較快,但是平行運算也可以讓 batch 很大也可以很快
- 但是 mini-batch 讓結果也比較好,因為隨機性避免了 local optimal 問題
- New activation function
- 增加更多層但是結果卻變爛: Vanishing gradient problem
- 這是 sigmoid 的 activation function 問題,靠 input layer 那邊的微分值太小了
- 2006 時用 RBM pre-training,現在不流行
- 2015 時換 activation function,改用 ReLU 會讓每層變瘦!
- 可以不用擔心需要像 sigmoid 限制數字變成 0~1,因為 DNN 本身就可以處理數字範圍很大很小
- 到這邊,準確率變 96% 了!
- Maxout 可讓每個 activation function 都不一樣,變成 learnable。ReLU 是 Maxout 的一種特例。
- Adaptive Learning Rate
- Learning Rate 如果固定,一開始會走太慢,或最後走太快。
- 應該要隨著時間,讓 lr 越來越小。微分越小,lr 大一點。
- Adagrad 方法和其他一打的方法可以選用
- Momentum
- 除了 local optimal 問題,微分走到 saddle point 也會停下來,因為微分非常小,處在高原的地方…… 也會停下來。
- 解決的想法是就像物理特性有慣性,有某種慣性在,所以即使微分=0,還是繼續調整參數,可以在平原也繼續走,逃出 local optim,甚至爬過小山坡
- optimizer 把 SGD 改成用 Adam 法,可以讓參數更新速度更快,最後結果好一點 變 97%
以下處理 overfitting 問題
- 萬能招數: 增加更多 training data
- 沒有怎麼辦? 自己增加: 例如增加噪音,或是位移資料等等
- Early Stopping
- 透過 validation test 當 lost 增加時,就停止 training
- Regularization
- Weight decay is one kind of regularization
- 每次 weight 乘 0.99,讓他萎縮
- Dropout
- 這是 deep learning 中特有的 regularization 方式
- training 時每次 mini-batch 隨機丟棄神經元! 讓他變瘦長
- 注意 testing 時不要 dropout
- 原理: Dropout is a kind of ensemble.
- 注意: 加了 dropout,你的 training set 結果其實會變差,但是 test set 會變好
Part3: Variants of Neural Networks 各種不同的結構
Convolutional Neural Network (CNN)
- 適合用在影像上
- 因為 fullly-connected netowkring 如果用在影像辨識上,會導致參數過多(因為像素很多),導致 over-fitting
- CNN 針對影像辨識的特性,特別設計過,來減少參數:
- Convolution: 學出 filter 比對原始圖片,產生出 feature map (也當成image)
- Max Pooling: 將 feature map 縮小
- Flatten: 將每個像素的 channels (有多少個filters) 展開成 fully connected feedforward network
- 但是 CNN 不會處理旋轉
- AlphaGo 也用了 CNN,但是沒有用 Max Pooling (所以不同問題需要不同model)
- 選擇設計 feature engineering 或是 選擇設計 DNN 結構,其實是同一回事。因為如果人可以設計出不錯的 feature,那麼 DNN 幫助就不大了。
- 例如影像辨識用 DNN 可以改進很大,但是文字相關就改進不大,因為本來的文字處理 feature engineering 就很不錯了。
Recurrent Neural Network (RNN)
- 解決 Slot Filling 問題,處理文字找關鍵字,但是有記憶力
- 適用於處理時間、空間序列上有強關聯的訊息
- 有個持續記憶的參數,每次運算會考慮進來,通常就是用 Long Short-term Memory (LSTM),其他還有 GRU (簡單版)、 SimpleRNN (更簡單版?)
- RNN 不好 train,可能突然 loss 突高,這不是 bug…..
- 有一些解法,例如用 LSTM 防止 gradient vanishing
- 各種應用介紹:
- 一對多: 解析文字,從文字 產生 分類
- 多對多: 語音辨識,從 語音 產生 文字
- 語言翻譯
- 輸入影像,輸出內容相關的文字 (Video Caption Generation)
Part4: Next wave 新潮流
- Supervised learning
- 新結構: Ultra Deep Network !! 但是需要特別設計 shortcut 避免 over-fitting 讓 model 壞掉
- Attention-based model: 根據問題,去閱讀文字、影像、聲音找到關鍵(attention)的地方回答問題
- Reinforcement learning
- 玩遊戲等很多應用
- 原理時間不夠講,請看參考資料
- Unsupervised learning
- 模仿畫風
- Pixel Recurrent Neural Networks 自動補圖
- auto-encoder: 訓練一個模型,讓輸入和輸出一樣,但故意讓過程中 dim 降低,讓DNN變窄。從中得到 encoder 和 decoder。
- 機器產生圖片,例如機器自動畫漫畫
- 機器閱讀: Generating Word Vector/Embedding is unsupervised 找出詞彙涵義透過 找出意義相近的詞彙、找出對比推論
- 機器聽聲音 (WaveNet DeepMind)[https://deepmind.com/blog/wavenet-generative-model-raw-audio/]
- 自動說話和產生音樂
結語
- 新工作: AI 訓練師
- 需要訓練師選擇 model, 不同 model 適合處理不同問題
- 需要足夠的經驗,才能駕馭 best model,特別是像 DNN 這麼 powerful 的 model 啊
我們在尋找熟悉深度學習(Deep Learning)的人才,月薪最低14萬元起,歡迎大家應徵!
www.refuel4.com/careers/data/85.303/deep-learning-engineer
更新連結: old.refuel4.com/careers/data/85.303/deep-learning-engineer
感謝分享。 深度學習是實驗科學, 上面筆記中的每一個原理, 都值得動手去體會