人工神經網絡種類一覽

呢個表列出嗮最重要嗰啲人工神經網絡種類以及人工神經網絡相關詞彙。人工神經網絡（artificial neural network，簡稱「ANN」）係指一啲模仿生物神經網絡（即係動物嘅中樞神經系統，尤其係個腦）結構同功能嘅數學模型：一隻（例如）靈長目動物嘅腦閒閒地有斷百億計嘅神經細胞（neuron），一粒神經細胞喺俾電同化學物訊號刺激到嗰陣，會跟住以電或者化學物嚟傳新訊號，所以當一粒神經細胞射訊號嗰陣可以引起連鎖反應，將資訊（information）喺成個神經網絡度傳開去；而人工神經網絡主要係以電腦程式嘅方法嚟模擬呢個過程－
*設定網絡結構：個網絡會有若干件虛擬物體，每件呢啲物體有返個數值代表佢嘅啟動程度，而每個啟動程度數值就取決於同佢相連嗰啲物體嘅啟動程度；
*設定學習方法：個網絡初頭嘅行為望落近乎隨機，但會有某啲演算法教佢根據經驗改變自己啲細胞之間嘅連繫同行為，令佢好似曉學習噉。

如果順利嘅話，噉做會令個神經網絡出現一啲好似動物神經系統噉嘅行為。到咗廿一世紀初，人工神經網絡經已俾科學界廣泛噉用落去各種問題嗰度：喺應用上，事實證實咗人工神經網絡能夠處理機械視覺同語音識別呢啲傳統電腦程式難以解決嘅問題；而理論性嘅認知科學上亦有聯結主義（connectionism）嘅諗頭，主張心靈可以用人工神經網絡嚟模擬。

## 前饋網絡

前饋神經網絡（feedforward network），指訊號淨係由輸入到輸出一個方向流動嘅神經網絡－冇任何人工神經細胞能夠影響自己前排嗰啲人工神經細胞。舉個例說明，例如家吓搵個前饋神經網絡入面某一粒人工神經細胞集中睇佢，佢會有返個數字嚟反映佢嘅啟動程度，而呢個數字取決於佢前面嗰排嗰啲人工神經細胞嘅啟動程度－即係話 foreach 人工神經細胞，個程式會有一條類似噉樣嘅算式：
:t = W_1 A_1 + W_2 A_2...；（啟動函數）

喺條式當中，t 代表粒神經細胞嘅啟動程度，A_n 代表前一排嘅神經細胞當中第 n 粒嘅啟動程度，而 W_n 就係其他神經細胞當中第 n 粒嘅權重（指嗰粒神經細胞有幾影響到 t）。而最簡單嗰種前饋神經網絡浸輸出層嘅啟動程度數值會直接噉由輸入層嘅決定，即係話結構如下：

當中左手邊黑點代表輸入層嘅人工神經細胞。呢種簡單神經網絡嘅缺點係，佢哋所模擬嘅輸入同輸出之間嘅關係唔會太複雜－而一旦個設計者需要個輸入同輸出之間嘅關係唔係簡單嘅線性（linear）嗰陣，單層嘅人工神經網絡好多時就會搞唔掂。所以主流應用嘅人工神經細胞多數都會有**隱藏層**（hidden layer；指一啲唔會直接由外界攞輸入或者直接向外界俾輸出嘅人工神經細胞層）。
### 感知機

感知機（perceptron）係最簡單嗰種前饋神經網絡做法。感知機喺機械學習上泛指用監督式學習嚟做二元分類（binary classification）嘅演算法，即係攞若干個個案，將每個個案分做兩個類別嘅其中一類，例如攞若干幅相，將啲相分類做貓（0）同狗（1）噉。感知機呢樣嘢可以用簡單嘅前饋神經網絡實現，家陣想像以下呢個噉嘅前饋網絡：
*有兩個 `input`，同埋
*一個 `output`，
*冇隱藏層。

即係話，
:\text{output} = \begin{cases}
   1 & \text{if } \text{condition}_1, \\
   0 & \text{if } \text{condition}_0.
 \end{cases}

當中「\text{condition}_1」係被歸類做「1」要達到嘅條件（例如 `input A` = 1 而且 `input B` = 0），而「\text{condition}_0」係被歸類做「0」要達到嘅條件（例如 `input A` = 0 而且 `input B` = 1）。
### 多層感知機

多層感知機（multi-layer perceptron，MLP）係一個包含多部感知機嘅人工神經網絡：多層感知機有**隱藏層**（hidden layer），即係唔會直接收外界輸入又唔會直接向外界俾輸出嘅神經細胞層；同單層感知機唔同嘅係，多層感知機能夠處理非線性嘅關係，喺好多人工神經網絡應用上都有價值。一部三層（有一浸隱藏層）嘅感知機可以想像成以下噉嘅樣：

圖入面每個圓圈代表一粒神經細胞，而 A 有箭咀去 B 表示 B 嘅啟動程度受 A 嘅影響。

定義上，多層感知機具有以下嘅特徵：
*每粒第 i 層嘅神經細胞都同第 i-1 層嘅神經細胞有連繫，即係話每粒第 i-1 層嘅神經細胞都有能力影響第 i 層嘅神經細胞嘅啟動程度，即係每層之間都**完全連繫**（fully connected），不過權重值可以係 0；
*第 i 層嘅神經細胞唔會受第 j 層嘅神經細胞影響，當中 j 係任何一個大過 i 嘅整數；
*同一層嘅神經細胞之間冇連繫。

### 卷積神經網絡

一個卷積神經網絡（convolutional neural network）結構如下：輸入層有若干粒細胞，若干浸隱藏層，同一浸輸出層；輸入層每粒細胞代表咗一個像素（幅圖片上面嘅某一個點），第一浸隱藏層就每粒細胞相應輸入層嘅某一橛仔－例如第一粒隱藏層細胞負責處理輸入層最左上角嗰 3 x 3 粒像素大嘅一橛仔（令到個網絡能夠處理啲解像度高嘅圖像），而最後輸出層有 10 粒細胞，每一粒輸出層細胞代表咗一個類別；個神經網絡有個演算法能夠由一幅圖片嗰度讀取輸入，所以每當佢讀到一幅圖片嗰陣，佢嘅神經細胞會跟住輸入層嘅啟動，最後輸出層嘅規律就可能提供到「幅圖屬於邊個類別」嘅資訊。

喺電腦入面，一幅圖片可以用數字代表：一幅圖片由好多粒細點（像素）組成，每粒細點都有特定嘅色水；用三原色模式想像嘅話，任何色水都可以由紅、綠、同藍呢三隻原色砌出嚟，所以一個點嘅色水可以用 [r, g, b] 噉嘅陣列代表－當中 r 表示嗰一點嘅紅色量，g 代表嗰點嘅綠色量，而 b 代表嗰點嘅藍色量，而一幅圖片喺部電腦內部可以用類似噉嘅陣列代表：
:[207, 229, 78], [141, 159, 138], [146, 109, 81], ...]</math>，表示第一個點有 207 個單位咁多嘅紅、229 咁多個單位嘅綠、同 78 個單位咁多嘅藍，如此類推。
呢啲噉嘅數字可以輕易噉攞嚟做一個人工神經網絡嘅輸入數據。

[反卷積神經網絡（deconvolutional neural network）可以話係卷積神經網絡嘅相反：一個卷積神經網絡會由低層嘅特徵嗰度計出更高層嘅特徵（由像素計出角同線，再由角同線計出形狀...），而一個反卷積神經網絡就係將呢個過程掉返轉，由高層嘅特徵計返低層嘅出嚟；如果個反卷積網絡啲權重啱嘅話，個網絡會做到「輸入講明想要睇乜嘢物件，輸出係一幅描述嗰件物件嘅圖像」噉嘅效果。如果將一個卷積網絡同一個反卷積網絡拼埋一齊（個卷積網絡嘅輸出層係個反卷積網絡嘅輸入層），就可以形成一個深度卷積反轉圖像網絡（deep convolutional inverse graphics network，DCIGN）。

## 遞迴網絡

遞迴神經網絡（recurrent network）係指啲訊號會喺個網絡之內「遞迴」嘅神經網絡，即係話個神經網絡啲人工神經細胞當中，有至少一部份嘅會有能力影響佢哋之前嗰幾層嘅人工神經細胞嘅啟動程度。因為佢哋呢種結構上嘅特徵，佢哋識得處理喺時間上前後倚賴嘅資訊，例如係人口講嘅嘢噉：一個人講一句嘢嗰陣，句嘢嘅第二個字會影響到第一個字嘅意思（例如「家吓」同「家庭」嘅意思就唔同嗮），所以喺分析喺時間點 t 聽到嘅字嗰陣，要考慮埋喺打前嗰啲時間點聽到嘅字先可以理解到嗮成個意思－遞迴神經網絡比起前饋神經網絡更加能夠做到呢一點。而事實係喺廿一世紀初，已經有科學家成功噉運用遞迴神經網絡嚟令到電腦學識處理人類用自然語言（natural language；指好似廣東話同閩南話呢啲日常傾偈用嘅語言）講嘅嘢（睇埋機械翻譯）。

下圖就係一個遞迴神經網絡嘅抽象化圖解：

當中 h 係個遞迴神經網絡啲隱藏層，x_t 係時間點 t 嘅輸入，o_t 係時間點 t 嘅輸出，而 v 就係上一個時間點個網絡交去下一個時間點嘅自己嘅資訊。用數學公式描述嘅話，一個遞迴神經網絡嘅輸入輸出關係如下：
:o_t = f(h_t; \theta)
:h_t = g(h_{t-1}, x_t; \theta)
h_t 係個遞迴神經網絡啲隱藏層喺時間點 t 嘅狀態，而 \theta 係個網絡啲參數；公式 [1] 同前饋神經網絡一樣（網絡輸出取決於隱藏層狀態同網絡嘅參數），而公式 [2] 反映遞迴網絡同前饋網絡嘅差異－公式 [2] 包括咗 h_{t-1}（隱藏層喺上一個時間點嘅狀態）呢一個前饋網絡唔會考慮嘅變數。

### 簡單遞迴網絡

**簡單遞迴網絡**（simple recurrent network，SRN）係最基本嗰種遞迴神經網絡，分做兩種：艾文網絡同佐敦網絡。一個**艾文網絡**（Elman network）分三層－x、y 同 z－而柞 u 係所謂嘅**語境單位**（context units），啲權重冚唪唥都係 1。喺每個時間點 t，個網絡會由輸入同網絡參數嗰度計輸出以及用學習法則更新權重值，而每粒隱藏層神經細胞（y_i，i = 1,2,...,l）都有粒相應嘅語境單位，粒語境單位會記低嗰粒隱藏層細胞喺時間點 t 嘅啟動值，而喺時間點 t+1，語境單位記低咗嘅數值將會能夠左右隱藏層神經細胞嘅啟動，所以艾文網絡能夠一定程度上處理有連串性嘅資訊。

艾文網絡可以想像成以下嘅式：
:
\begin{align}
h_t &= \sigma_h(W_{h} x_t + U_{h} h_{t-1} + b_h) \\
y_t &= \sigma_y(W_{y} h_t + b_y)
\end{align}

當中
:h_t 係指隱藏層喺時間點 t 嘅狀態，x_t 係指時間點 t 嘅輸入，y_t 係指時間點 t 嘅輸出；
:W 同 U 係柞權重值，b 係指**偏向**（bias）－即係嗰粒細胞本身喺啟動上嘅傾向，例如如果有某一粒細胞嘅 b 係正數而且數值大，佢就會傾向無論輸入係幾多都有強烈嘅啟動；
:\sigma_h 同 \sigma_y 係相應嘅啟動函數。

**佐敦網絡**（Jordan network）係艾文網絡嘅一個變種，同艾文網絡嘅分別在於佐敦網絡入面嗰啲 u 記嘅唔係隱藏層喺上一個時間點嘅狀態，而係輸出層喺上一個時間點嘅狀態，即係話佐敦網絡可以想像成以下噉嘅式：

:
\begin{align}
h_t &= \sigma_h(W_{h} x_t + U_{h} y_{t-1} + b_h) \\
y_t &= \sigma_y(W_{y} h_t + b_y)
\end{align}

呢兩類式同艾文網絡嗰兩條嘅唯一分別係，h_t 取決於 y_{t-1}（上一個時間點嘅輸出），而唔係取決於 h_{t-1}（隱藏層喺上一個時間點嘅狀態）。

### 雙向遞迴網絡

雙向遞迴網絡（bidirectional recurrent network，BRN）係一種進階嘅遞迴神經網絡。雙向遞迴網絡嘅特徵係有兩個彼此之間唔相連嘅隱藏層，分別叫**向前狀態**（forward states；h_f）同**向後狀態**（backward states；h_b）。一個雙向遞迴網絡每次會讀取 n 個輸入，foreach t，t \in 1,2,...,n ：
:
\begin{align}
h_f &= \sigma_h(W_{h} x_t + U_{h} h_{f_{t-1}} + b_h) \\
h_b &= \sigma_h(W_{h} x_t + U_{h} h_{b_{t+1}} + b_h) \\
y_i &= \sigma_y(W_{y_f} h_f + W_{y_b} h_b + b_y)
\end{align}

最先嗰個時間點嘅 h_{f_{t-1}} 以及最後嗰個時間點嘅 h_{b_{t+1}} 可以會當做一啲事先設定好嘅常數。一個雙向遞迴網絡（右）嘅結構圖解如下：

### 霍菲特網絡

霍菲特網絡（Hopfield network）係一種有高度內部連繫嘅遞迴網絡：喺一個霍菲特網絡入面，每粒細胞都同全體細胞間有連繫（不過一粒細胞唔會影響自己啟動程度）。如果個網絡有 K 咁多粒細胞，成個網絡裏面就會有 K(K-1) 條連繫。即係話，如果當 w_{ij} 係細胞 i 同細胞 j 之間嘅權重：
:w_{ii}=0, \forall i（冇任何細胞能夠影響自己嘅啟動程度）
:w_{ij} = w_{ji}, \forall i,j（所有細胞間嘅連繫都係對稱嘅）

霍菲特網絡係動態嘅：一旦霍菲特網絡嘅其中一粒細胞受啟動，佢會引致第啲細胞跟住啟動，然後第啲細胞又可以啟動返佢轉頭。即係話：

:s_i \leftarrow \left\{\begin{array}{ll} +1 & \mbox {if }\sum_{j}{w_{ij}s_j}\geq\theta_i, \\
 -1 & \mbox {otherwise.}\end{array}\right.

當中：
*s_i 係細胞 i 嘅狀態；
*\theta_i 係細胞 i 嘅門檻值（細胞 i 嘅啟動程度大過 \theta_i 狀態會變成 1，否則狀態變成 0）。

於是啲細胞就會係噉互傳訊號，一路係噉改變啟動程度，最後去到一個穩定嘅狀態－即係變成一個每粒細胞嘅啟動程度都恆定或者大致恆定嘅狀態－呢一點同人腦有些少相似，而認知科學上嘅研究表明咗，霍菲特網絡嘅變種可以用嚟模擬人腦嘅某啲記憶功能。

#### 雙向聯想記憶

霍菲特網絡仲可以進階做雙向聯想記憶（bidirectional associative memory，BAM）。雙向聯想記憶概念上建基於喺人身上觀察到嘅聯想式記憶（可以睇吓古典制約同操作制約），一個雙向聯想記憶網絡會有兩浸霍菲特網絡，X 同 Y，兩浸細胞層完全連繫住－foreach X 裏面嘅細胞，x_{ij}，y_{ij} 都同 x_{ij} 有連繫，y_{ij} \in Y（y_{ij} 係 Y 嘅任何一粒細胞），反之亦然；研究表明咗，呢種架構可以用嚟訓練部電腦記住「邊啲輸入同邊啲輸入之間有關聯」。
### 玻茲曼機

玻茲曼機（Boltzmann machine）係一種同霍菲特網絡好相似嘅隨機性遞迴網絡。一部玻茲曼機啲細胞之間有對稱性連繫，而每一粒細胞都會用帶有隨機性嘅演算法決定係咪要啟動。一部玻茲曼機會有以下噉嘅式：
:z_i = b_i + \sum_j s_j w_{ij}
:\Pr(s_i = 1) = \frac{1}{1 + e^{-z_i}} 
當中 z_i 係第 i 粒神經細胞收到嘅輸入值；b_i 係**偏向**（bias；細胞 i 本身嘅啟動偏向）；s_j 係第啲細胞當中第 j 粒嘅狀態（數值只可以係 1 或者 0），而 w_{ij} 係由細胞 j 去細胞 i 嘅權重。\Pr(s_i = 1) 係指「s_i（細胞 i 嘅狀態）等如 1 嘅機會率」，而根據第二條式，\Pr(s_i = 1) 數值取決於 z_i 。

#### 受限玻茲曼機

受限玻茲曼機（restricted Boltzmann machine，RBM）係玻茲曼機嘅一個變種。一部受限玻茲曼機同一般嘅玻茲曼機一樣，分**隱藏細胞**（hidden units）同**可見細胞''（visible units），重點在於受限玻茲曼機嗰啲細胞之間嘅連繫「受限制」－隱藏細胞彼此之間唔可以有連繫，而可見細胞之間亦都唔可以有連繫，每一條連繫都係連接住一粒隱藏細胞同埋一粒可見細胞嘅；每粒可見細胞都同所有隱藏細胞有連繫。例如下圖就係一個有四粒可見細胞（柞 <math>v_i</math>）同三粒隱藏細胞（柞 <math>h_i</math>）嘅受限玻茲曼機：


想像而家一個研究者噉做：佢俾一柞輸入落去柞可見細胞嗰度，可見細胞狀態成 <math>\mathbf{v}_0</math>，再等柞隱藏細胞按 <math>\mathbf{v}_0</math> 同權重啟動成狀態 <math>\mathbf{h}_0</math>（向前傳遞；forward pass）；然後第二步係做''重構''（reconstruction）－將隱藏細胞嘅狀態 <math>\mathbf{h}_0</math> 做輸入，等可見細胞按呢柞輸入同權重變成狀態 <math>\mathbf{v}_1</math>；因為啲權重一般會喺[[初始化]]嗰陣設做隨機數值，所以 <math>\mathbf{v}_1</math> 同 <math>\mathbf{v}_0</math> 之間嘅差異（重構誤差）會相當大－「重構原初輸入」嘅工作失敗；喺呢個過程當中，部受限玻茲曼機會俾出兩樣資訊：
*喺向前傳遞途中，個網絡可以俾有關 <math>\Pr(\mathbf{h}_0|\mathbf{v}_0)</math> 嘅資訊（由 <math>\mathbf{v}_0</math> 估 <math>\mathbf{h}_0</math> 嘅[[概率分佈]]）；而
*喺重構途中，個網絡就可以俾有關 <math>\Pr(\mathbf{v}_1|\mathbf{h}_0)</math> 嘅資訊（由 <math>\mathbf{h}_0</math> 估 <math>\mathbf{v}_1</math> 嘅概率分佈）。
受限玻茲曼機可以攞嚟做[[深度學習]]（deep learning）：想像而家行咗學習演算法，部受限玻茲曼機能夠可靠噉重構原初輸入，每次都係 <math>\mathbf{v}_1</math> ≈ <math>\mathbf{v}_0</math>（可以睇埋[[自編碼器]]）；呢部受限玻茲曼機嘅輸入係一幅有若干[[像素]]嘅圖像（<math>\mathbf{v}</math>），而隱藏層嘅細胞（<math>\mathbf{h}</math>）[[知識表示|表示]]嘅係「幅圖入面有啲乜嘢身體部位」；下一步，研究者再用隱藏層 <math>\mathbf{h}</math> 做輸入，砌多個隱藏層（<math>\mathbf{\text{new h}}</math>）上去，<math>\mathbf{\text{new h}}</math> [[知識表示|表示]]嘅係「幅圖係乜嘢[[動物]]」。而最後得出呢個網絡能夠做到以下嘅嘢：
*準確噉計 <math>\Pr(\mathbf{h}_0|\mathbf{v}_0)</math>，等同「見到呢幅圖，估幅圖入面有邊啲身體部位」；
*準確噉計 <math>\Pr(\mathbf{v}_1|\mathbf{h}_0)</math>，等同「諗到呢啲身體部位，幅圖大致會係點嘅樣」；
*準確噉計 <math>\Pr(\mathbf{\text{new h}}_0|\mathbf{h}_0)</math>，等同「按照幅圖入面有嘅身體部位，估計幅圖係乜嘢動物」（例：如果幅圖有四隻腳，噉嗰隻嘢應該唔會係[[昆蟲]]）；
*準確噉計 <math>\Pr(\mathbf{h}_0|\mathbf{\text{new h}}_0)</math>，等同「已知手上有呢種動物，呢種動物有乜身體部位」
－呢一個網絡成功做到分層嘅[[知識表示]]嘅效果（睇埋[[深度信念網絡]]）。

==== 深度信念網絡 ====


[[深度信念網絡]]（deep belief network）結構係噉嘅：一個深度信念網絡由多個[[受限玻茲曼機]]再加一個前饋神經網絡組成；一個 RBM 得一浸隱藏層，而隱藏層細胞之間冇任何相互連繫，但曉將佢哋嘅啟動回輸返去輸入層嗰度；一個受緊訓練嘅深度信念網絡會以第一層 RBM 嘅隱藏層細胞做第二層嗰個 RBM 嘅輸入，再用演算法做學習嘅過程。

一個深度信念網絡嘅演算法大致上如下：
#[[初始化]]－指定好啲參數同埋隨機設定權重值等等；
#按照輸入層細胞嘅啟動同權重，計隱藏層細胞嘅啟動程度；
#按照隱藏層細胞嘅啟動同權重，計輸入層細胞嘅啟動程度；
#按重構誤差更新權重；
#重複上述工序，直至誤差細過某個值為止。

喺一個 RBM 完成學習之後，個程式會「疊」另一個 RBM 喺上面－攞之前嗰個 RBM 嘅隱藏層做新嗰個 RBM 嘅輸入層，再重複上面嘅步驟，直至成個深度信念網絡有若干層 RBM 為止。研究表明咗，深度信念網絡能夠有效噉處理一啲冇事先標籤好嘅數據－例如係[[大數據|喺互聯網上流動、冇人幫手事先執靚嘅數據]]噉。

=== 長短期記憶 ===

[[長短期記憶]]（long short-term memory，LSTM）係一種能夠記住[[長期記憶]]嘅遞迴神經網絡：一般嘅遞迴網絡曉處理連串性嘅資訊，例如係用[[自然語言]]寫嘅句子噉，但現實世界嘅解難好多時都要求一個個體能夠睇得出時間上差距大嘅因同果，例如要完全了解一個[[故仔]]嘅結局，可能要諗返起故仔開頭嘅[[情節]]。事實證明咗，普通嘅遞迴神經網絡好多時都難以應付呢啲問題。

LSTM 網絡特徵係內置一啲[[門控神經細胞]]（gated neuron），呢啲特殊嘅人工神經細胞有「門」（gate），曉決定要儲起乜嘢資訊同埋幾時讀取、寫入、或者刪除資訊：喺 LSTM 網絡嘅碼當中，會有[[演算法]]幫門控細胞決定幾時要改變自身嘅啟動程度；相比之下，一般嘅遞迴神經網絡冇能力控制現存嘅過去資訊會唔會喺新資訊嚟到嗰陣被替換。呢個特點令到 LSTM 網絡有能力儲資訊儲好耐，而且有能力由輸入嘅數值當中搵出時間上相距不定嘅因同果。

以下係一個基本 LSTM 入面嘅一粒細胞；方格代表成粒細胞，<math>x_t</math> 係喺時間點 <math>t</math> 嘅輸入，而 <math>h_t</math> 係粒細胞喺時間點 <math>t</math> 嘅輸出，細胞 A 有箭咀指去細胞 B 表示 A 能夠影響 B，而交叉就代表「做嘢」。



一粒 LSTM 嘅人工神經細胞除咗主細胞（<math>c</math>）之外仲有幾個元件：
***輸出門**（output gate；<math>o</math>）、
***輸入門**（input gate；<math>i</math>）、同埋
***遺忘門**（forget gate；<math>f</math>）。

呢三道門當中每一道都可以當係一粒子細胞噉嚟睇，有各自嘅啟動程度值，會受到第啲人工神經細胞影響，決定自身嘅啟動程度，再按自身嘅啟動程度睇吓係咪要「做嘢」。輸出門「做嘢」嘅話會左右甚至封鎖粒細胞嘅輸出，輸入門「做嘢」嘅話會左右甚至封鎖粒細胞嘅輸入，而遺忘門「做嘢」嗰陣就可以完全刪除粒主細胞入面嘅資訊－即係重設粒主細胞嘅啟動值或者權重等。

==== 閘門遞迴單位 ====

長短期記憶仲喺 2014 年啟發咗[[閘門遞迴單位]]（gated recurrent unit，GRU）嘅做法。閘門遞迴單位同長短期記憶好相似，不過閘門遞迴單位用嘅淨係得兩道「門」－
***重設門**（reset gate）位於細胞 <math>i</math> 同下一刻嘅 <math>i</math> 之間，決定粒細胞係咪要重設（忘記上一刻嘅狀態）；
***更新門**（update gate）決定 <math>i</math> 跟住嘅啟動有幾受現時嘅輸入狀態影響；
*閘門遞迴單位基本上就係長短期記憶冇咗輸出門。
想像下圖：


當中
:<math>o_t</math> 係時間點 <math>t</math> 嘅輸出。
:<math>x_t</math> 係時間點 <math>t</math> 嘅輸入。
:<math>h_t</math> 係時間點 <math>t</math> 嘅隱藏層狀態。
:<math>R_t</math> 係重設門。
:<math>Z_t</math> 係更新門。

=== 神經圖靈機 ===

[[神經圖靈機]]（Neural Turing Machine，NTM）係一種起源於 2014 年嘅**記憶增強**（memory-augmented；指有連接住網絡外嘅記憶單位）遞迴神經網絡架構，一部神經圖靈機主要有幾個部份：
*一個神經網絡**控制器**（controller）；呢個部份係一個[[多層感知機]]或者遞迴神經網絡，負責同外界互動（由外界攞向量輸入或者俾向量輸出去外界）同控制成個系統（會向系統其餘部份下指令）。
*一個[[記憶]]（memory）；呢個部份負責儲住啲記憶。
*一個或者多個**記憶讀取器**（read head）、同
*一個或者多個**記憶存寫器**（write head）。
神經圖靈機嘅結構圖解如下：


**記憶讀取**：將記憶想像成一個 <math>N \times M</math> 嘅[[矩陣]]，當中 <math>N</math> 係記憶位置嘅數量，而 <math>M</math> 係每個記憶位置嘅[[維度]]（簡單講就係嗰個位置可以記住幾多個數值）。設 <math>\mathbf{M}_t</math> 做呢個矩陣喺時間點 <math>t</math> 嘅狀態，<math>\mathbf{w}_t</math> 係一個由記憶讀取器去嗰 <math>N</math> 個位置嘅權重向量，而且做咗[[標準化 (統計學)|標準化]]，即係話
:<math>\sum_i w_t(i) = 1,</math>
:<math>0 \le w_t(i) \le 1, \forall i</math>；
喺每次做記憶讀取嗰陣，個控制器都會攞到一個 <math>M</math> 維嘅向量 <math>\mathbf{r}_t</math>，而
:<math>\mathbf{r}_t \leftarrow  \sum_i w_t(i)\mathbf{M}_t(i)</math>；
上述嘅嘢簡單講如下：記憶讀取器同記憶之間會有個權重，呢啲權重影響「當記憶讀取器要求提取記憶嗰陣，會有邊份記憶受到提取，而提取咗嗰份記憶就係 <math>\mathbf{r}_t</math>」。

**記憶存寫**：一個記憶存寫有兩個部份－**清除**（erase）同**添加**（add）；喺每一個時間點 <math>t</math>，記憶存寫器都會俾出三個向量－
#一個 <math>N</math> 維嘅權重向量 <math>\mathbf{w}_t</math>、
#一個 <math>M</math> 維嘅清除向量 <math>\mathbf{e}_t</math>、同
#一個 <math>M</math> 維嘅添加向量 <math>\mathbf{a}_t</math>。
每一個記憶向量 <math>\mathbf{M}_{t-1}(i)</math> 都會受到清除向量改造：
:<math>\text{temp}\mathbf{M}_{t}(i) = \mathbf{M}_{t-1}(i)[\mathbf{1} - w_t(i)]\mathbf{e}_t</math>（<math>\mathbf{1}</math> 係一個完全由 1 組成嘅向量）；
然後個添加向量就會做嘢：
:<math>\mathbf{M}_{t}(i) = \text{temp}\mathbf{M}_{t}(i) + w_t(i)\mathbf{a}_t</math>。
喺應用上，神經圖靈機可以攞嚟模擬[[工作記憶]]（working memory；[[記憶功能]]嘅一種，指個心靈暫時儲住要用嘅[[資訊]]）涉及嘅認知過程。

== 自編碼器 ==


[[自編碼器]]（autoencoder）係一種[[人工神經網絡]]，用嚟做[[降維]]（dimensionality reduction；減少手上嘅[[隨機變數]]嘅數量）。舉個例說明（睇收縮自編碼器）：
#想像家陣有個簡單嘅[[前饋神經網絡]]（feedforward network），輸入層有 <math>n</math> 粒[[人工神經細胞|細胞]]，輸出層又係有 <math>n</math> 粒細胞，而隱藏層有 <math>m</math> 粒細胞，當中 <math>n > m</math>；
#假想個網絡做咗[[機械學習|學習]]，能夠可靠噉次次接收到輸入 <math>\mathbf{N}</math>，都會俾出輸出 <math>\mathbf{N}</math>（俾一個輸入，會俾一個同輸入一個板嘅輸出），
#輸入層同隱藏層就係所謂嘅**入碼器**（encoder），而輸出層同隱藏層就係所謂嘅**解碼器**（decoder）；
做完上述嘅嘢之後，隱藏層同兩層之間嘅最後權重值會有用，例如以後每逢撞到同類嘅[[數據]]嗰陣，研究者－已知個網絡能夠可靠噉解碼，將隱藏層數據變返同原來輸入一樣嘅數值－就可以放心噉將啲數據冚唪唥交俾個自編碼器，入嗮碼做每個個案得 <math>m</math> 個數值（維度）嘅數據，而因為 <math>m < n</math>，用呢個方法儲數據會慳位過就噉每個個案都儲嗮嗰 <math>n</math> 個數值－達到降維嘅效果。自編碼器喺[[數據探勘]]（data mining）等嘅領域上，仲可以用嚟話俾研究者知啲數據當中有冇乜嘢特殊嘅規律，例如係「呢 15（<math>n</math>）個[[變數 (科研)|變數]]會唔會有可能用 7（<math>m</math>）個變數嘅變化解釋嗮？」等嘅問題。

喺最簡單嗰種自編碼器做法當中，個[[機械學習演算法|演算法]]嘅目標係要改變啲權重，令以下數值最小化：
:<math>L(x,\hat{x}) + \text{regularizer}</math>；
當中 <math>L(x,\hat{x})</math> 係[[損失函數]]（loss function），反映做解碼嗰陣嘅[[誤差]]（重構個輸入嗰時，同實際數值差幾遠）；而 <math>\text{regularizer}</math> 係一個為咗避免[[過適]]（overfitting）而設嘅[[隨機性]]數值。研究者特登設下咗 <math>\text{regularizer}</math> 嘅自編碼器就係所謂嘅[[變異自編碼器]]（variational autoencoder，VAE）。

=== 自編碼器類別 ===
自編碼器可以分類做：
*[[收縮自編碼器]]（undercomplete autoencoder）：最簡單直接嗰種自編碼器，指運用隱藏層－喺收縮自編碼器當中又叫**樽頸層**（bottleneck layer）－細胞嘅數量少嚟令個自編碼器焗住要將手上嘅資訊降維；如果一切順利，個收縮自編碼器會學識用數量少嘅幾個因素嚟重構手上嘅資訊。
*[[稀疏自編碼器]]（sparse autoencoder）：自編碼器另一種做法，呢種自編碼器嘅隱藏層細胞數量唔少、但係佢哋嘅損失函數包含「每一層啟動咗嘅細胞嘅數量」，而且損失同「每一層啟動咗嘅細胞嘅數量」成[[正比]]－即係話個網絡會傾向變成「每次收到輸入嗰陣，得少量細胞會啟動」，但個網絡依然可以有相當多嘅細胞，所以能夠做到「迫個網絡用少數變數預測輸入」嘅效果得嚟，又唔會對「個網絡最多可以考慮幾多個因素」作出太大嘅限制。
*[[去除雜音自編碼器]]（denoising autoencoder）：指啲[[啟動函數]]入面帶有[[隨機性]]嘅自編碼器；呢種做法令到個自編碼器焗住要由有雜音（通常會偏離原本輸入最多 30% 左右）嘅輸入嗰度重構個輸入，噉做能夠確保一個隱藏層細胞數量唔少過輸入層細胞數量嘅自編碼器唔會變成一個（冇用嘅）[[恆等函數]]；去除雜音自編碼器仲可以幾個砌埋一齊成**疊放去除雜音自編碼器**（stacked denoising autoencoder）做[[深度學習]]。
... 等等。
=== 深度自編碼器 ===

[[深度自編碼器]]（deep autoencoder）係一種自編碼器。一個深度自編碼器包含兩個互相對稱嘅[[深度信念網絡]]：一個深度自編碼器分**入碼面**（encoder）同**解碼面**（decoder），入碼面係一個由 4 至 5 部[[受限玻茲曼機]]一層層砌埋一齊而成嘅深度信念網絡；解碼面同入碼面對稱－即係話入碼器會一層層噉做特徵提取，最後成一個**壓縮特徵向量**（compressed feature vector），然後（假設個深度自編碼器經已訓練好）解碼面會一層層噉做解碼，最後解碼出嘅輸出會同輸入一樣。喺實際應用上，深度自編碼器可以攞嚟做[[數據壓縮]]嘅工作。


上圖係一個簡單（總共得 5 層）深度自編碼器嘅結構圖解；<math>X</math> 係輸入，<math>X'</math> 係輸出層，中間嘅係隱藏層，而 <math>z</math> 係壓縮特徵向量；左面嘅入碼面會由 <math>X</math> 做特徵提取，然後（只要個網絡訓練好）解碼面會將入咗碼嘅特徵數值變返做原本輸出，<math>X'</math> ≈ <math>X</math>。

== 生成對抗網絡 ==


[[生成對抗網絡]]（generative adversarial network，GAN）係一種人工神經網絡做法。用呢種方法建構神經網絡涉及整兩個人工神經網絡，然後再要嗰兩個神經網絡互相競爭，從而產生新而且幾可亂真嘅[[數據]]。最基本嗰種生成對抗網絡做法大致如下：
*建立兩個神經網絡；
*其中一個神經網絡做**生成網絡**（generative network），生成網絡會負責輸出數據，當中「數據」可以係[[圖像]]、[[聲]]或者[[影片]]都得；
*另外嗰個神經網絡就會做**分辨網絡**（discriminative network），分辨網絡會以生成網絡嘅輸出同真數據做自己輸入，[[foreach]] 數據，個分辨網絡要負責嗰件數據係真定假（「假」意思即係話「嗰件數據係由個生成網絡老作嘅」）；
*對於個生成網絡嚟講，佢最重要嘅目的係要呃到個分辨網絡－即係務求要做到令自己產生嘅數據俾個分辨網絡判定係「真」；
*如是者，呢兩個網絡會互相對抗，順利嘅話，生成網絡會變到能夠產生幾可亂真嘅數據。
舉個例說明，建立兩個神經網絡，生成網絡會攞一串字符做輸入，並且嘗試產生出符合嗰段字符描述（例：「[[唐人]]男人」、「[[白種人|白種]]女人」... 等等）嘅人面，然後個分辨網絡就會攞輸入，分辨網絡嘅輸入有兩種－真嘅人面同生成網絡憑空建構嘅人面，而分辨網絡嘅輸出係一個表示「幅圖有幾大[[機率]]係真」嘅數值 <math>p</math>（「假」係指「嗰幅圖係由生成網絡老作嘅」）；生成網絡嘅目的係要令自己產生嘅圖像得到嘅 <math>p</math> 值有咁大得咁大－如果有適當嘅[[演算法]]配合嘅話，個生成網絡最後會[[機械學習|學習]]到能夠產生望落係真、但查實唔存在嘅人面。
== 脈衝神經網絡 ==

[[脈衝神經網絡]]（spiking neural network，SNN）係進一步真實噉模擬[[生物神經網絡]]嘅人工神經網絡，重點在於會考慮**時間**：喺現實世界嘅生物神經網絡當中，唔同神經細胞之間嘅連繫可能會喺[[長度]]上唔一致，而呢類嘅原因會令到（例如）一粒神經細胞射訊號嗰陣，受佢訊號嗰啲細胞會喺唔同時間點收到個訊號；相比之下，廿世紀嘅人工神經網絡並冇考慮呢一點，當一粒人工神經細胞射訊號嗰時，下一排嗰啲細胞冚唪唥都會喺同一時間點收到個訊號。於是，脈衝神經網絡喺運算嗰陣，係以模擬嘅時間點（而唔係以運算週期）做個 [[foreach]]迴圈嘅基礎，簡單啲講嘅話：
  [[Foreach]] 模擬嘅時間點， ''// 非脈衝神經網絡會係「foreach 細胞層，計...」''
    記住每個訊號嘅位置；
    按訊號速度，計出每個訊號喺下一個時間點嘅位置；
    按[[啟動函數]]，計吓邊啲細胞要啟動；
    ......
為咗更加接近現實嘅[[生物神經細胞]]，脈衝神經細胞好多時會用「人工神經細胞射訊號嘅[[頻率]]」等嘅變數做網絡嘅輸出。詳情可以睇吓[[神經編碼]]（neural coding）。
=== 液體狀態機 ===

[[液體狀態機]]（liquid state machine，LSM）係脈衝神經網絡嘅一種。一部液體狀態機會有一大柞人工神經細胞，當中
*每一粒呢啲細胞會由輸入層或者第啲細胞嗰度接到到會隨時間變化嘅輸入，[[foreach]] 細胞，<math>\text{input} = f(\text{time})</math>；
*細胞之間嘅連繫係隨機化嘅，唔分層（所以本質上會係[[遞迴神經網絡]]）；
*輸出可以係「個網絡整體嘅啟動嘅[[時空規律]]（spatiotemporal pattern）」。
液體狀態機嘅「液體」源自一個比喻：有人話一部液體狀態機一收到一個輸入，佢啲細胞喺啟動數值就會出現一個時空規律（指啟動程度喺唔同位置唔同時間點都有唔同嘅數值）；呢點就好似一粒石仔跌落一個水體入面，造成[[表面張力波|漣漪]]噉（漣漪簡單講係「水嘅垂直[[位移]]」喺唔同位置唔同時間點都有唔同嘅數值）。

== 自組織對映 ==

[[自組織對映]]（self-organizing map，SOM）係一種用[[非監督式學習]]嚟行嘅特殊神經網絡，可以攞嚟做[[降維]]、[[聚類分析]]同[[數據視覺化]]等嘅工作。一個自組織對映會有兩浸細胞：輸入層同輸出層，當中輸出層係所謂嘅「特徵地圖」（feature map）。自組織對映用嘅係[[競爭性學習]]（competitive learning，指個網絡嘅細胞按某啲基準爭取「對個輸入俾反應」嘅地位），做法如下：當一個有若干個變數嘅個案進入輸入層，個網絡會計算呢個個案同每一粒細胞（喺 SOM 當中叫「權重」）之間嘅[[歐幾里得距離]]，而同嗰個個案最近嗰粒細胞係所謂嘅**最合乎單位**（best matching unit，BMU），跟住個網絡會調整 BMU 以及同 BMU 相近嘅細胞嘅權重，即係
:<math>W_{v}(s + 1) = W_{v}(s) + \theta(u, v, s) \cdot \alpha(s) \cdot (D(t) - W_{v}(s))</math>；當中
<math>s</math> 係而家做緊第幾步，<math>t</math> 係而家睇緊第幾個輸入，<math>u</math> 係 <math>D(t)</math> 呢個輸入相應嘅 BMU（指呢個 BMU 係第幾粒細胞），<math>\alpha(s)</math> 係一個數值下降緊嘅學習[[系數]]，而 <math>\theta(u, v, s)</math> 係所謂嘅**鄰近函數**（neighborhood function），會俾出喺第 <math>s</math> 步嗰陣神經細胞 <math>v</math> 同神經細胞 <math>u</math> 之間嘅距離。

即係話自組織對映嘅訓練可以想像成以下噉嘅樣：X 軸同 Y 軸反應重點變數嘅數值，每粒細胞都喺呢個空間當中有個位置；藍色嗰笪表示訓練用數據嘅分佈，而嗰個方格係個 SOM，個方格每一條線表示兩粒神經細胞之間嘅連繫；喺學習嘅每一步當中，個程式都會搵出同嗰個個案（白色圓圈）最接近嗰粒細胞（BMU；個網絡俾黃色圓圈包住嗰個節點），然後改變粒 BMU 同相近細胞嘅參數；經過若干步之後，個網絡嘅參數會同原先嘅唔同咗。如果將呢個過程視覺化，可以想像成以下嘅圖解：



== 拉雜網絡類型 ==

*[[隨機神經網絡]]（stochastic neural networks）：指由輸入計輸出過程當中包含[[隨機性]]嘅人工神經網絡，例如係個[[啟動函數]]有隨機性。
*[[殘差神經網絡]]（residual neural network，ResNet）：指用咗「跳過連繫」（skip connection）嘅神經網絡；「跳過連繫」意思即係話有部份嘅神經細胞可以唔淨只連去下一層嘅細胞嗰度，仲可以「跳過」若干層連去（例如）兩層後或者三層後嘅細胞。殘差神經網絡係基於[[生物神經網絡]]嘅－現實嘅生物神經網絡好少可會好似廿世紀嘅前饋網絡噉完美清楚分層。
*[[極限學習機]]（extreme learning machine）：一種前饋網絡，有若干浸隱藏層。一部極限學習機會喺[[初始化]]嗰陣設好啲參數，然後由參數同[[啟動函數]]計出預想輸出，但唔做[[反向傳播]]；一般嚟講，極限學習機冇用反向傳播嘅神經網絡咁準，但喺某啲情況下可以慳時間。
*[[迴響狀態網絡]]（echo state network，ESN）：[[遞迴神經網絡]]嘅一種，特徵係隱藏層內部嘅連繫好稀疏，而且輸入層同隱藏層以及隱藏層內部嗰啲權重係[[初始化]]嗰陣定死咗做隨機數值（唔會隨[[機械學習|學習]]改變），不過隱藏層同輸出層之間嘅權重就可以隨學習改變。迴響狀態網絡能夠有效噉重新產生某啲[[時間序列]]。

== 相關詞彙 ==
=== 啟動函數 ===

[[啟動函數]]（activation function）：一粒人工神經細胞會有嘅屬性，指一個定義「呢粒人工神經細胞有噉樣嘅輸入就會俾噉樣嘅輸出」嘅[[函數]]，想像有粒人工神經細胞 <math>i</math>，<math>\text{Output}_i = f(\text{Input}_i)</math>，當中 <math>f</math> 就係 <math>i</math> 嘅啟動函數。
*[[Sigmoid 函數]]（sigmoid function；<math>S(x)</math>）：喺 sigmoid 函數之下，y 嘅數值會一路大致上等如 0，直至 x 嘅數值超越某個臨界值為止，而喺 x 過咗個臨界值之後，y 嘅數值會一路大致等如佢最大可能數值－就好似現實世界嘅神經細胞噉，要輸入[[訊號]]超過一個臨界值先會射新訊號；寫成方程式嘅話如下：
*:<math>S(x) = \frac{1}{1 + e^{-x}} = \frac{e^x}{e^x + 1}</math>
*[[放射狀基底函數]]（radial basis function）：一個放射狀基底函數（<math>\varphi</math>）嘅輸出數值淨係視乎函數輸入（<math>\mathbf{x}</math>）同某一個固定點（<math>\mathbf{c}</math>；呢個固定點係函數嘅[[參數]]）之間嘅距離，當中距離通常係以[[歐幾里得距離]]計，即係話 <math>\varphi(\mathbf{x}) = \varphi(\left\|\mathbf{x}-\mathbf{c}\right\|)</math>；運用放射狀基底函數做啟動函數嘅神經網絡就係所謂嘅[[放射狀基底函數網絡]]（radial basis function network）。
*[[線性整流函數]]（rectifier）：指個啟動函數淨係接受正嘅數值：
*:<math>f(x) = x^+ = \max(0, x)</math>

=== 學習過程 ===

*[[反向傳播算法]]（backpropagation）：一種用嚟計個神經網絡啲權重值要點樣調整嘅方法；每次當個神經網絡俾出佢嘅運算結果 <math>\text{Output}_i</math> 嗰陣，就可以計個結果同正確數值差幾遠（誤差值 <math>C</math>），而 <math>C</math> 跟住可以用嚟做計個模型嘅參數要點改變，例如係[[確率勾配降下法]]（stochastic gradient descent）噉，就會運用以下呢條算式嚟計出每個權重值要點變：
*:<math>w_{ij}(t + 1) = w_{ij}(t) + \eta\frac{\partial C}{\partial w_{ij}} +\xi(t) </math>；當中
*:<math>w_{ij}(n)</math> 係指喺時間點 <math>n</math> 嘅權重值 <math>w_{ij}</math>；
*:<math>\eta</math> 係學習率；
*:<math>\frac{\partial C}{\partial w_{ij}}</math> 係 <math>C</math> 隨住 <math>w_{ij}</math> 嘅[[偏導數]]（partial derivative）；
*:<math>\xi(t) </math> 係一個[[隨機]]（stochastic）嘅數值。
*如果一個以電腦程式寫嘅神經網絡跟呢條式（或者係類似嘅式）行嘅話，佢喺計完每個個案之後，都會計出佢裏面嘅權重值要點樣改變，並且將呢個「每個權重應該要點變」嘅資訊傳返去個網絡嗰度（所以就叫「反向傳播」）。而每次有個權重值改變嗰陣，佢嘅改變幅度會同「誤差值」有一定嘅關係，而且佢對計個輸出嘅參與愈大，佢嘅改變幅度會愈大－個神經網絡會一路計個案一路變，變到誤差值愈嚟愈接近零為止。
*[[海伯理論]]（Hebbian theory）：[[神經科學]]上一個描述[[突觸可塑性]]（簡單講就係[[神經細胞]]之間嗰啲[[突觸]]進行學習，引致隻動物行為改變嘅能力）嘅[[科學理論|理論]]；可以用以下呢條式表示：
*:<math>\Delta w_i = \eta x_i y</math>
*:呢條式意思係權重 <math>w_i</math>（指一粒神經細胞有幾影響到下一粒）嘅改變 <math>\Delta w_i</math> 等如[[學習率]] <math>\eta</math> 乘以第 <math>i</math> 個輸入（<math>x_i</math>）同突觸後嗰粒細胞嘅反應 <math>y</math>；海伯理論條式可以用嚟改變神經細胞之間嘅權重。
*[[人工神經網絡修剪|修剪法]]（pruning）：泛指喺做完訓練之後，刪除個網絡嘅部份細胞，用意在於減低電腦嘅運算負擔；例如係設一個門檻值 <math>\theta</math>，[[foreach]] 對第啲細胞嘅影響（以權重值計）細過 <math>\theta</math> 嘅細胞，試吓將佢刪除，並且睇吓刪除咗會對個網絡嘅預測能力造成乜嘢影響，影響唔明顯嘅話就真係刪除嗰粒細胞。而事實係有證據指，大嘅神經網絡學起嘢上嚟好多時都會出現「個網絡嘅其中一橛學咗所需嘅函數，網絡其餘部份完全冇用」嘅情況（睇埋「彩票假說」）。
***彩票假說**（lottery ticket hypothesis）：有關大型神經網絡嘅一個[[假說]]；呢個假說指出，當設計者訓練一個大（細胞數量多、隱藏層多）嘅神經網絡嗰陣，可能會出現「個網絡其中一橛（因為將啲權重[[初始化]]嗰時好彩等嘅原因）好快噉成功學咗所需嘅函數，而個網絡其餘部份變得冇用」嘅情況－即係話呢一細橛網絡好似中[[彩票]]噉好彩成功。

=== 遺傳演算法 ===

[[遺傳演算法]]（genetic algorithm，簡稱「GA」），又有叫[[進化演算法]]（evolutionary algorithm），一種建基於[[物競天擇]]嘅一種學習方法；根據物競天擇上，一個族群內部嘅生物個體（例如一群人類）彼此之間或多或少噉喺[[遺傳]]上有差異，呢啲差異會引致佢哋喺[[表現型]]（包括外表、行為、同體質等）上有個體差異，當中佢哋有啲生存同繁殖會比較叻，所以就更加有機會將自己啲遺傳基因傳俾下一代；假設環境唔變，個族群就會一代一代噉喺遺傳上有變異，變到愈發適合喺嗰個環境生存同繁衍。遺傳演算法就係受呢個理論啟發嘅一種演算法，做法如下：
#整一大柞同類嘅數學模型出嚟，當中每個啲參數都有唔同；
#叫每個數學模型做若干次嘅預測，每個按佢做預測陣時嘅準確度得返個分數 <math>s</math>，分數愈高表示佢表現愈好；
#揀選分數 <math>s</math> 最高嗰柞模型，將其餘嘅模型淘汰；
#做「繁殖」嘅過程－用最高分嗰柞模型做「父母」，生產下一代嘅模型。啲仔喺參數上會似佢哋嘅父母（「每個仔嘅每粒參數」都係「佢父母嘅同位參數」嘅函數）；
#再做過上述過程，重複若干代；
#如果一切順利，若干代之後手上嘅模型會係一啲預估估得啱嘅模型。
*[[變化結構神經進化]]（neuroevolution of augmenting topologies，NEAT）：指喺用遺傳演算法令神經網絡進化嗰陣，唔淨只改變啲權重，仲改變網絡嘅結構（加新嘅隱藏層以至加新嘅連繫等等）。
*[[複合模式產生網絡]]（compositional pattern-producing network，CPPN）：指個網絡入面嘅細胞可以有唔同樣嘅[[啟動函數]]－喺一個普通嘅廿一世紀初前饋網絡裏面，好多時啲細胞冚唪唥都係用 [[sigmoid 函數]]做啟動函數嘅，而一個 CPPN 入面就容許唔同細胞有唔同嘅啟動函數（例：一啲用 sigmoid 函數、一啲用[[放射狀基底函數]]... 等等），配合遺傳演算法用嘅話，CPPN 仲會容許生產下一代嘅模型嘅過程當中喺啟動函數嘅款上出現突變；CPPN 可以有極之複雜嘅輸入輸出關係，所以喺[[圖像]]相關應用上可以攞嚟由簡單嘅輸入嗰度產生好多變嘅圖像。
***歷史記號**（historical marking）：NEAT 同 CPPN 進化演算法會用嘅數字；每當一個噉嘅演算法加一個新嘅結構（新細胞或者新連繫等）嗰陣，會順手掕個歷史記號數值落嗰個結構度，表示嗰個結構係喺邊一代加入嘅，方便設計者做記錄。
*[[物種形成]]（speciation）：同[[進化論]]上嘅物種形成概念相似，指 NEAT 進化嘅過程當中有咗多個唔同款嘅神經網絡，就好似進化出咗幾個唔同嘅[[物種]]噉；喺呢個時候，設計者好多時會選擇俾呢幾個唔同嘅神經網絡「物種」分開進化（唔俾佢哋彼此競爭），用意在於想防止其中一啲「物種」打低初頭表現唔夠好（但可能將來表現會變好）嘅新「物種」。

=== 神經網絡詮釋 ===
*[[通用近似定理]]（universal approximation theorem）：喺[[數學]]上嚟講，一個神經網絡係一個[[函數]]（<math>o(x)</math>），而機械學習演算法做嘅嘢係想令 <math>o(x)</math> 嘅輸入輸出盡可能噉接近現實世界嘅數據產生過程 <math>f(x)</math>，令個神經網絡能夠準確噉由輸入計個預想嘅輸出值出嚟。通用近似定理係一條[[定理]]，主張神經網絡具有**通用性**（universality）－假想家陣有個連續性嘅函數 <math>f(x)</math>，而研究者想做到以特定嘅準確性 <math>\epsilon</math> 運算 <math>f(x)</math>（即係誤差嘅數值要細過 <math>\epsilon</math>，當中 <math>\epsilon > 0</math>），通用近似定理主張嘅係「無論 <math>f(x)</math> 同 <math>\epsilon</math> 係乜，都梗會有個神經網絡架構能夠做到**近似** <math>f(x)</math>，而且誤差數值永遠細過 <math>\epsilon</math>」。
*[[貝葉斯推論]]（Bayesian inference）：一種廿世紀興起嘅[[統計學]]詮釋方法；根據呢種理解，一個研究者喺做實驗之前會有一個**原先預期**（prior）嘅模型（個模型可以想像成一個人工神經網絡），然後佢會攞[[數據]]，再按呢啲數據更改自己手上嘅模型，打後再攞數據，不斷更新個模型。即係用返[[貝葉斯定理]]（Bayesian theorem）嘅思考方法想像：
::<math>P(\theta|D) = \frac{P(D | \theta)\, P(\theta)}{P(D)}</math>，當中
:*<math>P(\theta)</math> 指（研究者相信）手上模型係真確嘅機會率；
:*<math>P(D|\theta)</math> 指「如果手上模型係真確，會得出呢個實驗結果（<math>D</math>）」嘅機會率；
:*<math>P(\theta|D)</math> 指「有咗個實驗結果，手上模型係真確」嘅機會率（事後信念；posterior belief）。
:呢個過程可以想像成「心目中嘅[[概率分佈]]嘅不斷變化」－想像一個觀察者，佢完全唔知「撳 A 呢個掣會發生乜事」（喺佢心目中，所有可能性嘅機會率都一樣，成一個[[均勻分佈]]），喺撳咗一次，觀察到撳咗個掣會有盞燈閃之後，佢就會改變佢心目中嗰個概率分佈，知道「會有盞燈閃」嘅機會率大過「天會跌落嚟」嘅，即係對「撳 A 呢個掣會發生乜事」嘅認識多咗。

=== 拉雜詞彙 ===

***輸入輸出疊放**（input-output stacking）：最直接嗰種[[深度學習]]做法，指先訓練好一個網絡，然後要下一個網絡以打前嗰個網絡嘅輸出做自己輸入，再訓練呢個新網絡由先前嗰個網絡嘅輸出嗰度準確計出下一層嘅輸出，如此類推，直至到製作出一個每層都表示到有用知識嘅**深度疊放網絡**（deep stacking network）。
***歸功分配路線*'（credit assignment path，CAP）：深度學習上嘅一個概念；一條 CAP 係指由輸入去輸出嗰一連串嘅變化，而 CAP 嘅長度反映學習嘅「深度」；例如一個有 4 浸隱藏層嘅前饋網絡，由輸入層細胞去到最後輸出當中，啲數據頂櫳會經歷 4 + 1 = 5 次嘅轉化，而喺一個遞迴網絡裏面，CAP 嘅長度理論上可以係[[無限大]]。深度學習講緊嘅就係 CAP 嘅長度－一般嚟講，CAP 嘅數值超過 2 就可以算係「深度」嘅學習，而一個網絡嘅 CAP 長度會點樣影響佢嘅學習能力（能夠學習幾複雜嘅法則）喺人工神經網絡研究上係一個相當大嘅課題。
*[[馬可夫鏈]]（Markov chain）：一種用嚟模擬一連串可能事件嘅[[隨機過程|隨機性]][[數學模型]]。喺一條馬可夫鏈當中有若干個可能狀態，而每個狀態 <math>s_i</math> 都會有一串數字 <math>[p_0, p_1, p_2 ...]</math> 表示世界由 <math>s_i</math> 呢個狀態變成另一個狀態嘅[[機會率]]；喺[[統計學]]上，一種簡單嘅做法係收[[數據]]，用數據估計 <math>[p_0, p_1, p_2 ...]</math> 嘅數值，產生一個可以用嚟預測世界變化規律嘅模型，即係話馬可夫鏈可以用好似人工神經網絡噉嘅方法訓練。
*[[主成份分析]]（principal component analysis，PCA）：想像有柞個案，佢哋每個喺兩個變數上都有其數值（附圖），跟住可以畫兩條線（附圖嗰兩個箭咀），兩條線分別都可以用一條包含 <math>x</math> 同 <math>y</math> 嘅算式表達，當中由圖當中可以清楚睇到，長箭咀嗰條線成功噉捕捉更多嘅[[變異數]]－亦即係話長箭咀嗰條線所代表嗰個「成份」（component）比較能夠用嚟分辨啲個案，所以比較「重要」。喺最簡單嗰種情況下，一個做主成份分析嘅[[演算法]]大致上係噉：
*#攞數據；
*#畫條線出嚟，條線有條式，而條式包含數據當中有嘅[[變數 (科研)|變數]]；
*#計出沿呢條線嘅變異數有幾多；
*#改變吓條線嘅[[參數]]；
*#再計出沿條新線嘅變異數有幾多；
*#一路做步驟 4 同 5，做嗮所有指定咗嘅可能性，最後俾具有最大變異數嗰條線做個演算法嘅輸出。




== 註釋 ==


== 睇埋 ==

*[[數據探勘]]
*[[人工智能]]
*[[機械學習]]
*[[深度學習]]
*[[最佳化]]
**[[爬山演算法]]
**[[梯度下降法]]
**[[遺傳演算法]]
*[[人工智能詞彙表]]
*[[概率及統計學詞彙表]]


== 攷 ==


== 拎 ==
*[https://towardsdatascience.com/the-mostly-complete-chart-of-neural-networks-explained-3fb6f2367464 The mostly complete chart of Neural Networks, explained]. *Towards Data Science''.
*Neural Networks and Deep Learning.
**CHAPTER 4 - A visual proof that neural nets can compute any function.