[筆記] 整理人工智慧 AI、機器學習 ML、深度學習 DL

        「人工智慧」是一個很熱門的話題,不過就技術而言它已經存在已久。最近,我非常專注地閱讀了百度的 Paddle 飛槳網站 https://www.paddlepaddle.org.cn/ 有關人工智慧技術的內容,我覺得它非常清楚地解釋了人工智慧、機器學習和深度學習之間的關係。因此,我特別把這些內容整理起來。從下圖一來解釋這三者的關係,人工智慧 AI 可以被視為應用於各個領域的一種技術,其需要依賴於機器學習 (ML:Machine Learning) 的方法。機器學習技術可以分為兩種主要形式,即早期的傳統學習技術和現代的深度學習技術 (DL:Deep Learning)。

        在早期的機器學習中,由於硬體運算效能有限且訊息數據難以大量取得,技術的發展側重於分析訊息的特徵。以我過去學習過的語音和影像技術為例,我們需要分析語音的發音方式,例如聲母、韻母、子音...等,並提取出聲音的特徵,還有從頻譜的角度來分析語音特性。之後,我們建立一個模型,例如隱藏式馬可夫鏈 (HMM),以便進行語音的訓練和識別。過去,同樣的過程也被運用在影像處理方面,先解析影像訊號,分析影像特性並取得其特徵,再建立影像的模型。從上述描述可以看出,傳統的技術需要對這類型多媒體訊號的特性進行深入研究,不論是從時域(time domain)或頻譜(frequency domain)的角度來解析訊號的特徵。接著,根據這些特徵建立一套模型,並將有限的數據輸入到模型中,最終進行模型的訓練以獲得適合的結果。這個過程需要對訊息進行大量的研究和分析,並且受限於資源和數據的可用性。
圖一:AI,ML,DL 的關係圖

        近年來,隨著物聯網和網路技術的進展,深度學習成為人工智慧的主要技術。儘管深度學習的演算核心是類神經網路,這並不是一個特別新穎的技術。然而,由於現在可以獲得各種海量數據,再加上運算晶片的功效大幅提升,深度學習的技術才逐漸被廣泛採用。整理上述的概念後,下圖二說明兩種機器學習的方法,上半部是傳統的機器學習,下半部是深度學習。上半圖,經過特徵工程獲取輸入訊號的特徵特性,再輸入到一個訓練後的模型,獲得輸出的結果。然而,現在演進到深度學習的技術,透過神經網路的訓練後,這樣的模型也可以達到傳統機器學習的結果。

圖二:機器學習的演進圖 (取自百度 Paddle 網站)

        上圖中的類神經網路是深度學習的核心技術,技術的流程可以被細分成幾個部分:數據處理模型設計訓練配置訓練過程和模型保存...等步驟,可以看出關鍵點是模型設計訓練配置與過程。看似複雜難懂的技術,但從 Paddle 網站上的一段話便能將概念化繁為簡:『无论是计算机视觉任务还是自然语言处理任务,使用的深度学习模型结构都是类似的,只是在每个环节指定的实现算法不同。因此,多数情况下,算法实现只是相对有限的一些选择,如常见的 Loss 函数不超过十种、常用的网络配置也就十几种、常用优化算法不超过五种等等,这些特性使得基于框架建模更像一个编写“模型配置”的过程。』,因此我認為應該善用一些雲端平台所提供的 DL 服務,讓我們更快進入這領域。Paddle 網站提出一套創新教學法,讓初學者容易進入深度學習領域並快速上手,下圖三所顯示用來說明深度學習與 Paddle 雲平台之間的對應關係。圖的左半邊是前面提到的技術步驟,右半邊是 Paddle 平台提供對應左邊技術的函數套件,因為前段說道演算法和訓練方法不過十多種,這些不需要自己再重新開發設計(自己重寫還會遇到 bugs, 除錯, 驗證....等過程,曠日廢時),只需借用平台寫好的套件即可。

圖三:深度學習與 Paddle 平台的對應關係 (取自 Paddle 網站)

        Paddle 平台就好比提供各項料理食材的廚具,我們身為廚師,取得各類豐富的食材後,可以利用這個廚具根據自己設計的菜單進行配置和烹飪,最終呈現出獨特的菜餚。就像廚具能夠提供各種功能和工具來處理不同食材,Paddle 平台提供了豐富的工具和函式庫,讓用戶能夠靈活地設計和執行各種深度學習任務。

從飛槳網站的課程學習到深度學習可分類為:監督式學習(Supervised)非監督學習(Unsupervised)強化學習(Reinforcement)建構式學習(Structured)....等等。從給定的標籤資料中學習與訓練,稱為監督式學習,反之,從沒有標籤的資料或部分標籤資料開始訓練,稱為非監督學習或半監督(Semi-Supervised),有一段話是這樣描述的 "通过一些巧妙的方法,我们可以将一些无监督的数据样本转变成监督学习,来学习数据中的知识"。強化學習又是另一種訓練的方式,我個人覺得像是自我學習自我訓練或是試誤學習,不斷從一次又一次的評價中學習到最終的路徑。另一種複雜的學習是 Structured Learning,比如自然語言的 NLP,需要考慮前後文和語意...等文法結構,這種難度比起監督式學習更高。

訓練

接下來從訓練的理論基礎開始談起,對於機器學習而言,資料數值訓練的步驟幾乎等同於解決線性回歸 (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圖像分類推薦系統手寫辨識...等,前面的問題可以簡化成解決線性回歸的問題(求數值),後面分類或辨識可以算是邏輯回歸的問題(求機率),不過,我們面對這些問題,大都會以神經網路的模型來描述,再用神經網路模型來加以訓練與優化。因此,網路的神經元就是一個小的邏輯回歸系統,這些小系統再組成一個大個神經網路,這就是為何一開始學線性回歸和邏輯回歸的原因。

參考資料

留言

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Visual Studio 遠端偵錯的設定步驟

[筆記] Android APP 藍芽範例說明 -- BluetoothChat

[模組] LD3320 離線語音辨識晶片與 ESP32 無線傳輸

[應用] 藍芽 BLE client/server 架構:BLE remote controller