前面幾天我們講完了AI經過了幾次大起大落,最後在AlphaGo一戰封神後被推向最高端,機器學習/深度學習成為人人所追逐的技術。
但如同我們前面一再強調的: 機器學習/深度學習雖然熱門,但他只是眾多AI裡的一個分支而已,所以今天我們就來簡單的介紹一些比較常用的或是比較有趣的AI演算法。
(那你到底什麼時候才要講AI作曲......)
這邊我們先幫比較沒有資訊/程設背景的人做個簡單的介紹,如果你看到這邊已經一邊在挖鼻孔一邊想"看這個要幹嘛"的話,
開個玩笑~麻煩你去泡碗泡麵,然後自動跳過這個部分。
話都說到泡泡麵了,我們就拿泡泡麵來當作例子解釋什麼是演算法。
首先,如果今天你要泡泡麵來吃,那麼最常見的步驟就是:吹含吸舔摳
以上的步驟,就可以把它當成泡泡麵來吃的演算法。
因此我們可以把演算法理解成:
一個已經被完整定義/規範好,並且可以讓電腦自動執行的程序/步驟。
那麼AI裡面有哪些有趣的演算法呢?
這邊我們選擇一些比較有趣或是最常被提及/使用的做個簡單的介紹:
在AI的各種演算法裡,有許多都是以模擬人類/生物的特性所設計出來的演算法 (後續會一一介紹),
而演化式計算就是模擬自然界物種生態而產生出來的一種演算法,裡面包含了如:基因演算法 (Genetic Algorithm, GA)
演化式策略 (Evolutionary Strategy, ES)
基因程式設計 (Genetic Programming, GP)
等等,而這些演算法的的核心以達爾文的物競天擇,適者生存為主軸。
簡單一點的來說的話,這類型的演算法(這三個在運行上有些許步驟差異)會針對要解決的問題,去
(1) 隨機亂數的給予一定數量的個體。
(2) 而這些個體彼此之間會互相交配並產生子代。
(3) 子代有機會產生些微的突變。
(4) 把所有親代以及子代 集合起來,根據問題所劃出的標準去做篩選,把不符合標準或是得分(看問題如何定義)較低的後半部份個體淘汰 (不適者淘汰)。
(5) 步驟(4) 存活下來的較好個體成為下一個世代的親代 (適者生存),接著回到步驟(2) 並不停的重複這些過程,直到達成預設的目標或是演化的世代 (每次2~5為一個世代) 到達設定的數目。
(6) 最後,活到最後一代的個體裡面,選出最好的那一個天選之人 ,即為最後的解。
聽起來很複雜的話,我們舉個例子來說明
(以下純粹是學術性的假想,所以不要有殘忍或是什麼其他的想法)
如果今天在一個實驗室裡,科學家們希望可以培養出可以飛的小狗
,那麼首先我們要
(1) 找一百隻狗來當我們的最初的個體。
(2) 這些狗彼此之間交配並生下另外一百隻小狗 (子代)。
(3) 生出來的 小狗 (子代) 都有機率發生一些 突變。
(4) 接著把所有的狗,做個飛行能力 (此實驗的得分標準) 的測試,測試結果比較差的一百隻狗,把他們給......送人~
因此這一百隻在飛行能力評比上表現較差的,就離開了這個實驗 (不適者淘汰)。
(5) 步驟(4) 表現較好的一百隻狗成為下一個世代的親代 (適者生存),
接著我們再回到步驟(2) 並不斷的重複,直到我們
(6) 成功的演化出一隻會飛的狗,或是我們可能因為時間與資金有限,所以只能運行100個世代,一百個世代結束之後,如果我們沒有成功的演化出會飛的狗 ,那麼存活到最後的一百隻裡面,飛行能力測試成果最好的就是我們的最後解。
這樣的解釋有沒有對於演化式計算有比較清楚的初步了解了呢?
認真的同學這邊可以先做一下筆記,因為之後的某一天裡我也會更深入的介紹演化式計算要如何應用在AI作曲上面。但也不用擔心,真的忘記了再回來複習就好。
那麼明天我們再來繼續聊聊其他有趣的AI演算法,或是放棄停刊。