前些日子把讀過的機器人書整理上來後,網友 HuaHua 留言推薦了《機器人:由機器邁向超越人類心智之路》。後來我特地跑一趟政大書城,翻閱後才想起幾個月前也在這翻過。如今再次翻閱,還是沒抱回去好好端詳,最大原因是此書主要內容,我在其他諸如書、網路、或論文等,幾乎都涉獵過。
昨天到國家圖書館,無意間發現該書竟躺在那,頻頻向我招手……嗯,這次當然不能再錯過 ^__^
與其說這是本講機器(人)的書,不如說它是探討人造智能(AI)或電腦及機器智慧(Machine Intelligence)發展潛能的書。
Autonomous Mobile Robots
這本書最合我胃口的是第二章〈小心!前有機器車〉,探討作者對機器自走車的實務經驗。裡面提到作者 Hans Moravec 在 Mobile Robot Laboratory 接受 Denning Mobile Robotics 委託,研究如何以二十四個聲納組成的障礙偵測裝置,量測、取得的距離資料,完成自主機器車導航的任務。
聲納是藉由發射一束以三十度角展開的超音波反射回來的聲波來推測距離的,其得到的距離很精確,回音由哪反射回來卻是未知的(因為有三十度的範圍)。所以採用追蹤影像突出特徵的作法無法適用。
作者和學生 Alberto Elfes 合作設計了個新方法解決這個問題。該方法不嘗試找出物體的位置,改而累積計算每個位置所擁有的物性(objectness):
- 這個架構下,機器人對周遭「物體」的確切身份、甚至存在與否都存疑,但對周遭「位置」的存在卻不容置疑。
- 因此每個位置被視為一個個永遠存在的水桶,時時刻刻接受並存積著像是小雨般不斷落下、顯示物體佔據該位置的證據。
其具體的作法如下:
- 將機器人四周的區域以格線劃分,每一小格都紀錄一個數字,代表目前為止,累積對該位置擁有物體(或是該位置空白)的證據。
- 每當聲納發射一束新的探測聲波,其掃過區域所涵蓋格子的數據,便不斷修正。
- 格子若位於回聲源,將獲得更多證據,證明有物體存在該範圍內。
- 格子若位於回聲源與機器人間,將失去這樣的證據(因為若有任何物體存在其間,回聲會從更近的距離傳回)。
- 由探測聲源往外,聲波強度及其探測準確度,隨距離遞減。所以證據的修正幅度,也要取決於探測聲波在空間中掃過體積(或面積)的大小。
對自主移動機器人有興趣的,想知道機器人如何知道自己身在何方(Localization),如何藉由路徑規劃(Planning),由某個地方到達目的地(Navigation),強烈建議好好翻翻我之前在 Robot Book 閱讀清單也推薦過的 Introduction to Autonomous Mobile Robots 一書。
Power and Capacity
第三章 Power and Presence 主要探討計算能力與機器心智間的關係。曾經關注過電腦發展的人,對這章的推論應該不會太過驚訝:作者一開始先提提怎麼樣能力(如運算速度及記憶容量等)的電腦能達成怎麼樣的任務,然後粗估了人腦運算速度及記憶容量,既然電腦運算能力每年都要倍增,所以估出 2020 年時,個人電腦的能耐會達到人腦級。無論對這議題感到興趣或心存懷疑的,都非常建議也翻翻《心靈機器時代》,當中提到的時間與渾沌的定律(The Law of Time and Chaos),很值得一讀。
作者還在這章提到一個非常有意思的主題--電腦史上不同時間點 PC 的記憶容量(megabytes)與運算速度(MIPS)相除,會粗略維持一個常數,約 1 秒鐘(大概等於電腦將整塊記憶體掃一次需要耗費的時間),原因是電腦跟外界溝通的主要對象是人類,所以要受人類的速度感所束縛,原文對這部份描述得很生動:
The megabyte/MIPS ratio seems to hold for nervous systems too! The contingency is the other way around: computers are configured to interact at human time scales, and robots interacting with humans seem also to be best at that ratio.
On the other hand, faster machines, for instance audio and video processors and controllers of high-performance aircraft, have many MIPS for each megabyte.
Very slow machines, for instance time-lapse security cameras and automatic data libraries, store many megabytes for each of their MIPS.
Flying insects seem to be a few times faster than humans, so may have more MIPS than megabytes.
As in animals, cells in plants signal one other electrochemically and enzymatically. Some plant cells seem specialized for communication, though apparently not as extremely as animal neurons. One day we may find that plants remember much, but process it slowly.
Universal Robots
電腦是 Universal Turing Machine, UTM 的一個良好近似,和 UTM 對應的是 Universal Robots, UR 。不同的是 UTM 專職在虛擬的數位空間發揮運算能力, UR 則落實到現實世界裡的感官及行動上。
萬用機器人是第四章的主題,看看作者對這個議題的看法還滿有趣的。而第四章之後的章節雖很讓人眼界大開,但扯得有點遠了,現在還是將它當作科幻小說的情節,看看就好 :p
Suggested Readings
- Robot: mere machine to transcendent mind -- 原文書作者首頁
- When will computer hardware match the human brain? -- 該書作者 1997 年寫的相關論文
- 《機器人》-- 該書簡中全文
26 comments:
這本書我也有收藏(特價時買的),還沒時間細看 and 這本書 有點年紀了.....
以我對人類意識,電腦視覺與人工智慧的淺薄了解,以機器模擬人的智慧,其關鍵不在硬體運算速度,而在於對人類心智的了解與建模,對感官處理機制的理解與演算法的創新。所以,用硬體的成長速度來預測,個人覺得是很不準確的作法。
這是我也收藏了《心靈機器時代》看到後來卻也看不下去的原因。
這個領域雖然還沒振奮人心的突破,但由於電腦硬體進步太快了,我們越來越難將其歸咎於硬體不夠快。
我也同意問題不只在「硬體運算速度」。那關鍵是什麼呢?是還需要創新的演算法嗎?是我們對感官處理機制理解還不夠嗎?還是我們對大腦運作方式知道得還不夠多?如果是的話,那要知道到什麼樣的程度才夠呢?
我有個物理背景的朋友,正在瑞士理工玩鼠腦,他認為關鍵在「硬體」本身。套句生物學那邊的說法:電腦就錯在它是「乾的」;它如果是「溼的」可能希望還大些。
那謎底究竟是啥……
唉!我要是知道就好了 :p
現在機器人發展上的問題
機器人實驗室有三組人員:機構、電子、軟體。
需要密切配合一起解問題。
機構:動作。
電子:感測器、馬達、電腦系統及電力系統。
軟體:人工智能、人機界面及"除錯"。
現在問題出在這個"除錯"上面。為何放在軟體上,因為機構出問題可以看得到,電子出問題可以用示波器量得到,那人工智能出問題該怎麼辦?
所謂人工智能出問題,可能是邏輯運算的問題,這是可以模擬的。
但實際上最常遇到的是:
1.機構或是電子想到新的作動方法,其資料狀態不明,那要如何做?
2.原預想的判定法則不如預期,也就是其感測器資料出現"非預期組合",那要如何找出?
現在方法為:由機器人端回傳資料,由PC端模擬,找出控制法則,再修改機器人控制程序。
以上方法重覆多次。常常又會再次遇到"非預期組合"。這就是問題了,我個人認為效率很差。
我提出解法為:安裝小型語言系統,利用"交談式"程式發展程序,找出符合的控制法則。
所謂的"交談式"程式發展程序,是指程式可以寫入新函式執行並回傳處理資料結果的方法。
如此的發展方法可以不必一定要將資料全部回傳到PC,只需寫入處理法則及"意外組合陷阱抓取",來檢測工作狀態。
之前我是使用Forth語言做為其媒介語言,可是問題出在它不使用口語化電腦語法,難以做為三組人員共同討論之電腦語言。
後來找到Lua語言,這個較符合需求。
在實驗室心得:
原來機器人研究所需知識領域太廣,卻沒有好的發展工具。
目前投入以機構人員為多,故對於電腦上的資料處理較不善長。所以無法發展可以真正應對於機器人發展之軟體語言。
在研發上若是如此不易,那機器人產業又要如何起飛?
多核的計算機系統, 效能的瓶頸往往在於資料同步, 越多核心所需要的通訊成本越高.
如果要以目前的多核架構, 做得像神經元一樣可以輕易的與數量龐大的其他神經元通訊, 應該不是一件容易的事情.
To Wallace,
你的文字,我看起來的感覺是,軟體專業的人才,在機器人這個產業,有很多事可以做,大有可為啊。
To Hua-Hua,
多核的架構,根本上與神經元的架構"一點關係都沒有"。
比較類似的架構應該是很久以前Daniel Hillis在MIT博士班做的連結機器吧,可以參考
http://en.wikipedia.org/wiki/Danny_Hillis
To Toyogray :
我的意思是, 同樣是平行處理, 計算機系統有著與生物神經元不同的障礙--計算與通訊成本的比例. (也許生物的神經元也有這個問題, 我不是很清楚.)
我想嘗試討論的是"問題不只在「硬體運算速度」"或"關鍵在「硬體」本身"的原因--硬體本身的限制/與生物神經元的不同.
謝謝你的回應.
其實我在平行處理運算的場合,會比較想用FPGA。有時在想,如果FPGA的運算單元、記憶單元和網路單元可以由FPGA運算的結果重新規劃的話,那不就有點像是類神經系統,而且完全是平行運作的。
可是好像沒有人這樣做。
機器人感測器自由度無限爆炸
每一個感測器為一個自由度,所以N個感測器就會產生N個自由度。加上時間,所以N+1個自由度應可以解。
可是我只用了二個感測器,就遇到自由度無限爆炸問題。
我是做機器人視覺,所以"只"用了二個CCD。
當我想將二張影像解回三度空間影像,再由機器人做為環境檢知用。此時就已無法分析自由度了。
三度空間資料雖不小,仍可以估算使用容量。但對機器人有用的"資訊",已多到不行。
這也是我在使用人工智慧程式會遇到的問題,因為老是出現"意外組合"。當然我只用了最低等級的智能:直接反應系統。
另外影像運算就動用了FPGA做平行處理。可是仍有一堆待加強運算要做。
在機器人實驗室中,電子人才也很缺。本想做機器人視覺,所以做了許多軟體上的研究。結果,教授要在電子系統上模組化以加速未來之發展。我又變成電子人員,要計設PCI卡及USB感測器模組。做為未來快速組合之應用。希望PC界面不要換來換去,苦的是做電子的。
有人在發展直接使用類C語言產生可以在FPGA中執行的程式。可是FPGA並不是CPU,它是一種"均質"電路,所有單元都是一樣的。如果單元夠多,也可以將語言轉換系統放進去,這樣算不算是一種"電子腦"啊。
關於FPGA內部結構請參考
http://tech.digitimes.com.tw/ShowNews.aspx?zCatId=119&zNotesDocId=0000037069_A238X6LVCB7NMSF8IVVQ1
To Wallace:
google關鍵字: 人工大腦 雨果 fgpa
加里斯:人工大脑之父
To HuaHua:
人工大腦是用FPGA做類神經的樣子吧。
可是我也有提出使用FPGA編譯程式方式的電子頭腦。
當然二種方式的運作特性必定差很多。
就以可控制來說,使用編譯方法的電子頭腦具有很好的重覆性,我認為較容易實現。
而使用類神經型式的,可以對付比較複雜的問題,不過也具有少許不穩定性。
To Wallace:
一般的FPGA使用:
撰寫HDL(verilog/VHDL)->編譯/合成netlist->load netlist至FPGA上.
你說的"使用類C語言產生可以在FPGA中執行的程式", 我的印象中是將某種自定義的C-like code轉換(編譯)至HDL的步驟.
這個研究的一個應用在於hardware/software partitioning, 可以較容易的將程式(c code只需要稍作修改)轉換成硬體來加速.
google: "hardware software partitioning verilog"
To HuaHua:
我找到的是Self-wiring supercomputer
Google:fpga Self-wiring supercomputer
不過沒有提是使用何種語言。而且不一定是以Verilog或VHDL為中介語言。因為這兩個都要編譯及下載,比較像是statically typed的語言。而支持動態解譯,可能要創新語言才成。說起來現行的Verilog及VHDL就像C一樣,一但要有dynamically typed就要另創,就像是Lua一樣。
To Wallace:
我從google上找到的資訊, 沒有提到"C-like"的語言, 你能多給一些提示嗎?
我查到的內容偏向"dynamic reconfigurable hardware". 我的印象中, 這東西是在run-time時, 偵測並組合出最有效率的硬體(通常是ALU), 舉個例子:
for(i=0; i<100; i++)
{
y = (x + 1 + z )/k;
}
迴圈內的運算通常是被拆成數個運算, 花數個cycles完成, 然而如果此時有個ALU提供 result = ( op1 + op2 + op3) / op4 的運算, 則這數個cycles的運算可以在一個cycle完成.
新產生的ALU是由reconfiguable-hardware完成, 而reconfiguable-hardware可由FPGA實作而得.
目前比較商業化的提議可能是 -
google:"intel fpga"
"印象中"是為了提升GPP的運算效能, intel有提過加入fpga來動態產生ALU.
使用c-like是我猜的。不過電腦語言依據描述型態才只分三類:Object-Oriented, Procedural, Functional。Verilog及VHDL都是Procedural。另外二種都未見到,可見FPGA上的程式語言還有很大的進步空間。C語言的語法很小且容易找到參考,新語言若是以Procedural為描述的話,使用C會是最快實現的。
其實我認為FPGA上面可用語言太少了,理論上應會在新領域再多幾個才是。
To Wallace:
有創新的理想是件好事. 但在那之前, 有些觀念得先釐清--
1. HDL(硬體描述語言)不是設計給處理器的程式語言. 沒有機械碼, 沒有code/data segment. 最終它只是描述出邏輯閘如何連接. 因此, 拿程式語言的分類套在HDL上是否恰當?
2. HDL的進展, 從gate level,到register transfer level, 到behavior level. 雖然一步步走向"抽象化", 但骨子裡還是用層層模組包著邏輯閘. 從verlog/VHDL之後, 新創的HDL有systmeC, systemVerilog, 它們的設計理念並不是朝向"更抽象化", 而是提供一個更容易驗證的環境. --IC的驗證已經佔了整個IC設計很大的部份.
3. FPGA的新創語言-- 在那之前, 不如先來設計新的FPGA硬體架構吧. 你需要一種新的FPGA硬體架構支持, 才能跳脫目前FPGA的使用流程.
至於"C-like"是你猜測"Self-wiring supercomputer"的實作方式. 但以我的印象中, 做出"dynamic reconfigurable hardware"並不需要新的軟體支援, 它只是種電路設計.
討論至此, 已經離機器人設計有些遠了. -- 雖然計算機系統是我很感興趣的主題. (我對機器人的興趣建構在機器人可能需要的計算機系統上)
我說的新的HDL應要改的是描述語法,是要對人類界面所呈現的面像,這和實現沒有關係。因為不同的描述方法會對人工智慧產生不同的影響。Functional語言一開始誕生,很快的就用在解人工智慧。要以FPGA解人工智慧,為何不能Functional的語法來描述?
所以在有可以自我設定FPGA產生出來就一定要有對應的語言會產生出來。我知道現在FPGA皆在gate層級做設計,所以使用靜態執行層是為了確保驗證。
可是你若是了解Automata的理念,就可以知道CPU只是執行的一種方式。以FPGA來做必然會做的更好。人工智慧有許多部分和Automata是相互關連的。所以未來一定可見以FPGA來實現人工智慧的方法。
另外Verilog及VHDL只是用在電路設計?我認為它是以現在的語法產生之concurrent語言的應用。用它來描述concurrent之間的互動也是很好用。
To Wallace:
"我說的新的HDL應要改的是描述語法,是要對人類界面所呈現的面像,這和實現沒有關係。"- 這是個有趣的問題.
假定有一個"與實現沒有關係"的語言, 用來做一個複雜而又要求彈性的問題--任意的問題. 你認為這個語言合成出來的硬體會是什麼呢? 會不會是cpu + RAM + 某段程式碼? --至少這是已經被實作出來的硬體.
而用電腦(程式)解不出來的問題, 即使換成fpga也是解不出來的.
至於HDL的應用, 是不是有描述生物細胞連結(我只是舉例)等等其他應用--"concurrent之間的互動", 我想是很有可能的, 這是個好點子.
電腦語言描述法,就像是程式用英文還是用中文寫一樣,和執行有關係嗎?沒有嗎,只要執行的時候資料對、函式呼叫對就行了。
相對的FPGA上就不能使用非Procedural的語法嗎?我不認為。相反的若是可以用Functional方式描述,那用FPGA可以容易寫出人工智慧的程式。當然在執行層仍和現在相同有gate level驗證等問題。這和之前的self-wiring是沒相關的問題。
至於能不能解問題,在turning machine相關的理論中有討論到。確實CPU不能解FPGA也不能解,可是執行效能會有很大的差別。有的會好,有的會差。
To Wallace:
A Functional HDL in ReFLect
"Like LISP, reFLect has quotation and antiquotation constructs that may be used to construct and decompose expressions in the language itself. Unlike LISP, these mechanisms are typed. The language also provides a primitive mechanism for pattern-matching, and in particular for defining functions over code by pattern-matching on the structure of reFLect expressions."
目前只有找到這篇, 而且只有1個page, 有興趣可以繼續追蹤下去, 我相信他們應該會把實作(合成)部分考慮進去, 如果將來有機會看到後續發展的話.
至於這個(函數式編程)HDL的設計動機, 我的猜想是利用函數式編程對於平行處理有較簡易的描述/易於除錯, 如同Erlang也使用了函數式編程.
To Wallace:
(上一篇資料應該是你要找出來的, 怎麼變成我找出來了 @@")
我不明白為什麼你大力著墨在FPGA上.
在目前的硬體(電路)上, 跑在最前頭的硬體總是CPU, 其他的硬體擔任的是"加速器"的腳色--為提升效能而存在, 將部份CPU運算轉移到其他加速器上. 不管是"hardware/software partitioning"或是"dynamic reconfigurable hardware", 都可以說是產生加速器的方法, 而主角還是軟體.
我認為既然你想要有一個"和實現沒有關係的語言". 就不應該侷限在FPGA上, 最少這個語言一定可以被CPU執行, 至於執行效能的改進, 就交給加速器吧.
至於上一篇"A Functional HDL in ReFLect"--函數式編程HDL(如果真的存在的話), 是"和實現沒有關係的語言"嗎? 或者它就是為了容易描述平行處理而設計的?
這個主題的討論到此應該夠了吧.@@
機器人系統與生物系統之比對
機器人 脊椎動物 功能
------------------------
電腦 大腦 認知
FPGA 脊椎 反射動作
通信 神經 控制信號
感測器 神經末梢 環境輸入
馬達 肌肉 運動
電子板 器官 能量轉換
http://only-perception.blogspot.com/2009/03/blog-post_21.html
在人類腦中的每一個神經元透過突觸與一萬個其他神經元相連,Lu 說。工程師無法憑藉今日基於電晶體的電路達成那種連結。但憶阻器電路或許有潛力克服這種問題
To Hua-Hua,
很抱歉,由於 blogger 設定錯誤,剛剛才看到你三月的 PO 文。
言歸正傳,建算電晶體可以達成那樣的連結,還有一個問題,這些連結要是可以允許動態,且快速改變的,否則還是無法用在這個場合。
Post a Comment