2021年9月14日 星期二

機器學習筆記 : 基本概念

自 2018 年開始接觸機器學習後, 三年下來仍然是一知半解. 最近從母校借來的 "精通機器學習 (第二版)" 因被預約即將歸還, 但書卻沒看多少, 只好將前三章閱讀筆記整理如下. 


Source : 博客來


此書譯自 Oreilly 2019 年出版的原文書第二版 :  



Source : 博客來


之前也曾從母校借過此書原文第一版 (僅 16 章), 新版內容修訂擴充為 19 章. 與原文書價格相比, 翻譯本真的便宜多多, 且中文版閱讀速度可以更快.

此書屬於實作類, 沒有演算法方程式的理論推導, 而是簡單介紹概念後直接給出演算式, 接著列出 Python 實作, 用的是準生產框架 (scikit-learn 與 TensorFlow/Keras), 不是用來演繹理論的玩具版本 Python 程式. 本書 Jupyter 範例可從 GitHub 下載 :


閱讀此書的先備知識包括 :
  • Numpy + Pandas + Matplotlib
  • 微積分 + 線性代數 + 機率統計
手上還有其它幾本參考書也是很不錯, 可交互參照學習 :


此書內容主要分成兩大部分, 第一部分介紹 Scikit-Learn 套件 (淺水區), 第二部分則是 TensorFlow 與 Keras (深水區). 但作者提醒不要匆忙地跳入深水區, 因為大部分的機器學習問題都可以用比較簡單的淺水區技術例如隨機森林等解決, 比較複雜的問題例如影像辨識, 語音辨識, 與自然語言處理才需要使用深度學習技術. 
 
摘要整理前兩章筆記如下 : 

CH1 : 
  1. 深度神經網路是人類大腦的極度簡化模型, 深度學習一詞源自 Geoffrey Hinton 於 2006 年發表的一篇論文 "A Fast Learning Algorithm for Deep Belief Nets", 此論文介紹如何訓練深度神經網路使其能以 >%98 的準確度辨識手寫數字, 此論文重新喚起科學社群對神經網路的興趣. 
  2. 機器學習是屬於計算機科學的一門科學及藝術, 可讓計算機用資料來學習. Arther Samuel 於 1959 年為機器學習所下的定義是 : "機器學習是一種學習領域, 可賦予電腦學習的能力, 且不需要明確地將規則編寫為程式". 
  3. 雖然深度學習無疑是機器學習中最令人興奮的領域, 但也不要匆忙跳入深水區, 因為大部分的問題都可以用比較簡單的技術例如隨機森林等來解決. 深度學習非常適合用來處理複雜的問題, 例如影像辨識, 語音辨識, 或自然語言處理. 
  4. 計算機傳統上是以編寫含有複雜規則的軟體 (rule-based) 來處理問題, 但有些問題 (例如語音與影像辨識) 並沒有很確切的規則或演算法來編寫程式, 而是需要從資料中動態學習其規則.
  5. 機器學習的分類 :
    (1). 監督學習 vs 非監督學習 vs 半監督 vs 強化 (是否需要人類監督)
    (2). 線上學習 vs 批次學習 (是否可在運行中不斷學習)
    (3). 基於實例學習 vs 基於模型學習 (只拿新資料與已知資料比較, 或需建構預測模型)
  6. 機器學習適合處理的問題 :
    (1). 傳統解決方案需要許多微調與使用大量規則去處理的問題.
    (2). 使用傳統方法無法得到良好解答之複雜問題.
    (3). 波動的環境, 因為機器學習系統可以適應新資料.
    (4). 需要深入了解的複雜問題或有大量資料的問題.
  7. 機器學習的應用範例 :
    (1). 生產線產品圖片自動分類 (可用 CNN)
    (2). 辨識 CT 掃描圖片中的腫瘤部位  (可用 CNN)
    (3). 新聞自動分類 (可用 RNN, CNN, 或 Transformer 等 NLP 技術)
    (4). 自動標示論壇中的冒犯言論 (可用 RNN, CNN, 或 Transformer 等 NLP 技術)
    (5). 自動摘要長篇文章 (可用 RNN, CNN, 或 Transformer 等 NLP 技術)
    (6). 建立聊天機器人或數位助理 (使用 NLP 與詢答系統)
    (7). 預測公司營收 (使用回歸模型)
    (8). 建立語音回應 App (可用 RNN, CNN, 或 Transformer 等 NLP 技術)
    (9). 偵測信用卡詐騙 
    (10). 依據顧客消費紀錄協助制訂行銷策略 (分群技術 & 推薦系統)
    (11). 建立遊戲中的智慧機器人 (例如 AlphaGo 使用強化學習)
  8. 典型的監督式學習任務 (task) 是分類, 例如分辨垃圾信件. 另外一個任務是依據特徵來預測目標 (target) 的數值, 稱為廻歸. 不過有些廻歸演算法也可以用來分類, 反之亦然. 例如 Logistic 回歸演算法經常被拿來做分類用. 
  9. 在機器學習中, 屬性 (attribute) 指的是資料類型 (例如 gender), 而特徵 (feature) 則視情況而有不同意思, 但通常是指屬性加上其值 (例如 gender='female'), 屬性與特徵這兩個詞常常被混用.  
  10. 最重要的幾個監督式學習演算法 : 
    (1). K-近鄰
    (2). 線性回歸
    (3). Logistic 回歸
    (4). 支援向量機 (SVM)
    (5). 決策樹與隨機森林
    (6). 神經網路 (例如深度信念網路 deep belief network 為半監督式學習)
  11. 在無監督式學習中, 訓練資料是沒有標籤的. 最重要的無監督學習演算法 :
    (1). 分群 : K-Means, DBSCAN, 階層式分群 (HCA)
    (2). 異常與新穎檢測 : one-class SVM, 孤立森林 (isolation forest)
    (3). 視覺化與降維 : 主成分分析 (PCA), Kernel PCA, 局部線性嵌入 (LLE), t-隨機近鄰嵌入 (t-SNE)
    (4). 關聯規則學習 : 先驗, Eclat
    所謂新穎檢測 (novelty detection) 是檢測與訓練組的所有實例不一樣的新實例. 
  12. 降維 (dimensionality reduction) 目的是在不損失過多資訊的前題下簡化資料, 其中一種作法是將許多相關的特徵合併為一個, 例如汽車里程數與其車齡有緊密關係, 故降維演算法會將其合併為一個特徵, 以示汽車之損耗, 稱為特徵擷取 (feature extraction).
  13. 批次學習系統與線上學習的差別是, 系統能不能用持續傳入的資料來逐漸學習. 批次系統無法漸進學習, 必須先用所有可用資料來訓練, 通常需要大量時間與計算資源, 因此通常是離線的. 批次學習先訓練再於運營環境啟動它, 當它開始運行時就不再學習了, 只利用它學過的東西完成任務. 如果要讓批次系統認識新資料, 必須用新舊完整資料重新訓練, 然後停止系統換上新的模型. 有些任務 (例如預測股價) 因為新資料不斷出現, 因此頻繁地重新訓練系統所費不眥, 甚至因為資料量太大而無法使用批次學習系統.
  14. 線上學習系統可以在收到資料時立刻來學習, 資料彙分別依序傳入或以小批次 (mini batch) 的方式傳入, 每一個訓練步驟既快速又便宜. 線上學習適合需要持續接收資料串流的任務 (例如預測股價), 也適合在有限的計算資源下使用, 在學習過新資料實例後便不再需要它們, 因此可節省大量儲存空間. 
  15. 線上學習有一個重要參數叫做學習速度 (learning rate), 表示系統適應不斷變動的資料速度有多快. 此學習率若設得很高, 系統會很快適應新資料, 但往往也會快速忘掉舊資料. 反之若設得低, 系統的慣性大, 學習速度慢, 但也對新資料的雜訊 (不具代表性的資料點) 較不敏感. 線上學習有一個很大的挑戰是, 進入系統的不良資料會讓系統的效能逐漸下滑, 為了降低這種風險, 必須監視密切系統, 一旦發現系統性能下降立即關閉線上學習; 或者需要監視輸入資料 (例如使用異常檢測演算法) 並處理異常資料.  
  16. 機器學習系統還可以用其類推 (inference) 所學之方式來分類. 類推的方式主要有兩種 : 一是基於實例 (instance=based) 的學習, 一是基於模型 (model-based) 的學習. 基於實例的學習就是系統用死記硬背的方式學習樣本, 將新案例與學過的舊案例比較, 根據相似度 (similarity) 來類推新案例. 而基於模型的學習則是用一組樣本來建立這些樣本的模型, 然後再使用這些模型來類推新案例.  

沒有留言 :