台灣資料科學愛好者年會: 一天搞懂深度學習 心得筆記

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 啊

參與討論

3 則留言

  1. 感謝分享。 深度學習是實驗科學, 上面筆記中的每一個原理, 都值得動手去體會

發佈留言

發表迴響