課程首頁:MIT OpenCourseWare-Artificial Intelligencehtml
網易公開課:《麻省理工學院公開課:人工智能》前端
授課教授:Professor Patrick Winstonnode
參考書目:Winston, Patrick Henry. Artificial Intelligence. 3rd ed. Addison-Wesley, 1992. ISBN: 9780201533774.算法
這一講首先介紹了人工智能的定義[0:00:00]。編程
以後,教授講解了生成測試法,並詳細談到了給事物命名的重要性:「給某種事物命名後,你就對它擁有了力量」[0:11:30]。後端
再後,教授介紹了人工智能發展的簡史,講到了本課程中將會接觸到的各類人工智能程序[0:20:28]。緩存
最後,教授展望了人工智能的將來並講了一些課程事務信息[0:32:40]安全
首先,什麼是人工智能?!Professor Winston給出了定義:Algorithms enabled by constraints exposed by representations that support models targeted at thinking, perception, and action。人工智能這門課是一門專門針對思惟,感知和行動而建模的課程(建模是MIT的根本)。除了建模,咱們還須要有支持模型創建的表示系統(why? 教授用陀螺儀和「農夫狐狸鵝和稻穀過河的故事」來舉例說明表示系統的做用),而有了表示系統,約束條件就會呈現。最後,咱們須要建立程序或算法來實現。網絡
一個簡單的例子就是「生成測試法」(generate and test),如想知道一片樹葉的學名,能夠翻開一本介紹樹葉的書,一頁頁比對,測試是否相同。歸納起來就是:生成器生成一些可能的答案,輸入到一個測試器裏進行測試,其中大部分會失敗,偶爾有部分會獲得滿意的答案。咱們把這種方法命名爲「生成測試法」,是頗有必要的。Once you hava a name for something, you get power over it。有了名字,你就能夠談論它,名字給了你力量,這就是Rumpelstiltskin原則。這正如咱們有了數學符號,咱們就能夠描述,談論和發展數學。架構
舉個例子:若是教授提問學生「赤道線穿過了幾個非洲國家?」,這是教授經過語言和學生交流,而學生的語言系統會向視覺系統發出指令,讓它執行一個程序,沿着赤道線掃描地圖,確認結果後反饋給語言系統,讓學生回答說六個。生活中簡單的事件,細細想來倒是多麼的神奇!若是沒辦法理解這種奇蹟,就沒辦法理解智能的含義!
而後,教授簡單介紹了下人工智能的發展史,從1842年埃達·洛夫萊斯編寫第一段計算機語言,到1950年艾倫·圖靈寫的著名的關於圖靈測試的論文(speculation age),現代的紀元真正開啓於1960年馬文·閔斯基寫的《通向人工智能的步驟》,以後一位近乎失明的研究生James Slagle寫的積分程序(以後會回顧),並演示了黎明(dawn age)早期和晚期的一些有趣的程序或系統。以後進入了推土機時期(bulldozer age),即專家系統和商業時期以後的一個時期,例如深藍。如今正處於正路時期(right way),一個重要的關鍵詞就是imagination。
以後教授又重申了語言的重要做用,他指出人類進化過程當中,將咱們與黑猩猩區分開來的是一小部分人得到了一種能力,能將兩種概念合併爲第三種概念,同時又不會破壞原有的兩種概念,並且沒有限制。這讓我想起了《人類簡史》裏提到的相似的描述「人類語言真正最獨特的功能,並不在於可以傳達關於人或獅子的信息,而是可以傳達關於一些根本不存在的事物的信息。」語言的做用在於(一)向上,讓人類可以描述見到的事情,具備講故事的能力,而講故事和理解故事正是教育的所有;(二)向下,讓人類可以想象語言描述的場景,例如:沒有人告訴咱們提着裝滿水的水桶在大街上跑會發生什麼,可是咱們很容易就能夠聯想到結果(你的大腿可能會被淋溼)。若是不能理解這個,咱們將永遠沒法理解人類智能!
最後講了一下課程相關事項,這裏不贅述。
PS. 課程中提到的一個概念,值得深思:簡單(Simple)與微不足道(Trivial)的區別:簡單也可能強大,微不足道不只簡單,並且無價值。不少MIT人錯過機會的緣由在於,認爲只有複雜的概念纔是重要的概念。實際上,人工智能中最簡單的概念一般都是最強大的。人工智能課程中,能夠包含不少數學,成爲數學系課程,但這會讓概念沒必要要地複雜化,沒必要要地數學化。
這一講首先經過一個積分題引出了課程內容,講解早期人工智能中求解符號積分的人工智能程序[0:00:00]。
以後,教授介紹了安全變換和啓發式變換,並用它們求解了這個積分題[0:05:40]。
詳細介紹了程序求解積分題的方法以後,教授講解了人工智能這方面中值得思考的問題[0:31:40]。
若是給你一個積分題,你將如何求解?
請思考:若是一個計算機能計算出來,那它算得上智能麼?
咱們回憶下大學裏作積分題的時候,確定是經過變換,化簡,轉換成熟悉又簡單的基本積分表/公式,而後求解。這就是問題歸約(problem reduction)。
爲此,咱們須要一套基本的安全(safe)變換,好比提取常數或乘上負數,這些變換是最基本的,最直觀的,也是最安全的,儘管也許並不能解決稍有難度的題目。
接下去咱們 1. 應用基本變換;2. 查表;3. 測試是否結束。
每每這時候是不夠的,咱們還須要啓發式(heuristic)變換,做爲咱們求解過程當中的一種嘗試,不必定有效,有時候卻能發揮做用。例如,當咱們不懂如何化簡時,咱們就會去嘗試三角變換,咱們事先不肯定它必定有效,只能變換後再觀察下形式,說不定就柳暗花明又一村。
在轉化的過程當中,可能會引入「與節點」(and node)和「或節點」(or node),用來分解後分別求解以後組合,或轉化爲任何一種可能求解出答案的形式。咱們把這種分解獲得的節點樹稱爲「問題歸約樹」,或「與/或樹」,或目標樹(goal tree)。Once you hava a name for something, you get power over it。
接下去當咱們遇到「或節點」,該如何選擇?Simplicity是個方向,對於計算機來講它得有一個能夠衡量的指標,告訴它哪一個更優。
所以以前的流程在3. 測試並未結束後,能夠 4. 查找基本變換沒法解決的問題;5. 應用啓發式變換;而後循環回到1. 應用基本變換......,直至問題求解。
當咱們應用Slagle的這個模型來求解56道難題時,咱們能夠問:有幾道求解正確(54道);樹的深度是多少?平均深度是多少?多少分支沒用到?這樣,咱們就不只得到了這個模型的信息,也得到了這個domain的信息。
本課花了大半的時間,深刻介紹一個例子,在這一點上我贊同教授的說法:你想要學會一個技能(skill),就先得理解(understand)它,而爲此你必須先見過熟悉它(witness),這就是爲何要深刻細節(detail)的緣故。我以爲不少名校的公開課,學習的不只是課堂上的知識,還有授課教授對於教育和人生的本身的感悟、看法和理念。
接下去,讓咱們跳出這個例子,來思考求解積分這件事的本質。一個是關於知識的問答法,在解決一個問題中,須要哪些方面的知識?一個是關於知識如何表示?例如在本例中表現爲數學形式,有些會表現爲流程形式等等;另外一個是須要多少的知識?每當進入一個新領域時,你都應該問本身這些問題!Knowledge about knowledge is power!
最後,讓咱們思考本課開始的問題,這個程序算不算智能?當你知道它工做的原理,發現它運用的是你的解決方法,那麼它究竟算不算智能?留給你們本身思考。
這一講首先介紹了一個移動方塊的人工智能程序,並以此詳細講解了目標樹的概念,這一程序不只可以可以實現目標,還能解釋本身在過程當中的一些行爲[0:00:00]。
第二部分,教授詳細介紹了基於規則的專家系統,有一個醫療方面的專家系統比醫生的診斷還要準確,教授講解了它是如何作到的[0:18:20]。
第三部分,教授經過雜貨店裝袋的例子,總結了知識工程中的三大法則[0:33:17]。
在桌面上一堆大小不一的方塊堆中,想要設計一個能遵從咱們指令,將指定的方塊置於另外一個方塊之上的程序(PUT ON),咱們須要四個步驟:FIND SPACE、GRASP、MOVE、UNGRASP。而要GRASP方塊,先得有CLEAR TOP的操做,而CLEAR TOP又須要GET RID OF的操做,(其中可能涉及到屢次循環),它會回過頭去調用PUT ON。相似的,FINDSPACE也會調用GET RID OF操做。
舉個簡單的例子,桌面上Bx方塊置於B1之上,By方塊置於B2之上,如今想把B1放置於B2之上,那麼咱們須要上面說的四個步驟,其中爲了GRASP B1,咱們必需要CLEAR TOP B1,要完成這個操做,必須GET RID OF Bx,這回到了PUT ON Bx於TABLE上,開始新的系列操做,直至完成。在這個過程當中,向上是WHY,向下是HOW,構成了一個GOAL TREE。創建了目標樹後,程序就能回答關於他自身行爲的問題,例如「爲何你要挪開Bx方塊?」。
這個例子引出了本課的核心要義:行爲的複雜性 = MAX(程序複雜性,環境複雜性)。正如西蒙觀察的結論:螞蟻會在海灘上走出複雜的軌跡,更可能是由於避開復雜散佈的沙礫。
同時,這也引出了基於規則的專家系統。人工智能中全部有用的東西,均可以用簡單規則形式的知識表示出來,進行封裝。Stanford的Mycin寫了個診斷血液中細菌感染的程序,準確率很高。但涉及到太多醫學術語,這裏用一個動物園識別動物的例子來講明:
若是我說:這個動物(1)有毛髮;(2)有爪子;(3)有尖牙;(4)目光如炬向前;(5)吃肉;(6)有斑點;(7)移動迅速;你可能會迅速猜想出這是一頭獵豹。How?咱們來看看如下幾條規則:
R1:If 有毛髮,Then 一般是哺乳動物;
R2:If 有爪子,有尖牙,目光如炬向前(組成「與節點」),Then 頗有多是肉食動物。(第5條正好印證了確實是肉食動物);
R3:R1 + R2 + (6)+ (7),組成「與節點」,得出大機率是獵豹。
這就是猜動物的遊戲(是否是很像以前的「10個問題猜你內心想的明星」的遊戲,也是經過提問諸如「是男的嗎?」「是否是港臺的?」逐漸縮小範圍,最終肯定)。若是你畫出它們的推導圖,你會發現,其實這很像以前提到的目標樹Goal Tree。這就是一種基於規則的專家系統,在這個例子中更具體的叫作「基於規則的前向鏈專家系統(Forward-Chain Rule-Based Expert System)」,即從已知事實往前推出結論。與之對應的是「後向鏈(Backward-Chain)」,即從一個假設往回追溯。例如我問你:出如今咱們眼前的這隻動物是獵豹嗎?你會怎麼思考和回答!你確定會去確認:它是一個哺乳動物嗎,有沒有毛髮?是不是肉食動物,有沒有尖牙利爪?是否身上有斑點?且移動敏捷?這裏的假設是這個動物是獵豹,往回利用以前的規則去驗證。不管是向前仍是向後,這類系統都有一個重要特徵:演繹系統(Reduction System)。
最後,讓咱們經過一個雜貨店裝袋的例子,總結知識工程中的三大原則:
若是你去超市買不少東西要裝進購物袋裏時,你一般會怎麼作?你會基於什麼通用原則?例如:大的重的放底部,小的輕的放頂部;容易被壓壞的不能放底部;乾的溼的要分開;等等。你是怎麼知道這些的?確定是從平常自身的或觀察獲得的個案經驗中得出,怎麼放薯片,怎麼放牛奶,怎麼放蔬菜。因此,
啓發1:經過觀察個案,你能從別人那裏獲得經過其它方式沒法獲得的知識!
接下來再思考,當咱們放置罐裝豌豆和冷凍豌豆來講,會同樣的處理麼?儘管它們都是豌豆。但咱們都知道不要把從冰箱裏拿出來的東西和其它乾的東西放一個袋子裏。因此,
啓發2:考慮看起來相同,但實際處理方式有所不一樣的東西!
當咱們有了本身的裝袋規則後,咱們每次去超市都能完美的解決麼?若是有一天,你買了一個新的東西,以往的經驗和規則沒法告訴你,應該放在哪個塑料袋或者應該怎麼疊放,該怎麼辦?因此,
啓發3,創建一個系統,觀察它什麼時候出問題,出現問題的緣由是由於缺乏了某一條規則,須要你添加進去!
實際上,這些知識工程中的法則對於我的的自我改造一樣的重要!不是麼?當你學習一個新的主題和領域時,你如何將本身創建成一個專家系統?學習一些個例,看看有哪些專業的術語和定理,而後對於不一樣的問題思考它們之間的區別究竟是什麼,最後當作做業或者實際應用時,發現卡住了或者無從下手,那是由於你的知識體系還缺乏了一部分東西,你要去補回來,而後再去解決。如此往復,你將變得更加的智能和聰明!
PS. 留一個問題給你們思考:上面例子中的智能其實只是創建在規則上的,加了一層虛飾的系統,它基於規則,可是並不表明它理解這條規則,例如它知道薯片不能放最底部,也許它還知道由於這樣容易被壓壞,那麼它是否又知道爲何壓壞了就很差了嗎?它並無本身的常識。那麼問題來了:規則和常識之間有沒有任何關係?
教授對此持部分不可知論者的態度,認爲在一些特定狀況下,規則可以在咱們對常規事物的理解中扮演角色。教授演示了個例子,一個計算機程序經過讀取一段小說節選,基於規則庫分析出了各類要素,如主人公,角色,事件,心情等等,例如文字中提到A被B傷害,那麼程序推斷A有可能受傷,心情憤怒,或者A可能死去。文字中直白的描述通常較少,推斷的部分每每不少,這說明了什麼?說明大部份內容都是受控的幻想,做者知道你腦殼裏的規則,就能夠利用這些來說故事,不用鉅細靡遺,你卻能本身腦補細節。是否是想起了第一講中的關於講故事和理解故事的論述。O(∩_∩)O
這一講開始討論各類搜索算法,首先是最基本的大英博物館法,也就是找出一切可能的蠻力算法[0:00:00]。
以後教授經過例子講解了深度優先搜索算法和廣度優先搜索算法[0:08:05]。
以後,教授介紹了搜索中如何避免重複搜索,並用其分別優化深度優先和廣度優先算法,獲得登山算法和束搜索算法[0:20:26]。
最後,教授講解了故事閱讀中搜索的程序例子[0:41:15]。
打開手機中任一款地圖App,輸入咱們想要去的地方,系統就會推薦給你幾條路線。人類是怎麼作的?基本上只要你看一下地圖,通常不可貴到可能的路線,這能夠稱得上「視覺算法」。那麼計算機是如何實現的呢?一個簡單粗暴的想法是找出全部可能的路徑,這就是「大英博物館法」。
最簡單的搜索算法有深度優先搜索(Depth First Search):沿着一條路徑前進,沒法繼續往前時,開始回溯(Backtracking),回到上一位置,選擇另外一個分支,直至找到通向目的地的路線(不必定是最優的)。與之對應的是廣度優先搜索(Breadth First Search),一層層創建起這棵樹,而後發如今某一層獲得了到達目標的路徑。
舉例說明:S->A/B,A->B/D,B->A/C,C->E,D->G,求S到G?
深度優先搜索算法的流程大體以下:初始化隊列(S) -> 擴展隊列中第一個路徑(S->A | S->B) ->若是未結束,繼續擴展,把擴展獲得的路徑加入隊列,放置於隊列前端(S->A->B,S->A->D | S->B)-> ......繼續擴展,直至找到路徑,若是沒法找到,那麼刪除第一個路徑,開始擴展第二個路徑......。而廣度優先搜索算法不一樣的地方在於把擴展獲得的路徑加入到隊列末端。不過這個搜索算法有個愚蠢的地方,在於擴展路徑時有時又回到了以前的節點,這是浪費時間的。基於此,咱們能夠考慮檢驗待擴展路徑中末端的節點,若是該節點在原來已擴展路徑的末端出現過,那麼再也不重複擴展。爲此,咱們須要一個位置列表,存放以前已經擴展過的全部路徑末端節點。這是一種優化的選項。
在現實生活中,咱們都知道在尋找路徑中,每一次遇到選擇時,都要儘量的選擇靠近目標的路徑,而不是反方向,應用到程序中就是登山搜索算法(Hill Climbing)。這個算法要求在問題中有離目標距離的啓發式衡量,不然你如何知道哪個離目標更近。具體在算法中,與深度優先搜索算法的改進是在擴展路徑時進行排序後放到隊列前面。
登山搜索算法能夠算是深度優先搜索算法的優化,而束搜索(Beam Search)則是廣度優先的改良。在每一層的擴展中限制一個束寬(Beam Width)W,每層只保留W個節點,固然是離目標最近的W個。具體在算法中,與廣度優先搜索的改進是在擴展路徑時保持W最佳。
回過頭來再思考下登山算法,它的本意是指當咱們在大霧中須要儘快登上山頂,但卻沒法識別路徑,只能向身邊四個方向嘗試一段距離,看看哪一個方向使得自身海拔更高,那麼這個方向就有多是通向山頂的路徑。那麼這有可能存在什麼問題?一個問題是:若是你的周邊有個小山丘,那麼按照這個方法,有可能被困在這個局部最大值中,沒法登上真正的山頂;另外一個問題是:若是恰好你的周邊都很平坦,那該方法也彷佛失去了做用;還有一個問題一般出如今高維問題中:若是你恰好處在一個南北45度的山脊上,那麼你朝東南西北四個方向走,都是呈降低趨勢,除非沿着南北方向山脊走。這些都是可能會在算法應用中卡住你的地方,讓你覺得你找到了真正的答案。
最後回到上次課中提到的計算機分析小說選段的程序,計算機分析完後能回答你的一些問題,如「爲何A要謀殺B?」,在於它構建了目標樹,在局部中看聯繫,而經過查找更高層的內容,反思它自身的思考過程,並將這些高層反思內容綜合彙報出來。這就是爲何一些程序看起來很智能,彷佛它明白本身在作什麼,以及爲何這樣作!
這一講主要討論了最短路徑問題。首先教授在黑板上演示了一個例子,介紹分支限界法[0:00:00]。
以後,教授引入了擴展列表,避免重複擴展,以優化分支限界法[0:18:35]。
再後,教授經過可允許啓發式對算法進行了優化,避免尋找最短路徑時往反方向進行的無謂搜索[0:25:15]。
最後,教授將上述兩種優化加到分支限界法上,獲得A*算法,並講解了A*算法中可能碰到的一些問題[0:36:00]。
上一講主要集中於如何找到通往目標的路徑,這一講咱們來看看如何找到最短路徑。若是讓咱們用眼睛在一個簡單的地圖上掃描,咱們很容易肯定出一條最短路徑,那麼接下去呢?如何確保你肯定的是正確的?一個簡單的想法是找出全部的路徑,若是都長於這條路徑,那麼這條路徑就是最短路徑。但有時地圖很複雜,光憑估算,也許沒辦法大體肯定出一條最短路線,那麼該怎麼作呢?相似的,你開始從起點朝向終點開始擴展路徑,每次都擴展最短的節點,最終獲得一個預估的最短路徑,接下去你仍是要確保每一條路徑都長於你剛剛獲得的最短路徑。這就是分支限界(Branch and Bound),算法以下:初始化隊列 -> 測試第一個路徑(排序後) -> 擴展第一個路徑,並排序 -> 回到上一步,測試第一個路徑,以此往復 -> ......
一樣的,跟上一講同樣,咱們能夠用擴展列表存儲已經擴展過的路徑,若是第一個路徑在擴展列表(Extended List)中,那麼再也不須要擴展,避免無謂的重複。
另外,咱們都知道兩點之間距離最短,因此,當咱們擴展了第一個路徑後,咱們會獲得這些擴展節點通往目標的下限,咱們能夠以此做爲咱們擴展的依據,這也是一種優化策略,考慮剩下的直線距離下界,會讓咱們避免朝相反的方向嘗試,基於積累距離+估計距離,這稱爲「可允許啓發式(Admissible Heuristic)」。
那麼A*算法就是分支限界加上上述兩種優化獲得的算法。這個算法彷佛很完美,可是在一些特定狀況下(如非歐幾里得排列)使用可允許啓發式卻可能會遇到困難。這彷佛有點難以理解,不過要記住,Search is not about map, but about choice。在地圖模式下,可允許性須要知足「任一節點和目標之間的估計距離 ≤ 實際距離」,但在非地圖模式下(在這種狀況下,你能夠估計任一節點到目標的距離遠遠小於實際值),還須要加上一致性(Consistency)條件:| 任一節點X和目標的估計距離 - 另外一節點Y和目標的估計距離 | ≤ X和Y之間的實際距離。
這一講講解了人工智能如何進行博弈,包括下棋,深藍曾經由於擊敗國際象棋世界冠軍卡斯帕羅夫而轟動一時。
這一講首先介紹了進行博弈能夠使用的各類方法[0:00:00]。
以後開始講解極小化極大算法[0:14:40]。
再後,教授介紹了極小化極大算法的優化——α-β剪枝法,這樣作可以有效提升算法效率[0:21:57]。
最後,教授講解了逐步深刻和隨時算法的概念,並介紹了深藍的實際工做機制[0:34:10]
計算機會怎麼下棋?
第一種是像人類同樣分析形勢,採起策略,最終決定下一步,但沒人知道這該怎麼實現。
第二種是採用IF/THEN結構,基於當前形勢,看看什麼移動是可行的,並進行排序;
第三種是往前看並進行評估,相似於第二種方法,咱們要肯定哪個是對咱們有利的,選擇最大值。要作到這一點,須要設法評估這些形式,這就須要靜態值s = g(f1, f2, ..., fn) = c1·f1 + c2·f2 + ... + cn·fn,用來探索可能發生的事情的任何後果。例如,當咱們走完一步,咱們檢查王的安全,檢查排兵佈陣,並把這些信息做爲輸入,獲得對應靜態值,依次選出最大的靜態值。
(深刻探討前,先介紹目標樹相關的幾個術語:分支因子(Branching Factor)b:每一層選擇方式的數量;樹的深度(Depth)d;末端/葉節點(Leaf Nodes)b^d;)
第四種是採用大英博物館法處理,這大概須要處理10^120個節點,若是全宇宙的每個原子都以納秒級的速度處理一個節點,仍然離這個目標差了十幾個數量級,因此,這個方法並不可取。
第五種是儘量往前看,並不侷限於下一層。這是咱們要採用的方法,下面以極小化極大算法來講明。
極小化極大算法(MiniMax),聽起來比較拗口。舉個簡化版例子,你當前執棋,對於你來講有A1和A2兩種走法,而對於你的每種走法,你的對手都會有兩種走法,假設,A1->B1/B2,A2->B3/B4,這種狀況下去算靜態值分別獲得2,7,1,8。對於你來講,你確定但願最後走到8這個地方(你稱爲極大值者),可是不論你選擇A1仍是A2,你的對手確定不會讓你如願以償(他被稱爲極小值者),若是你選擇A1,那麼他確定選擇B1,這樣獲得值爲2,若是你選擇A2,那麼他確定選擇B3,這樣獲得值爲1。那麼當你知道後,你會選擇走A1仍是A2?固然是A1!儘管走A2可能會獲得8,但除非你的對手真的水平不好。這就是一種博弈。不過要注意的是,這裏只考慮了兩層,若是再往下一層,你的對手在決定往B1/B2/B3/B4的時候還會考慮如何極大值他本身。所以,若是你可以足夠深刻到更深的層,那麼你將所向無敵,固然,這個計算量也是很是之大。
那麼如何儘量的往下深刻呢?聯想到咱們在介紹分支界限裏採用的一些優化算法,這裏能夠相似的應用。一樣以上面的案例來講明,假設你算出第二層的第一個節點B1是2,那麼你的對手確定知道A1節點≤2(由於若是B2大於2,做爲極小值者確定選B1),那麼你確定知道你的選擇≥2(由於若是B3/B4決定的值小於2,做爲極大值者確定選擇2)。而後算B2節點,值爲7。繼續,B3節點值爲1,到這就夠了!由於你的對手確定知道A2節點≤1(理由同上),那麼你還要選擇A2這個節點麼?因此,A2這個分支就無需再考慮。這也是α-β算法的精髓,它是極小化極大算法的改進,在層數越高的時候,性能提高更明顯,由於能夠作深層剪切(Deep Cut-Off)。在這種狀況下,咱們須要作的靜態評估數大體是2b^(d/2)。
在以前的案例中,咱們考慮分支因子在每一個節點都相同,但實際上它會隨競局狀態和自己發生變化。考慮一個d層的樹,在d層有b^d個節點,在d-1層有b^(d-1)個節點,若是你不想進行最下面d層的全部計算,你能夠計算出往下只到d-1層時的答案,做爲一份「保單」,若是連這一層計算都很是大呢?那就繼續往上,若是從第一層就開始考慮呢,計算量約爲b^(d-1),跟在最後一層計算沒什麼區別。這就是逐步深刻(Progressive Deepening )思想,它也是隨時算法(Anytime Algorithm)的一個很好的例子,能讓你的博弈算法在規定的時間內得出較優的結果。
那麼1997年的深藍就能夠當作:極小化極大算法 + α-β + 逐步深刻 + 並行計算 + Opening Book + 專用於殘局的算法 + 非均樹建立。
那麼,這是對人類智能的建模?仍是另外一種智能?
這一講主要講解了如何讓計算機智能識別物體的組成,也就是線條圖解釋,這是計算機視覺方面的基礎。
教授首先介紹了這方面研究的歷史,詳細介紹了不一樣時期,三位計算機科學家對這一問題的解決方法:
首先講解了Guzman的實驗方法[0:00:00],以後講解了Huffman的理論方法[0:11:50],最後講到Waltz是如何將前人的方法總結得出優秀算法的[0:32:00]
桌面上放了幾個積木,你大概一眼就能說出來,那對於計算機來講如何實現?計算機須要把問題轉化爲圖像中有幾個面,哪幾個面是屬於同一個物體,而哪幾個面屬於同一個物體又如何作到?Guzman提出了根據判斷三個面之間的鏈接點(Three Faced Vertexes)特徵來決定是否屬於同一個面(一般會在圖像中投影成一個箭頭或一個叉),可是這個方法有時能奏效,有時卻不行。
而做爲一位數學家,Huffman決定不侷限於這個實際的問題,而是考慮一個擁有多個特徵的世界,特徵一是這個世界能夠用通常位置(General Position)來表示,也就是不考慮視角奇特的狀況;特徵二是隻處理三面的世界,也就是全部頂點須要由三個平面構成(且只能是三個平民);特徵三是考慮三種線(4個標記):凹,凸,邊界(左/右)。(一些術語:Vertexes,Edges,Junctions,Lines)。以上三個特徵加上這些術語,咱們就有了一個完整的目錄,而事實證實,只須要18種狀況就能完備這個目錄。如此,計算機就能對每一幅圖中的線進行標記並判斷。雖然Huffman的理論方法相比Guzman有必定的進步,可是天然界中的狀況遠比上面來得複雜,會有陰影,裂紋,也會有四個面構成的頂點,等等。
因而,David Waltz加入了裂紋,陰影,非三面頂點,光線,讓標記從4個增長到50多個,鏈接點從18增長到1000多個,解決了通常性的問題,算法上也能夠轉化成簡單的深度優先搜索問題,但運算量太大。Waltz總結了算法,從一個鏈接點1出發,獲得可能的情形,而後考察鏈接點2的標記,保留那些知足鏈接點1和2之間容許的情形,依此,經過鏈接點3可能的情形,反過來約束鏈接點2的情形,這樣就能刪除掉許多不可能的情形,直到標記全部的情形。
PS. 以上也是成功的準則:從一個問題開始,找到一些能奏效的方法,而後給出一些工做原理(但並不必定能完美處理正確的問題),最後你須要將全部這些綜合起來,獲得解決通常性問題的方法。
這一講主要講解地圖着色問題和資源調度問題。
首先,教授使用通常深度優先搜索爲美國地圖進行着色(四色問題),這是根本行不通的[0:00:00]。
以後,教授在此基礎上使用了域縮減算法,這讓問題處理獲得了很大改善[0:09:20]。
再後,教授又加入了最多約束優先的優化,這種作法效果很大[0:29:00]。
最後,教授將地圖着色問題的解決方法應用到了資源調度問題,考慮如何調度飛機的狀況[33:35]。
地圖四色着色問題是個很是經典的問題,可是使用深度優先搜索算法將會是很是不明智的作法。以前提到的約束傳播(Constraint Propagation)彷佛也沒有什麼幫助。
在解決這個問題前,先引入一些概念:變量V,值X,域D,約束條件C。是否是有點像初中學過的求y=f(x)=x2(-3<x<5)的最大值。
一個直覺的算法是:對於每個深度優先搜索賦值,對於每個考慮過的變量Vi,對於每個域Di中的值Xi,對於每一個約束條件C居於(Xi,Xj)知足Xj屬於Dj,若是不存在一個Xj使得(Xi,Xj)的約束條件獲得知足,那麼就從Di中排除Xi;若是域Di爲空,那麼回退。這就是域縮減(Domain Reduction)算法。
聽起來彷佛很拗口,其實很直覺,舉個例子,城市A與B/C/D/E均接壤,B/C/D/E依次接壤,每一個城市的顏色均可以是R/G/B/Y,若是一開始選定城市B的顏色爲R,那麼A的顏色就不能是R了;接下去選定城市C的顏色爲G,那麼A的顏色就不能是G了;城市D的顏色爲B(爲何再也不選R?避免過分使用一個顏色),那麼A的顏色也不能是B;若是城市E的顏色爲Y,那麼A也不能是Y,那就沒顏色能夠選了,域爲空,因此E的顏色不能爲Y,所以回退獲取選擇E的顏色爲R,這樣的話A的顏色爲Y,知足要求。
在這個算法中,「考慮過」的變量該如何選取是個問題?1. 徹底不考慮,確定不行,失去了約束;2. 全部,不現實;3. 檢驗剛賦值的,計算量大;4. 鄰近區域,不錯,雖然也要花必定時間;5. 讓已縮減的域在變量之間傳播,進步顯著(對事物的改變進行傳播是個好主意,但應該何時傳播?一改變就傳播顯然不是個好主意);6. 對域縮減爲一個值的變量進行傳播。
那麼咱們應該是從約束最多的一個城市開始,仍是約束最少的城市開始?事實證實應該使用約束最多的城市開始!Why?留給你們思考。
最後舉例了下這個算法在資源規劃上的應用,實際上是將問題類比爲四色問題來解決,要很好的分配資源,能夠1. 總使用最多約束優先;2. 域縮減爲1時總使用約束傳播;3. 若是是求最小所需資源,能夠使用上下夾逼法。
這一講討論了計算機視覺和對象識別,介紹了這方面技術的緩慢發展以及仍未徹底解決的現狀。
這一講首先介紹了大衛·馬爾對計算機視覺的早期思想[0:00:00]。
以後,教授介紹了Shimon Ullman的比對理論(alignment theories),並進行了模擬演示和相關證實[0:07:00]。
最後一部分,教授介紹了人臉識別技術的現有方法和困境[0:30:45]。
早期,傳奇人物大衛·馬爾提出,視覺識別的第一步是造成對外部世界情形的基於邊緣的描述,即原始草圖(Primal Sketch);下一步是用一些向量來修飾原始草圖,即2.5維草圖;第三部是將2.5維草圖轉化爲廣義物體形狀;而後同庫中的形狀比對,最終實現識別。不錯的想法,問題在於,沒人能實現它!變換很難,獲得的結果卻很粗糙。
以後,以Shimon Ullman爲表明提出識別的比對理論:首先,對一個物體照三張照片,就能重構該物體的任何視圖(前提是假設物體是透明的,全部頂點均可見),更爲準確的說是能生成物體的任何正射投影視圖。舉個例子,一個多面體有三張照片A,B,C,那麼想要獲得一個視圖D,或者判斷D是否是同一個多面體,能夠怎麼作?取D中的幾個頂點,對於A/B/C中對於的頂點,能夠寫成:xd = axA + bxB + cxC + d,這樣就能夠構成一組方程組。或者說經過線性變換,從三個樣本物體,能夠生成第四個物體上的點。那麼,只要選擇4個對應的點,就能根據四元四次方程求出a/b/c/d。這對於識別有什麼用?有了這四個值,對於任何一個特徵點,咱們都能估算出它在D中的位置,若是咱們發如今D中不是,咱們就有理由懷疑這不是同一個物體。那麼,最後的問題就是證實上述那個線性等式是正確的。這個證實不算難,能夠留給你們嘗試,或者瀏覽視頻。
比對理論是個很好的idea,不過它對工業製品蠻奏效,對天然物體卻不是太奏效,例如人臉。首先必須找到合適的對應點,並且臉部的變化不侷限於三維旋轉和平移。所以,一種改進的算法,再也不侷限於邊緣和特徵點,而是基於相關性(Correlation),就像咱們經常看到的在一幅合照中,經過一個矩形框框,依次掃描,最終鎖定目標面部。可是,如何選擇合適的矩形框,或者說特徵(例如說眼睛和鼻子組合),使之不能太大(匹配精度不高),也不能過小(容易誤判),是問題的關鍵,這也就是金鳳花姑娘(Goldilocks)原則。選用合適的Mask,利用相關性能有效的抵抗噪聲的干擾。可是這個理論也並不是無所不能,上下圖像的顛倒,豎直方向的拉伸,都會讓難度加大。
最後,來看看視覺識別中的挑戰(2010年),教授給了個例子,假設有48組動詞,可以從給的圖中識別出對應的動做嗎?也許不難,能夠輕鬆識別Drinking和Toasting,可是若是是一幅有一樣元素,卻很奇怪動做,或者微小的暗示時,人類可以一眼看出,計算機卻可能犯迷糊,例如一隻貓在歪着頭用嘴接水龍頭流出來的水。教授認爲,這是由於咱們講故事的能力深刻到了視覺系統,咱們知道貓渴了,因此它是在喝水。雖然從視覺上看跟人類喝水很不同,可是視覺系統下最本質的東西,爲咱們的故事系統提供了足夠證據,讓咱們判別爲這是一個喝水動做。這就是視覺識別中的一大挑戰!
這一講開始討論機器學習方面的內容,機器學習專門研究計算機怎樣模擬或實現人類的學習行爲,以獲取新的知識或技能,不斷改善自身的性能,是人工智能的核心[0:00:00]。
教授首先舉例講解了機器人如何辨別流水線上不一樣的產品,以此介紹最近鄰問題[0:08:45]。
以後,教授講解了機械臂如何在學習過程當中實現特定的動做,例如打球和抽熄蠟燭[0:24:15]。
最後,教授講解了睡眠相關的研究[0:42:20]。
一個計算機程序要如何才能伸手去抓一杯咖啡並喝掉它?一隻狗會把低糖可樂當作是什麼東西?這兩個問題你們能夠先放在內心思考。
機器學習分爲兩類,一類是基於觀測和規律性的學習,例如最近鄰(Nearest Neighbors,模式識別/Pattern Recognition的領域),神經網絡(Neural Nets,一種仿生/Mimic Biology嘗試),Boosting算法。這類學習也能夠當作推土機式計算(Bulldozer Computing)。另外一類分支是基於約束的學習,能夠稱之爲相似於人類的處理方式,例如一次性(One-Shot)學習,基於解釋(Explanation)的學習。
這節課要介紹最鄰近學習:獲得某種機制,生成一個關於特徵的向量集合(特徵檢測器),它的輸出值組成一個向量,進入某個比較器,比較器將會對比這個向量和存放各類可能性的庫中的特徵向量,經過找到最匹配的結果,比較器能肯定這個對象是什麼,這樣就能進行識別。什麼意思?舉個簡單的例子,流水線上有四種不一樣類型的插座蓋子A/B/C/D,那麼機器人該如何對它們進行自動分類?首先,它能夠進行一些測量(例如總面積和孔的面積),這樣能夠獲得四個特徵點/向量(橫座標爲總面積,縱座標爲孔面積,在高維中也相似),那麼當新來一個插座蓋子時,它能夠很輕易的獲得對應向量,並計算它離以前每一個向量的距離,最近的就是最匹配的。那麼如何判斷離哪一個特徵點最近?咱們對每相鄰的兩個特徵點做垂直平分線,那麼它們會彼此分隔,造成一個個區域,落在這個區域內的,就稱爲離該特徵點最近,而這些分隔線就稱爲決策邊界(Decision Boundaries)。那麼若是如今有個全新設計的插座蓋子,它的孔面積和以前的B最接近,那麼你以爲它的總面積會和誰最接近?大部分的人都會選擇B吧,由於若是某個東西在某些方面很類似,它在其它地方也有可能很類似。
再來看一個例子,在信息檢索中,你有一些來自不一樣雜誌的文章,你感興趣的是學習一些解決特定問題的內容,那麼怎麼去找同你的問題最具關聯的文章?一個簡單的算法是統計當前庫中文章的詞彙所出現的次數,並同要探索的問題中詞出現的次數進行比對。舉個二維例子,你感興趣的關鍵詞是Hack和Computer,那麼假設A雜誌出現這兩個詞差很少次數,B雜誌出現了不少次Hack,但極少出現Computer,那麼確定是A雜誌更符合咱們的要求。可是在計算機二維比對中,也許你要探索的問題中詞的出現次數特徵點距離反而離B雜誌更近!這時使用距離去測量就不合適了,改爲用向量之間的夾角反而更合適,這就是非標準測度。
接下來咱們來看機械臂中的應用,假設有個機械臂,由A/B/C三段組成,A/B之間的夾角爲a,B/C之間的夾角爲b,咱們企圖讓C末端的手握着一個球沿特定的軌跡運動(根據咱們設定的速度和加速度),那麼球的運動軌跡能夠轉換成a和b的變化,可是想要獲得精確的數學表達式以此來控制,是不太現實的,除了數學表達式極爲複雜,也在於微小的改變(如機械關節處的磨損),也會影響最終運算的結果。咱們能夠換一個思路,假設咱們有一張足夠大的表,對於小球運動軌跡中的每一小段,都存儲了對應的角度,速度,加速度和機械扭矩等信息,那麼咱們讓機械臂從頭開始,每一次的運動調整中都對這個表進行數據增添和更新,直到它掌握了足夠多可能的數據,那麼它就會逐漸趨於穩定和準確。
相似於棒球手投球,假設身體每一個關節能夠用100字節信息來記錄,投手全身參與的關節有100個,投球軌跡能夠分紅100段,投手天天投100次球,一年練習100天,能活到100歲。這樣的話,這個信息大小(1012)也還不算太大以致於沒法存儲。那麼人的大腦中有多少神經元(小腦1011)?多少突觸(105)?那麼咱們確實是能夠經過不斷練習,更新咱們的表格,達到更好的技術水平。
在上面的例子中,有幾個問題須要注意:1. 不均勻問題/散佈問題(x集中於一段範圍,y處處分佈)能夠進行正規化數據處理;2. 什麼起了做用(有沒有答案是徹底不依賴於y的情形?);3. 若是答案徹底不依賴於數據呢?
最後一部分關於睡眠的研究告訴咱們:睡眠很重要,缺眠很嚴重,不要再熬夜!
回到最開始的兩個問題,第一個問題,咱們已經知道如何控制機器手臂的軌跡。第二個問題跟這門課有什麼關係?狗不會知道爲何要和低糖可樂(爲了避免要長胖),它缺少給本身講故事的能力,把這兩者串聯起來(好吧,又是講故事!)。這提醒咱們要小心混淆關聯性和因果性。
這一講繼續講機器學習方面的內容。
首先,教授介紹了識別樹的概念,這是用一系列測試標準判別某個體屬於哪一類的樹[0:00:00]。
以後,教授考慮了大數據的狀況,這時就有必要引入無序度的概念,來衡量測試的質量,這部分借用了信息論方面的知識[0:21:43]。
最後,教授在前面的基礎上進行完善,考慮了數值數據如何處理,並同以前的最近鄰算法進行了對比[0:40:30]。
若是想要根據判別一些特徵,來肯定眼前這個生物是否是吸血鬼,能夠用到上一節課的方法嗎?要注意到這裏與上一節課的例子有些不一樣之處:這些特徵不是數值的;一些特徵並沒什麼用;一些特徵只在部分狀況有用;有些測試可能比其它代價更大;所以,這裏咱們但願構建一個測試集,獲得不一樣的結果,而後可能還須要不一樣的測試,直到最終肯定結果,這稱爲識別樹(Identification Tree)。例如,咱們能夠考察他們是否有影子,是否怕大蒜,面色,口音,這些特徵有些有很好的區分做用,例如若是沒影子,那麼必然是吸血鬼,可是有些並不能很好的區分,例如面色和口音。若是咱們想盡量地區分吸血鬼和正常人類,應該怎麼作?簡單的想法就是看看有多少樣本在同質子集中。怎麼理解呢?以影子測試爲例,假設有8個樣本,無影子的有1個,有影子的有3個,沒辦法得知的有4個,那麼在同質子集中的就是1+3=4個,剩下4個還須要另外的測試(例如大蒜測試),才能劃分開。依次能夠分別獲得各類測試的同質子集樣本數,而後選擇從最優的開始。
上面這個方法對於處理大數據集有什麼不一樣?困難之處在於對於大數據集,沒有測試可以馬上獲得任何同質子集,須要有更精密的方式去測量分支底端的這些集合有多無序,即無序度(Disorder)。這須要借用信息論的知識,這裏就不詳細介紹了,感興趣的能夠看看信息論中關於熵的相關教程。熵的概念其實很直接,也很直覺。你以爲上面四個特徵哪種測試最不靠譜?直覺會告訴你口音,或者面色,誤判的可能性很大,事實也確實如此,它們的熵也確實較大。
最後來看看上面的方法和以前的最近鄰算法的對比。最近鄰中咱們採用決策邊界(每兩點之間的垂直平分線)來劃分不一樣的區域,那麼在識別樹中呢?咱們會先肯定一條線,分紅兩個子集,而後再對每一個子集採用一樣的方法劃分,所以最後獲得的區域就會與最近鄰有所不一樣。那麼它的優勢在哪裏呢?你不須要使用全部的測試,只需使用看起來對你有用的測試(就像咱們也許只須要影子測試和大蒜測試便可),這意味着測量技術變簡單了,代價也更小。
這一講繼續講機器學習方面的內容。
首先,教授介紹了生物學上的神經網絡,並將其推廣到人工智能領域,對其進行建模[0:00:00]。
以後,教授講解了性能函數,並講到如何對其進行優化,詳細講到了梯度上升法[0:10:40]。
再後,教授詳細進行了相關的偏導計算,並深刻探究了反向傳播算法[0:25:36]。
最後,教授講到了神經網絡算法相關的一些問題,並給出了示例[0:40:45]。
人腦中充滿了神經元,神經元除了有細胞體/細胞核,還有個長的突出——軸突(一般分叉成兩支),而另外一邊有許多的樹突樹(以便下游軸突鏈接),這樣就完成了互連,能夠傳導興奮。其中,一些突觸相對更重要,做用更大,也就是說存在突觸權重;另外一個是積累效應,對刺激進行積累,最終決定是否繼續傳導;還有一個就是對於傳導來講要麼全有,要麼全無。那麼根據這三點,如何對這個生物元素建模?
對於每個輸入INPUTi,通過加權Wi,而後進行彙總求和,送入一個臨界值函數,輸出爲0/1,成爲下一個神經元的輸入。聚集許多這樣的模型,那麼就能夠創建起簡單的神經網絡,對於輸入x1,x2,...xn,通過神經網絡後,獲得輸出z1,z2,...,zn,或者說輸出向量等於輸入向量與權重的某種函數(對於臨界值,咱們能夠採用一個小技巧消除它:就是增長一個輸入-1,並設置它的權重爲臨界值),Z = f(X,W)。固然,若是咱們有一些訓練樣本X,咱們能夠獲得理想輸出D = g(X),那麼咱們但願有一系列權重W,讓實際輸出f(x)和理想輸出g(x)對應起來。那怎麼衡量權重的好壞,它能夠是f和g的函數,稱之爲性能函數P(D,Z) ,簡單的形式是-1/2||D-Z||2,經過求它的最大值,能夠獲得最優的W。
怎麼求多元函數的最大值?梯度上升法(垂直於局部等性能線的方向)也許能夠考慮,可是由於它須要求導,因此對於階躍函數並不那麼方便處理。But,沒有人要求臨界值函數必須是階躍函數,爲何不設置臨界值函數是平滑上升的呢?所以,考慮數學計算的方便,咱們能夠求解這類問題。舉一個最簡單的神經網絡例子:一個輸入x1,乘上權重w1,獲得p1,通過臨界值函數1/(1+e-α),獲得y,乘上另外一個權重w2,獲得p2,仍然經過臨界值函數獲得z,進入性能計算函數,獲得p = -1/2(d-z)2。假設本身有一些樣本,具備理想的值d,那麼,能夠觀察實際值z,調整權重使兩者趨於一致,其中可能須要用到偏導計算(詳見課程,其實不難)。經過計算能夠得出結論,咱們想要求導的只基於咱們已經計算出來的和相鄰的東西,這也稱爲反向傳播算法(Back-Propagation Algorithm)。首先計算離輸出最近的w,獲得這些後,就獲得了足夠的信息,就可以往回一步,計算出下一列的w值,而後繼續往回,直到回到最前面,最後一列中作的計算,同在中間一列的計算量相同,這是一種局部計算。
最後來看看神經網絡算法中的幾個問題(凡事問五次爲何,不要相信你的直覺):第一個是,上面這種計算其實是在作什麼?(其實不過是曲線擬合,有不少種方法,如傅里葉變換,這個優點在哪?);第二個問題是,假設有一個賽馬相關問題,如何將參數編碼到輸入向量中,以此反映出問題的實質?(這是最難的部分);第三個問題是,如何防止過分擬合帶來的扭曲?第四個問題是,如何選擇調整速率常數,避免猛烈的正反饋情形;
這一講繼續講機器學習方面的內容,主要內容是遺傳算法,這是一種對生物和進化的模仿,教授首先介紹了相關的生物學知識[0:00:00]。
第二部分,教授介紹了樸素的進化算法[0:07:20]。
第三部分考慮了對算法的一些改進(包括模擬退火算法)[0:20:50]。
最後,教授介紹了一些遺傳算法的例子,包括用方塊模擬的生物進化[0:35:10]。
在繁衍生殖中,染色體會糾纏在一塊兒進行重組,並進行細胞分裂(其中可能有突變或交叉互換),最後基因型過渡成表型,造成個體。這些不一樣的個體(攜帶不一樣的染色體組合)具備不一樣的適應性,影響存活到下一代的機率,通過天然選擇,又從表型轉化爲基因型,重新開始下一輪的繁衍。
在機器學習中,咱們能夠對其進行仿生模仿,若是咱們能獲得適應性函數,那麼咱們能夠由適應性來決定子代的存活機率,全部子代的機率之和爲1。舉個簡單的例子:假設在一個空間中,適應性是x和y的函數f(x,y),有兩個個體(0.3, 0.7)(0.6, 0.2),突變算子會讓這些值發生一些變化(如0.3變爲0.2),交叉互換法則則會交換不一樣值對的x和y(如產生(0.3,0.2)),那麼這些子代通過天然選擇和不斷繁衍,函數值高的存留下來,低的被淘汰,最終接近函數值最高點(也有可能只是在局部最高點中)。另外一種思路是咱們不關心適應性具體的值,咱們只關心全部候選者的排序,其適應性數值自己不做爲決定的標準,這稱爲排序空間法(Rank Space Method)。排名第1的子代被選中的機率爲Pc,排名第2的子代機率爲(1-Pc)Pc,依次類推(也有可能困在局部最高點中)。
注意到爲了不困在局部極大值中,咱們能夠一開始選用長的步長,而後慢慢縮小步長,這稱爲模擬退火(Simulated Annealing),來源於對金屬加熱,會讓原子震盪劇烈,慢慢退火冷卻後,原子震盪也下降。另外,若是困在局部最大值中,失去了多樣性,那除了適應性,爲何咱們不順便測量多樣性呢?考察同已選個體之間的差別。例如,咱們在選擇中,第一個選適應性最強的子代,第二個選擇與第一個差別最大的個體,也就是多樣性最強的,依次排序選擇,當你達到最高區域時,能夠沒必要再考慮多樣性,你只需留下適應性最強的子代。
其實,生物進化很直觀,若是這個物種是地球最強者,環境變化也不明顯,那麼可能幾億年來,都沒什麼太大進化,侷限於一個物種中。而對於更底層的物種,想要存活,就必須有必定的多樣性,經過適應性不斷進化。這是樸素的天然進化。
回過頭來再看一下遺傳算法(Genetic Algorithm),其中許多地方仍是能夠調控的。突變其實仍是在登山,生成一些擴散後用適應性指標來登山,處理方式能夠有不少選擇;交叉互換就是企圖將多個個體的優勢綜合到一個個體身上(這也是爲何不少人相親時總會考慮後代的優良),也能夠有許多選擇;而從基因型向表型的轉變,能夠由設計者去決定;剩下的也均可以去設計調整。
來看一些實踐應用吧。一個是在計劃的編排上(須要一系列步驟),S1, S2, S3, ...,若是你有兩個計劃,那麼你能夠對二者進行重組,生成新計劃。另外一個是在賽馬的預測上,若是你有一套完美的基於規則的專家系統,那麼也許你能夠預測出不一樣子代的存活機率,決定你的勝負。還有一個是若是你來設計一個類機器人,由不一樣的多面體構成,每一個多面體具備不一樣的運動方式,其目標是讓其運動最快/跳的最高/戰鬥力最強,那麼在這過程當中,你會看到衍生出了各類奇形怪狀和奇怪姿式的機器人,但若是你的算法足夠好,時間足夠長,那麼你能獲得較完美的形態。
最後思考,具體應用中的遺傳算法使人驚歎之處應該歸功於編程者的心靈手巧,仍是算法價值自己?其實真正的貢獻在於空間的豐富性和編程者的聰明才智,而不在於遺傳算法自己有多好。
這一講繼續講機器學習方面的內容,首先介紹了音韻學方面的基礎知識,講到了音素、區別性特徵等概念[0:00:00]。
以後,教授引出了Yip-Sussman機器的概念,並經過一個課堂演示講解了它在音韻學方面的用途[0:14:00]。
最後,教授介紹了稀疏空間的概念,並總結出了好的AI算法應該知足哪些要素[0:37:15]。
前面的課程中,介紹了機器學習的一些基本方法(最近鄰,識別樹等),而後又介紹了一些生物學算法(神經網絡,遺傳學等),但其實教授並非很推薦這些算法,由於運用這些算法,就像綁了腿的狗在走路,可能須要不少巧妙的訓練才行。這節課開始,將會聚焦於問題(Problem),而不是機制(Mechanism),以後再回歸到理論自己。
先來看一個問題,horse的複數是什麼?horses['hɔ:sɪz];dog的呢?dogs[dɔgz];cat呢?cats[kæts]。雖然末尾都加了s,可是發音方式卻不一樣,可是你卻沒必要特別去記,卻總能發對音。該怎麼解釋呢?機器又是如何學習這些規則的呢?
兩位工程師Yip和Sussman求教於Morris Halle,後者設計了區別性特徵理論(Distinctive Features):假設有一我的/物,說了一小段話(其實就是從嘴裏發出了一段聲波),進入收聽者的耳朵裏,並進行處理,生成一個區別性特徵向量的序列(Sequence of Distinctive Feature Vectors)。它是一個二進制變量,例如根據發音時聲帶是否振動置某個標誌位爲0/1。根據最初的理論,大約有14個這樣的區別性特徵,可以決定一個音是什麼(因此理論上一門語言能夠有214個音)。這個序列通過處理後,能夠產生意思(Meaning),而這些處理會反饋到區別性特徵向量的生成中。(順便說一下,視覺對於發音有必定的干擾/輔助做用,就像學外語的人,若是想要純正,最好是觀察Native Speaker的口型)。根據這個理論,若是發聲的是個木偶,只是含有5塊嘴部肌肉,那麼能夠經過控制這些肌肉發出區別性特徵向量的組合序列,從而被人類所識別。舉個簡單的例子:Apples的四個音標['æ p l z],考察音節性(Syllabic,可否造成音節的核心),那麼向量爲[1 0 0 0],考察有聲性(Voiced),向量爲[1 0 1 1],依次類推,獲得一個向量序列,或者說矩陣。
如此,咱們即可以設計一個機器,來解釋詞彙和聲音,從而生成語言的聲音。這個機器有個神祕的裝置可以察覺外部的世界(例如看到外部有兩個蘋果),有寄存器可以存儲一些概念(名詞/動詞/複數等),有詞彙庫存儲各類詞彙(蘋果,香蕉等等),有一系列的約束條件(如複數約束等,也稱爲傳播器),還有一個能發出聲音的緩衝器裝置,這些裝置之間彼此按必定的組織聯結。那麼這個機器如何運做?1. 視覺系統生成兩個蘋果的概念;2.1. 信息流入詞彙庫獲取到單詞「apple」;2.2. 信息流入寄存器獲取到概念「複數」;3.1. 信息從詞彙庫流入寄存器獲得「名詞」「複數」,而不是「動詞」;3.2. 信息從詞彙庫流入緩衝器[æ p l];3.3. 信息從寄存器流入約束條件,激活複數約束;4. 緩衝器中的緩存向前移動;5. 緩衝器向約束條件發送當前緩存;6. 複數約束判斷最後一個字母是l,在緩存後端加上z;最後緩存被輸出成聲波,也就是「講話」。而這一切也都是可逆的,若是你聽到「Apples」,那麼你的視覺系統就能想象出多個蘋果的場景。這就是人類設想的一種能使用學習到的音韻學規則的Yip-Sussman機器。
問題是,機器如何學習這些規則?咱們固然能夠「告訴」機器具體的規則,但若是想要機器本身學習掌握呢?回到一開始的問題,咱們採用區別性特徵理論去分析cats和dogs,能夠分別獲得兩個14x4的矩陣(14個區別特徵,4個音),最後一列是咱們但願獲得的s/z,那麼考慮前面的14x3矩陣究竟有何不一樣?或者說究竟什麼樣的矩陣後面應該接s,什麼樣的後面接z?或者換一種思路,對於這個14x3的矩陣,其中哪些值可有可無,即使去掉它們,也不影響咱們區分後面接s仍是z?一個算法以下:1. 收集正例和反例;2. 選擇一個正例(稱爲種子Seed),如cats;3. 開始推廣(Generalize),即選擇矩陣中的一些音素,再也不考慮它們;4. 逐步推廣,直到咱們忽略了太多的音素,而致使反例也被當成正例處理,那麼就退出;當中還有個問題,應該選擇什麼音素不考慮?隨機挑選並不可取,從經驗上來講,越後面的列應該重要性越高,因此應該從第一列優先挑選。這樣,通過足夠的學習,在14x3的矩陣裏,機器濾除掉了大部分音素,學習到了只有最後一個音是無聲且不是噝音時,複數化結尾發s音。考察其工做原理,咱們發現實際上是對空間進行束搜索。
爲何這個算法能奏效?Yip認爲它能奏效的緣由在於這是一個稀疏空間(容我回去翻翻研究生的《矩陣論》教材o(╯□╰)o),對於高維稀疏空間,很容易將一個超平面放到空間中,將一組例子和另外一組例子區分開來。有些抽象哈!舉個簡單例子,兩個白色的點在三維空間中的座標是(0,0,0)(1,0,0),兩個紫色的點在三維空間中的座標是(0,1,1)(1,1,1),若是投影在一維空間x中,兩個白色(0)(1)和兩個紫色(0)(1)沒法區分;投影在二維空間中,能夠很容易區分白色(0,0)(1,0)和紫色(0,1)(1,1),只需選擇y=1/2便可;那麼在三維空間中,則有更多的二維平面能劃分兩組顏色,如(1/2,w,w)(w,1/2,w)(1/2,1/2,w),w表示無需考慮;這種高維稀疏空間的特性讓事物具備可學習性。換一種解釋是,在14維的高維空間中,相似英語語種的40個音隨機分散在整個空間中,那麼它們的大體距離將會類似,確保了音素在說話時很容易被區分。
那麼,本節課的這個例子對咱們有什麼啓發?以Marr的問答法catechism來回答,當處理AI問題時,首先你須要明確問題(Problem);下一步是設計一種表示方法(Representation);以後肯定一個處理方式(Approach),能夠是一個思路,也能夠是一個方法;再以後選擇一個機制(Mechanism),或設計一個算法(Algorithm);而後進行實驗(Experiment);固然,不必定是線性向下的,中間可能會有不少迴路。科學研究就是如此,從問題開始,以實驗結束。Yip和Sussman的工做正是馬爾問答法在AI領域中實踐的典範。不過許多搞AI的人喜歡抓住機制不放,套用到全部問題上,這是不合適的作法,正如你不會想用某種神經網絡來處理全部人工智能問題。
最後還有幾個問題:什麼是優良的表示方法?特徵一是要明確(Explicit)表示正確的東西,也就是例子中的區別性特徵;特徵二是可否讓約束條件暴露(Expose)出來,才能方便更好的建模;特徵三是局部性標準(Localness),讓咱們能從局部的範圍看到正確答案;這些common sense會讓你變得更優秀!
這一講繼續講機器學習方面的內容。
首先介紹了一次性學習(one-shot learning)的概念,講解如何經過相近差錯(near miss)從每一對例子中學到確切的知識[0:00:00]。
以後,教授將這方面人的學習同機器學習進行了詳細對比[0:14:30]。
最後,教授經過一次性學習的概念,總結出了一個好的概念應當知足哪些特性才更容易出名[0:37:30]。
前方高能!!!這堂課將是整學期中最重要的一課!(第二重要的是告訴咱們睡眠很重要的那課)
想知道如何讓本身變得更聰明嗎?如何將本身的想法包裝,成爲最受青睞的人?這節課不容錯過!
不過爲了引伸出這方面的內容,咱們先來看一下如何從每一次的例子中學到確切的知識。在例子1中,有個初始模型(Initial Model),有兩根立柱上面放着一塊平板的物體,相似於π,咱們能夠把它稱做「拱形」;若是咱們把平板從立柱上拿下來,放到桌面上,那麼它就不能被稱爲「拱形」了,儘管它擁有的元素同初始模型同樣,但少了支撐關係,咱們把它稱做相近差錯(Near Miss)。因此咱們能夠獲得結論:支撐關係很是重要,必須有支撐關係,不然不能稱爲拱形。這就是進化後的模型,加入了一些重要的約束條件,這種啓發式叫作要求鏈啓發式(Require Link Heuristic)。這也是從一個例子中學到確切的知識的體現。再來考察一個例子2,若是物體下面兩個立柱緊靠在一塊兒,相似T,或者能夠說多了接觸關係,那麼它也再也不是拱形,這也是一個相近差錯。把這個差錯同進化後的模型比較,獲得一個新模型,包含了支撐關係,但不能有接觸關係,這種啓發式叫作禁止鏈啓發式(Forbid Link Heuristic)。在例子3中,同初始模型同樣,惟一不一樣的是頂部平板被刷成了紅色,那麼它仍然是一個拱形。因而咱們能夠再次進化模型(注意到這裏不是相近差錯,而是擴展了一個例子),包括有支撐關係,不能有接觸關係,頂部平板必須是白色或紅色,這稱爲集合擴展啓發式(Extend Set Heuristic)。那麼假設你試過了全部顏色,都不影響它成爲拱形,那麼咱們就能夠修改模型的一個條件爲頂部平板顏色屬於全體顏色集合,這稱爲丟鏈啓發式(Drop Link Heuristic)。或者咱們把頂部換成一個三角體,向上拓展能夠是積木,能夠是玩具,或任何物體,這稱爲爬樹啓發式(Climb Tree Heuristic)。依次類推。
上面這種方法適合存儲和計算容量有限的物種進行學習。而對於計算機來講,它能夠有更批量的方式。例如如何讓計算機區分兩組不一樣的物體。假設你有一組正案例,一組反案例,那麼從正案例中選一個種子,對於它的精確描述幾乎只有它自己可以符合,而後咱們逐漸利用啓發式放寬描述(就像上例中同樣),造成新的描述,讓更多的正案例可以被涵蓋;但若是你放寬的同時又包含了反案例,那麼能夠利用啓發式縮小描述,排除反案例。只是若是你的啓發式不少,那麼造成的樹就會很大,能夠嘗試用束搜索來減少計算量。與上節課的方法不一樣的是,這裏除了推廣(Generalization),還用了限制(Specialization)。例子總對應推廣,相近差錯總對應限制。
接下來咱們就來看看如何讓學生變得更聰明!假設有一個老師,和一個學生,彼此之間的相互做用,目的是將知識的初始狀態(Initial Stae)轉化爲新狀態(New State),讓學生變得更聰明,並利用這些新知識,來作(Use)之前作不了的事。老師有一種風格(Style),學生有一個學習器(Learner),和一個使用器(User)。若是要發生學習,那麼一方須要對另外一方有所瞭解。例如老師最好能知道學生的初始狀態,若是學生犯的錯誤是曾經學習過的,那麼老師就會知道他只是忘記或疏忽了;若是犯的錯誤遠超於學生的知識網絡,那麼老師會提醒他不用着急,之後會學到的;若是犯的錯誤恰好在知識網絡的邊界,那麼這就是應該學習的時候了!又例如若是老師瞭解學生的學習器(學習能力/計算容量),那麼老師就能夠採起不一樣的方式傳授知識。再如若是老師瞭解學生的使用器的計算容量,就能知道在運用知識方面存在什麼問題。反過來也是同樣,若是學生能瞭解老師的一些信息,好比創建起信任,相信老師傳授的知識是正確的,或者理解老師的授課風格,看看是否是和本身比較匹配。
對於機器來講,想要學習任何東西,每一步中,須要創建描述,沒有描述,就不能區分差別,因此人類的學習也是同樣。自我解釋,自我對話,就是創建描述的過程,讓咱們可以學習。例如在解物理題中,你會對本身說讓我先畫一下受力分析圖,或者對本身說這裏應該要運用F=ma公式,等等。這其實就是在自我學習以及運用的過程,數據顯示,解題成績好的學生自我解釋的次數遠超過成績差的學生,而當鼓勵學習進行自我對話後,成績也會獲得顯著的進步。(固然,不是每天自言自語,o(╯□╰)o,而是經過這種方式不斷學習和升級)。
最後來看看如何將思想包裝起來,以得到更大的影響力,或者說如何出名:
1. 符號(Symbol)。成果應當有某種符號(Symbol)來表示,方便人們從視覺上記住你的思想,就像拱形學習(Arch Learning)中的π;
2. 口號(Slogan)。方便人們口頭使用,例如相近差錯。
3. 驚喜(Surprise)。相比於神經網絡利用成千上萬的例子,這裏的驚喜就在於機器能從每一個例子中學到確切的知識,也稱爲一次性學習(One-Shot Learning)。
4. 突出(Salient)。一項成果想要出名,確定要有很是突出的東西。多種的好並不意味着突出,若是人們不能一想到某種思想,就想到你,那麼其實它並不突出。例子中的突出就是一次性學習能夠經過相近差錯的使用實現。
5. 故事(Story)。人們喜歡聽人講故事,因此你們喜歡用故事包裝事情。整個教育本質上都是關於講故事和故事理解的。
若是你但願本身的思想可以得到風投,想要得到學術職位,想要出版本身的圖書,想要推銷出商品,不妨問問有沒有以上這些品質。你的思想就像你的小孩,你但願它們過得最好,若是不能包裝好,它們確定過很差。因此哪怕你以爲搞研究的人不該老想着出名,可是你確定忍受不了被忽略,特別是本身的好東西。
這一講繼續講機器學習方面的內容,焦點是支持向量機。
教授首先介紹瞭如何經過一條最寬的街道將兩類樣本點分開[0:00:00]。
以後,教授詳細給出了支持向量機概念中涉及到的數學推導,並由此獲得了一個很是妙的結論[0:15:10]。
最後,教授演示了一個demo,並講解了核函數的概念和應用[0:38:50]。
這節課回到決策邊界的問題,假設你有一個空間,包含正案例和負案例,那麼如何將兩者區分?以前的課程中咱們學到了不少方法,最近鄰,識別樹,神經網絡等等,在不少人都認爲不太可能有什麼新的技巧突破時,Vladimir Vapnik提出了一種新的思路:正負案例的區分應該由一條直線完成,一種顯而易見的想法是這條直線在正案例和反案例的「正中間」,使得不會偏向任何一方,那具體應該怎麼肯定哪裏是正中間呢?若是咱們能作一條最寬的「街道」將正反例區分開來,那麼這條街道的中間線就是咱們要肯定的直線!
有了這個思想,該怎麼制定決策規則來區分正反例呢?(如下推導略微複雜繁瑣,不感興趣可跳過直接看結論)假設有一個向量ω,垂直於分隔中線,長度任意。對於空間中任意一個未知樣本,咱們但願知道它是在街道的左邊仍是右邊,爲此,咱們將其對應向量υ投影到垂直於中線的方向上,即做點乘ω·υ,投影值越大,那麼越可能在街道的右側,咱們假定這個值爲常數c,那麼若是ω·υ ≥ c(或者說① ω·υ + b ≥ 0,其中b = -c),咱們說這個樣本在街道右側(即正例),這就是咱們說的決策規則。問題在於,這個規則中的向量ω和常數b該如何肯定?已知的條件就是ω垂直於中線,但長度不肯定。換句話說,咱們沒有足夠的約束條件來限定這兩個未知數。所以咱們試着添加一些約束條件,例如,既然①式必須≥0,咱們則進一步要求其≥1(相似的對於反案例,要求≤-1),即強化後的決策規則爲 ω·x+ + b ≥ 1;ω·x- + b ≤ -1。爲了數學計算便利,咱們引入變量yi,使得對於任意正案例yi等於1,對於任意反案例,yi等於-1。上式左右兩邊同時乘上yi,那麼yi(ω·x+ + b) ≥ 1;yi(ω·x- + b) ≥ 1,而且對於邊緣處的樣本i,② yi(ω·xi + b) - 1 = 0。既然咱們的目標是要讓這條街道盡量的寬,那麼咱們就來求這個街道寬,對於街道邊緣的負案例x-和正案例x+,兩者之間的向量差爲x+-x-,當他投影到單位向量ω/|ω|上,就是街道的距離,即(x+-x-)·ω/|ω|。由②式的約束咱們可知,對於正案例x+·ω = 1 - b,對於負案例x-·ω = 1 + b,所以街道的寬能夠化簡爲2/|ω|。這樣一來,咱們的目標就是求|ω|的最小值(或者③ 1/2||ω||2的最小值),帶約束條件的函數極值。運用拉格朗日乘數法(好吧,我沒學過),即轉化爲求L = 1/2||ω||2 - ∑αi[yi(ω·xi + b) - 1]的極值,怎麼作?對ω求導,得ω - ∑αiyi·xi = 0,什麼意思?就是向量ω是某些樣本的線性和。一樣,對b求導得∑αi·yi = 0。將這兩個式子帶回L中,最後獲得④ L = ∑αi -1/2∑i∑jαiαjyiyj(xi·xj) ,這意味着求極值的式子只依賴於樣本對之間的點積!回到決策規則,ω用前面的表達式代替,那麼若是⑤ ∑αiyixi·υ + b ≥ 0,則爲正例,能夠看出決策規則也只依賴於樣本向量和未知向量的點積!
那若是是線性不可分的樣本空間呢?那麼能夠變換到另外一個空間,以前提到的點積也變成轉換後空間向量的點積,也就是求核函數的極值。常見的核函數有:1. 線性核(u·υ + 1)n;2. e(-||xi-xj||/σ);等等。
以上就是支持向量機的思想。
這一講繼續講機器學習方面的內容,着重講解boosting(提高)算法。
這一講首先總結了以前的各類學習算法,引入了分類器的概念,並講解了如何從弱分類器獲得強分類器[0:00:00]。
以後,教授講到了各類改進,來獲得boosting算法[0:11:50]。
最後,教授講解了如何使用一些計算技巧,得到簡單美妙的結果,告訴學生在考試中碰到相關問題應該怎麼算[0:35:30]。
對於二分類問題,假設咱們有一個分類器h,分類輸出爲[-1,+1],其偏差率e在0到1之間,若是值接近一半,則稱爲弱分類器(Weak Classifier),咱們但願獲得強分類器(Strong Classifier),即偏差率接近0。那麼可否經過「合併」多個弱分類器來實現?即H(x) = sign(h1(x) + h2(x) + h3(x)),若是兩個分類器輸出爲+1,一個爲-1,那麼咱們認爲它最後爲+1。這個合併分類器真的會比單個更優嗎?若是在樣本空間中,三個分類器的錯誤空間彼此獨立,那麼咱們能夠說H(x)永遠給出正確的分類(由於每一個地方至少有兩個分類器是正確的)!但若是它們的錯誤空間有相交呢?能夠做爲課後思考下。
那麼怎麼實現呢?能夠考慮如下幾點:① 首先使用數據不經任何干擾地生成h1,而後使用誇大h1偏差的數據(扭曲的樣本子類的)生成h2,而後使用h1不一樣於h2結果的樣本生成h3,依次類推;② 創建這樣的樹結構,即踊躍投票(Get Out the Vote)思想,讓許多單獨的測試參與其中;③ 對於單個測試,都是一個分類器,能夠考慮決策樹樁(Decision Tree Stump),其測試數量取決於樣本的個數和空間的維度。對於這樣的測試,偏差爲e=出錯樣本的數量/總數量。不過咱們在某一階段但願誇大某些偏差的效果,即每一個樣本點都對應有一個權重ωi,第一步時均爲1/N,且∑ωi=1,那麼當前偏差e=出錯樣本的數量·ωi。④ 另外,對於合併咱們能夠有一些改進,例如爲每一個子分類器添加權重H(x) = sign(α1h1(x) + α2h2(x) + α3h3(x))。⑤ 怎麼結合這些思想轉換成算法呢?1. 令ωi1=1/N;2. 選擇一個分類器ht,最小化時刻t的偏差,使用偏差率來肯定α;3. 計算t+1時刻的ωt+1;而後回到步驟2,進行循環,直到這個分類器對全部樣本數據生成完美的結論集。⑥ 此外,假設ωit+1 = ωit/z·e^(-αtht(x)y(x)),其中z是歸一化因子,y(x)同上一課相似,取決於結果而定義爲+1或-1,爲了數學計算的方便。那麼咱們的目標是什麼?就是最小化偏差!對於上面偏差的式子,當αt = 1/2·ln(1-et)/et,et是t時刻的偏差,咱們能夠獲得最小偏差邊界。
思想上容易理解,具體實現上挺難理解的o(╯□╰)o,並且這些公式也挺複雜的,雖然也許計算機能夠勝任,教授推導了一些計算過程,獲得1. 取全部權重,對應以前測試中獲得正確答案的那些,這些權重加起來,在下一代權重中,只須要將它們縮放1/2便可,即權重之和是以前權重之和的縮放版本;2. 實際要處理的測試數並無那麼多;3. 對於過擬合這個方法能頗有效的避免。
學好人工智能,數學很重要!
這一講首先簡介了人類的進化歷程,強調象徵性思惟能力是讓人類不一樣於其它生物的關鍵[0:00:00]。
隨後,教授介紹了內語言和語義網絡的概念[0:09:00]。
以後,教授詳細介紹了內語言中很是重要的三大元素:分類、軌跡和過渡框架[0:14:30]。
最後教授強調了故事講解和理解的重要性,並告訴你們如何講故事[0:39:25]。
以前的課程中,咱們已經提到「人類獨有的一種能力,是能將兩種概念合併爲第三種概念,同時又不破壞原有的兩種概念,而且沒有限制。」而講故事和理解故事正是將咱們同其它靈長類區分開的本質差別。因此,語言很重要!這節課咱們就來看看內語言和語義網絡的概念。
一個簡單的語義網絡例子:假設有一個對象,由另外兩個對象支持,構成支持關係,這樣就有了網絡,節點,連接,和一些意義。另外一個例子如:M謀殺D,致使M殺了D,那麼D就擁有了屬性Death。鏈接節點的連接就稱爲鏈接器(Combinators),另外還有連接之間造成聯繫的機會,例如Kill致使Death,這就至關於將連接自己看做對象,讓它成爲其它連接的主體或客體,這個過程稱爲具體化(Reification)。馬文·閔斯基據此提出了一種概念:咱們須要一種局部化過程,如框架(Frame)或模板,例如謀殺動做的框架是一個動做主體,一個受害者,這就添加了一個局部化層(Localization Layer)。另外提一下,在這個問題上有寄生語義(Parasitic Semantics)的問題,例如M謀殺D,也許是由於M想得到什麼利益,那麼這個意義是咱們的理解,而不是機器的理解,這個意義就是寄生的。
咱們想要使用語義網絡,那麼咱們要問內語言的哪些元素很是有用?第一個是分類(Classification)的概念,例如斯坦威鋼琴屬於鋼琴,鋼琴屬於樂器,,即Specific到Basic到General,有了分類就能夠將事物組織成必定的層次結構。有了層次結構中的元素,該如何談論它們呢?想象一輛車撞到了牆上,考慮汽車的速度,離牆的距離,汽車的情況,在撞前/撞時/撞後的狀態變化,就能夠獲得狀態變化的詞彙表,如增大/減少、改變、出現/消失,這就引出了第二個概念:過渡(Transition),任何意圖理解故事的系統,都會強調這個概念。第三個概念是軌跡(Trajectory)或角色框架,一個對象如何(在他人的幫助下)從一個地方運動到另外一個地方(影響別人)。有了這些東西后,就能夠想辦法把它們整合起來。
舉個例子:根據Pat Comforted Chris這句話,能夠構建一個角色框架:主體-Pat,動做-?,客體-Chris,結果-過渡框架。其中的過渡框架爲:對象-Chris,心情-變好。若是修改Comforted爲Terrified呢?那麼Action仍然不清楚,但心情會變差。若是進一步讓場景更清晰,咱們修改Comforted爲Kissed,那麼角色框架中就多了一個想象(Hallucination),它也是一個框架-軌跡框架,運動的物體是Pat的嘴脣,目的地是Chris的嘴脣,咱們大腦中的圖庫幫助咱們構建了一個場景,最後的結果也是心情變好。若是修改Comforted爲Stabbed,那麼在結果的過渡框架中,除了心情變差,健康也降低了,在軌跡框架中,運動物體是Pat的刀,目的地變成了Chris的身體。這就是故事序列(Store Sequence),串起了以上這些東西。另外還值得討論的是故事庫(Story Libraries),例如故事框架下,有災難框架,派對框架等,災難框架又能夠分爲颶風框架和地震框架等,派對框架也能夠分爲生日派對框架和婚禮派對框架等等。
最後關於講故事:若是你想要講故事,想要讓人很快的聽懂,就要確保不增長句法難度,爲讀者增長額爲理解負擔。有三大法則:
1. Don't Use Pronouns.
2. Don't Use Former or Latter.
3. Don't Call a Shovel a Spade.
這一講介紹了人工智能方面的一些通用架構:
第一部分講解了通用問題求解器(GPS)[0:00:00];
第二部分講解了SOAR架構(狀態算子與結果架構)[0:09:24];
第三部分詳細講解了馬文·閔斯基的情緒機器(emotion machine)[0:16:16];
第四部分向詳細講解了包容架構(subsumption architecture),這也是當今主流吸塵器機器人倫巴所使用的架構[0:22:26];
最後,教授講解了本身如今正在開發的Genesis架構[0:34:00]。
通用問題求解器(General Problem Solver,GPS)概念很簡單:從當前狀態C但願到達目標狀態S,那麼測量兩者之間的象徵性差別d,可讓你選擇某種操做算子o,使得C到達中間狀態I,繼續觀察I和S中間的差別d2,並選擇某個算子o2,用於進一步減小差別,依此繼續。這也稱爲手段目的分析(Means Ends Analysis)。舉個例子,放暑假了,你想要從學校回老家,測量兩者的直線距離d1,咱們發現正確的算子應該是搭乘飛機,可是想要搭乘飛機,就得先去機場(由d2決定),還得先走路去公交站(由d3決定),而後坐公交去機場。很是直覺!但想要使用這個框架,須要作的是鑑別可能碰到的差別,和可能用到的算子,並創建一張表格將兩者關聯起來,因而一種改進型架構SOAR被提出來。
SOAR(State Operator and Result)包含多個部分:一個長時記憶(包含斷言和規則),一個短時記憶,以及同外部世界聯繫的系統(如視覺系統和動做系統)。同時它有一個精密的偏好系統(規則的優先與取捨),以及問題空間的思想(想要解決一個問題,須要發展出一個空間,並在空間中搜索求解)。此外,SOAR還有廣泛性此目標創建的思想,即沒法肯定下一步該怎麼作時,將問題單列出來考慮它的問題空間。
通用問題求解器架構聚焦於的思想是問題求解假設(Problem Solving Hypothesis,一切都是關於問題求解的),SOAR架構聚焦的思想則是象徵性系統假設(Symbol System Hypothesis)。這兩種架構都嚴重偏重於考慮問題求解,而馬文·閔斯基的架構(情緒機器,Emotion Machine)則關心分層的問題求解。例如,閱讀一小段文字時,須要用到底層本能反應(聽到聲音,轉過頭),學習反應(看到飛馳而來的車決定是否要過馬路),有意思考(決定衝過馬路,包括SOAR/GPS),反思性思考(回想本身衝動的決定),自我反思(是否會遲到接下來的計劃),自我意識思考(朋友們會怎麼看他),這些層次促進了常識的創建,所以這個架構也能夠說是基於常識假設(Based on Common Sense Hypothesis)。
包容架構(Subsumption Architecture),由Rod Brooks提出,不一樣於以往的機器人設計(封裝的視覺/推理/東西系統),其在最底層有一個系統可以避免物體,上一層是漫遊,再上一層是探索,再上是尋找,等等,每一層都有本身的視覺/推理/動做系統。因此該架構沒有表示(No Representation),這樣也就沒有了模型和有預測/理解/解釋/控制,因此在這個架構中使用世界(World)而不是模型,什麼意思?就是你只須要對世界做出反應,而不須要存儲一張地圖來避免撞到物體。另外,在其最純粹的形式中,機制僅僅是有限狀態機。這也是掃地機器人使用的架構,它包含了馬文·閔斯基架構中的本能反應和學習反應。
Genesis架構的工做方式以下:它專一於語言,包含兩個角色,一是指導和統御感知系統並與之互動,二是讓事件描述成爲可能。這就是課程一開始提到的案例中的那樣,想象提着一桶滿水在街上跑,結果會怎樣(打溼褲管和鞋)?爲何使用臺鋸時不要帶手套(避免被牽扯捲入)?有了描述事件的能力,就能夠發展出講故事和理解故事的能力,而後就能從宏觀和微觀上駕馭文化。所以,該架構聚焦的思想是強故事假設(Strong Store Hypothesis)。
最後,經過一個實驗,引伸出本課的兩個要義:
1. 若是想讓本身變得更聰明,那麼須要作:Look-Listen-Draw-Talk,這些機制圍繞着人類思惟的中心。這也是上課作筆記的用處。
2. Beware of Fast Talkers,由於它會阻礙你的語言處理器,令你無自主思考。
這一講主要是一些機率相關的必要知識。
首先教授經過一個例子引出了考慮機率問題的重要性,引入了聯合機率表的概念,並進行了相關演示[0:00:00]。
第二部分,教授講解了一些基本的機率公理和定義[0:18:30]。
最後,教授引出了信念網絡這一律念,並將以前所講的機率知識用於這一重要領域[0:36:30]。
聯合機率表經過肯定每一個條件因子不一樣狀況下的事件發生的機率可以提供很是有用的機率信息,可是真正在應用中,這個表可能會很大,或者沒有足夠多的時間去得到大量的數據,咱們須要專門的處理方法。
1. 基礎機率(Basic Probability):① 0≤P(a)≤1;② P(T)=1;P(F)=0;③ P(a)+P(b)-P(a,b)=P(aUb);
2. 條件機率(Conditional Probability):① P(a|b)=P(a,b)/P(b);② P(a,b,c)=P(a|b,c)P(b,c)=P(a|b,c)P(b|c)P(c);
3. 鏈式法則(Chain Rule):P(x1,...,xn)=∏P(xi | xi-1,...xi);
4. 獨立(Independence):P(a|b)=P(a),則a與b獨立;
5. 條件獨立(Conditional Independence):P(a|b,z)=P(a|z),則a與b在z下條件獨立;=> P(a b|c)=P(a|c)P(b|c);
信念網絡(Belief Nets):給定父節點的狀況下,每一個節點獨立於其餘非衍生節點。舉個例子:盜賊P出現狗D可能會叫,浣熊R出現狗D也可能會叫,狗D叫得足夠大聲了主人可能會報警P,此外浣熊R出現可能會打翻垃圾桶T,在這種狀況下,報警與否只與父節點狗叫有機率關係,與盜賊出現,浣熊出現,垃圾桶打翻均獨立。具體的計算中,假設P(B)=0.1,P(R)=0.5,B和R均不出現狀況下P(D)=0.1,B出現R不出現時P(D)=1,B不出現R出現時P(D)=0.5,B和R均出現的狀況下P(D)=1。一樣的,D的狀況下P(P)=0.1,D不發生的狀況下P(P)=0.01。相似的,R出現,P(T)=0.1,R不出現,P(T)=0.001。能夠看出,須要肯定10個機率值,相比聯合機率表中須要肯定的25=32,個數明顯減小。而經過這些值,也能算出整個聯合機率表,利用的就是上面提到的鏈式法則和條件獨立等,P(P,D,B,T,R) = P(P|D B T R)P(D|B T R)P(B|T R)P(T|R)P(R) = P(P|D)P(D|B)P(B)P(T|R)P(R)。
這一講首先詳細講解了上一節已經提到過的貝葉斯機率方面的知識,考慮如何從一系列條件機率的乘積算出整張聯合機率表[0:00:00]。
而後,教授介紹瞭如何根據結果來反推哪類模型更有可能正確(例若有兩個硬幣,拋得正反的機率不一樣,如何經過實際拋擲試驗,求更有多是哪一個硬幣)[0:18:15]。
最後,教授介紹告終構發現方面的內容[0:42:50]。
回憶上一節課最後利用鏈式法則計算整個聯合機率表,在那個計算方法中,咱們沒有特別約定P,D,B,T,R的變量順序,不過根據信念網絡的概念,咱們應該優先考慮任何變量都處於自身非衍生節點的狀況,每次都從底部開始向上取是合理的作法。另外,若是模型是正確的,觀察足夠多的次數,那麼計算出來的機率就會很準確。
那麼如何根據結果來反推哪類模型更有可能正確?這就要用到貝葉斯機率知識。咱們知道P(a|b)P(b)=P(a,b)=P(b|a)P(a),那麼P(a|b)=P(b|a)P(a)/P(b),這有什麼用?舉個例子,若是b是證據E,a是感興趣的分類C,那麼我知道該類的先驗機率和初始機率,那麼就能獲得在b證據下分類爲a的機率,由於P(b)對任何分類都是相同的。推廣到證據不少的狀況:
P(ci|e) = P(e1,...,en|ci)P(ci)/d = P(e1|ci)P(e2|ci)...P(en|ci)P(ci)/d
舉個例子:假設有兩枚不一樣的硬幣,一真一假,假的硬幣每次拋擲獲得正面的機率不是0.5,而是0.8。那麼,當我隨便拿起一個,拋出第一次獲得正面,第二次獲得反面,請問它是真的仍是假的硬幣?這就是經過結果去反推屬於哪類模型。樸素貝葉斯分類(Navie Bayesian Classification)以及拓展後的貝葉斯網絡(Bayesian Net)可以解決不少相似於醫療診斷,材料缺陷等等從證據往回推模型的問題。
All this probabilistic calculation is the right thing to do when you don't know anything,and you often don't konw anything!
這一講是MIT人工智能課程的最後一節課,教授首先繼續上一講講完了主幹內容,包括模型融合、跨通道偶合[0:00:00]。
以後,教授對課程進行了一些回顧,並講到了期末考的相關事項[0:12:30]。
再後,教授展望了將來,告訴感興趣的同窗,後面還有哪些課程值得學習[0:20:30]。
最後,教授演示了他的團隊正在開發的Genesis系統,並在此基礎上進行了總結[0:29:40]。
模型融合就是將多個模型中類似的東西提取出來,融合成一個統一的模型,而跨通道偶合就是使用多個通道以及它們之間的對應關係來分析整理這些產生貢獻的通道。舉個例子,當你發出a的音,你能夠將這個聲音進行傅里葉變化獲得頻譜,同時你的嘴會有特定的嘴型,這能夠看作兩個不一樣的通道,那麼如何將發聲的口型和聲音自己聯繫到一塊兒?假設你有一堆聲音的數據,一堆嘴型的數據,那麼如何將兩者關聯,互相標記,帶有對應意義?
人工智能並非代替人來創造新財富和得到新能力,而是經過人類和計算機的協做,雙方作本身最擅長的,機器不會取代人。隨着雲計算的發展,人們關心如何從網上獲得數以千億的信息並使用它們,但反過來,須要多少的知識就能理解故事也是很值得思考的問題。
關於方法的要點,涉及如何搞人工智能,以下:
許多專家太拘泥於機制,更好的作法是從問題着眼,科學方法,考慮問題,而後使用正確的機制來處理問題。
學完這門課程,還有什麼能夠繼續學習的課程?能夠選擇馬文·閔斯基的心智社會,還有Berwick的語言理解課程,及關於進化的課程。Jerry Sussman的一門課講大規模象徵性系統。以及本課教授開的人工智能創業,還有一個關於如何演講的講座(很是值得一聽)。
最後關於教授團隊的Genesis以及正在作的事情,感興趣的能夠去網站上關注下。以及關於MIT,關於讀研,關於AI的要點和將來,我都建議有空看看視頻課程(其實最好是全部的課程都看,畢竟,課堂上學習到的不只是AI方面的知識),留給你們兩個問題:
Are people too smart?
Are people smart enough?