2022年2月18日 星期五

深度學習之應用課程筆記 (一)

今天開始中午午餐時間不看小說也不看韓劇, 而是上 Youtube 看台大資工系陳蘊儂老師的課程錄影. 這學期開了一門 "深度學習之應用", 本周才剛開始上課, 課程說明影片如下 :




我不是修課學生, 所以只要記下課程日程表即可 : 




下一課是機器學習簡介 (12:05 分) :




此課主要在說明機器學習 programming 與傳統 programming 的差異在哪裡, 傳統 programming 用來解決演算法 (規則) 很明確的問題, 程式只要此演算法明確地寫在程式碼中即可解決問題, 但若問題缺乏明確的演算法或其規則變化很多無法窮舉時 (時不時會出現許多例外), 就是機器學習派上用場的時候了. 

老師以判別一個評論是正面或負面為例來說明, 例如 "I love this product" 是正面; "It 's a little expensive" 是負面等等, 但這些並沒有一個通用與固定的規則可用來給程式做判斷以得到正評或負評的輸出. 機器學習則是以類似人海戰術的方式, 透過餵給它大量的資料讓電腦自動學習內隱的函數. 

機器學習很大部份的精力是花在資料預處理與訓練上. 處理好的資料會被拆成訓練集 (training set) 與測試集 (testing set) 兩部分, 分別用在機器學習的訓練 (training) 與測試 (testing) 兩個階段, 所謂訓練是指將訓練集資料餵給演算法, 以便從模型中挑選出最適合資料的函數 (一個神經網路模型可捏成各種函數), 而測試則是用測試集資料餵給挑選出來的最佳函數, 預測看看輸出是甚麼, 如下圖所示 :




此圖是以判斷評論是正評還是負評為例.




此單元為深度學習簡介, 摘要如下 :
  1. 深度學習網路中間有許多隱藏層串接, 因此它就像生產線一樣, 是由許多小函數堆疊起來的 (stacked functions), 可以模擬很複雜的函數. 不過, 在訓練深度網路時, 我們只要給予它輸入端的樣本以及輸出端的目標即可, 不需要去管它內部那些串接的小函數者怎樣, 稱為 end-to-end training (端對端訓練), 中間隱藏層所代表的小函數會自動學習到資料的特徵 (features 或 representation), 因此深度學習又稱為特徵學習 (representation learning). 
  2. 在語音辨識方面, 傳統的淺層辨識需要先對語音做訊號處理 (DSP) 取得代表該語音樣本特徵的梅爾倒頻譜係數 (Mel-Frequency Cepstral Coefficients, MFCC), 然後透過聲學統計模型 GMM (Gaussian Mixture Model, 一種隱藏式馬可夫機器學習模型) 來辨識出是甚麼語音, 在產出 MFCC 之前都屬於人為決定的過程, 只有 GMM 才是機器學習. 但現代用深度學習來做語音辨識就非常簡單, 不需要 MFCC 的人為 DSP 特徵擷取工程, 而是直接將語音餵給深度網路, 讓它自己擷取特徵, 但代價是需要很多語音資料去訓練. 
  3. 傳統機器學習與深度學習最大的差別是, 前者需要手工 (hand-crafted) 的特徵工程, 而深度學習則不需要, 而是由網路自動學習資料的特徵. 
  4. 深度學習的類神經元結構模仿人類大腦神經元, 基本上是由一個 weighted-summation 函數與一個 activation 函數組成, 最早是在 1960 年代以 Perceptron (感知器) 形式出現, 但它後來被證明無法模擬全部的函數, 直到 1980 年代多層感知器 (Multi-Layer Perceptron, MLP) 被提出來才解決, 但限於當時電腦效能, MLP 因要耗費大量運算時間使其實用性不高. 到了 2009 年後 GPU 被用在類神經網路的計算上, 採用深度學習的語音辨識突破傳統淺層技術的成功率, 2012 年更在圖像識別上獲得突破性的成功. 所以雖然深度學習理論很早便出現了, 但一直到 2002 年後數位時代來臨, 不論硬體計算效能還是資料產出都出現了噴發式的躍進 (算力 + 大數據), 才使得深度學習取得實用上的傲人成果. 
  5. 最後老師提到, 為何類神經網路是朝深度 (多層) 發展, 而不是朝變胖 (單層多神經元) 發展? 這是因為變胖的網路其實還是單層的線性網路, 無法模擬複雜的非線性函數, 而深度網路則可以 (universality theorem).





此單元談深度學習之應用, 摘要如下 :
  • 深度學習目的就是求取輸入 X 映射到輸出 Y 的函數 f: X -> Y
    其中 X 為輸入端 (input domain), 可以是字 (word), 字序列 (word sequence), 聲音 (audio signal), 點擊紀錄 (click log) 等.
    Y 為輸出端 (output domain). 可以是單一標籤 (single label), 串列標記 (sequence tags), 樹狀結構 (tree structure), 或機率分布 (probability distribution) 等. 
  • 輸入端的類型左右了選擇哪一種網路架構 (network architecture) 來聚合輸入資訊 (aggregate information) : Network architecture should consider the input properties. 例如 CNN 適合用來處理圖像, 而 RNN 則適合用來處理有時間順序 (temporal) 的資料. 
  • 輸出端的類型最常見的是分類 (classification) 任務, 例如情感分析 (sentiment analysis) 中的正負評, 語音辨識中的音素辨識 (phoneme recognition), 或圖像辨識中的手寫數字辨識等. 還有一種輸出類型是序列預測 (sequence prediction), 例如詞類序列標記 (POS sequence), 輸入一個句子要標記出每個詞彙的詞類, 還有語音辨識與機器翻譯都屬此類. 所以深度學習的任務取決於輸出端的類型是甚麼 (Learning tasks are decided by the output domain). 
  • 總之, 在設計深度學習網路時需綜合考量輸入與輸出端的特性 : Network design should leverage input and output domain properties.
  • 使用深度學習之核心要件 :
    (1). 大數據 (big data)
    (2). 運算力 (GPU)
    (3). 能耐 (talent, 即豐富的經驗) 
嗯, 上完第一課讓我對深度學習概念更清晰了. 

沒有留言 :