[筆記] 百度飛槳 PaddlePaddle 平台的介紹

        近年來,人工智慧 AI 的浪潮持續發酵,然而,實際上AI的定義和運作方式並不容易說得清楚。AI是一個廣泛的領域,涵蓋了各種技術和應用,其核心目標是讓機器模仿人類的智能和學習能力。就技術的角度而言,確實需要具備並累積相當多的數學背景知識,例如:微積分機率線性代數矩陣行列式...等,這些知識是理解機器學習 ML 的理論基礎不可或缺的要素。在機器學習中,數學扮演了關鍵的角色,它們構成了算法和模型背後的數學原理,幫助我們解釋和理解機器學習的運作方式。熟悉這些數學概念和技巧,有助於更深入地探索機器學習領域,並設計出更有效和強大的學習模型。前一篇[1] 大略整理了人工智慧 AI機器學習 ML、深度學習 DL 三者的關係,然而,深度學習的技術發展才是真正推動人工智慧在應用面取得大幅進展的主要因素。深度學習以類神經網路為基礎搭配硬體的高效運算能力,進一步改進了許多應用領域,如圖像識別、語音辨識、自然語言處理...等。這些技術的突破性進展使得人工智慧應用的範疇不斷擴展,並為許多行業帶來了革命性的變化和創新

        雖然機器學習的理論基礎複雜,不過整體開發的流程可以歸納成下圖的管線,就像是面對問題分析問題解決問題放下問題一樣,有一套標準步驟。首先定義問題是不是需要靠深度學習的方法才能解決?再來是收集資料,足夠的資料量或不夠的資料會決定接下來採用哪種模型。有了模型後,才會訂定最佳化的標準,進行一輪又一輪的訓練。最後,用「未訓練」的數據來評估訓練後的模型,看看效果好不好。如果達到預期,則保留模型的參數。有關機器學習的課程,可以到 百度人工智能學習社區 https://aistudio.baidu.com,先有一些基礎知識後再來開發 AI 會事半功倍。
圖一:機器學習的萬能公式 (取自飛槳平台)

        從設計模型的方面來看,在飛槳 Paddle framework 上,提供三種開發的方式給工程人員建立模型與訓練,如下圖二所示。機器學習中的各個模型都有著複雜的數學計算和公式,如果要一個一個用程式碼寫出模型的功能,那大概要花費我們很長的時間。幸好,目前有些 framework (KerasPyTorchTensorFlow...)提供機器學習的模型函數,而百度的飛槳平台也提供相關的函數庫以及 GPU 的算力。它將模型架構封裝後,再讓開發人員以繼承的方式調用函數,比如下圖中最右邊的方式最為簡單,LeNet 模型已經被封裝成一個函數了,我們只要呼叫即可,這稱為高層級的API。另外,在下圖中最左邊的方式就讓設計多了一點彈性,我們將模型裡的流程放進 Sequential 函數裡,這樣的模型便可以讓我們調整參數與內部的流程,稱為序列組成神經網路。最後,下圖中間的方式就是繼承一個模型的框架,模型剩餘的內容則由我們自行開發設計,這需要非常熟悉模型框架後才能輕易上手。
圖二:Paddle平台提供三種建模的呼叫方式

        上一段說明建模的方式,接下來根據圖一的管線流程,Paddle 平台提供開發者一個框架與函數,如下列所示。當我們建模後,若 network 代表網路模型的變數,將這個變數輸入到 Model( ) 函數取得 model 物件實體。然後,用這個物件進行訓練與最佳化,最後評估。
模型選擇
    paddle.vision.model.*   <-- 飛槳平台提供的 API
    model = paddle.Model( network )  # network 表示網路模型
    ## 網路模型的內部架構可視化
    model.summary() 或 paddle.summary( model )

模型訓練
    model.prepare( )  # 輸入:最佳化函數, 損失函數, 評價函數。訓練過程需要的各類函數
    model.fit( )  # 輸入:資料集, 訓練epoch, 批次量。訓練模型的API

模型評估
    model.evaluate( )  # 資料的測試集評估模型
    model.predict( )  # 預測結果

        根據上述的函數集,這裡用兩個程式碼來說明更容易了解,分別是一個基本神經網路和另一個 LeNet 網路的建模過程,使用建模的函數框架把訓練的流程架設起來。
建立基本神經網路的模型,最佳化,訓練

建立 LeNet 網路的模型,最佳化,訓練

        再利用平台提供的可視化套件,比較兩者訓練 MNIST 手寫資料的結果。深藍色線是基本神經網路所訓練的結果,淺綠色線是 LeNet 網路所訓練的結果。
圖三:比較兩個模型的訓練結果


有了開發的基礎後,底下整理一些機器學習的技術中會使用到的名詞,用比較淺顯的方式解釋這些網路模型,詳細的理論基礎可以參考台大李宏毅教授的影片和 [4]。
    DNN 深度神經網路:一個全連接的神經網路模型,分成輸入層隱藏層輸出層,深度學習就是在講隱藏層的深度。通常來說,深度越深,訓練的結果越好。
    CNN 捲積神經網路:在機器學習中,由於全連接的神經網路模型運算量太大也過於複雜,利用捲積的方式提取輸入資料的特徵,這有助於擴展深度學習的層數。
    RNN 循環神經網路:有別於 CNN 的地方在於輸入的前後資料有關連,架構適用於語句方面的分類,網路導入 LSTM 機制。語句要被轉成詞向量(word2vec)後再進行訓練,這裡有一個函數庫叫做 gensim 提供詞向量的轉換 [3]。
    GAN 生成對抗網路:兩個神經網路組成,一個神經網路用來生成,一個用來鑑定。簡單來說,仿冒工廠學習了很多真品的資料後,製造產出仿冒品,而另一個鑑定中心負責判斷商品的真偽。
    Transfer Learning 遷移學習:當欲訓練的資料而其他資料量充足不足時,會利用這種技巧來提升訓練的精確度。簡單說,就是讓機器能舉一反三。


參考文獻

[4] "人工智慧與深度學習 理論與Python實踐", 碁峯出版社

留言

此網誌的熱門文章

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

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

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

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

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

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

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