AI 是近幾年甚至是未來的趨勢,許多產業都會標榜自己使用最新 AI 技術,然而相信很多人對AI 依舊是一頭霧水,本篇文章就用簡單易懂的方式,帶你認識 AI 。
其實本來是想寫些開箱文的,因為開箱文更好寫,不過由於 MakerPRO 編輯提到 AI 的主題越來越多了,要不要乾脆針對 AI 寫多些文章?後來想想也對,畢竟大約三年前開始台灣開始一大堆人天天搞創新創業比賽,然後每個都要標榜一下 AI,好像有 AI 才有辦法什麼東東。
其實, AI 並沒有那麼神奇,主要利用的就是記憶體跟計算機這兩項而已!事實上,不少當時標榜說用 AI 來創新創業的團隊,就我所知很多後來都不是靠 AI 在經營。可這到底 AI 是怎麼辦到的?我覺得不妨就根據 AI 的原理,讓大家用最簡單的資源自修,可以有一定程度的了解,應該就比較不陌生了。
畢竟我跟幾位我們 MakerPRO 社團的大大,在 AI 跟 IoT 方面已經做了很多年,這麼大量的學習內容要大家一口氣搞定,我看不保險,所以就把歷來我們接觸、學習、實作的部分,逐次記錄下來,當作大家討論的話題,或者對照漫畫、電影、動漫、日常生活等較熟為人知的內容,並且採用由大方向、高層次的工具來實作,接受度應該比起我們當年教室在講的方式,還要來得更高!這就是這個系列文章的由來。
可能不少大大也跟我們一樣接觸過 AI 的相關課程,所以這段假如你沒興趣,那就別浪費時間了!說實話,每本課本、講義這部分寫了至少一節,還有我比較過,連這部份很多課本講的都不盡一樣。
總之,先給各位一個觀念: AI 、機器學習(Machine Learning)、深度學習(Deep learning)三者的關係,可以用下圖表示,越外圍就是越大的集合,也就是說,達成 AI 的方式,不限定只有 Machine Learning 或 Deep Learning!
AI、機器學習、深度學習三者關係示意圖(圖片來源:賴桑提供)
那一定有人提出疑問:又怎麼會有這些玩意?這就說來話長了!其實,自從人類開始懂得製作工具來達到目的,最後都一定有一項,是人類希望的終極目標:自動化!能自動化,就可以省勞力、省成本、省時間。
其實 AI 的開發,早在第二次世界大戰期間,因為計算工具不斷地提升性能跟效率而逐漸地被科學家們重視,好比第二次世界大戰期間,英國的 圖靈(Alan Turing)教授,就自製可以用來破解納粹黨通訊密碼機器「謎(Enigma) 」的計算機,有興趣的人可以去看『模仿遊戲』這部電影。
之後的 1950 年代由於圖靈教授的偉大貢獻,使得很多科學家開始想像,把電腦模擬成人腦來用,說穿了就是想要用電腦來模擬人的神經元 Neuron 。例如 Frank Rosenblatt 就已經想到可以模擬感知器 (另開新視窗)(Perceptron)做法,把很多不同訊號輸入機器計算,之後再去根據計算結果進行判斷的概念,請參考下圖:
許多科學家開始想用電腦模擬人的神經元(圖片來源:賴桑提供)
像是下圖, a1 至 an 就是訊號輸入, W1 至 Wn 就是加權(拿來乘 a1 至 an 的啦),b 呢就是偏移(用來修正的加跟減的值), f 就是計算的函數(激活而已),最後的 t 就是計算結果(答案)。根據 t 的結果,如果大於 0 就是成立,不然就是否定。
使用電腦模擬人類神經元,根據計算結果進行判斷(圖片來源:賴桑提供)
這在當時滿轟動的,因為這樣的話,電腦可以替代人腦的一部分,繼續發展下去,總有一天可以取代更多囉?好景不常, 1969 年美國著名的麻省理工學院,有位後來是電機工程系的教授叫明斯基的,提出來所謂 Perceptron 連組合邏輯數位電路 XOR 都辦不到,這就是當年那篇報導:
麻省理工學院教授,提出 Perceptron 無法組合 XOR(圖片來源:賴桑提供)
這下可慘,此言一出搞到大家立刻飆起來了,直指發展人工智慧根本就是為了騙錢。在1990 年,專攻人工智慧,就讓人指指點點。直到 1990 年後,開始有人反駁,但不是電機工程師而是唸心理學的,辛頓教授 Geoffrey Hinton 認為,應該要把電腦程式的處理變成一層一層、一段一段地計算,然後逐次接近結果,這就是Deep learning 的最源頭構想,事實也證明,辛頓教授是對的。
辛頓教授提出的概念也是深度學習的最源頭構想。(圖片來源:賴桑提供)
從上圖可看得很簡單: input layer 就是輸入, output layer 就是輸出, hidden layer 裡面分成好幾層,由左到右像是潑墨水一樣擴散開來;每個圓圈圈就是一組電腦程式(也可以單純就是個數值),線段就是關係(前面講的加權),這樣就不斷地接近所要的結果了。
接著,辛頓教授的學生立昆教授 Yann LeCun ,根據這個原理針對影像上的辨認,提出了所謂的卷積神經網路(Convolutional Neural Network ,CNN),假如常看一些商周雜誌的人應該很常看到這個名詞;那 CNN 是怎麼做的,看懂了沒?
其實有了辛頓教授那段圖的解說,應該不難想像了吧?電腦當然不知道什麼辣模、魚蝦…等,說穿了,立昆教授不過就是想到:「既然老師說可以分成不同步驟一一解答,那我把影像拆成各部分一一處理,不就好了!?」
因此,立昆教授把影像拆成一塊塊(如果是影片,那就是每 30 秒一張,從裡面一張張抽出來,再把一張張拆成一塊塊),從 input layer 輸入給電腦,每次電腦就根據輸入的部分影像,對色彩的數值進行壓縮(電腦的 RGB 啦),這樣就會獲得很多顏色塊塊,然後讓電腦去處理。
可是…怎麼處理呢?很簡單,先說最基礎的—卷積 Convolution 。其實卷積就是兩個計算(一個叫輸入,一個叫響應)經過卷積之後,會產生第三個計算(輸出結果),只是它的動作實在看起來像是捲麵桿(有加成的作用)一樣,所以就叫卷積。
還是不能理解?那舉個更簡單的:偷吃女生豆腐結果挨打吧!
假設你在公共場所偷吃女生豆腐,女生被吃豆腐當然不高興,於是賞你一拳;吃了一拳之後,你就開始瘀青,女生賞你一拳這就是輸入,你開始瘀青就是響應,瘀青的程度就是輸出結果,像是這圖:
情況是:這女生非常非常地生氣,賞你一拳不能消氣!所以就發揮她在健身中心的鍛鍊成果,不斷地拖著你猛力出拳(不斷地輸入),瘀青(響應)還沒消就再挨了一拳又一拳,瘀青的程度(輸出結果)就會不斷累加起來。從瘀青的程度(輸出結果)來分析,瘀青的程度(輸出結果)想當然是隨著時間遞減(比如挨了一拳要三天消),所以連續挨了的拳數來看,第一拳(第一個輸入)對於你瘀青的程度(輸出結果)貢獻當然就是越小,因為越早挨到的越快開始消,之後的每一拳(歷次輸入)也是根據所承受的時間越早,對於瘀青的程度(輸出結果)貢獻相對越小。
以數學評估瘀青的成果, f 當輸入(女生出拳)、 g 當響應(你的瘀青),則 f(n) 就是女生打的第 n 拳,從時間來看,假定觀察瘀青之時刻為 x 時的話, g(x-n)就是當 x 時刻時女生打的第 n 拳對你產生的作用,把 f(n)乘以 g(x-n),帶進去 n 跟 x ,再把歷次的結果累加,就是你瘀青的程度量化!這樣講簡單多了吧!
那卷積又怎跟 CNN 搭上線呢?女生出拳打你色狼,跟影像甚麼關係!?剛剛不是說立昆教授想到也把影像拆解成很多小塊,來給電腦去處理,那把螢幕上的每一個像素 Pixel 之 RGB 抓出來,是不是可以形成數據;再把這些數據根據 Pixel 上下左右的位置排起來,是不是變成各個小塊?
這不結了!?所以很多教學網站都把每個步驟化成了一步步的圖,像是: https://mlnotebook.github.io/post/CNN1/ (另開新視窗)。像是網站用英文描述了一堆,其實就是說我們先準備一個小塊塊叫 Kernel 給電腦,長得像是這樣:
將影像拆解成很多小塊,並交給電腦去處理(圖片來源:賴桑提供)
然後把原始圖片根據 Kernel 大小,逐步取出後進行運算。像是這樣:
Kernel 移動至每一個像素並重複此過程,直到圖片中的所有可能位置都被過濾(圖片來源:賴桑提供)
本來一張好好的圖,其實經過電腦以 CNN 處理後,會長得像是這樣,然後被保存下來;也就是說,電腦以後用來進行比對的時候,所謂的特徵 Feature 就是這副德性!現在知道了吧:
原圖經過電腦以 CNN 處理後的結果。(圖片來源:賴桑提供)
現在,先針對大家心裡對於數學,每次上課套了一大堆公式、圖表,看了就心生恐懼的部分,透過一些簡單的例子讓大家建立概念。之後我們就針對不同的部分,不只是數學對於 AI ,也可以從 AI 去了解其實數學沒那麼複雜 – 這要跟學校建議,其實老師們沒講錯!問題在於表達方式不一樣而已。
之後,還要請各位準備你們的 PC,寫看看 AI 的一些程式啦!
(本文轉載自MakerPRO (另開新視窗)、原文連結 (另開新視窗);作者:賴桑;責任編輯:葉佳錚)