人工智慧 - 採用 JavaScript 實作

目錄 | 下載 陳鍾誠金門大學

結語

AI 的夢想

AI 的問題吸引了無數研究者投入,也讓無數研究者感到失望、甚至害怕。因為,即使投入了整整一輩子,從少年研究到白髮,很可能都無法在研究上取得重要的進展。這可以說是人類科學技術的『終極問題』,如果資訊科學界有諾貝爾獎的話,那我想,大概要超過五千的以上的資訊諾貝爾獎,才能到達上述科幻小說的情節。甚至,其中有些技術,很可能永遠不會實現。在 AI 領域,我們必須學會的第一件事,就是謙卑。

這些夢想中的技術,有些值得我們投入一輩子去實現。但是,有些技術,實現後卻可能會造成大災難,這在科幻小說當中早已被想像過了。科幻界經典的艾西莫夫 (Isaac Asimov ) 機器人系列小說 ,就是典型的例子。當人類企圖用機器人三大定律控制機器人時,仍然發生的災難事件之科幻故事。另外,像是電影駭客任務 當中,更描述了機器人統治世界後,人類只能在機器人的餵養之下,成為類似植物人的悲慘狀況。因此,科技的進步,尤其是像 AI 技術與生物科技的進步,到底是福是禍,仍然是個謎。

這些議題有點扯遠了,我們根本還沒踏出第一步,就已經開始想像一萬步之後的結果了。然而,這些技術的困難度,沒有研究過的人還真是難以想像。讓我們用 AI 的學術龍頭 – MIT AI 實驗室的發展作為一個範例,說明 AI 領域有多麼困難。

在 AI 歷史早期的 1970年代,MIT AI 實驗室就已經是 AI 大師匯集之處,像是第一代的 Marvin Minsky 與 John McCarthy 等 AI 大師,他們研究的主題著重在人類大腦與智慧上。

接著,Patrick Winston發現,大腦的研究太過困難,轉而研究機械人控制的領域。但這領域仍然太難,於是 Harold Abelson 乾脆改研究玩具的控制,發明了 LOGO 語言,然後開始研究機械昆蟲,企圖研究昆蟲的行走智慧。 於是,人工智慧的研究從人腦開始,變成人的手腳之研究,最後變成昆蟲手腳的研究。2003 年七月,MIT AI 實驗室與 Laboratory for Computer Science 合併,成為一個具有 97 個教授、大約 800 個研究生的超級研究團隊 CSAIL ,不知道是否因為感到 AI 領域太難或需要整合其他領域所進行的調整。

當然,這並不表示 MIT AI 實驗室越做越差,相反的,他們越來越強,吸引了無數的 AI 領域研究者進入該實驗室。但是,這個領域實在太過困難,以至於學者在 1940 年代,認為 1990 年時應該可以理解自然語言,到了 1980 年代,預估時間點延後到 2030 年,到了 2009 年的今天,我個人認為可能還要 100 年的時間,才能發展出成熟的自然語言理解技術。

AI 的困境

盡管人工智慧的學術界已經努力了五十年以上了,但是,距離 AI 的理想,模擬人類智慧行為的目標,仍然無比的遙遠。甚至,完全看不到實現的可能性。甚至,我們連問題到底困難在哪哩,都還不是很清楚。其中,往往最難的一點,也是最少被AI研究所提及的一點,就是評量函數設計上的困難。

評量方法的困難

AI 的研究往往著重在方法的設計上,很少提及評量上的問題,然而,評量問題的困難其實反而是最難的。有經驗的 AI 研究者通常會發現,要研究一個問題之前,必須先想清楚,如何進行實驗的評量。如果沒有想清楚就貿然投入,那往往做到最後一無所獲。因為,會卡在實驗的評量上動彈不得,導致研究無法進行。

評量問題在資訊科學的其他領域通常較為客觀,像是演算法的複雜度與使用空間都可以很明確的評量。即使無法用這些指標的評量方式,實作或模擬的結果也可以用來評量方法的好壞。但是,對於人工智慧領域的問題而言,評量往往是最難的,因為,人工智慧的目的是在模擬人類的智慧與行為,而能夠用來評量結果好壞的,往往只有人才有辦法。但是,科學研究的目的,卻又正是在排除人類評價的主觀性。於是,一方面需要人類介入進行評量,另一方面又要排除主觀性,使得評量問題困難重重。

這種困難,使得許多人工智慧的研究,反而比較像社會科學,而不像自然科學。舉例而言,自然語言理解就是一個相當難以評量的領域。假如你今天寫了一個程式,企圖『理解』自然語言。那麼,如何評量這個程式是否真的『理解』了進行實驗的那些輸入文章呢?

或許你會認為,這個問題的原因是因為,自然語言理解是一個定義不明的問題。因為我們不知道甚麼叫作理解。那讓我們再舉一個例子,就拿英翻中的機器翻譯問題而言,將英文文章,翻譯成中文文章,這個問題應該夠清楚了吧?輸入是一個英文字串 (包含標點符號以及換行的文字串),而輸出則是一個中文字串。同時懂英文與中文的人應該很清楚這個問題。

然而,假如你今天寫了一個翻譯程式,可以進行英翻中的工作,那麼,這個程式到底有多好呢?我們應該如何評量翻譯結果的好壞呢?

一個可能的解決辦法是,請一萬個同時通曉英文及中文的專家,同時對於隨機抽取出的一千篇網路文章,對其英文原文與翻譯後的中文進行全面的閱讀,然後每個人給出一個分數,分數高就代表程式好,分數低就代表程式不好。

如果我們暫時不爭論這樣的方法是否具有客觀性,但是這樣的方法,所耗費的成本將無比巨大,任何以一個企圖進行此實驗的人都必須超級有錢,而且冒著破產的危險,這種困難當然會妨礙研究的進展。

更糟糕的是,如果又有人寫了另一個英翻中程式,整個實驗又得重頭來過。而且,這一萬個中英文專家又要被召集過來,以無比的耐心再次讀完兩千篇文章 (一千篇英文原文,一千篇中文譯文)。然後,還要再次的以相當公正客觀的態度,給出絲毫不差的評價。姑且不管客觀評價是否能做得到,要能讓這些人投入這麼多的心力,也只有大量的鈔票才能辦到。

同樣的,針對交談系統,也就是 Alan Turing 所提出的 Turing Test,我們要如何評價一個程式的好壞呢?這仍然要靠大量的使用者介入,然後看看每個使用者是否能判斷出交談的對方到底是電腦還是程式,在以判斷正確或錯誤的比率,作為程式好壞的標準,這同樣有很大的困難。其中一個困難是,同樣的交談過程通常不會出現兩次,而且人類會透過經驗學習,因此,當這些人知道對方可能是程式,而且有了與電腦對談的經驗之後,就會發現一些電腦的盲點。舉例而言,問他是男是女,父母是誰,甚至透過介面傳一張字跡潦草的圖片給他,問他上面寫了甚麼。那麼,這個交談程式就必須具備影像識別的能力才行。

撇開自然語言領域的問題不談,其他領域呢?假如我們今天想設計一個語音辨識軟體,就必須有一個標準的語音庫,然後透過人的聽覺,先將聽到的聲音打成文字檔。然後,再利用程式進行語音辨識,看看與這些標準答案是否相同,才能決定程式的正確率。這個問題的評量相對簡單一點,但仍有客觀性的問題。

首先,語音庫到底應該用誰的聲音,如果單用一個人的聲音,那麼,是否會有所偏差。如果要用各種不同口音,各種不同年齡層,不同性別的人的聲音,那建構語音庫的工作仍然相當龐大。建立標準答案的工作也將相當吃力。

對於像語音辨識與影像識別這些領域而言,雖然評量的問題通常較沒有爭議,但是測試資料與標準答案的問題,仍然相當困擾人。在這些研究的背後,研究者通常迫於無奈,必須出錢購買這些語音庫、影像庫與標準答案。而這些語音庫與影像庫,通常被許多商業機關,視為重要財產,要取得時還要簽定智慧產權合約,以避免外流。

正因為如此,這些領域往往沒有共同的比較基準,這使得方法之間相當難以進行科學性的比較。當然,也就很難判斷方法間的好壞,這將嚴重阻礙 AI技術的進步。

還好,網際網路的出現,以及開放原始碼風潮的盛行,缺乏標準測試資料的問題,開始有了的可能性。但是,我們還沒看到大量的標準語音語料庫與影像庫出現,我們希望,透過類似開放原始碼與維基百科的模式,具有這些資源之版權的個人或研究機構,能將這些重要的資料在網路上釋出並且集中,成為人類公共資產的一部分,以幫助 AI 學術研究的進行,促進人類文明的進一步發展。

另外,還有一些 AI 領域,連評量的可能性都很渺茫,舉例而言,曾經有人做過利用 AI 技術自動畫圖,自動作曲的,那這些畫出來的圖,作出來的曲到底好不好,有多好呢?這已經不是工程浩大的問題了,而是藝術心理學上的問題。如果,有程式可以作出貝多芬、莫札特等級的曲子,那要給幾分呢?

關於藝術的例子或許太極端了,然而,許多設計上的問題都遭遇到同樣的困難,像是一個電腦遊戲到底設計得好不好,一個程式的品質到底如何等等?都已經不是可以客觀評量的問題。雖然,這些不見得都是 AI 問題,但是卻是資訊工程上重要的問題。然而,這些問題卻無法被歸類到學術問題當中。於是,學術界只好視若無睹,當作這些問題不存在。

布林邏輯的困境

然而,現實世界的知識,往往不是絕對性的知識,我們很難說任何一件事情是 100% 正確的。然而,布林邏輯卻要求要知識要 100% 正確,才能保證後續的推論無誤。建構在穩固基礎上的知識,固然較為穩固,但是,我們的知識往往像沙堆一樣,沒有 100% 的保障,這使得布林邏輯的應用,經常侷限在所謂的玩具問題 (Toy Problem) 上,而難以進入現實生活當中。

布林邏輯的困難在影像識別上表現得特別明顯。舉例而言,電腦當中儲存了許多影像圖片,這些點都以二進位的 0 與 1 的形式儲存在圖片檔中。按理講,我們應該可以根據布林邏輯規則,推論出影像中的人物到底是『瑪莉蓮夢露』還是『李察吉爾』。然而,沒有人能夠寫出這樣的規則,二進位碼與圖像辨識之間,存在巨大的鴻溝,使得電腦見樹不見林,只看到一堆點,卻沒有看到整張圖。

類神經網路的困境

類神經網路與布林邏輯恰好相反,當類神經網路看了一張圖,然後告訴所那張圖是瑪莉蓮夢露的照片時,程式設計人員會給予掌聲,但是卻不知道為何程式會告訴他這個答案。

為何如此呢?程式設計人員用了類似反傳遞演算法設計出程式後,就會針對所想要的答案,對此類神經程式進行訓練。舉例而言,如果我們想要讓電腦認識瑪莉蓮夢露,就可以用一大堆瑪莉蓮夢露的圖檔輸入,作為正確答案,然後輸入一大堆不是瑪莉蓮夢露的圖檔,作為負面教材。此時,程式對正面教材的預設答案是 1,而對負面教材的預設答案是 0。於是,類神經的訓練開始啟動,訓練完畢後,如果很幸運的,正確率達到百分之百。那麼,恭喜你,但是先別高興!因為,如果你想知道為何程式這麼好,那答案是,不知道!這個結果只是一堆權重加權後經過非線性函數的結果。程式自己本身沒有辦法告訴你為何會這麼好,程式設計人員也無法知道,除非他讀得懂這些權重的意義。(問題是,只要是人,通常就讀不懂權重的意義)。

未來展望

截至目前為止,本書討論了「爬山演算法、神經網路、圖形搜尋、電腦下棋、邏輯推論與專家系統」等主題。

當然、我們還遺漏掉一些重要的主題,像是「模糊邏輯、機率統計、機器學習、資料挖礦、模式識別」等等,未來筆者將會對這些主題進行補充,