人工智能詞彙表

以下係人工智能（AI）上常用嘅詞彙一覽。

人工智能，又有叫機械智能（machine intelligence），泛指由機械展示嘅智能，相對於人同第啲動物展示嘅自然智能，而喺科學上，「人工智能」一詞亦都俾人攞嚟指專門研究人工智能嘅認知科學同電腦科學交界領域。人工智能呢個領域上嘅研究會關注嘅問題包括點樣教機械做推理、知識表示、計劃、學習、自然語言處理、感知以及郁同操控物體等嘅作業，而呢啲研究其中一個終極目標就係想創造出強人工智能（strong AI）－即係喺廿世紀嘅人類想像當中常見、能夠展現出同人無異嘅智能嘅 AI 。

到咗廿一世紀，人工智能經已係一個蓬勃嘅獨立科學領域，引起咗哲學、社科同科幻等領域嘅討論，而且仲有得按照所使用嘅技術或者想達到嘅目的分做多個唔同嘅子領域。人工智能嘅子領域好多時仲要專化到彼此之間溝通唔到－所以有大量嘅專業行話詞彙。

## 理論基礎

人工智能（artificial intelligence；AI）泛指由機械展示嘅智能，亦都可以係指研究人工智能嘅領域。
*智能體（intelligent agent，IA）：人工智能領域上嘅基本概念；人工智能嘅目標係人工噉創造出智能體，而喺最抽象化嘅層面嚟講，一個智能體可以想像成一嚿具有以下部份嘅物體：
*#感知外界嘅能力，可以睇吓感應器（sensor），例：眼同耳仔等嘅感官；
*#某啲按「if... then...」式條件做決策嘅法則，可以睇吓條件陳述式（conditional statement），例：「如果睇到有嘢食，就行埋去」；
*#感知到嘅外界狀態同智能體嘅內部運作法則（睇埋下面知識表示）會主宰個智能體會採取乜嘢**行動**（action），而
*#執行器（actuator）會負責實際採取行動，例：手同腳嘅肌肉會做出適當嘅動作，等隻動物行埋嘢食嗰度；
*#行動會改變**環境**（environment）嘅狀態，而環境上嘅改變會由感應器感知到。
**如是者，智能體就會一路同環境互動，一路嘗試達到自己嘅目的。唔同智能體喺複雜度上可以有好大差異，而一個智能體嘅複雜度（例如係佢曉唔曉改變自己行為，而唔係一味做佢設計者教佢做嘅行為）同佢嘅智能（intelligence）息息相關。智能體同環境之間互動形成嘅系統可以畫成以下噉嘅抽象圖解：
*:
**理性體（rational agent）：一個理性體喺做決策嗰陣，實會作出能夠令自己效益有咁大得咁大嘅決擇；呢樣嘢就噉睇好似好簡單，但查實可以好撈絞－淨係「要攞咩嚟做效益嘅指標」經已係條大問題，例如想像教一部機械人打掃，如果效益指標係「掃走咗幾多塵」，好可能會教到部機械人做出「係噉掃走啲塵，擺返啲塵落地板，再掃」噉嘅行為。
**感受（percept）：指一個智能體一點時間感知到嘅嘢；一個智能體可以想像成一個函數，會攞感受做 input，俾行動嚟做 output 。
**心靈模型（mental model）：指個智能體內部一個有關「個世界係點運作嘅」模型；個模型令個智能體可以靠自己嘅感受嚟估計「世界嘅狀態跟住落嚟會點樣變化」。
**目的（goal）：指個智能體想達到嘅狀態；喺實際應用上，一個 AI 可以係嘗試用心靈模型估計「呢個行動會引致點嘅結果」，然後攞個結果嚟同自己嘅目的比較，靠噉嚟判斷嗰個行動係咪可取。
**效益（utility）：指一個狀態有幾「令個智能體開心」；喺實際應用上，一個 AI 可以係嘗試用心靈模型估計「每個可能行動會帶嚟幾高嘅效益」，然後揀效益最高嗰個。
**多智能體系統（multi-agent system）：指個系統有多個智能體存在，而且呢啲智能體彼此之間會互動，例如係兩個 AI 鬥捉國際象棋。
*自然智能（natural intelligence）：一個有啲含糊嘅概念，有好多唔同嘅定義；喺最廣義上嚟講，智能可以定義為「一個心靈感知同推斷資訊、將呢啲資訊儲起同化為知識、並且運用知識適應環境嘅能力」。
**群體智能（swarm intelligence）：指一個由好多個體組成嘅系統喺自我組織（self-organization；系統嘅組成元件地區性嘅互動，引致整體上嘅運作規律）之下展現嘅智能或者類似有智能嘅行為，例如一個蜜蜂竇由大量嘅個體（個體蜜蜂）組成；每隻蜜蜂都會按某啲法則行動，個體蜜蜂之間有**地區性**（local）嘅互動，即係一隻蜜蜂會同佢周圍嘅蜜蜂互動，但好少可會有得同時同成個竇嘅蜜蜂互動；呢啲眾多嘅活動最後令成個竇整體上曉作出「建立新竇（接近自我複製）」同「維持自己存在」等嘅行為－個竇有少少似一隻有智能嘅生物個體噉。
*演算法（algorithm）：指一段唔含糊嘅指令，能夠教一部運算機械執行某啲作業，由某啲特定嘅輸入（input）嗰度做運算計出相應嘅輸出（output）。
*邏輯（logic）：一套研究「諗嘢呢家嘢要點樣做先至可以得出真確嘅結論」嘅學問；例如邏輯上有對謬論作出研究，剖析有問題嘅諗嘢方式點解會引致錯誤嘅結論；人工智能嘅設計好多時都會用到邏輯上嘅法則，但實證經驗表明，齋靠邏輯法則好多時都搞唔掂複雜性相關嘅問題。
*複雜性（complexity）：系統可以具有嘅一種特性。一個複雜（複雜性高）嘅系統會有好多部份，唔同部份之間會有互動，而且是但搵兩個部份，佢哋之間嘅互動會受好多嘢影響，於是成個系統嘅行為就難以用簡單嘅法則一兩句講清楚嗮。
**組合性爆發（combinatorial explosion）：指「可能性嘅數量」隨問題嘅複雜性而有爆發性嘅增長，例如係教個人工智能程式捉棋噉，國際象棋喺兩個棋手都行咗第一步之後個棋盤會有 400 個可能嘅形勢，喺兩個棋手都行咗第二步之後個棋盤會有 197,742 個可能嘅形勢，而喺兩個都行咗第三步之後呢個數字會超過 100 萬（「可能性嘅數量」隨「行咗嘅步嘅數量」增長得好犀利），就算用先進嘅電腦行都要嘥極大量嘅時間先至能夠考慮嗮所有嘅可能性。
**演算法熵（algorithmic entropy；數學符號：K），又叫柯氏複雜性（Kolmogorov complexity）：用嚟量度一件物件嘅複雜性嘅一個指標，一件物件嘅演算法熵係指要產生嗰件物件嘅程式嘅最短可能長度。舉兩個簡單嘅例子說明，想像以下呢兩串符號：
**:`abababababababababababababababab`（串 1）
**:`4c1j5b2p0cv4w1x8rx2y39umgw5q85s7`（串 2）
***呢兩串符號長度一樣，但喺複雜度上唔同：串 1 可以描述為「將『ab』寫 16 次」，即係 `write ab 16 times` 噉嘅碼－段碼淨係用咗 17 個符號；相比之下，串 2 冇乜明顯嘅規律，唔能夠用一句嘢簡單噉描述嗮，所以要部電腦死記住 `write 4c1j5b2p0cv4w1x8rx2y39umgw5q85s7` 嘅碼－段碼有成 38 個符號。所以如果用演算法熵做準則嘅話，串 1 簡單過串 2。
*不確定性（uncertainty）：指一個智能體手上資訊唔夠嘅情況，例如有個人搵個唔透明嘅骰盅𢫏住咗粒六面嘅骰仔，然後係噉勁搖個骰盅，假設佢完全冇方法睇到粒骰仔（資訊唔夠），佢喺攞開個骰盅之前就會經歷不確定性，唔知粒骰仔邊一面向上。不確定性呢家嘢可以用機會率（probability）嘅數值嚟衡量，而概率論（probability theory）有對相關嘅問題作出詳細嘅著墨。
*容錯性（fault tolerance）：指一個系統有幾能夠承受個別組成部份出錯；廿世紀嘅數碼電腦其中一個特性係容錯性低過人腦好多，例如想像家陣有個人畫緊個蘋果，佢畫工唔係咁好，畫到個蘋果歪咗，如果佢歪得唔係咁犀利，睇嘅人依然有能力知佢畫緊嘅係蘋果，但攞一部廿世紀嘅數碼電腦，只要個輸入多咗或者少咗個 0 或者 1，部電腦就經已完全搞唔掂－人腦有能力容許輸入有錯誤，而廿世紀嘅數碼電腦缺乏呢種能力。
*有限理性（bounded rationality）：根據有限理性嘅原則，一個智能體理論上可以係完美理性嘅決策者，但佢哋喺運算能力、資訊、時間同記憶等嘅因素上受到限制，所以好多時都唔能夠做完全理性嘅決策；例如假想有個人，佢想用手頭上嘅錢最大噉滿足自己嘅慾望，喺完美理性嘅情況下，佢會集中淨係諗應該點樣用手上嘅資源達到「最大噉滿足自己慾望」呢個目的，忽略嗮第啲嘢，而且完美噉清楚知道每個可能選項有幾能夠滿足自己慾望，跟住就作出能夠令「自己慾望得到滿足」最大化嘅決策，而喺有限理性嘅情況下，可能嘅使錢方案多得滯搞到佢唔可以冚唪唥考慮嗮（運算能力不足），又或者嗰個人未必知道嗮所有可能嘅選擇（資訊不足），又或者佢唔夠時間做噉大量嘅運算（時間不足）等等，所以就焗住做出唔完美理性嘅決策。
*圖靈測試（Turing test）：用嚟檢驗一部機械係咪展現到好似人噉嘅有智能行為；最基本嗰種圖靈測試步驟如下－一次測試會有一個人類 C 負責做評判，跟住又有一個人類 B 同部受試嘅機械 A，兩者分別噉同個評判講嘢；個評判唔會見得到個人類同個受試者，淨係有得用打字等嘅方法同受試者傾偈（下圖），最後個評判就要答，兩個受試者當中邊個係人邊個係機械－而如果搵咗一班評判返嚟之後，發現班評判嘅判斷嘅準確性**唔**明顯好過隨機靠撞嘅話，嗰部受試機械就算得上係通過咗圖靈測試，展現出同人類冇分別嘅智能。

### 認知心理

認知（cognition）指一系列喺個腦入面發生嘅過程，呢啲過程幫個腦透過感官、思考同經驗嚟處理由外界嗰度收到嘅資訊（information；可以睇資訊理論），並且運用呢啲資訊加埋佢舊有嘅知識，嚟令到個腦學到新嘅知識同適應環境上嘅改變。
*解難（problem solving）：泛指喺遇到困難嗰陣運用知識嚟克服困難嘅認知過程。
**啟發法（heuristics）：指人類（或者人工智能）思考嗰陣可以用嘅「認知捷徑」，即係一啲簡單（唔使做好大量嘅運算）、可以用嚟解難嘅法則。
*雙重過程理論（dual process theory）：認知心理學上嘅一個理論；根據呢套理論，人腦有兩大系統負責做決策同推理功能：第一型過程（Type 1 process）同第二型過程（Type 2 process），第一型過程唔使用工作記憶，傾向於直覺同無意識，而第二型過程要嘥工作記憶資源，傾向於「理性」同有意識。神經成像研究表明，呢兩種過程會涉及嘅腦區截然不同。

### 神經科學
*功能性聯結（functional connectivity）：源自功能性磁振造影（fMRI）嘅一個概念；如果話若干個（兩個或者以上）腦區之間「有功能性聯結性」，意思即係話呢柞腦區彼此之間喺神經活動上有某啲特定嘅時間性統計相關（皮亞遜積差相關係數）－例如兩個腦區 \text{A} 同 \text{B}，\text{A} 硬係會喺 \text{B} 出現強烈活動 0.5 秒之後跟住出現強烈活動，或者 \text{A} 同 \text{B} 硬係會一齊變得唔活躍... 呀噉。一般認為，如果若干個腦區之間有功能性聯結，通常表示佢哋係一齊負責做某樣功能嘅。例子可以睇吓預設模式網絡。

### AI 哲學

*解釋得嘅 AI（explainable AI），指人工智能內部嘅資訊處理過程要能夠用言語解釋；人曉用口講嚟表達自己嘅思考過程，識得向身邊嘅人解釋「我係點樣諗到呢個答案嘅」，強人工智能都要能夠做到同樣嘅事。

## 感知

機械感知（machine perception）：旨在教一個人工智能體由感應器嗰度感應外界嘅資訊並且了解佢四圍嘅環境－而唔係吓吓都靠設計員話俾佢聽；生物型嘅智能體－人同第啲動物－冚唪唥都曉自己用眼耳口鼻等嘅感官嚟接收有關佢哋周圍環境嘅資訊同埋處理分析呢啲資訊（感知），所以如果人工智能要做到好似人噉嘅智能，就一定要識做同樣嘅嘢。
*電腦視覺（computer vision）：指教人工智能處理視覺資訊（光）嘅領域，個設計者可以（例如）寫一個會由部電腦嘅鏡頭攞數據嘅程式，而且個程式內置一個之前事先訓練咗，曉（例如）辨認圖入面邊忽係人面乜嘢唔係－跟住佢就會有一個能夠靠部電腦個鏡頭知道自己面前有冇人面嘅程式。
*顯著性圖（saliency map）：電腦視覺上一個重要概念，指（用一柞標量）表示一幅源圖每個位置「有幾重要」嘅圖；想像家陣個人工智能程式要處理一幅圖像，對注意力嘅研究表明咗，一幅圖像通常都會有某幾忽係重要啲嘅，例如人喺望人面嗰陣傾向會望對眼，而一幅圖像嘅顯著性圖做嘅係顯示出幅源圖有邊啲地方係重要啲嘅，即係例如將一幅影塊人面嘅相轉化做顯著性圖，幅顯著性圖會將眼等比較重要嗰幾忽油做深色，冇咁重要嗰啲就油做淺色。喺電腦視覺上，將圖像轉化做顯著性圖嘅技術有助引導做電腦視覺嘅演算法。

*佔據網格地圖（occupancy grid mapping）：指一個 AI 內部有幅地圖，將自己周圍嘅空間當做一幅由一格格組成嘅圖，而 foreach 格，個 AI 都會有個數做「目標喺呢個位」嘅機率，即係有拃
*:p(m_i\mid z_{1:t}, x_{1:t}) 噉嘅值，當中
**m_i 係地圖上第 i 點；
**z_{1:t} 係時間點 1 至 t 之間量度到嘅目標位置；
**x_{1:t} 係時間點 1 至 t 之間自己嘅狀態。

## 知識

*貝葉斯網絡（Bayesian network）：一種有向圖（好似下圖噉），幅圖會包含若干個頂點，當中
*#每個頂點對應一個隨機變數，啲隨機變數係離散定連續都得；
*#每對項點之間都可以有箭咀，如果頂點 X 有個箭咀指住頂點 Y（X → Y），噉 X 係 Y 嘅**母點**（parent）；
*#是但攞個頂點 X_i 嚟睇，X_i 都有個條件概率分佈 \Pr(X_i|\text{Parents}(X_i)) －呢個條件概率分佈會講明「如果已知 X_i 啲母點嘅數值，X_i 嘅數值嘅概率分佈」，用日常用語講即係話個條件概率分佈表示「母點嗰啲變數嘅數值會點影響 X_i 嘅數值嘅概率分佈」。

### 語言處理

自然語言處理（natural language processing，NLP）係專門教電腦處理自然語言（natural language）嘅 AI 技術；喺語言學上，自然語言係指一啲响人類當中自然噉發展出嚟嘅語言，簡單講即係好似英文同廣東話等日常講嘢會用嘅語言；自然語言係廿世紀嘅電腦完全搞唔掂嘅嘢－廿世紀啲電腦要求用家俾嘅命令有極高嘅精確性，一大串 `0` 同 `1` 裏面多咗或者少咗個 `0` 都會搞到部機做嘅運算錯嗮，而成日有歧義同含糊呢啲情況嘅自然語言電腦就自然處理唔嚟，而自然語言處理就係喺廿世紀後半橛興起嘅一種 AI 技術，專門教電腦處理自然語言。
*文字分割（text segmentation）：NLP 成日用嘅一個工序，指將要處理嗰段字分割做若干嚿各自有意思嘅單位，方便做一步嘅分析，常見嘅有將段字切割做句子或者個別嘅字呀噉。
*記號化（tokenization）：將句子分做個別嘅字，通常係將每隻字變成一段字串，記號化通常仲會配合埋將每隻字按詞性分做名詞、動詞同形容詞等嘅類型（詞）。
*詞形還原（lemmatization）：某啲語言嘅 NLP 工作會做嘅一個工序，指教部電腦一個字喺唔同詞性下嘅唔同樣，等部電腦識得將呢啲唔同樣當做同一個字噉嚟分析；例如英文 **wolf** 同 **wolves** 都係指狼，後者係眾數，做詞形還原就會教部電腦知 **wolf** 同 **wolves** 係同一個字嘅唔同樣。
*停用詞（stop word）：指 NLP 程式喺真係做主要處理之前會攞走嘅字，例如喺英文當中 **the** 同 **a** 呢啲字出現得好密，而呢啲字俾人指會干擾某啲 NLP 程式嘅運作，所以喺做完記號化同詞形還原之後，一個 NLP 程式好多時就會郁手攞走啲停用詞。
*分析樹（parse tree）：一種語言學分析上成日會用嘅樹狀數據；簡單講即係按文法將一串字串嘅句法結構表述出嚟：
*命名實體識別（named-entity recognition，NER）：指由段字串入面搵出邊啲字係表示有名實體（named entity；即係一件特定嘅物體，例如係某個特定嘅人或者某笪特定嘅地方呀噉）嘅，例如 **John hit the ball** 嗰句句子入面 **John** 就係一嚿有名實體。
*詞性標注（part-of-speech tagging，POS tagging）：同啲字串入嘅每隻字標明佢係咩詞性，每隻字都標明嗮佢係名詞定動詞定形容詞定點。
*語料庫（text corpus）：指一啲有條理噉儲住咗大量語言數據嘅資源；到咗廿一世紀初，語料庫幾乎實係以電腦形式儲住嘅，而且各大語言都會有自己嘅語料庫，啲人想教 AI 做 NLP 嗰陣，通常都會由語料庫度攞料嚟用，例如攞啲語料嚟做數據行機械學習，教 AI 學識語言嘅法則。
*語言模型（language model）：一啲 NLP 上會用到嘅概率分佈，會表示「呢一串字喺呢句句子入面出現」嘅機率。是但攞一串 m 個符號咁長嘅字串，一個語言模型會講明 \Pr(w_1,\ldots,w_m) 。
**N-gram：指一串符號，x_1, \dots, x_{j}，當中嘅一連 n 個符號；想像有串 100 個符號（LLLRLRRRLL...），一個 3-gram 演算法會考慮每串連續三個符號係乜嘢樣（LLL, LLR, LRL ...；123, 234, 345 ...），再按打前嗰兩個符號嘅規律計算下一個符號最有可能係乜，例：打前嗰兩個符號係 LL，而根據已有數據，已知兩個符號係 LL，下一個符號最有可能會係乜。精確啲講，即係話一個 n-gram 模型會用 x_{i-(n-1)}, \dots, x_{i-1} 嘅數值預測 x_i，計算：
**:\Pr(x_i \mid x_{i-(n-1)}, \dots, x_{i-1}) 。
*語言辨認（language identification）：指「攞段文字或者攞段語音（輸入），答段字或者語音係咩語言（輸出）」嘅工作。

## 解難

*瓣瓣掂玩遊戲（general game playing，GGP）：指思考點樣設計出能夠用嚟「普遍性」噉玩遊戲嘅 AI 程式－廿世紀尾嘅電子遊戲 AI 技術表明咗，要編寫出能夠玩某隻特定遊戲嘅 AI 程式並唔難；不過問題係，一路直至 2010 年代為止，玩遊戲嘅 AI 程式冚唪唥都係**專化**（specialized）嘅－即係每個程式都都淨係識一味玩死某一隻遊戲；瓣瓣掂玩遊戲嘅目的在於教 AI 好似人噉能夠學識玩多隻唔同嘅遊戲。
*運算創意（computational creativity）：研究點樣教電腦展現出好似人一樣噉嘅創意－運算創意上嘅技術通常會模擬創意所涉及嘅認知過程，嘗試教電腦做同樣嘅資訊處理，最後要部機自己產生出展示到創意嘅圖像（模擬畫畫）、樂曲（模擬作曲）或者虛構故仔（模擬寫作）等嘅產物；例子可以睇《Edmond de Belamy》呢幅俾人覺得係史上第一幅算係由 AI 創作嘅畫。
### 決策

決策（decision making）
*決策樹
**行為樹（behavior tree）：決策樹嘅一種；一樖行為樹可以想像成一幅樹狀圖，一樖行為樹會有若干個決策點，喺每個決策點，個人工智能都會按某啲條件決定係咪要進入其中一個可能狀態，定係要去下一個決策點；簡例：先睇吓周圍有冇危險（決策點 A），如果冇就進入巡邏狀態（狀態），如果有就去下一個決策點 B，決策點 B 係按敵人位置決定要防守（狀態）定進攻（狀態）。
**蒙地卡羅樹搜尋（Monte Carlo tree search）：一種搜尋演算法，用嚟幫個決策者－由一個有極高複雜性（complexity）嘅決策情境下搵出最好嘅選擇；蒙地卡羅樹搜尋會有技巧噉搜索一樖決策樹－會揀定一個深度值 d 表示「要考慮幾多步」，並且喺每步按某啲準則揀邊啲節點嘅下一步值得睇。
*行動選擇（action selection）：人工智能上最基本嘅問題之一，泛指「教人工智能由若干個可能嘅行動當中揀一個嚟採取」嘅技術。
***利用定探索**（exploit or explore）：喺教人工智能做決策嗰陣撞到嘅一個問題；想像有個按過往經驗做決策嘅人工智能程式，一方面，對於個程式嚟講，响短期內令自己利益最大化嘅做法係「利用」－集中淨係揀一啲根據過往經驗係大機會得益嘅選擇；另一方面，現實嘅決策通常都涉及由數唔嗮咁多嘅選擇當中揀一啲出嚟，所以喺任何一個時間點都實會有大量嘅可能性係個程式未睇過嘅，所以個程式有需要去「探索」－去睇呢啲可能性有一定嘅機會搵到能夠進一步提升自己得益嘅選擇。「利用同探索之間要點平衡」係教人工智能決策上嘅一個大問題。
*自動計劃
**分級作業網絡（hierarchical task network，HTN）：自動計劃嘅一種做法，基本上係指個人工智能將可能採取嘅行動之間嘅關係用「分級」噉嘅網絡表示出嚟，即係話將啲行動分做三個層次：
*****原始作業**（primitive task）：指一啲實際能夠採取嘅行動，例如喺打機當中會係「撳呢個呢個掣」。
*****複合作業**（compound task）：指一串行動結合嘅整體，例如教一個人工智能打機嗰陣，一串「撳呢個呢個掣」噉嘅行動會引致「令玩家角色由 A 點移去 B 點」。
*****目的作業**（goal task）：指一柞由複合作業組成、能夠令某啲狀態變成「真」嘅作業，例如「由 A 點移去 B 點」同埋「攞嗮眼前嘅遊戲道具」等能夠具體噉幫助「喺隻遊戲入面過關」－「過咗關」呢個狀態變成「真」－嘅目的。
**STRIPS：自動計劃嘅一套做法；喺 STRIPS 當中，一場自動計劃係一個有以下呢啲部份嘅四元組（\langle P,O,I,G \rangle）：
***P 係一柞狀態（命題變數；propositional variable）；
***O 係一柞行動（運算子；operator）；每個行動係一個四元組 \langle \alpha ,\beta ,\gamma ,\delta \rangle，即係
****\alpha：需要係真個行動先發生到嘅狀態、
****\beta：需要係假個行動先發生到嘅狀態、
****\gamma：會因為個行動而變成真嘅狀態、同埋
****\delta：會因為個行動而變成假嘅狀態。
***I 係起始狀態，包含「邊啲狀態係真」嘅資訊。
***G 係目的狀態，包含「想要邊啲狀態係真」嘅資訊。

## 運動規劃

運動規劃（motion planning）：一種運算問題，研究點樣教電腦通過一串有效嘅移動嚟將一嚿物體由一個地方移去第個地方嗰度。
*蟲仔演算法（bug algorithm）：一種用嚟教機械人應付運動規劃嘅演算法，步驟如下：
*#（假設個機械人經已知終點嘅位置同方向）向終點嘅方向移動，直至撞到障礙物為止；
*#順時鐘（或者逆時鐘都得）沿住嚿障礙物嘅邊緣嚟行，行到去到第一之撞到嚿障礙物嗰點為止（假設個機械人有感應器曉探測周圍有乜邊緣）；
*#個機械人行去嚿障礙物嘅邊緣上面最近終點嗰一點；
*#返去步驟 1。一路重複直至去到終點為止。

## 機械學習

機械學習（machine learning，簡稱「ML」）係人工智能嘅一個子領域，專門研究點樣設計一啲特殊嘅演算法嚟去教電腦喺唔使個用家開口俾明文指示嘅情況下，學識有效噉樣做一啲特定嘅作業。機械學習成日會用統計學嘅技術，典型做法如下：
#編寫一個程式，教部電腦點樣由數據嗰度建立一個統計模型嚟描述佢對啲變數之間嘅關係嘅知識；
#搵啲樣本數據（即係所謂嘅「訓練數據」）返嚟，俾個程式處理吓啲數據入面嘅個案，等部電腦按個程式建立一個數學模型；跟住
#喺將來再撞到同類個案嗰時，部電腦就會曉按佢個程式，用建立咗嗰個模型，對呢啲之前未見過嘅個案作出預測－個設計者唔使明文噉教部電腦點樣應對呢啲前所未見嘅個案，部電腦都會有能力一定程度上應對。

喺最簡單嘅監督式學習裏面，個程式會計吓，用佢個數學模型（f）計嘅「預想輸出」同實際嘅輸出差幾遠，按照呢個誤差調較自己個數學模型嘅參數（p_i），\Delta p_i = g(\text{actual y} - \text{model output})。呢個過程用虛擬碼表達係：

```python
讀取事前處理完嘅數據；

建立一個數學模型，將 y（要預測嘅變數）寫成 x（用嚟做預測嘅變數）嘅函數；

逐個逐個噉讀取數據入面嘅個案，for 每一個個案
    按照個數學模型同個個案嘅 x 值，計出預想嘅 y 值；
    計吓「預想中嘅 y 值」同「個數據所顯示，嗰個個案嘅實際 y 值」差幾遠；
    按呢個誤差，計吓個模型要點樣改；

# 如果一切順利，讀取嗮所有數據之後，最後嗰個數學模型會能夠做有返噉上下準嘅預測。
```


### ML 理論

*學習（learning）：最廣義上指一個具有認知能力嘅系統（人等有智能嘅動物同人工智能呀噉）按經驗調整自己內部嘅世界觀或者行為嘅過程，簡單嘅例子有一個人喺隻手俾個煮食爐辣親一次之後，下次會識唔好搵手掂個爐；比較複雜嘅例子有一個人喺度練射籃，佢每次射籃都做一啲動作，嘗試入波，然後佢會見到「做呢啲動作嘅結果」（入定唔入），按照結果判斷個動作係咪一個好（能夠幫佢達到目的）嘅行動，並且調整自己嘅下一個動作；學習嘅過程會涉及個認知系統內部嘅參數（[p_1, p_2,...]）起變化，令到輸入（刺激）同輸出（行為）之間嘅關係改變。
*運算學習論（computational learning theory）：專門研究機械學習演算法嘅表現嘅電腦科學子領域。
**概念（concept）：指若干個個案嘅抽象化，例如一個人腦睇咗好多件相似嘅物件，嗰柞物件件件都唔同樣，不過佢發覺嗰啲物件冚唪唥都有葉同樹幹等嘅特徵，於是佢個腦就產生咗「樹」嘅概念。家陣想像
**:X \ni (x_1, x_2, x_3... x_n)
***呢個集包含咗 n 件需要將佢哋分類嘅物件（例：當中有啲係樹有啲唔係），個認知系統要將呢啲物件分辨邊啲係樹邊啲唔係－`output` 有 1（係）同 0（唔係）兩個可能值；一個概念 C 係 X 嘅一個子集，分類後 C 會包含所有 `output` 值係 1 嘅 x_i（所有屬於樹嘅個案），而 X 當中唔屬 C 嘅 x_i 嘅 `output` 值係 0（所有唔屬於樹嘅個案）
*假說（hypothesis）：指一個可以由個演算法產生出嚟嘅可能模型。
*假說空間（hypothesis space）：指一個演算法嘅假說嘅集；假說空間嘅**豐富度**（richness）反映咗個演算法嘅能耐，例如有兩個用嚟做迴歸分析（regression）嘅機械學習演算法，A 同 B，A 淨係曉處理線性嘅迴歸模型，而 B 曉處理線性同非線性嘅關係（B 嘅假說空間比較豐富），假設第啲因素不變，B 嘅能耐高過 A 。
*Python：廿一世紀初常用嚟做機械學習嘅一種程式語言，有好多可以俾用家操控陣列嘅陳述式。
*超參數（hyperparameter）：指喺機械學習過程當中由設計者設定嘅參數，相對於由機械學習演算法決定嘅模型參數數值。
*特徵提取（feature extraction）：係指由數據數值嗰度計一啲新數值出嚟，而新數值可以內含有用嘅資訊，例如一個人工神經網絡由輸入層嗰 12 粒細胞嘅啟動程度值（數據數值）計跟住嗰層隱藏層嗰 8 粒細胞嘅啟動程度值（新數值），就係一個特徵提取過程。

### 事前處理

事前數據處理（data preprocessing）係攞到數據之後要做嘅第一個步驟。喺搜集數據嘅過程之後，個研究者手上會有一個數據庫，個數據庫嘅數據包含咗每一個個案喺每個變數上嘅數值。現實嘅搜集數據過程都係唔完全受控嘅，所以搜集到嘅數據幾乎梗會出啲錯，例如係某幾個個案喺某個變數上嘅數值量度唔到（即係所謂嘅缺失數據）或者有啲擺明冇可能嘅數值（例：有個個案喺「年齡」呢個變數嘅數值係負數），等等。呢啲噉嘅數據直接攞去分析嘅話好多時會搞到個程式出錯，所以做機械學習嘅人喺開始俾個程式做學習之前往往會做啲事前處理先。
*陣列（array）：指由若干件相同類型嘅數據所組成嘅數據結構，例如係 n 個實數或者係 n 個字串等等。一個陣列可以有多個一個維度，而喺現實應用上，通常一個分析者會用一個二維嘅陣列表示要分析嘅數據，例：
*:a=\begin{bmatrix} 3 & 6 & 2 \\ 0 & 1 & -4 \\ 2 & -1 & 0 \end{bmatrix}
*呢個陣列喺 C 程式語言當中係 
```c
int a[3][3] = ;
```
 。
*缺失數據（missing data）：指因為數據搜集嘅過程當中，因為受訪者對問題嘅遺漏、拒絕回答、又或者係啲調查員犯嘅疏忽等原因，而造成數據當中有啲位冇相應嘅數值。基本上做親機械學習個數據庫都梗會有啲缺失數據，而係做機械學習嘅程式語言當中，一件缺失咗嘅數據通常會用 `[[NaN (數值)|NaN]]`（Python）或者類似嘅字眼代表。
*平均中間化（mean centering）：應付多重共線性（睇上面）嘅一種方法；指 foreach 個案，將嗰個個案喺個變數上嘅數值，減個變數嘅平均值，令到成個數據庫喺嗰個變數嘅平均值變成 0 。
*特徵選擇（feature selection）：係指「由手上嘅變數當中揀選一個子集嘅出嚟，建立有用嘅模型」嘅過程；噉做係因為喺實際應用上，數據庫往往有好多個變數，當中淨係其中一啲變數會有用。
*數據平滑化（data smoothing）：指攞住一拃數據，搵出一個函數 f，f 係捕捉到啲數據入面嘅某啲重要特徵嘅，同時又冇咗啲雜訊；噉做能夠幫分析者攞到有咁多得咁多嘅資訊，同時又唔會因為雜音多得滯而干擾到分析。

### 學習範式
喺建立咗一個數學模型之後，個程式就要以某啲方法慢慢噉改變個模型啲參數－係迴歸模型或者支援向量機嘅話，就要執條線嘅式嗰啲系數；係人工神經網絡嘅話，就要執啲神經細胞之間嘅權重值... 等等，目的係最後達致一個能夠準確噉做預測同決策嘅模型－就好似人類同第啲動物嘅學習過程噉樣。喺機械學習上，呢個過程可以用好多演算法做，而呢啲演算法可以分幾大類：
*監督式學習（supervised learning）：指個數據庫有講明乜嘢係預想嘅 `output`，要個演算法以做到「合乎預想 `output`」為目標。
*非監督式學習（unsupervised learning）：指個數據庫冇講明乜嘢係預想嘅 `output`。
*強化學習（reinforcement learning）：指俾個演算法自行同（現實或者虛擬嘅）世界互動，並且按互動嘅結果改變自身個模型嘅參數。
*遺傳演算法（genetic algorithm，簡稱 GA）：一種建基於物競天擇嘅一種學習方法；根據物競天擇上，一個族群內部嘅生物個體（例如一群人類）彼此之間或多或少噉喺遺傳上有差異，呢啲差異會引致佢哋喺表現型（包括外表、行為、同體質等）上有個體差異，當中佢哋有啲生存同繁殖會比較叻，所以就更加有機會將自己啲遺傳基因傳俾下一代；假設環境唔變，個族群就會一代一代噉喺遺傳上有變異，變到愈發適合喺嗰個環境生存同繁衍。遺傳演算法就係受呢個理論啟發嘅一種演算法，做法如下：
*#整一大柞同類嘅數學模型出嚟，當中每個啲參數都有唔同；
*#叫每個數學模型做若干次嘅預測，每個按佢做預測陣時嘅準確度得返個分數 s，分數愈高表示佢表現愈好；
*#揀選分數 s 最高嗰柞模型，將其餘嘅模型淘汰；
*#做「繁殖」嘅過程－用最高分嗰柞模型做「父母」，生產下一代嘅模型。啲仔喺參數上會似佢哋嘅父母（「每個仔嘅每粒參數」都係「佢父母嘅同位參數」嘅函數）；
*#再做過上述過程，重複若干代；
*#如果一切順利，若干代之後手上嘅模型會係一啲預估估得啱嘅模型。

## 應用
*環境智能
*智能城市
*協作智能（collaborative intelligence，CI）：指一班彼此知道對方身份嘅智能體－包括人同機械－各自噉行事，嚟幫手解決一個佢哋大家都想解決嘅問題；喺廿一世紀初嘅管理學上，有好多工作者都想應對 AI 愈嚟愈普及化嘅形勢，因而有興趣想思考「人應該點樣同 AI 合作，形成一個有協作智能嘅組織」等嘅問題。

## 註釋

## 數學相關

*運算理論
*概率論
*統計學
*決策論
*博弈論
*控制理論

## 拉雜相關
*人工神經網絡種類一覽
*電腦科學詞彙表
*認知科學
*神經科學
*語言學
*Cyberpunk

## 攷

## 拎
*