複合函數
從正規方程式、梯度遞減、羅吉斯迴歸再到深度學習,我們可以描繪出一條機器學習的小徑,讓初學者從完全門外漢到略懂函數近似的技巧與挑戰。在前三者我們所近似的函數 f 都是屬於「非」複合函數,深度學習領域中要透過演算法近似的函數,則是屬於「複合」函數(function composition),而非複合函數與複合函數的差異,也造就了尋找參數最佳化的時候所仰賴技巧的不同。
複合函數:https://en.wikipedia.org/wiki/Function_composition
深度前饋網路
深度學習中最基礎的模型稱為深度前饋網路(deep feedforward neural networks),又稱為多層感知器(multiple layer perceptrons),目標是近似某個複合函數 f,可能由 n 個函數鏈結組成,例如當 n 為 3 的時候,可以表示為:
上標 (1) 就稱為第一層,更常見的名稱是輸入層(input layer),上標 (2) 就稱為第二層,更常見的名稱是隱藏層(hidden layer),至於上標 (3) 就稱為第三層,更常見的名稱是輸出層(output layer);當 n 為 4 的時候,可以表示為:
這時上標 (1) 稱為輸入層(input layer),上標 (2) 與上標 (3) 就稱為隱藏層(hidden layer),至於上標 (4) 稱為輸出層(output layer),隨著 n 變大,以此類推除了第一層與第 n 層稱為輸入層、輸出層,第二層至第 n-1 層皆稱為隱藏層。
「隱藏」的命名由來
由 n 個函數鏈結組成的函數,其中 n 大於等於 3,意即至少要有一層隱藏層才稱為深度學習,至於為什麼排除了輸入層與輸出層以外的層數被命名為「隱藏」?其命名緣由是因為訓練資料的回饋作用僅止於輸出層,無法影響更之前的層,意即訓練資料在模型訓練階段僅可以回饋到輸出層的參數最適化,中間層數都是由學習演算法決定其近似 f 函數的參數,白話文的說明即是,由於訓練資料中無法觀察到中間層數的輸出,故將其命名為隱藏層。
泛用特徵工程
將函數 f 改為以複合函數的形式去近似有明顯各一個缺點與優點,缺點即是要近似的函數數量不僅增多了(至少有 3 個函數需要近似來合成函數 f,因為 n 必須大於等於 3),也因為這些函數有合成、鏈結關係,需要以連鎖法則處理偏微分的計算,造成計算量比非合成函數來得大;優點則是可以將隱藏層作為非線性轉換來擴充線性、非線性模型的泛用性,就像是為訓練資料提供更多的特徵一般,如此一來深度學習在選擇非線性轉換函數的環節上又比傳統機器學習模型更有彈性且簡單,傳統機器模型必須手動建立非線性轉換函數,例如針對不論是語音辨識或者電腦視覺都以獨立且專門的非線性轉換函數來應用;反觀深度學習的作法則是採用將非線性轉換函數納入了訓練的範疇,在學習演算法中找尋相對良好的非線性轉換函數,以式子表達即為:
意即將原本的特徵矩陣優化成了經過非線性轉換而得的輸出,藉此獲得一個高度通用、適用廣泛情境的特徵矩陣。已經對機器學習理論有相當認識的讀者,可以將隱藏層的作用視為一種在訓練過程中依據深度學習架構設計與活化函數選用而產出的「泛用特徵工程」,它可能是在訓練過程中為訓練資料生成了高次項、交互項、標準化或者是連續值離散化等。
深度學習的函數
定義一個最單純的深度前饋網路,首先需要決定層數與各層的單元數,其中單元數與層數的架構,就會決定到總參數的數量,然後需要選擇用於隱藏層的活化函數(activation functions)最後則是選擇如何運行學習演算法,雖然本質上也是利用梯度遞減的學習演算法,但由於深度前饋網路是一種合成函數的近似,其學習演算法稱為倒傳遞(backpropagation)。
假如我們要利用深度前饋網路來解決 MNIST 手寫數字辨識的問題,該怎麼從零開始思考架構、活化函數與倒傳遞?我們會先在下一次電子報中導讀摘要 Gilbert Strang: The Functions of Deep Learning 再進入實作環節。
第四十五週約維安計畫:深度學習(一)來到尾聲,希望您也和我一樣期待下一篇文章。對於這篇文章有什麼想法呢?喜歡😻、分享🙌、訂閱📨或者留言🙋♂️