另一個世界裡關於AI的故事
在開始之前我想起了一個古老的windows自帶的遊戲“掃雷”。只不過這個遊戲與一個編程競賽結合之後變成了一個更有趣的思維訓練遊戲。
遊戲內容是這樣的:
一個大正方形被劃分爲64x64的小正方形,大正方形區域內隨機的散佈着64x3顆地雷和64x3塊石頭。參與遊戲的者不是擁有上帝視角的人,而是一輛掃雷車。每輛掃雷車都從區域的右下角進入雷區。
掃雷車擁有“探查”,清除,移動,轉向四個功能。
探查:對正前方的3個小方格繼續分析,通過探查可以確定探查區域內的是地雷,石塊,還是空地。每次探查耗時3個單位時間.
移動:向正前方移動,每次移動花費1個單位時間。如果移動進入區域內有石塊,則掃雷測會被損壞,需要10個單位時間進行修理。如果移動進入的是未清楚的地雷區域則Game Over。
清除:清除正前方的小方塊區域,如果清除方塊內是地雷,則將清除區域重置爲空地。如果清除區域爲石塊則清除失敗,清除區域依然爲石塊。對於空地清除方法則不做任何事。不光清除區域內有什麼,都花費1個單位時間。
轉向:掃雷車在原地將車頭轉到上下左右四個方向中的一個,每一步轉向都花費1個單位時間。轉向必須按順序進行。例如:掉頭這個動作,必須先用一個單位時間轉到←或者→,然後再花費1單位時間從左或者右將掃雷車的屁股和腦袋對調。
定義一個小方格的土地類,屬性爲:size1x1, 位置x,y,x/y(1~64)
定義空地繼承土地類,自有屬性空。
定義石塊繼承土地類,自有屬性破壞,不可被清除。
定義地雷繼承土地類,自有屬性爆炸,爆炸屬性可被清除。
定義掃雷車,方法探查,清除,移動,轉向。
屬性狀態:正常/待修理/損壞。位置:x,y;方向:前後左右
有“頭鐵”的玩家把掃雷車當一級方程式,管你有沒有雷,衝鴨。其中運氣最好的衝過了四分之一的地圖,最差出發既遊戲結束。
有謹慎的玩家每塊前方區域都必探查,一步一挪。小蝸牛一呀一點點的挪,一蛄蛹一蛄蛹真勤奮……
最穩健外加強迫症外加運氣極差的玩家在在所有區域都掃過一遍後完成了遊戲,用時10086*10086個單位時間。但不是所有玩家中最慢完成遊戲的,有的玩家花了超過探查所用的時間去猜測前方區域的空地內是否有地雷了石塊。單細胞腦回路的玩家的操作基本是公式化的,雖然速度慢,但是安全可控,非常適合規範化之後代碼化。最後他的執行過程編程後稱爲第一版自動掃雷車的控制程序。
恰逢此時這時候遊戲比賽加入和新得規則:每個玩家有三臺掃雷車但只能有一臺在雷區內進行掃雷,空閒的掃雷車可以用於更換當前在雷區被摧毀或者被損壞的掃雷車,而且替換過程無時間損耗。損壞的掃雷車可以瞬間移動至雷區外進行修理,雷區外損壞掃雷車的修理可以與雷區內的掃雷車作業同時進行。當沒有完好的掃雷車在雷區內時,則需等待至少一臺損壞掃雷車修理完後再進行掃雷,修理時間記入遊戲時間。如果三輛掃雷車都被炸燬則遊戲結束。
爲掃雷車添加自動化功能,可以根據玩家預先設置的策略自動掃雷。
這一規則改變勾動了各位編程,算法大佬們的神經。各位程序員們蠢蠢欲動。只不過這些數學,編程大佬們更感興趣的是修改掃雷車的自動化程序。
新規則下的比賽結果在剛開始的時候讓衆大佬們氣餒。他們冥思苦想出來的算法並沒有打敗那些 “幸運的莽漢”。最直接的原因是地圖是隨機生成的,固定算法在某一張地圖上取得較好的成績,但是在其他隨機生成的地圖上則一敗塗地。但是大佬們並不氣餒,不斷的修改算法的適配性,算法也越來越複雜。
漸漸的大佬們發現固定算法在隨機圖集上運行結果的平均值無限接近原始“單細胞玩家“算法的效果。
沮喪開始在大佬之間蔓延……
遊戲也成爲一種純粹的消磨時間的娛樂。
一個應用數學的導師將歷年掃雷遊戲玩家們的算法和結果扔給一羣學生,讓他們用來實踐統計學理論。其中一個學生在對算法結果進行統計計算的時候對算法產生了興趣。他將大神們貢獻的海量算法進行了提煉,將連續多次探查後的結果進行統計後得出一個分佈公式。例如:當連續探查出兩顆地雷後第三次探查區域是地雷的概率爲46%,當兩次探查出三顆地雷後,第四次探查出是地雷的概率爲12%。於是他以此爲基礎,將大神們的尋路算法進行整合。例如:A尋路算法在密集雷區內的掃雷效率較高,那麼當連續探查兩顆地雷時使用A尋路算法。B尋路算法對於鬆散雷區的掃雷效率較高,那麼當連續探查爲空地時調用B算法。
到此掃雷遊戲就從一個操作掃雷車的遊戲變成了一個選擇算法的遊戲。爲了做到更廣泛的適應性,在做了大量統計工作後,他爲探查結果建立了一個複雜的計算公式,用以判斷何種情況下適配哪種算法。這個公式的輸出結果爲當前已知條件下,對每種算法的選擇權值。
於是一種對算法進行計算的算法出現了,被稱爲遺傳學算法。而且這位學生髮現,算法的種類越多,經過公式複合計算後得出的綜合選擇方案效率越高。
最終遺傳學算法終結了掃雷遊戲的算法比賽。
遺傳學的出現讓人們意識到一種可能性,計算機程序具備了通過已知推導未知問題答案的可能。
計算機程序具備了根據實際情況進行動態調整自身以適應環境變化的能力。
人們開始尋找將這種方法,思路應用到更多領域的實踐。
笨的辦法總是最容易被最先想到的,不就是一個64x64的雷區嗎?窮舉法將所有可能的64x3的地雷和石頭的分佈場,在被探查出一定數量區域的結果後的特徵值(地雷,石塊的分佈情況)保存在一個巨大數組之中,然後將不同特徵地形下不同尋路算法的權值與地形特徵一同存入表格。
至此一個高效,快速的檢索,優選系統就完成了。這個系統雖然還不具備通用性,但已經在某些方面展現出了獨特的優勢。
某個策略完備的優選系統在一場棋類對抗比賽中打敗了此棋類對抗比賽的冠軍,從而轟動一時。
更高效的數據庫檢索方法和硬件成爲了制約計算機程序做出最優判斷的瓶頸。同時人們發現似乎離“預測未來”和“適應環境”以及“廣泛應用”的目標需要新的思路。
第四階段需要大量的人工蒐集素材,提取素材中的“特徵”,計算併爲素材添加權值。這哪裡智能了?一點也不智能好不好。
在面對問題的時候,一些計算機技術人員開始思考人類是如何產生智能的,於是將目光投向了生物學家。
生物學(實際上是一個心理學家定義的)上對於神經元的定義是一個多個輸入,單個輸出,內含算法的計算單位。
每個神經元可以是不同的算法,也可以是相同的算法,將某類型問題的多種可能場景投入到不同的神經元組成的網絡中進行計算,不同的樣本會根據特徵經由必要的神經元計算後輸出結果。而沒有必要像數據庫查詢那樣遍歷足夠的元素後才能得到想要的最優結果。
而由神經元聚集起來的系統則被稱爲神經網絡。這個網絡是多種算法聚集體的同時還擁有最優化的效率。
高效,靈活的網絡有了。如何讓網絡實現某項功能呢?回到掃雷遊戲,我們需要算法來填充神經元,我們需要爲每個神經元制定特徵標籤。
可以很容易發現,爲一個神經網絡進行初始化是一個非常耗時,費力的工作。這個過程需要大量的樣本來填充神經元,和對神經元打標籤。其過程就像交一個未成年的孩子學習一樣,提供基礎的理論,大量的練習,讓孩子靈活應用其中的規律用於未來的計算。
到此一門新的計算機應用學科----機械學習就產生了。
機器學習的概念,基礎理論和技術一經提出,就出現了兩種基本類型。
監督式機器學習模型和非監督式機器學習模型。
監督式機器學習模型在迴歸算法的加持之下,可以通過數據的相關性“預測”結果。
非監督式機器學習模型中集中了多種功能迥異的算法和原始樣本分析工具,可以在大量樣本的加持下,從樣本中提取出多種“特徵”。我們可以利用這些自動識別出來的特徵對樣本進行分類。
當監督式機器學習與非監督式機器學習模型逐步成熟的時候,財大氣粗的人開始搭建更復雜的,將監督式和非監督式學習模型結合起來,構建多層神經網絡系統。
一個容器,一個快速搭建神經網絡的工具被好事的工程師們建立起來。其中封裝了具備基本算法的神經元,向神經網絡注入學習樣本的工具,將多層網絡中神經元的輸入輸出連接起來的結構。這些多事的工程師成這些爲搭建機器學習模型的平臺。
經過大量樣本完成了學習的多層神經網絡系統可以做什麼呢?
它可以提取文本/圖像中的特徵,並對特徵進行自動分類。根據分類特徵通過網絡或者已有樣本/特徵元素尋找與這些特徵匹配度最高的結果,將這些結果二次組合/排序/轉化/編碼生成一個新的樣本。Transformer真是一種天才的取巧。
例如:回答人們的問題。由文字生成圖像,視頻,音樂。
至此生成式大模型應運而生。這個模型根據功能設計,經過學習之後(訓練),它可以聽取你的需求(特徵理解和語義分析),最後給出滿足你需求的答案(答案是否符合需求,取決於你的成長學習環境與模型學習時使用的樣本數據有多相似)。它甚至可以在概率加持下給出模糊的答案和預測某種趨勢,甚至創造性的給一些意外(當然大多數情況是因爲個體視角的侷限看不到某些可能性)。
第六階段
我不知道機器學習將來的樣子,也不知道在人工智能獲取了自我訓練和自我迭代的能力後能多快擁有人類的智力水平。他們是否會產生倫理的觀念,是否受到法律的約束。
對於我們普通人來說,柴米油鹽纔是當下最重要的問題。
將來?關我什麼事?