2024-02-07|閱讀時間 ‧ 約 35 分鐘

誤上 AI 列車的山道猴,就是我

    ​前言

    社會在走,基本行情要有啦。

    raw-image


    大家都在瘋 AI,身為 Sym道猴的我,能不一起湊熱鬧嗎。

    很多人聊股票,討論真 AI、假 AI,

    我跟你講,

    這篇就是真 AI。

    這篇是本猴最近的讀書筆記,適合的讀者是跟我一樣,沒相關背景但希望對 AI 原理有點概念的人。適合茶餘飯後觀看,通常可以原地睡著。

    旨在分享概念,省略很多細節,用詞也不精確,建議不要看得太認真看。

    覺得有被啟蒙的猴猴,可以去找專業教材認真學一輪,然後記得回來教我~


    暖身

    開始之前,先快速瞄過幾個簡單的先備知識。

    • 機率總和為百分之百

    若明天降雨機率是百分之三十,則明天不降雨的機率是百分之七十。

    若硬幣正面朝上的機率是百分之五十,則反面朝上的機率是百分之五十。


    • 直線方程式

    下圖藍線的方程式為 x - 2y - 2 = 0,線上任一點(例如藍點)帶入方程式會等於 0,藍線左側的點(例如紅點)帶入方程式會小於 0,右側的點(例如綠點)帶入會大於 0。

    藍點帶入方程式會等於0,紅點小於0,綠點大於0


    • 訓練 AI 的步驟

    看看ChatGPT怎麼說:

    學習了...

    粗略歸納成三個大步驟:

    1. 準備資料 (1)
    2. 訓練模型 (2, 3, 4, 5)
    3. 實測 (6)

    也可參考NV官網的流程圖:

    資料 --> 訓練模型 --> 實戰 (New Data)


    歡迎進入

    人工智慧的世界。(嚴格來說是 Deep Learning,這篇多用 AI 是因較通俗好懂,其實 AI 的範圍很廣。)

    DL 是 ML 裡的一部分,ML 是 AI 裡的一部分。圖片取自 nvidia。


    下面用三個例子,依序說明基本的 AI 原理。


    一、你相信嗎?AI 看身高體重就知道你是否騎SYM

    這章節將描述如何訓練 AI 回答一個是非題

    輸入一個陌生騎士的身高、體重...等特徵,回答他騎的車是否為 SYM。


    線性模型 - 感知器

    首先,第一步是準備資料。我們可以透過街訪或線上問卷,蒐集可能會用到的資料。資料可能長這樣:

    這些資料就叫作 資料集 (Dataset)

    資料集就如同考古題,記錄騎士的特徵,以及機車是否為SYM。

    我們用一些數學方法,根據考古題歸納出一個統計模型,這個過程就是訓練模型。之後就能用這個模型,根據一個陌生騎士的特徵,直接預測他的機車品牌。

    假設先只考慮身高體重,那麼把資料畫出來看看,騎SYM的騎士用紅點表示,騎他牌的騎士用綠點表示。(只是範例,跟上圖的數據沒有完全一致)。

    紅點:騎SYM的騎士。綠點:騎他牌車的騎士。點的 x、y 分別是身高、體重。


    蒐集完資料集後,再來是訓練模型。所謂模型,只是一個數學函式、一組規則,可以很簡單,也能很複雜。

    通常是由人類定義模型架構,裡面有些未知數。再用一些數學方法,從資料集中自動推導出各個未知數。

    例如,觀察上圖的資料分布,因為紅點綠點看起來有自己的一群 (線性可分),我們可以定義模型架構為一個簡單的線性的多項式:

    ux + vy + b

    x是身高,y是體重,接著再從資料集推導出未知數 uvb

    目標:根據資料集,找出多項式中的 u、v、b


    怎樣的 u、v、b 是我們要的?

    其實上圖有畫出來了,概念可以參考暖身章節第二段,直線方程式。我們希望找到一組 u、v、b,能使:

    1. 紅點的身高體重帶入 ux + vy + b 大於 0
    2. 綠點的身高體重帶入 ux + vy + b 小於 0 (紅點和綠點誰大於0都可以)

    這樣的u、v、b,就是我們想要的。

    目標:找出 u v b,使得紅點帶入函式能大於 0,綠點帶入能小於 0。


    找到u、v、b後,把所有等於 0 的點畫出來,會組成一條線(藍線),稱作邊界 (boundary)。

    若找到的 u v b 是 3、-2、-4,那麼原本的多項式就能寫成 3x - 2y - 4,因此我們訓練出來的模型即為:

    • 令 z = 3*身高 - 2*體重 - 4
    • 若 z 大於 0,則判斷該騎士騎的是SYM,反之,則不是。

    再來,就能找其他陌生騎士來實測這個模型了。

    就這樣?

    就這樣。

    這就是 感知器 (Perceptron) 的概念,詳細的網路文章很多,照著步驟做就能找到u、v、b。

    符號不同而已,意思一樣。x1是本文的身高x,x2是本文的體重y。w1是u,w2就是v。

    (輸出 1 表示 yes,該騎士的車SYM。輸出 0 表示 no,該騎士的車不是SYM。)


    然而,事情通常不會這麼順利。

    拿這個模型去實測,正確率應該會很差。

    因為資料集裡可能有些人被突然的低價促銷影響,買了沒那麼喜歡的他牌,其實想買SYM,但因沒錢...

    什麼沒錢!?

    別激動...

    上述的資料集,騎士分布的太理想了,實際上不會那麼理想。

    最上面有個突兀的綠點,位於紅點密集的區域。

    有時,資料未必能用一條直線區分 (非線性可分),因此用上述感知器方法堆導出來的幾組 u v b 都沒辦法把考古題全答對。如下圖,左右兩組 u v b 代表的模型,都會誤判一個點。



    我們知道,資料集不可能採樣到所有騎士。

    虛線的點是沒被採樣到的騎士。


    人腦很容易看出來,除了少數離群值,多數騎士分成兩群,所以很輕鬆就能判斷,左邊是比較好的模型。

    但若用感知器方法,因左右都錯 1 題,平手,會以為兩邊一樣好。若最後不幸選了右邊的模型,顯而易見地,當拿去找陌生騎士實測,正確率會很差。

    導入機率 - 邏輯迴歸

    為了處理上述情況,我們可以導入機率 (Probability) 的概念。除了讓身高體重帶入函式 ux + vy + b,還要再轉成機率 P。這裡 P 指的是:騎士的車是SYM的機率

    如何轉成機率?

    數學家經過一些推導,發現可以使用 S型函數。其實沒聽過別人翻成中文,通常直接講 sigmoid function,數學式常用小寫sigma σ 來表示。

    Sigmoid function,橫軸是 z,縱軸是機率P。每個 z 都能對應到介於 0 到 1 的 P。


    sigmoid function 能讓每個 z 都能對應到一個機率 P。機率 P = σ(z),z 越小,P 越接近 0,z 越大,P 越接近 1。

    整理一下模型:

    • 令 z = ux + vy + b (u*身高 + v*體重 + b)
    • 令 P = σ(z)
    • 若機率 P 大於 0.5,則判斷該騎士的車是SYM,反之,則不是。(用50%當作分界)

    由於 sigmoid function 裡沒有未知數,所以跟剛剛一樣,再來要從資料集中推導出一組 u v b。但還是那個問題,怎樣的 u、v、b 是我們要的?

    我們希望找到一組 u、v、b,能使:

    1. 紅點算出來的機率盡量靠近 1 (機率 1 就是 100% 的意思)
    2. 綠點算出來的機率接近 0 (機率 0 就是 0% 的意思)

    再提一次,這裡的機率 P 指的是:騎士的車是SYM的機率。

    導入機率後的整套方法叫作 邏輯迴歸 (Logistic Regression),一樣有固定步驟可以推導出最好的 u、v、b。(推導的步驟有個名字:梯度下降法。)

    邏輯迴歸 示意圖。只比感知器那張圖,多了一個 sigmoid function。


    回到剛剛的問題,

    感知器方法,無法分辨左右兩個模型,哪一個較好

    為什麼導入機率的邏輯迴歸方法,可以解決這種情況?

    導入機率前,左右兩個模型錯誤題數是 1 比 1,平手。導入機率後,除了比錯誤的題數,因為目標是讓紅點的機率盡量靠近 1,綠點的機率盡量接近 0,我們比的是:

    紅點的機率和1的誤差 + 綠點的機率和0的誤差。 (這樣寫只是方便理解,機率的誤差不單純只是加減,細節請搜尋 "cross entropy")

    參考上圖,

    離邊界(藍線)越遠的綠點,算出來的 z 越小,

    離邊界(藍線)越遠的紅點,算出來的 z 越大。

    z 越小,機率 P 越接近 0,

    z 越大,機率 P 越接近 1。

    另外別忘,若點位於邊界(藍線)上,算出來的 z 會是 0,0 對應到的機率 P 是 0.5。

    因此,左邊的模型,多數點都離邊界有點距離,紅點機率都接近1,綠點機率都接近0,唯一分錯的綠點,機率和 0 的差距趨近於 1。

    示意圖。用左右兩個模型,為紅點和綠點算出來的機率。


    右邊的模型,雖然也只分錯一個紅點,但好幾個點都在邊界附近,機率都比左邊更接近0.5,比較 紅點的機率和1的誤差 + 綠點的機率和0的誤差,很明顯右邊的模型比較大。

    因此,導入機率的邏輯迴歸方法,在非線性可分的題目,依然可以用簡單的數學、程式,做出跟人腦接近的判斷,認為左邊的模型比右邊好。這樣找出來的模型,拿去找陌生騎士實測,正確率很有機會比感知器方法找出來的好。


    更難的情況

    感知器和邏輯迴歸的概念大致都講完了。進入下一章之前,再講個更難的情況,當作引言。

    如果資料集裡的分布長這樣:

    紅點和綠點的分布,有明顯有規律,但找不到一條直線能當作兩者的邊界


    如果,

    紅點和綠點的分佈,有明顯的規律,但找不到一條直線當作兩者的邊界,

    那可以考慮兩個方法:

    1. 除了身高和體重兩個特徵,再新增更多特徵,例如年齡。
    2. 把每個點的身高和體重做一點調整,再去找邊界。(feature transformation)

    為方便理解,上圖四個明顯的群,以四個點表示。

    法1,若資料夠多,除了身高和體重兩個特徵,可以再把年齡也考慮進去。

    二維空間(身高, 體重),轉為三維空間(身高, 體重, 年齡)

    那個立方體只是方便讀者理解四個點的空間關係,沒特別意義。

    原本只能在二維空間找一條直線當作邊界,加入年齡後,目標變成在三維空間找一個平面 ux + vy + pz + b = 0 當作邊界,簡單很多。

    加入年齡後,紅點和綠點的邊界變得很好找。


    邏輯迴歸並不限於二維空間,多維空間也可用,算法一模一樣。推導出 u v p b 後,模型就訓練完成了:

    • 令 z = ux + vy + pz + b
    • 令 P = σ(z)
    • 若機率 P 大於 0.5,則判斷該騎士的車是SYM,反之,則不是。


    法2,把特徵做一點轉換 (feature transformation)。下圖為例,原本4個點的 (x, y) 是 (身高, 體重),把它們轉換成:

    • 新的x:點到 (160, 50) 的距離
    • 新的y:點到 (180, 90) 的距離

    轉換後的紅點和綠點,邊界變得好找了。

    再用一樣的方法去找邊界就變得容易了。


    關於法1,怎麼知道要用幾個特徵?

    關於法2,怎麼知道特徵要做什麼轉換?

    其實都不用知道,

    下一節會講,如何讓模型自己去學,要用哪些特徵、要做什麼特徵轉換。


    小結

    本章節描述了如何訓練 AI,由騎士的身高、體重...等特徵,回答他騎的車是否為 SYM,這樣的是非題

    透過問題,介紹了感知器的概念,定義線性模型 ux + vy + b,由於資料看起來線性可分,可以推導出 u v b,得到一個學好的模型,能根據騎士的身高體重,猜測他騎的車是否為SYM。

    但通常資料不是線性可分,所以使用邏輯迴歸方法,導入機率 P = σ(ux + vy + b),讓我們能在資料非線性可分的情況下,找到一個雖然不是滿分,但表現最好的模型。

    在更難的情況中,分享了增加特徵特徵轉換兩種解法。


    二、比圈外人還懂!AI能分辨Jet SL+和Jet SL

    這章節將描述如何訓練 AI 回答一個更難的是非題,或者說,只有兩個選項的選擇題

    輸入一張 Jet SL 或 SL+圖片,回答圖片裡的是 SL 或 SL+。

    例如這張圖,答案是 SL+。

    是叫你看車,不是人,更不是溝... (圖片取自 mobile01)

    太簡單?

    那下面這四張勒?

    上排是 SL 和 SL+,下排是 SL+ 和 SL。

    好囉,輕鬆的橋段沒了,打起精神吧。

    承上一章節,這題依然是基於邏輯迴歸,再加上最後那兩個方法,增加特徵特徵轉換。但感覺還是有些問題...

    用什麼當特徵?

    要用多少維度的特徵?

    要怎麼轉換特徵?

    下面將介紹,如何讓 AI 自己學會這些資訊。


    以一張 256*256 的灰階圖片為例,圖上共 65536 個像素(Pixel),每個像素都是以一個 0~ 255 的數字來表示灰階值,0代表黑,越白數字越大,純白是255。

    像素 示意圖。圖上標示的位置,灰階值大概是 180 左右。

    (若是彩色的圖片,每個像素會有3個0~255的值,分別代表紅綠藍RGB的程度。)


    回到問題,用什麼當特徵?

    多年以前,有很多數學方法教我們從圖片的像素值計算出各種特徵值,但現在的AI技術不用那麼麻煩了,65536 個像素值全部餵進去模型,AI會自己學。聽起來很玄,但真的就是這樣。

    再來,我把3個邏輯迴歸的計算串起來,

    藍色的字都是未知數,跟上一章在求的 u v b 是一樣的東西,只是數量多很多。


    第一個邏輯迴歸,把x1 轉到 x'1

    第二個邏輯迴歸,把x2 轉到 x'2

    這就是在做特徵轉換。(如下圖)

    框框內的兩個 logistic regression 可以理解成在做 feature transform。


    特徵轉換,不一定要一對一,也可以一對多(增加特徵維度),或多對一(減少特徵維度)。

    做特徵轉換時,也增加特徵維度。

    講完了,就種把多個邏輯迴歸的計算串起來的模型,就叫做

    類神經網路 (Neural Network)。

    不管要做什麼特徵轉換、降維、升維,全部不用知道,那堆未知數交給AI自己學,推導的方法跟單個邏輯迴歸一樣,也是用梯度下降法

    人類要做的事只有定義模型框架。

    要把幾個邏輯迴歸串在一起?怎麼串?多對一還是一對多?

    這件事,其實沒有人有答案,很靠經驗。

    隨便串,個人經驗不多,不確定效果如何

    可以自行定義,最右邊的機率P,大於0.5代表SL+或SL。

    我看起來啦,分辨 SL+ 和 SL,不是一個太難的問題,只要不要把模型串的太奇怪,多蒐集一點圖片當資料集,AI應該都能學會。

    對了,資料集需要蒐集一堆不同角度、大小的 Jet SL+ 和 Jet SL 的圖片,並且要標示清楚哪張是SL+、哪張是SL。


    三、有可能嗎?教AI分辨MMB DRG等更多SYM熱門車款

    寫得好累,其實該寫的都寫了,

    幾個小時候要開夜車,有點怕,

    所以決定爛尾一波XD

    反正沒人看,這題當回家作業,有機會再把這章補上...

    理論上不難,這邊提個關鍵字:

    卷積神經網路Convolutional Neural Networks)


    其實做AI,很多題目都不難,蒐集資料集才是最難的。


    總結

    如果對一個問題有足夠的背景知識,我們可以用合適的AI模型來訓練,增加成功率。但如果問題讓人毫無頭緒,那就可以考慮無腦串一個不要太畸形的類神經網路模型,把資料集全丟進去讓類神經網路模型自己學。再根據AI學習的成果,調整模型結構。

    簡言之,「你懂 AI,AI 就會幫你。」


    ---


    沒想到寫這麼多字...


    又臭又長的一篇,獻給我的 Sym道猴 夥伴們。


    希望這篇文可以幫助到一些,

    跟我一樣,想了解 AI,

    卻不得其門而入的讀者。



    蛤?

    原來不得其門而入的,

    只有我?

    QQ

    分享至
    成為作者繼續創作的動力吧!
    從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

    作者的相關文章

    JN的沙龍 的其他內容

    你可能也想看

    發表回應

    成為會員 後即可發表留言
    © 2024 vocus All rights reserved.