[筆記] 整理人工智慧 AI、機器學習 ML、深度學習 DL
「人工智慧」是一個很熱門的話題,不過就技術而言它已經存在已久。最近,我非常專注地閱讀了百度的 Paddle 飛槳網站 https://www.paddlepaddle.org.cn/ 有關人工智慧技術的內容,我覺得它非常清楚地解釋了人工智慧、機器學習和深度學習之間的關係。因此,我特別把這些內容整理起來。從下圖一來解釋這三者的關係,人工智慧 AI 可以被視為應用於各個領域的一種技術,其需要依賴於機器學習 (ML:Machine Learning) 的方法。機器學習技術可以分為兩種主要形式,即早期的傳統學習技術和現代的深度學習技術 (DL:Deep Learning)。
在早期的機器學習中,由於硬體運算效能有限且訊息數據難以大量取得,技術的發展側重於分析訊息的特徵。以我過去學習過的語音和影像技術為例,我們需要分析語音的發音方式,例如聲母、韻母、子音...等,並提取出聲音的特徵,還有從頻譜的角度來分析語音特性。之後,我們建立一個模型,例如隱藏式馬可夫鏈 (HMM),以便進行語音的訓練和識別。過去,同樣的過程也被運用在影像處理方面,先解析影像訊號,分析影像特性並取得其特徵,再建立影像的模型。從上述描述可以看出,傳統的技術需要對這類型多媒體訊號的特性進行深入研究,不論是從時域(time domain)或頻譜(frequency domain)的角度來解析訊號的特徵。接著,根據這些特徵建立一套模型,並將有限的數據輸入到模型中,最終進行模型的訓練以獲得適合的結果。這個過程需要對訊息進行大量的研究和分析,並且受限於資源和數據的可用性。
近年來,隨著物聯網和網路技術的進展,深度學習成為人工智慧的主要技術。儘管深度學習的演算核心是類神經網路,這並不是一個特別新穎的技術。然而,由於現在可以獲得各種海量數據,再加上運算晶片的功效大幅提升,深度學習的技術才逐漸被廣泛採用。整理上述的概念後,下圖二說明兩種機器學習的方法,上半部是傳統的機器學習,下半部是深度學習。上半圖,經過特徵工程獲取輸入訊號的特徵特性,再輸入到一個訓練後的模型,獲得輸出的結果。然而,現在演進到深度學習的技術,透過神經網路的訓練後,這樣的模型也可以達到傳統機器學習的結果。
圖二:機器學習的演進圖 (取自百度 Paddle 網站) |
上圖中的類神經網路是深度學習的核心技術,技術的流程可以被細分成幾個部分:數據處理、模型設計、訓練配置、訓練過程和模型保存...等步驟,可以看出關鍵點是模型設計和訓練配置與過程。看似複雜難懂的技術,但從 Paddle 網站上的一段話便能將概念化繁為簡:『无论是计算机视觉任务还是自然语言处理任务,使用的深度学习模型结构都是类似的,只是在每个环节指定的实现算法不同。因此,多数情况下,算法实现只是相对有限的一些选择,如常见的 Loss 函数不超过十种、常用的网络配置也就十几种、常用优化算法不超过五种等等,这些特性使得基于框架建模更像一个编写“模型配置”的过程。』,因此我認為應該善用一些雲端平台所提供的 DL 服務,讓我們更快進入這領域。Paddle 網站提出一套創新教學法,讓初學者容易進入深度學習領域並快速上手,下圖三所顯示用來說明深度學習與 Paddle 雲平台之間的對應關係。圖的左半邊是前面提到的技術步驟,右半邊是 Paddle 平台提供對應左邊技術的函數套件,因為前段說道演算法和訓練方法不過十多種,這些不需要自己再重新開發設計(自己重寫還會遇到 bugs, 除錯, 驗證....等過程,曠日廢時),只需借用平台寫好的套件即可。
圖三:深度學習與 Paddle 平台的對應關係 (取自 Paddle 網站) |
Paddle 平台就好比提供各項料理食材的廚具,我們身為廚師,取得各類豐富的食材後,可以利用這個廚具根據自己設計的菜單進行配置和烹飪,最終呈現出獨特的菜餚。就像廚具能夠提供各種功能和工具來處理不同食材,Paddle 平台提供了豐富的工具和函式庫,讓用戶能夠靈活地設計和執行各種深度學習任務。
從飛槳網站的課程學習到深度學習可分類為:監督式學習(Supervised)、非監督學習(Unsupervised)、強化學習(Reinforcement)、建構式學習(Structured)....等等。從給定的標籤資料中學習與訓練,稱為監督式學習,反之,從沒有標籤的資料或部分標籤資料開始訓練,稱為非監督學習或半監督(Semi-Supervised),有一段話是這樣描述的 "通过一些巧妙的方法,我们可以将一些无监督的数据样本转变成监督学习,来学习数据中的知识"。強化學習又是另一種訓練的方式,我個人覺得像是自我學習、自我訓練或是試誤學習,不斷從一次又一次的評價中學習到最終的路徑。另一種複雜的學習是 Structured Learning,比如自然語言的 NLP,需要考慮前後文和語意...等文法結構,這種難度比起監督式學習更高。
監督學習 好比一對一家教,有解答的練習
半監督學習 好比給有答案試卷和沒有答案試卷的練習
遷移學習 好比舉一反三,觸類旁通
生成式AI 好比無中生有,創意料理
訓練
接下來從訓練的理論基礎開始談起,對於機器學習而言,資料數值訓練的步驟幾乎等同於解決線性回歸 (Linear Regression) 的問題,並找出 loss function (square error) 最小值的過程。訓練模型設計的不好,將造成 bias 過大,而不足夠的資料量,會造成 variance 過大。另一個資料分類的問題就是解決邏輯回歸 (Logistic Regression) 的問題,或是解決資料分布的機率問題。前者用 Goodness of Function 來定義資料分類的函數,然後解這個函數的最大值。後者用機率分布函數來定義資料分類,然後解分布函數,但是解的過程必須做一些假設,像 Covariance 相同 (資料分布之間具有相關性)。
上一段講到資料分類,當資料分布的情況很好,也就是 bias 和 variance 的機率分布離得很開,這樣訓練過程可以找到「一個」模型便能順利做到分類。但是,當一群資料分布是 bias 很靠近而 variance 很大,不幸地這就不容易找到一個好模型來分類,此時可以改變訓練方式。資料先被重新分堆,再用「多個」小模型做分類訓練,再透過投票表決來組合成一個完整模組成為分類器(Classifier),這稱為 Ensemble 方法,其技術又被細分成 Bagging 和 Boosting。簡單說,每個小模組視為小型分類器,會獲得一個分數,最後根據每個小分類器的分數投票決定出最終的分類。下圖四整理各類資料所訓練的方式,基本上,模型都建立在線性系統上,二元分類法會用一個 Sigmoid 函數做為激活函數,多元分類法會用 Softmax 做為激活函數套用到線性回歸上。有了模型後,再定義 Loss 函數,線性回歸用的是 Mean-Square-Error 函數來計算損失,最後就是最佳化的過程。
以上的資料訓練或分類都還沒牽扯到深度學習(Deep Learning)的部分,主要在分析資料的特徵以及找出適當的模型。然而深度學習則是採用「類神經網路」做為模型基礎,在這個基礎上再發展出多層結構的神經網路,當 layer 越多時,深度就越深,於是把以前類神經網路的名字換為 "深度學習" 比較好聽。類神經網路的每個神經元簡單描述就是輸入乘上 weight 加上 bias,在經過一個 function 產生輸出,而我們輸入大量的資料進到每個神經元,找出最佳的 weight 和 bias (微積分的最佳解),不斷地循環訓練模型,最終得到結果。
在深度學習中,CNN 捲積神經網路適用於機器的影像處理,根據李宏毅教授教學影片,CNN 是基於三個假設,所以特別適合用在影像上。第一,小區塊的特徵就可能辨識出全圖片是甚麼。第二,同樣的特徵可能出現在其他圖片的不同位置點,這也不影響辨識。第三,縮小圖片也不太影響原圖片的辨識。舉例來說,尖尖的嘴型特徵,可能是鳥嘴,從而判斷是隻鳥。同樣的這特徵出現在不同位置,從而判斷可能是隻鳥。縮小圖片後,這特徵仍存在,還是可能辨識出來。
最後總結概念,飛槳網站上提出一些用機器學習來處理的案例,比如預測波士頓房價、預測PM2.5、圖像分類、推薦系統、手寫辨識...等,前面的問題可以簡化成解決線性回歸的問題(求數值),後面分類或辨識可以算是邏輯回歸的問題(求機率),不過,我們面對這些問題,大都會以神經網路的模型來描述,再用神經網路模型來加以訓練與優化。因此,網路的神經元就是一個小的邏輯回歸系統,這些小系統再組成一個大個神經網路,這就是為何一開始學線性回歸和邏輯回歸的原因。
留言