社會在走,基本行情要有啦。
大家都在瘋 AI,身為 Sym道猴的我,能不一起湊熱鬧嗎。
很多人聊股票,討論真 AI、假 AI,
我跟你講,
這篇就是真 AI。
這篇是本猴最近的讀書筆記,適合的讀者是跟我一樣,沒相關背景但希望對 AI 原理有點概念的人。適合茶餘飯後觀看,通常可以原地睡著。
旨在分享概念,省略很多細節,用詞也不精確,建議不要看得太認真看。
覺得有被啟蒙的猴猴,可以去找專業教材認真學一輪,然後記得回來教我~
開始之前,先快速瞄過幾個簡單的先備知識。
若明天降雨機率是百分之三十,則明天不降雨的機率是百分之七十。
若硬幣正面朝上的機率是百分之五十,則反面朝上的機率是百分之五十。
下圖藍線的方程式為 x - 2y - 2 = 0,線上任一點(例如藍點)帶入方程式會等於 0,藍線左側的點(例如紅點)帶入方程式會小於 0,右側的點(例如綠點)帶入會大於 0。
看看ChatGPT怎麼說:
粗略歸納成三個大步驟:
也可參考NV官網的流程圖:
人工智慧的世界。(嚴格來說是 Deep Learning,這篇多用 AI 是因較通俗好懂,其實 AI 的範圍很廣。)
下面用三個例子,依序說明基本的 AI 原理。
這章節將描述如何訓練 AI 回答一個是非題:
輸入一個陌生騎士的身高、體重...等特徵,回答他騎的車是否為 SYM。
首先,第一步是準備資料。我們可以透過街訪或線上問卷,蒐集可能會用到的資料。資料可能長這樣:
資料集就如同考古題,記錄騎士的特徵,以及機車是否為SYM。
我們用一些數學方法,根據考古題歸納出一個統計模型,這個過程就是訓練模型。之後就能用這個模型,根據一個陌生騎士的特徵,直接預測他的機車品牌。
假設先只考慮身高和體重,那麼把資料畫出來看看,騎SYM的騎士用紅點表示,騎他牌的騎士用綠點表示。(只是範例,跟上圖的數據沒有完全一致)。
蒐集完資料集後,再來是訓練模型。所謂模型,只是一個數學函式、一組規則,可以很簡單,也能很複雜。
通常是由人類定義模型架構,裡面有些未知數。再用一些數學方法,從資料集中自動推導出各個未知數。
例如,觀察上圖的資料分布,因為紅點綠點看起來有自己的一群 (線性可分),我們可以定義模型架構為一個簡單的線性的多項式:
ux + vy + b
x是身高,y是體重,接著再從資料集推導出未知數 u、v、b。
怎樣的 u、v、b 是我們要的?
其實上圖有畫出來了,概念可以參考暖身章節第二段,直線方程式。我們希望找到一組 u、v、b,能使:
這樣的u、v、b,就是我們想要的。
找到u、v、b後,把所有等於 0 的點畫出來,會組成一條線(藍線),稱作邊界 (boundary)。
若找到的 u v b 是 3、-2、-4,那麼原本的多項式就能寫成 3x - 2y - 4,因此我們訓練出來的模型即為:
再來,就能找其他陌生騎士來實測這個模型了。
就這樣?
就這樣。
這就是 感知器 (Perceptron) 的概念,詳細的網路文章很多,照著步驟做就能找到u、v、b。
(輸出 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。機率 P = σ(z),z 越小,P 越接近 0,z 越大,P 越接近 1。
整理一下模型:
由於 sigmoid function 裡沒有未知數,所以跟剛剛一樣,再來要從資料集中推導出一組 u v b。但還是那個問題,怎樣的 u、v、b 是我們要的?
我們希望找到一組 u、v、b,能使:
再提一次,這裡的機率 P 指的是:騎士的車是SYM的機率。
導入機率後的整套方法叫作 邏輯迴歸 (Logistic Regression),一樣有固定步驟可以推導出最好的 u、v、b。(推導的步驟有個名字:梯度下降法。)
回到剛剛的問題,
為什麼導入機率的邏輯迴歸方法,可以解決這種情況?
導入機率前,左右兩個模型錯誤題數是 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,若資料夠多,除了身高和體重兩個特徵,可以再把年齡也考慮進去。
那個立方體只是方便讀者理解四個點的空間關係,沒特別意義。
原本只能在二維空間找一條直線當作邊界,加入年齡後,目標變成在三維空間找一個平面 ux + vy + pz + b = 0 當作邊界,簡單很多。
邏輯迴歸並不限於二維空間,多維空間也可用,算法一模一樣。推導出 u v p b 後,模型就訓練完成了:
法2,把特徵做一點轉換 (feature transformation)。下圖為例,原本4個點的 (x, y) 是 (身高, 體重),把它們轉換成:
再用一樣的方法去找邊界就變得容易了。
關於法1,怎麼知道要用幾個特徵?
關於法2,怎麼知道特徵要做什麼轉換?
其實都不用知道,
下一節會講,如何讓模型自己去學,要用哪些特徵、要做什麼特徵轉換。
本章節描述了如何訓練 AI,由騎士的身高、體重...等特徵,回答他騎的車是否為 SYM,這樣的是非題。
透過問題,介紹了感知器的概念,定義線性模型 ux + vy + b,由於資料看起來線性可分,可以推導出 u v b,得到一個學好的模型,能根據騎士的身高體重,猜測他騎的車是否為SYM。
但通常資料不是線性可分,所以使用邏輯迴歸方法,導入機率 P = σ(ux + vy + b),讓我們能在資料非線性可分的情況下,找到一個雖然不是滿分,但表現最好的模型。
在更難的情況中,分享了增加特徵和特徵轉換兩種解法。
這章節將描述如何訓練 AI 回答一個更難的是非題,或者說,只有兩個選項的選擇題:
輸入一張 Jet SL 或 SL+圖片,回答圖片裡的是 SL 或 SL+。
例如這張圖,答案是 SL+。
太簡單?
那下面這四張勒?
好囉,輕鬆的橋段沒了,打起精神吧。
承上一章節,這題依然是基於邏輯迴歸,再加上最後那兩個方法,增加特徵和特徵轉換。但感覺還是有些問題...
用什麼當特徵?
要用多少維度的特徵?
要怎麼轉換特徵?
下面將介紹,如何讓 AI 自己學會這些資訊。
以一張 256*256 的灰階圖片為例,圖上共 65536 個像素(Pixel),每個像素都是以一個 0~ 255 的數字來表示灰階值,0代表黑,越白數字越大,純白是255。
(若是彩色的圖片,每個像素會有3個0~255的值,分別代表紅綠藍RGB的程度。)
回到問題,用什麼當特徵?
多年以前,有很多數學方法教我們從圖片的像素值計算出各種特徵值,但現在的AI技術不用那麼麻煩了,65536 個像素值全部餵進去模型,AI會自己學。聽起來很玄,但真的就是這樣。
再來,我把3個邏輯迴歸的計算串起來,
第一個邏輯迴歸,把x1 轉到 x'1,
第二個邏輯迴歸,把x2 轉到 x'2,
這就是在做特徵轉換。(如下圖)
特徵轉換,不一定要一對一,也可以一對多(增加特徵維度),或多對一(減少特徵維度)。
講完了,就種把多個邏輯迴歸的計算串起來的模型,就叫做
類神經網路 (Neural Network)。
不管要做什麼特徵轉換、降維、升維,全部不用知道,那堆未知數交給AI自己學,推導的方法跟單個邏輯迴歸一樣,也是用梯度下降法。
人類要做的事只有定義模型框架。
要把幾個邏輯迴歸串在一起?怎麼串?多對一還是一對多?
這件事,其實沒有人有答案,很靠經驗。
可以自行定義,最右邊的機率P,大於0.5代表SL+或SL。
我看起來啦,分辨 SL+ 和 SL,不是一個太難的問題,只要不要把模型串的太奇怪,多蒐集一點圖片當資料集,AI應該都能學會。
對了,資料集需要蒐集一堆不同角度、大小的 Jet SL+ 和 Jet SL 的圖片,並且要標示清楚哪張是SL+、哪張是SL。
寫得好累,其實該寫的都寫了,
幾個小時候要開夜車,有點怕,
所以決定爛尾一波XD
反正沒人看,這題當回家作業,有機會再把這章補上...
理論上不難,這邊提個關鍵字:
卷積神經網路,Convolutional Neural Networks)
其實做AI,很多題目都不難,蒐集資料集才是最難的。
如果對一個問題有足夠的背景知識,我們可以用合適的AI模型來訓練,增加成功率。但如果問題讓人毫無頭緒,那就可以考慮無腦串一個不要太畸形的類神經網路模型,把資料集全丟進去讓類神經網路模型自己學。再根據AI學習的成果,調整模型結構。
簡言之,「你懂 AI,AI 就會幫你。」
---
沒想到寫這麼多字...
又臭又長的一篇,獻給我的 Sym道猴 夥伴們。
希望這篇文可以幫助到一些,
跟我一樣,想了解 AI,
卻不得其門而入的讀者。
蛤?
原來不得其門而入的,
只有我?