﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-天堂的另一角-随笔分类-人工智能</title><link>http://www.cnitblog.com/addone/category/8649.html</link><description>天堂魷魚的原创技术博客。所謂兼容並包，無奇不有。</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 10:49:17 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 10:49:17 GMT</pubDate><ttl>60</ttl><item><title>猜拳遊戲：偽智能大挑戰</title><link>http://www.cnitblog.com/addone/archive/2010/04/13/65255.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Tue, 13 Apr 2010 09:14:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2010/04/13/65255.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/65255.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2010/04/13/65255.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/65255.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/65255.html</trackback:ping><description><![CDATA[在前文<a target="_blank" href="http://www.cnitblog.com/addone/archive/2010/04/04/65094.html">「證明：GnuGo及同類博弈程序屬於偽智能」</a>中，有人提出異議，認為我是在拿兩個完全相同的引擎進行測試，而世界上沒有兩個完全相同的人，自然下不出完全相同的棋局。於是我進行了另一項針對多種不同引擎的實驗：猜拳。<br>測試的目標，是要對人、人工智能的決策方式進行對比，由隨機決策的結果作為參照。為此，我寫了一個測試平台，讓多個引擎進行連續對決，並對結果進行統計分析。<br><br>注意，本次實驗中，<span style="font-weight: bold; color: red;">決策的結果（猜拳的勝率）並不重要，我們唯一關注的是決策的方式。</span><br><br>
<h3>測試平台說明</h3>
所有程序皆使用Python寫作。人機對戰回合數以100次為基準，AI對戰則以300次為基準。<br>為方便起見，測試平台會按照對戰雙方的出「石頭」、「剪刀」、「布」的概率生成報告，然後可以由其他軟件（如Excel之類）讀取並生成概率曲線。生成的result.txt是合計報告，result_pp1、result_pr1、result_ps1分別是Player 1出「布」(Paper)、「石頭」(Rock)、「剪刀」(Scissors)的移動平均概率，其中n值為10。<br><a target="_blank" href="http://www.cnitblog.com/Files/addone/PRS_20100413.zip">測試相關代碼點此下載</a><br><br>
<h3>引擎說明</h3>
所有繼承自Player的引擎均可接入測試平台。本次測試的所有引擎均沒有使用隨機數。<br><br>人工引擎HumanPlayer：只是一個人工對話程序，沒有實際的決策能力。由操作員選擇出拳方式後，會將對方出拳及猜拳結果顯示出來。<br><br>隨機引擎RandomPlayer：完全以隨機方式決定出拳。由於沒有決策能力，很適合作為「靶子」使用。<br><br>Billy系列引擎：由Billy Sir開發，包括LiMing、Linda等簡單回溯引擎，以及Billy、Billy2等具備模式搜索功能的引擎。<br><br>Adam系列引擎：由本人開發，包括Adam、AdamP，設計目標是在沒有給出遊戲規則的情況下（即AI本身不清楚出拳的強弱判定），單純根據勝率確定策略。<br><br>
<h3>實驗目標說明</h3>
<span style="color: red; font-weight: bold;">. 驗證AI能否在不使用隨機數的情況下，根據隨機對手的出拳而產生具備隨機特徵的概率曲線；</span><br style="color: red; font-weight: bold;"><span style="color: red; font-weight: bold;">. 驗證兩個不同的AI引擎能否在不使用隨機數的情況下，在對戰時產生沒有明顯規律的概率曲線；</span><br style="color: red; font-weight: bold;"><span style="color: red; font-weight: bold;">. 比較AI和人在同樣面對隨機對手的情況下，產生的概率曲線有什麼異同。</span><br><br>
<h3>測試結果及分析</h3>
首先需要以人和隨機引擎的測試結果作為參照，其概率曲線如圖所示：<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/PRS_Test/me-Random.png" width="871" height="389"><br><br>圖中的藍色曲線是人出「拳頭」的概率，紅色、綠色分別是隨機引擎出「布」、「剪刀」的概率。<br>所有曲線都有很明顯的隨機特徵。但很顯然，藍色曲線和綠色曲線正相關，而和紅色曲線負相關。如：在第30~40回合之間，隨著出「剪刀」的概率加大，我們出「拳頭」的概率也增大；在45~65之間，隨著出「布」的概率增大，我們出「拳頭」的概率隨之減小。這正是現實生物「趨利避害」的思考方式的體現。<br><br>那麼，我們的AI引擎表現又如何呢？<br>下圖是Linda和隨機引擎的測試結果。藍色曲線是Linda出「拳頭」的概率，紅色、綠色分別是隨機引擎出「布」、「剪刀」的概率。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/PRS_Test/Linda-Random.jpg"><br><br>可以看出，Linda具備一定的趨勢跟蹤能力，但曲線波動遠遠不能反映對手的趨勢變化。而其中更是有許多非常明顯的決策失誤，如200前後的綠色出現一個峰值，正是出「拳頭」的好時機，可是此時的Linda反而棄之不用，簡直莫名其妙。<br><br>讓我們再來看看Billy的情況。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/PRS_Test/Billy-Random.png"><br><br>Billy的隨機特徵表現得非常明顯，大多數時候也表現出了根據對手出拳概率而改變策略的情況，但仍然出現了許多莫名其妙的決策趨勢。如100前後的「拳頭」峰值就有些「高深莫測」，而在200前對手出現「剪刀」峰值的情況下也並沒有作出有效進攻。<br><br>最後看看AdamP的概率曲線。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/PRS_Test/AdamP-Random.png"><br><br>和Billy一樣，AdamP的曲線也具備隨機特徵，但卻顯得「大起大落」，頗具本人個性。盡管多次出現100%的決策概率，但在大多數時候，決策曲線還算有針對性。不過面對150回合的「剪刀」峰值，決策的作出卻產生了滯後，以致於落入了隨後的對手出「布」的峰值的圈套中。<br><br>實驗可知，<span style="font-weight: bold; color: red;">盡管計算模型本身不能產生真正的隨機數，但在面對隨機的對手時，AI是可以作出具備隨機特徵的決策的。</span>和人相比，AI對形勢變化的判斷能力和反映能力還是比較弱，也就是說，<span style="color: red; font-weight: bold;">應變能力遠不如現實生物。</span><br><br>不過單從以上的曲線來看，AI引擎就算和人相比，也還算是有模有樣的，貌似我所說的「偽智能」沒有了說服力。且慢，讓我們看看Billy和AdamP的對戰結果。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/PRS_Test/Billy-AdamP.png"><br><br>嘛，關於這個結果嘛，大家自己看，我就不多說了。<br>如果你覺得任意兩個正常的現實智慧生物能出現這樣慘不忍睹的策略概率曲線，不妨舉例。反正我是沒見過。<span style="color: red; font-weight: bold;">實驗目標2宣告失敗。</span><br>如果你認為你有辦法讓兩個不使用隨機數的AI在對戰時產生沒有明顯規律的策略概率曲線，也不妨和我討論。<br><br>至此，這個實驗卻並沒有結束，AI與隨機對手的戰鬥不過剛剛開始而已。欲知後事如何，請聽下回分解。<br><br><br> <img src ="http://www.cnitblog.com/addone/aggbug/65255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2010-04-13 17:14 <a href="http://www.cnitblog.com/addone/archive/2010/04/13/65255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>證明：GnuGo及同類博弈程序屬於偽智能</title><link>http://www.cnitblog.com/addone/archive/2010/04/04/65094.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sun, 04 Apr 2010 13:05:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2010/04/04/65094.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/65094.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2010/04/04/65094.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/65094.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/65094.html</trackback:ping><description><![CDATA[簡單（不嚴謹）的解釋一下：<br>GnuGo：一個著名的圍棋程序；說到免費的圍棋AI，最為鼎鼎大名的就是它了。它也是開源的。本次實驗中使用了Goban作為前端。<br>博弈程序：其他下棋程序。<br>偽智能：在AI研究界中有「弱人工智能」、「強人工智能」的說法，不過我所說的「偽智能」指的並非那個概念。我認同McCarthy關於AI的定義：「<span style="color: red;">人工智能就是要讓機器的行為看起來就像是人所表現出的智能行為一樣。</span>」所以，所謂的偽智能就是指根本表現不出人的智能行為卻被廣泛的誤認為具備智能。這個詞我是從「偽春菜」裡借用過來的。<br><br>
<h3>實驗步骤：</h3>
打開兩個GnuGo的前端，棋盤均設置為9路，其中一個执黑，另一個执白。<br>開始执白方的遊戲，讓電腦下子。<br>依樣畫葫蘆，在执黑的那邊下同樣的子。依此類推。<br>下10手後，對照兩邊的棋譜。<br><br>
<h3>結果：</h3>
電腦前3手並不總是固定的。<br>但假如前4手下法正好一致的話，後面下出完全一致的局面的機率非常高。<br><br><span style="font-weight: bold;">棋局1</span><br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/go/pseudoAI_11.jpg"><br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/go/pseudoAI_12.png"><br><br><span style="font-weight: bold;">棋局2</span><br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/go/pseudoAI_21.jpg"><br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/go/pseudoAI_22.jpg" width="267" height="268"><br><br>有興趣的朋友可以參照我給的兩張譜自行實驗。你也將能輕鬆看到完全相同的棋局。<br>嘛。。。作為對比，你可以試試兩個人對弈，從第4手以後開始下。就算是9路的棋盤，也基本不可能出現完全一致的情況。所以可以認定，<span style="color: red;">GnuGo表現出來的是「偽智能」</span>。<br><br>
<h3>分析：</h3>
這個方法是受一個著名的AI設計概念所啟發。即：<span style="font-weight: bold;">如何用最簡單的方法，實現一個和人對弈總能保持至少50%勝率的AI程序？</span><br>答案很簡單：做一個對戰程序，找兩個人同時和程序對弈，程序的功能僅僅是把一個人的下法完全複製到另一個人那邊。用這種方法，每次程序總能贏兩人中的一個，也就是勝率50%。<br><br>初聽起來也許顯得有些無賴，但實際上這卻是個很有啟發意義的概念。這個答案告訴我們兩點：<br>. 人類具備通過「圖靈實驗」的能力；<br>. 要想實現可以通過「圖靈實驗」的AI，最簡單的方法是直接引入現實生物的智能；<br><br>而我根據設計的這個反過來的實驗，則證明了一點：<span style="color: red;">實驗中的兩名對弈者都是徹頭徹尾的sb。</span>即使它們棋下得再好（事實上我下不過它們。。。），它們也仍然改變不了自己是sb的事實。棋下得再爛的人都不可能下成它們那個樣子。<br><br>為什麼？<br>這是由我們的智能程序實現方法論決定的。作為決策程序來說，設計者希望AI程序總是選擇最佳策略──他們認為人也是這樣的。他們錯了。人──或者說，<span style="color: red;">幾乎所有的現實生物，從來就不會按照所謂的「最佳策略」行動。</span><br><br>事實上，<span style="color: red;">幾乎所有的現實生物都是按照「次最佳策略」行動的</span>。這取決於兩個因素：一、你永遠不可能對周圍的環境有完全的了解；二、<span style="color: red;">你永遠不希望其他的生物能預測到自己的下一步行動</span>。這一點，已經為神經生物學的實驗所證實。<br>由於無法對面臨的問題做完整的建模，「最優解」就根本不可能作出。而更重要的是，在你面對一個具備「智慧」的對手時，選擇「最優解」將成為你的噩夢──那將意味著你的每一步行動都會被對手準確預測。所以，現實生物從來「不按常理出牌」，永遠會用各種方式迷惑對手而不會只採取某種「最佳策略」。為了生存，任何生物都必須學會妥協。<br><br>而無論是神經網絡還是模糊算法等等AI界的常用算法，在設計目標上就和現實生物完全不同。在幾乎所有的博弈程序中，設計者總是傾向於讓他們尋找「最優解」。<span style="color: red;">這些程序和人類戰鬥的唯一武器僅僅是搜索深度，而根本無法表現出真正的「智能」</span>。因為假如AI的搜索深度被限制為和人類等同，人們總能輕鬆預知它們的下一步行動，從而<span style="color: red;">使「最優解」變成AI的噩夢</span>。<br><br>這就是「偽智能」和「智能」的最大區別。<br><br>很杯具，許多AI的設計者無視McCarthy的定義，妄圖走捷徑──研究AI怎麼能不先研究人呢？大概是因為那樣太困難了吧。畢竟，以當今人們對於自身的了解，想要做出能夠真正模擬人類行為的AI無異於天方夜譚。不過，實用主義者往往有犯方向性錯誤的傾向，也許這也是無可奈何的吧。<br><br>最後說明一下，本文中所使用的驗證方法理論上可以檢驗所有的博弈類
<meta http-equiv="content-type" content="text/html; charset=" utf-8="">AI是否具備進行「次最佳決策」的能力，可以作為「圖靈實驗」的一個補充。針對此方法，也可以從問題複雜度、求解空間等方面出發進行定量的正規化處理。這裡就先按下不表了。<br><br><br> <img src ="http://www.cnitblog.com/addone/aggbug/65094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2010-04-04 21:05 <a href="http://www.cnitblog.com/addone/archive/2010/04/04/65094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>