[讀書心得] 機器學習設計模式 – Machine learning design patterns (上)

這本書在amazon剛出版沒多久很快就獲得不少好評,年初就買來但一直沒時間好好閱讀。剛好最近博客來需要湊單就連中文版一起下定。譯者是賴屹民,之前就買過這位作者的「流暢的Python」與「精通機器學習」「PHP、MySQL與JavaScript學習手冊」,只能說這次翻譯還是一樣無法恭維。

與四人幫的「設計模式」不同,這本書雖然有一些tf與BigQuery的範例碼,但基本都是在講ML的常用技巧並沒有太多程式架構,命名還不如改成歐萊禮的「CookBook」系列比較合適。

總的來說這本書還是很推薦,不少技巧都很實用且有價值,雖然有些pattern可能學過基本ML的人都會覺得基礎,但仔細閱讀會發現作者會提到其他關連知識或提示,閱讀時建議不要因為看標題就覺得學過而跳過。

  1. Hashed Feature
  2. Embedding
    • Feature Cross
      假設有一個函式f(x,y) = SIGN(xy),我們沒沒單從x或y的線性組合來做分剛,但若創造一個新的input=xy就可以簡單地分類,建立feature cross就是這種特徵工程。
    • feature cross的缺點是會增加維度與稀疏性,但我們可以使用L1 regularization與L2 regularization來減輕這個問題。
    • 另外一個常見的技巧是將數值變項轉成類別變項,例如將年齡分層。
  3. Multi-modal Input
    • 像是Resnet-50這種model雖然很強悍,但只能處理單純圖片的input。multimodel input目標是要能處理不同型式的input,例如能用同一個modal來處理文字或圖片的input,或是更複雜的輸入結構。
    • 不同結構的文字input我們可以考慮用embedding或是bag of words來處理。圖片輸入可以用images as pixel處理,或是image as tiled structure—-常見的CNN就是其中的範例,另外許多情況可以直接使用圖片的metadata來當作input。
  4. Reframing
    • Reframing改變輸出的表示形式,例如把回歸問題當成類別問題來學習。若我們觀查到回歸的輸出明顯多峰分佈,也許轉成類別問題會更好處理。
    • 處理類別時大概只需要特徵數10倍的資料量,但處理回歸問題時需要特徵數50倍數量的資料量。
  5. Multilabel
  6. Ensembles
  7. Cascade
    • 有時某些input特別重要,在學習時需先辦認出這些unusual activity,例如在眾多顧客資料中某些VIP特別需要注意。Cascade建立可辨識unusual activity的model,再把這些modal串接。
    • 但要小心Cascade很多時候並不是最佳設計,反而造成不必要的複雜度。若是我們能單從input就確定辨識出unusual activity,應該直接把他轉化成一個新的input,而不是用cascade處理。
  8. Neutral Class
    • 有時候答案並不是完全二分法,增加中性的答案類別可能是比較好的方法,例如yes/no/maybe。像是醫師處方雖然明確開立了NSAID,但可能某些病人對醫師來說在NSAID短缺時用Acetaminophen來替代並沒有關係。所以在收集資料時,我們除了分為NSAID或Acetaminophen兩種類別外,也許也要增加一種「NSAID或Acetaminophen皆可」的中性選項。
  9. Rebalancing
    • 有時候收集到的資料不同類別數量差異會很大。例如處理罕見疾病資料時,其中99%為正常案例,但只有1%為有病的案例。常用的處理方式有:down sampling,up sampling或是加權。
    • Anomaly detection
      • 處理regression model的unbalance
        1. 直接把model error當做一個prediction signal。
        2. 先將incoming data做cluster,並比較與每個cluster的距離。
  10. Useful Overfitting
    • 在做訊號預測時也許overfitting是有益的,尤其是確定輸出沒有雜訊,且我們可取得完整資料集的時候。像是以每0.1°為間隔做預測時,我們不在意0.001°間隔會發生overfitting。
    • 大部份這種情況,也許建立一個大的查詢表是簡單暴力的解法。不過若記憶體不足時,我們就要改用能快速輸出的modal。
  11. Checkpoints
    • 作者建議我們在學習大的model時不要使用early stop,先使用小的training data,在中途慢慢加入新的data set。
    • Virtual epoch
      • 並不一定要完整跑完所有data set才能當作一個epoch。我們可以修改tf,讓他在跑完一定數目的data後就當作一個epoch並建立checkpoint,這樣可以比較容易觀察,並且避免training data太大時機器在training中途發生錯誤。
  12. Transfer Learning
    1. feature extration
      • 凍結bottle layer之前所有的參數。
    2. fine tune
      • 可以調整pre-train的參數。
    3. progressive-fine tune
      • 一開始凍結bottle layer之所的參數,但在訓練中途逐漸解除凍結。
  13. Distribution Strategy
    1. data parallelism
      • 適合計算weight較困難的model,例如CNN
    2. modal paralleism
      • 適合每個neuron使用次數較高的model,例如full connected neuron。
  14. Hyper-parameter Tuning

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料