這本書在amazon剛出版沒多久很快就獲得不少好評,年初就買來但一直沒時間好好閱讀。剛好最近博客來需要湊單就連中文版一起下定。譯者是賴屹民,之前就買過這位作者的「流暢的Python」與「精通機器學習」「PHP、MySQL與JavaScript學習手冊」,只能說這次翻譯還是一樣無法恭維。
與四人幫的「設計模式」不同,這本書雖然有一些tf與BigQuery的範例碼,但基本都是在講ML的常用技巧並沒有太多程式架構,命名還不如改成歐萊禮的「CookBook」系列比較合適。
總的來說這本書還是很推薦,不少技巧都很實用且有價值,雖然有些pattern可能學過基本ML的人都會覺得基礎,但仔細閱讀會發現作者會提到其他關連知識或提示,閱讀時建議不要因為看標題就覺得學過而跳過。
- Hashed Feature
- Embedding
- Feature Cross
假設有一個函式f(x,y) = SIGN(xy),我們沒沒單從x或y的線性組合來做分剛,但若創造一個新的input=xy就可以簡單地分類,建立feature cross就是這種特徵工程。 - feature cross的缺點是會增加維度與稀疏性,但我們可以使用L1 regularization與L2 regularization來減輕這個問題。
- 另外一個常見的技巧是將數值變項轉成類別變項,例如將年齡分層。
- Feature Cross
- 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。
- Reframing
- Reframing改變輸出的表示形式,例如把回歸問題當成類別問題來學習。若我們觀查到回歸的輸出明顯多峰分佈,也許轉成類別問題會更好處理。
- 處理類別時大概只需要特徵數10倍的資料量,但處理回歸問題時需要特徵數50倍數量的資料量。
- Multilabel
- Ensembles
- Cascade
- 有時某些input特別重要,在學習時需先辦認出這些unusual activity,例如在眾多顧客資料中某些VIP特別需要注意。Cascade建立可辨識unusual activity的model,再把這些modal串接。
- 但要小心Cascade很多時候並不是最佳設計,反而造成不必要的複雜度。若是我們能單從input就確定辨識出unusual activity,應該直接把他轉化成一個新的input,而不是用cascade處理。
- Neutral Class
- 有時候答案並不是完全二分法,增加中性的答案類別可能是比較好的方法,例如yes/no/maybe。像是醫師處方雖然明確開立了NSAID,但可能某些病人對醫師來說在NSAID短缺時用Acetaminophen來替代並沒有關係。所以在收集資料時,我們除了分為NSAID或Acetaminophen兩種類別外,也許也要增加一種「NSAID或Acetaminophen皆可」的中性選項。
- Rebalancing
- 有時候收集到的資料不同類別數量差異會很大。例如處理罕見疾病資料時,其中99%為正常案例,但只有1%為有病的案例。常用的處理方式有:down sampling,up sampling或是加權。
- Anomaly detection
- 處理regression model的unbalance
- 直接把model error當做一個prediction signal。
- 先將incoming data做cluster,並比較與每個cluster的距離。
- 處理regression model的unbalance
- Useful Overfitting
- 在做訊號預測時也許overfitting是有益的,尤其是確定輸出沒有雜訊,且我們可取得完整資料集的時候。像是以每0.1°為間隔做預測時,我們不在意0.001°間隔會發生overfitting。
- 大部份這種情況,也許建立一個大的查詢表是簡單暴力的解法。不過若記憶體不足時,我們就要改用能快速輸出的modal。
- Checkpoints
- 作者建議我們在學習大的model時不要使用early stop,先使用小的training data,在中途慢慢加入新的data set。
- Virtual epoch
- 並不一定要完整跑完所有data set才能當作一個epoch。我們可以修改tf,讓他在跑完一定數目的data後就當作一個epoch並建立checkpoint,這樣可以比較容易觀察,並且避免training data太大時機器在training中途發生錯誤。
- Transfer Learning
- feature extration
- 凍結bottle layer之前所有的參數。
- fine tune
- 可以調整pre-train的參數。
- progressive-fine tune
- 一開始凍結bottle layer之所的參數,但在訓練中途逐漸解除凍結。
- feature extration
- Distribution Strategy
- data parallelism
- 適合計算weight較困難的model,例如CNN
- modal paralleism
- 適合每個neuron使用次數較高的model,例如full connected neuron。
- data parallelism
- Hyper-parameter Tuning