Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

用十分鐘瞭解 《人工智慧的那些問題與方法》

7 536 vues

Publié le

(函數優化、爬山演算法與模擬退火法)

十分鐘系列:http://ccc.nqu.edu.tw/wd.html#ccc/slide.wd

Publié dans : Formation

用十分鐘瞭解 《人工智慧的那些問題與方法》

  1. 1. 用十分鐘瞭解 《人工智慧的那些問題與方法》 ( 函數優化、爬山演算法與模擬退火法 ) 陳鍾誠 2016 年 3 月 14 日 程式人程式人 本文衍生自維基百科
  2. 2. 《人工智慧》這個詞 ●聽起來就很高級!
  3. 3. 所以、很多人會覺得 ●人工智慧的問題一定很難!
  4. 4. 但是、真的那麼難嗎? ●其實不一定!
  5. 5. 很多人工智慧的問題 ●其實都很簡單!
  6. 6. 但是、研究者為了 讓它看起來高級一點 ●總是寫了一大堆數學!
  7. 7. 這讓它看起來 ●好像真的很難!
  8. 8. 其實、那些數學 ●我我大部分都看不懂!
  9. 9. 那怎麼辦?
  10. 10. 沒關係 ●我們有直覺!
  11. 11. 所以 ●在這次的十分鐘系列中!
  12. 12. 我要告訴大家
  13. 13. 如何用直覺理解 ●人工智慧的那些理論!
  14. 14. 首先、讓我們看看 ●到底人工智慧研究的 ●是那些問題?
  15. 15. 基本上 ● 就是要讓電腦具有和人類差不多的能力!
  16. 16. 問題是 ●到底人類有哪些能力?
  17. 17. 這個問題應該不難
  18. 18. 因為你和我都是人類
  19. 19. 我們人類 ●有五官:會《聽說讀寫》 ●有四肢:會《走唱跑跳》 ●有大腦:會《思考決策》
  20. 20. 所以 ●電腦要有智慧,就要能模擬 這些功能!
  21. 21. 但是、這看起來很難!
  22. 22. 不過、有時候很簡單
  23. 23. 例如、你問一個小孩 ● 請問你要一支棒棒糖還是兩支 這件事情電腦應該也能回答!
  24. 24. 但是、如果你問另一個小孩 ● 請問你要被藤條打一下還是兩下? ● 這件事情應該也很容易決定!
  25. 25. 這些問題 ●都有一個共同的特性
  26. 26. 就是有好壞
  27. 27. 人工智慧的核心問題 ●就是要判斷哪個好哪個壞?
  28. 28. 換句話說
  29. 29. 所有人工智慧的問題 ● 都可以視為一種《優化問題》
  30. 30. 尋找好的 ●放棄不好的!
  31. 31. 最簡單的一種人工智慧問題 ●就是函數的優化問題!
  32. 32. 舉例而言
  33. 33. 如果你想找 17 的平方根 ●那你應該怎麼找呢?
  34. 34. 其實、這個問題 ●我好像不知道怎麼解?
  35. 35. 不過、如果你給我電腦 ●讓我寫個程式!
  36. 36. 我就可以 ●輕易地給你解答!
  37. 37. 怎麼解呢?
  38. 38. 想法很簡單
  39. 39. 讓我們先看看下列圖形
  40. 40. 您會發現 abs(​x^​2-​17) 這個函數,有兩個最低點,通常我們認為平方根是正的那個!
  41. 41. 所以、如果我們從 x=0 開始 只要一直往右走,那麼將會發現,函數 f(x)​=​abs(x^2-17)​ 的值 一開始會越來越小,等到過了最低點之後,就會變成越來越大!
  42. 42. 於是、我們只要一直向右走 ● 直到左右兩邊的函數值都比我大的時 候,就代表了我們已經找到 17 的平方 根了!
  43. 43. 很多問題 ● 表面上看起來 – 並不是《優化問題》 – 甚至不是《算分數》的問題 ● 但是最後都可以轉為《算分數》的問題 – 然後用電腦來解決!
  44. 44. 像是、人工智慧中的 ● 語音辨識、影像辨識、醫學診斷 ● 電腦下棋、路徑規劃、機器人移動 ● 甚至是機器翻譯、自然語言理解等等 ● 最後都可以變成《計算分數的優化問題》, 這樣才能夠用電腦進行計算並尋找解答!
  45. 45. 所以、要學習人工智慧 ●首先要能處理《優化問題》
  46. 46. 處理優化問題的方法中 ● 最簡單應該就是《爬山演算法》了!
  47. 47. 所謂的爬山演算法 ● 就是讓程式一直往上爬的方法
  48. 48. 你只要看到旁邊的點比現在的位置高 ● 就往那邊爬 …
  49. 49. 直到你發現 ● 四面八方都比你低,再也爬不上去了 此時代表你已經位於山頂上了
  50. 50. 於是乎、你找到了一個不錯的點 ● 雖然不是世界最高,但是也算本地最高點了! ● 這就是所謂的區域最佳解。
  51. 51. 奇怪 ● 圖中的那點不就是《世界最高點》嗎?
  52. 52. 有可能、但是如果看遠一點 ● 也有可能會像這樣
  53. 53. 這就叫做 ●一山還有一山高囉!
  54. 54. 歐!對了 ● 這種方法,不只可以用來找最高點!
  55. 55. 也可以用來找最低點 ● 只要你將目標函數乘上 -1 就行了! -1*f(x)
  56. 56. 當然、這種方法 ● 有時找不到真正的最高點 ( 或最低點 ) ! 不過如果多試幾次,從不同地方開始,那麼就有可能找到更好的區域低點,甚至是最低點! 假的最低點
  57. 57. 對於那種只有一個最低點的連續函數而言 ● 不管函數有幾個維度,都可以輕易地找到最高點 ( 或最低點 )
  58. 58. 但是如果有很多座山 ●那就不一定找得到最高點了
  59. 59. 雖然如此 ● 但是沒關係! ● 因為其他方法通常也沒辦法找到最高 點,特別在函數非常複雜的時候!
  60. 60. 而且 ● 區域最佳解的表現,通常也已經 很不錯了!
  61. 61. 問題是 ● 我要怎麼把爬山演算法寫成程式 呢?
  62. 62. 這個問題並不難
  63. 63. 以下是爬山演算法的《算法》
  64. 64. 如果寫成 JavaScript 程式,會像這樣
  65. 65. 以下是該程式的執行結果
  66. 66. 如果把函數換掉,也可以順利執行。
  67. 67. 不過上述程式只能處理單變數函數 ● 對於多變數函數,必須處理多變數 ( 維度 ) 的選擇問題 ● 可以用隨機的方式從 n 個變數中取出一個,進行微小 調整後,看看是否能變得更好。 ● 如果更好就接受,沒有更好就放棄! ● 當我們連續嘗試很多很多次 ( 例如一萬次 ) 都沒有變得 更好時,就認為已經達到《山頂》,於是輸出解答!
  68. 68. 以下是一個通用的 《爬山演算法程式架構》
  69. 69. 還有通用的《解物件》 (Solution) 之定義 通常若是尋找高點,我們會用高度 height()​ 代表, 但若尋找低點,我們會用能量 energy()​ 代表!
  70. 70. 有了這個爬山演算法的通用程式架構 ● 我們就可以套用在任何需要優化的問題上 ● 只要你能定義出《高度》或《能量函數》 就行了!
  71. 71. 以下是尋找平方根的範例
  72. 72. 當然 ● 這個程式也可以用來處理更複雜的問題 ● 只要你能寫出《能量函數》 energy() 與 《鄰居函數》 neighbor() 就行了! 完整的程式位於 http://ccc.nqu.edu.tw/db/ai/hillClimbingFramework.html
  73. 73. 其實、在大部分的情況下 ● 爬山演算法就已經夠好用了!
  74. 74. 不過 ● 為了克服《超小山丘》的那種問題,你也 可以做一點點修改,讓爬山演算法可以有 機會離開那個《無言的山丘》。 ● 這個改良版就稱為《模擬退火法》。
  75. 75. 為何稱為 ●模擬退火法呢?
  76. 76. 這是因為有人發現 ● 打鐵煉鋼的時候,如果溫度降得太快,煉 出來的鐵就會脆脆的不堅固。 ● 要能煉得好的秘訣是溫度要慢慢降,然後 一直敲一直打,這樣打出來的鐵才會夠堅 固,成為寶刀或寶劍
  77. 77. 如果模仿這種想法 ● 在爬山演算法的相反版,也就是《下山演算法》當中, 用《能量》的概念來取代《高度》,那麼整個爬山的過 程就反過來變成在尋找能量的最低點。 ● 這時如果加入溫度的概念,讓這些鐵原子在溫度高的時 候可以比較自由的亂動,等到溫度慢慢降低之後才逐漸 固定下來,這樣打出來的鐵,原子的排列就會比較整 齊,也就會比較堅固。
  78. 78. 模仿這種鐵原子慢慢降溫穩定過程的機器 稱為《波茲曼機》 ● 而模仿單一鐵原子震動或移動,然後慢慢 隨溫度下降而減少變動,逐漸固定下來的 行為,就是《模擬退火法了》
  79. 79. 以下是《模擬退火法》的演算法
  80. 80. 如果寫成程式,就會像這樣
  81. 81. 當我們用上述《模擬退火法》模組 ● 尋找函數 的最低點時,可 以寫出下列主程式。 完整的程式位於: http://ccc.nqu.edu.tw/db/ai/simulatedAnnealing.html
  82. 82. 其執行結果如下 ● 您會發現解答 (x=2,y=0.5,z=2.5) 正是函數 的最低點! ● 其能量值為 -3 , 也就是函數 f(x,y,z) 的值。
  83. 83. 這種優化方法 ● 看來好像只能解單一函數的優化 ● 但事實上,爬山演算法和模擬退火法 – 連《方程組的優化》也通常能解!
  84. 84. 舉例而言、如果你想解下列方程組 ● 除了用國中時所學的消去法之外,也可以用上述 的《爬山演算法》或《模擬退火法》來解。 ● 只要把能量函數設為下列函數就行了。 – (2x+y-8)2 + (x+y-6)2
  85. 85. 同樣的、這種方法也能求解更複雜的方程組 ● 包含線性方程組 ● 與非線性方程組
  86. 86. 甚至也能用於求解《微分方程組》 ● 只是不一定有辦法找到完全符合條件的解答而已!
  87. 87. 當然、尋找這些函數 的最佳解或方程組的解答 ● 感覺並不太像是《人工智慧》的問題 ● 反而比較像是《數值分析》或《科學計算》 的問題!
  88. 88. 但是、天底下的知識 ● 幾乎都是相關聯的 ● 而且常常能夠一通百通! ● 只要學會一招,通常就夠用了。
  89. 89. 舉例而言 ● 對於演算法中的《最小擴展樹》或《旅行推銷員》 等問題,其實也都是在找某些數值最小 ● 因此當然也能用《爬山演算法》或《模擬退火法》 來求解! ● 只是在這些問題上對於《鄰居》的定義不一樣,還 有《能量函數》也有所不同而已!
  90. 90. 甚至 ● 對於《手寫辨識》等人工智慧上的問題,只要你能 定義出《兩個手寫字相似程度》的數學函數。 ● 那麼就可以用《爬山演算法》來求解此類問題,只 是找到的解不一定會是最好的而已!
  91. 91. 甚至、對於《影像和語音辨識》問題 ● 只要能定義兩個影像或語音的相似程度,也能夠 用《爬山演算法來求解》找出最相似的語音 ( 通 常就是正確解答 ) 。 ● 不過這種相似函數很難直接用人腦定義出來,通 常必須要先進行某些特徵抽取後才有辦法計算相 似度。
  92. 92. 而對於《機器翻譯》的問題 ● 只要你能定義《中文語句》和《英文語句》之間的意義相似度 ● 那麼給定某個《英文語句》,你只要能從《所有可能的中文語 句》裏,挑出與該英文語句意義最相似的一句話出來,這樣就 完成了翻譯動作。 ● 只是《中文語句通常有無限多》,不過我們可以先用《逐字對 譯》的方式,取出所有可能的候選中文字詞,然後再進行排列 組合,這樣就不會因為《中文語句無限多》而無法列舉了!
  93. 93. 還有電腦下棋的問題 ● 其實也只是在尋找一個有效評估盤面好壞 的《盤面評估函數》 ● 然後每次下子時,都是從所有可能的下法 當中,尋找對方最不利的下法,讓對方難 以得勝,讓我方盡可能獲勝而已!
  94. 94. 不過 ● 雖然人工智慧的問題都是優化問題
  95. 95. 但是每一種方法的適用性卻有所不同
  96. 96. 有些方法在某些問題上會表現得比較好 ● 因此我們必須選擇解決該問題的適 當方法。
  97. 97. 除了爬山演算法 ●還有模擬退火法之外
  98. 98. 還有很多其他方法
  99. 99. 像是 ● 模仿鳥類的《粒子群演算法》 ● 模仿螞蟻的《蟻群演算法》 ● 模仿 DNA 兩性生殖的《遺傳演算法》 ● 純粹用亂數統計的《蒙地卡羅法》
  100. 100. 以上這些從大自然模仿而來的方法 ● 通常被歸類為《軟計算》方法 ● 因為這些方法可以到處套用,很有 彈性,所以很軟 …
  101. 101. 這些軟計算方法 ● 和爬山演算法之間的差異 除了粒子比較多之外 通常《鄰居》的定義也不太一樣
  102. 102. 像是遺傳演算法 GA ● 下一代的 DNA 就是由父母交 配後的結果 ● 其鄰居的搜索空間很大 ● GA 適用在兩個好的父母會生 出好的子女之問題上,也就 是要有《好的片段會組成好 的整體》之特性 父 DNA 母 DNA 子 DNA
  103. 103. 而蒙地卡羅法 ● 則是用亂數統計來估計某函數 的一種方法
  104. 104. 例如你想計算圓面積或 π 值 ● 那麼可以用大量 的亂數,經由統計 計算出圓與方形 的比例,進而計算 圓面積。
  105. 105. 當然、蒙地卡羅法 ●也可以用來 計算微積分中 的函數面積
  106. 106. 甚至在下電腦圍棋的 AlphaGo 程式上 ●也用了蒙地卡羅樹狀搜尋法 來尋找下一子圍棋的好下法
  107. 107. 以下是《蒙地卡羅對局搜尋法》 (MCTS) 的一個搜尋擴展範例 1.​ 選擇上界 UCB ​​​​ 最高的一條路 直到末端節點 2.​ 對該末端節點 進行探索 ( 隨機 對下,自我對局 ) 3.​ 透過自我對局, 直到得出本次對局 的勝負結果 4.​ 用這次的對局結果, 更新路徑上的勝負統計 次數! 說明:上圖中白色節點為我方下子時的《得勝次數 / 總次數》之統計數據, 灰色的為對方下子的數據 ,​ 本次自我對局結束後,得勝次數與總次數都會更新!
  108. 108. 另外、人工智慧領域裡常用的 《神經網路》學習模型 ● 也只是在優化《錯誤率》這個《能量函數》而已。
  109. 109. 而神經網路中著名的 《反傳遞學習算法》
  110. 110. 也只是用《梯度下降法》 ● 在尋找《降低錯誤能量》 的神經權重之組合而已
  111. 111. 那個梯度,就是斜率最大的方向指引
  112. 112. 最近很紅的《深度學習》技術 Deep Learning ● 其中所使用的《捲積神經網路》 – (Convolutional Neural Network) – 也只不過是將《反傳遞神經網路》的 中間層稍微改變了一些而已!
  113. 113. 有關神經網路的議題 ● 以及最近因為 AlphaGo 大戰《李世石》引 發大家對《捲積神經網路》與《深度學 習》強烈好奇的問題,就讓我們留待下次 的《十分鐘系列》再來探討了!
  114. 114. 以上 ● 就是我們今天的十分鐘系列!
  115. 115. 希望 ● 您已經學會了 – 爬山演算法 – 各種優化算法 – 還有關於人工智慧的基本概念
  116. 116. 我們下次見囉!
  117. 117. Bye bye!

×