人工神經網絡

係指一啲模仿生物神經網絡嘅結構同功能嘅數學模型：一隻靈長目動物嘅腦閒閒地有斷百億計嘅神經細胞，一粒神經細胞喺俾電同化學物訊號刺激到嗰陣，會跟住以電或者化學物嚟傳新訊號，所以當一粒神經細胞射訊號嗰陣可以引起連鎖反應，將資訊喺成個神經網絡度傳開去；而人工神經網絡主要以電腦程式模擬呢個過程，令電腦程式能夠出現類似動物神經系統噉嘅行為－對人工智能同機械人學等嘅領域嚟講好有用。

一個人工神經網絡由大量嘅人工神經細胞組成。喺用電腦程式整神經網絡嗰陣，研究者會每粒人工神經細胞都同佢設返個數值代表佢嘅啟動程度，而每粒神經細胞嘅啟動程度嘅數值都有條式計，呢條式包括咗喺佢之前嗰啲神經細胞嘅啟動程度。啲函數當中嘅參數可以變化，而如果個神經網絡嘅程式令到佢識得靠自己嘅經驗嚟到調整呢啲參數嘅話，嗰個神經網絡就會具有學習嘅能力。即係例如個程式 foreach 細胞有一條類似噉樣嘅算式：

；

代表粒神經細胞嘅啟動程度， 代表前嗰排嘅神經細胞當中第  粒嘅啟動程度，而  就係前嗰排嘅神經細胞當中第  粒嘅權重。所以當一粒人工神經細胞啟動嗰陣，會帶起佢後面啲細胞跟住佢啟動－似十足生物神經網絡入面嗰啲細胞噉。假如個神經網絡嘅程式令佢能夠自行按照經驗改變  嘅數值嘅話，佢就會曉學習。

到咗廿一世紀初，人工神經網絡經已俾科學界廣泛噉用落去各種各樣嘅問題嗰度。喺應用上，事實證實咗人工神經網絡能夠處理機械視覺同埋語音識別呢啲傳統嘅電腦程式好難解決到嘅問題；而喺理論性嘅認知科學上亦有聯結主義理論，主張心靈可以用人工神經網絡嚟模擬。

基本諗頭 

人工神經網絡最基本嘅諗頭係要用人工方法模仿動物神經細胞嘅功能。一粒動物神經細胞喺受到某啲特定刺激嗰陣，會用電或者化學方式向第啲神經細胞傳出訊號，然後同呢粒神經細胞相連嗰啲神經細胞會受到佢嘅訊號刺激，跟住又會各自噉射新嘅訊號－於是資訊就會喺成個神經系統當中傳播開去；例如係眼塊視網膜上面嗰啲感光神經細胞噉，呢啲細胞喺受到光刺激嗰時，會傳訊號去同佢哋相連嘅神經細胞嗰度，而呢一串神經細胞一路連到上去個腦嗰度，所以喺每一個時刻，對眼嗰啲感光細胞都會受到光刺激並且射訊號，而啲訊號就會一路傳上去個腦嘅視覺相關區域，個腦靠住收到嘅資訊，就可以判斷對眼睇到啲乜嘢。呢種訊號傳遞過程就係人工神經網絡技術想模擬嘅嘢。

網絡組成

人工神經細胞 

人工神經細胞係人工神經網絡嘅基本組成部件。一粒人工神經細胞係一個人造嘅物體，會好似動物神經細胞噉接收訊號、並且按照所收到嘅訊號改變自己內在嘅狀態，跟住再按照自己內在狀態，決定係咪要射新訊號以及要射點樣嘅新訊號－原理上同動物嘅神經細胞極之相似。當一大柞人工神經細胞互相連繫住，就會形成一個人工神經網絡，而每當研究者俾某啲輸入數值落去其中一啲人工神經細胞嗰陣，佢哋就會帶動其他人工神經細胞跟住啟動，最後每一粒人工神經細胞都會達致某啲啟動值－即係話個網絡可以有一啲輸出數值。實用嘅研究證實咗，一個人工神經網絡嘅輸出值同輸入值會成某啲特定嘅關係，呢點表示人工神經網絡可以攞嚟做一啲有用嘅運算。

一粒典型嘅人工神經細胞結構如下：

至  係各個輸入嘅數值，啲輸入可以係嚟自外界嘅，但又可以嚟自同一個網絡入面嘅第啲人工神經細胞都得。
 至  係每個輸入嘅權重，代表咗嗰一個輸入對呢粒人工神經細胞嘅啟動程度有幾大影響力。
 指偏向，即係嗰粒神經細胞本身喺啟動上嘅傾向，例如如果有某一粒人工神經細胞嘅  係正數而且數值大，佢就會傾向無論輸入係幾多都有強烈嘅啟動。
指粒人工神經細胞嘅啟動程度，呢個數值由上面嗰柞因素話事，個函數如下：

指粒細胞喺時間點  嘅啟動程度， 指粒細胞喺時間點  嘅啟動程度，而  指喺時間點  嗰柞輸入嘅數值。呢條式表示， 嘅值由 、、同埋  呢三個數值話事。
好多人工神經細胞嘅啟動函數會包含  呢個數值。呢個係所謂嘅門檻值：一粒典型嘅動物神經細胞係一定要所受到嘅刺激有返咁上下勁，先會射訊號嘅；如果佢受嘅刺激數值唔超過門檻值嘅話，佢就乜嘢訊號都唔會射；為咗要更加接近動物神經細胞，好多研究人員喺設計神經網絡嗰時會特登每粒人工神經細胞俾個門檻值佢，令個網絡嘅各粒人工神經細胞好似動物神經細胞噉，收到嘅輸入唔超過門檻值就完全唔射訊號。
 係粒人工神經細胞嘅輸出數值。
 係  同埋  之間嗰個函數，可以有多個款，但  好多時會係一個恆等函數－即係話  數值好多時同  一樣。

傳遞函數 

喺數學上，一粒普通嘅人工神經細胞成個傳遞函數可以簡化噉用以下呢條式表達：

係權重向量，即係指包括嗮所有權重在內嘅一個向量。
 係輸入向量，同理係指包括嗮所有輸入在內嘅一個向量。
 係粒人工神經細胞嘅輸出，係一個純量。

以上呢個函數所講嘅嘢用日常用語表達係噉嘅：粒人工神經細胞嘅輸出值取決於佢收到嘅輸入值、啲權重、同埋佢嘅偏向值。上述呢個例子係一個線性函數，不過喺實際應用上，人工神經細胞嘅傳遞函數仲有得用 sigmoid 函數等唔同類嘅函數嚟模擬：例如喺 sigmoid 函數之下，y 嘅數值會一路大致上等如 0，直至 x 嘅數值超越某個臨界值為止，而喺 x 過咗個臨界值之後，y 嘅數值會一路大致等如佢最大可能數值－就好似現實世界嘅神經細胞噉，要輸入訊號超過一個臨界值先會射新訊號網絡結構 

當有多粒人工神經細胞互相連埋一齊，就會組成一個人工神經網絡。喺實際使用上，設計者一般會用電腦程式嚟整人工神經網絡，叫個程式喺開始嗰陣粒粒人工神經細胞都設個數代表佢嘅啟動程度，再設啲數代表神經細胞之間嘅連結權重。人工神經網絡多數會用多層結構－同一層嘅神經細胞唔會影響彼此嘅啟動程度，但粒粒嘅啟動程度都會受前一層嘅神經細胞影響。例如常見嘅多層前饋網絡可以想像成以下噉嘅樣：

幅圖入面嘅每一個圓圈都代表咗一粒人工神經細胞，箭咀表示箭咀前嗰粒細胞嘅啟動能夠影響箭咀後嗰粒細胞嘅啟動。呢個網絡由三大層組成，分別係：

輸入層嘅人工神經細胞負責由外界嗰度攞資訊－佢哋嘅啟動程度主要由呢啲外界資訊話事。
隱藏層係輸入層同輸出層之間嘅一排排人工神經細胞，可以得一層或者有好多層都得，一粒喺隱藏層入面嘅人工神經細胞嘅啟動程度通常都係主要取決於佢打前嗰層嗰啲人工神經細胞嘅啟動程度。一般嚟講，隱藏層愈多人工神經細胞，個神經網絡嘅就愈會有顯著嘅非線性，但表現唔一定會愈好。喺實際應用上，啲科學家整神經網絡嗰陣，會設每浸隱藏層嘅神經細胞數目做輸入層嘅 1.2 至 1.5 倍。
輸出層，呢層嗰啲人工神經細胞嘅啟動程度由佢哋之前嗰層嘅人工神經細胞嘅話事，負責俾出個神經網絡嘅運算結果。

亦都有一啲人工神經網絡係冇隱藏層嘅－呢啲神經網絡浸輸出層嘅啟動程度數值會直接噉由輸入層嘅決定，即係話佢哋嘅結構如下：

當中左手邊黑點代表輸入層嘅人工神經細胞。呢種冇隱藏層嘅神經網絡嘅缺點係，佢哋所模擬嘅輸入同輸出之間嘅關係唔會太複雜－而一旦個設計者需要個輸入同輸出之間嘅關係唔係簡單嘅線性嗰陣，單層嘅人工神經網絡好多時就會搞唔掂。

結構分類 

按照結構嚟分類嘅話，神經網絡有得分做好多種，而以下呢兩大種最常見：
前饋神經網絡，指訊號淨係由輸入到輸出一個方向流動嘅神經網絡－冇任何人工神經細胞能夠影響自己前排嗰啲人工神經細胞，好似上面嗰幾幅圖所描述嘅噉。
遞迴神經網絡，指啲訊號會喺個神經網絡之內「遞迴」，即係話個神經網絡啲人工神經細胞當中有至少一部份嘅會有能力影響佢哋之前嗰幾層嘅人工神經細胞嘅啟動程度。因為佢哋呢種結構上嘅特徵，佢哋識得處理喺時間上前後倚賴嘅資訊，例如係人口講嘅嘢噉：一個人講一句嘢嗰陣，句嘢嘅第二個字會影響到第一個字嘅意思，所以喺分析喺時間點  聽到嘅字嗰陣，要考慮埋喺打前嗰啲時間點聽到嘅字先可以理解到嗮成個意思－遞迴神經網絡比起前饋神經網絡更加能夠做到呢一點。而事實係喺廿一世紀初，已經有科學家成功噉運用遞迴神經網絡嚟令到電腦學識處理人類用自然語言講嘅嘢喺呢個網絡當中，一粒細胞可以影響佢自己喺下一個時間點嘅啟動程度－係一個簡單嘅冇隱藏層遞迴神經網絡。

例子碼
有咗上面嘅知識式，就可以用電腦程式嚟整人工神經細胞，例如以下呢段用 Python 程式語言寫嘅源碼定義咗一個簡單嘅感知機神經網絡：

def Perceptron(input1, input2, output) : # 定義一個網絡，個網絡有兩個輸入同埋一個輸出。
   outputP = input1*weights[0] + input2*weights[1] + biais*weights[2] # 個網絡嘅輸出條式
   if outputP > 0 : #activation function (here Heaviside) # 如果個輸出值大過 0，噉將輸出值 set 做 1。
      outputP = 1
   else :
      outputP = 0 # 呢個網絡係一個開關網絡，即係話佢輸出值淨係得兩個可能性，「0」同「1」。

網絡學習

基本諗頭 

學習法則係指一啲改變個神經網絡嗰柞參數嘅法則。一個神經網絡喺收到一個輸入嗰陣會計一個輸出出嚟，但係呢個輸出唔一定係正確嘅，可能會同正確嘅結果有所出入。所以如果要用神經網絡嚟計出正確嘅結果，好多時就要靠一個好似學習噉嘅過程：例如喺監督式學習當中，個研究者可以走去搵柞數據返嚟－呢柞數據就係所謂嘅訓練集；呢個訓練集會包括咗一連串嘅輸入個案，而每個個案都有一個已知嘅正確輸出值；跟手個研究者就可以將個訓練集嘅數據入落去個神經網絡度，等部電腦自動噉計出喺每一個個案入面，個神經網絡俾出嚟嘅輸出同正確嘅輸出值有幾大出入，跟手啲事先編寫好嘅學習法則就會按照呢啲落差值計吓啲權重要點樣改變先可以令到個神經網絡俾出更準確嘅答案。如是者，喺個神經網絡運算過大量嘅個案之後，佢嗰啲權重等嘅參數就會有所改變，變到更加能夠計到正確嘅答案－個研究者就可以攞呢個神經網絡嚟去預測一啲將來會撞到嘅同類個案喺呢個過程裏面，個研究者會想令以下條方程式入面嗰個殘差平方和 有咁細得咁細：

；當中

係個訓練集入面嘅個案數量；
 係第  個個案入面嗰個輸入；
 係個神經網絡用  做輸入嗰陣俾出嚟嘅輸出；而
 係第  個個案入面嗰個正確輸出；所以
 呢個數值反映咗攞個神經網絡嚟計嘢嗰陣嘅平均誤差。

反向傳播算法 

反向傳播算法係一種用嚟計個神經網絡啲權重要點樣調整嘅方法，喺個神經網絡俾出咗佢嘅運算結果之後，就可以計個結果同正確數值差幾遠，例如確率勾配降下法噉，就會運用以下呢條算式嚟計出每個權重值要點變：

；當中

係指喺時間點  嘅權重值 ；
 係學習率；
 係個誤差，反映咗喺個個案入面個神經網絡俾嘅輸出同正確輸出差幾遠；
 係  隨住  嘅偏導數；
 係一個隨機嘅數值。

如果一個以電腦程式寫嘅神經網絡跟呢條式嚟行嘅話，佢喺計完每一個個案之後，都會計出佢裏面嘅權重值要點樣改變，並且將呢個「每個權重應該要點變」嘅資訊傳返去個網絡嗰度。而每次有個權重值改變嗰陣，佢嘅改變幅度會同「誤差值」有一定嘅關係，而且佢對計個輸出嘅參與愈大，佢嘅改變幅度會愈大－個神經網絡會一路計個案一路變，變到誤差值愈嚟愈接近零為止。而除咗確率勾配降下法之外，反向傳播仲有好多其他方法做，詳情可以睇同最佳化相關嘅課題。

學習演算法 
用反向傳播算法幫神經網絡學習嘅演算法如下：

第一步：傳播
由數據嗰度邏一個個案，按照個神經網絡嘅權重同埋個個案嘅輸入值計個神經網絡會俾啲乜嘢輸出值；
計吓個誤差係幾多；
用條式計吓每個權重數值應該要變幾多。

第二步：更新權重值
每一個權重值，佢都會由條式嗰度有一個梯度值；
每一個權重值嘅改變幅度等如個梯度值乘以 －如果  係 0，噉個神經網絡永遠都唔會變，而如果  數值大，噉個神經網絡會變化得好快，所以  掌管咗個神經網絡學習有幾快；
將邇柞值「反向傳播」返去個神經網絡嗰度，將每個權重值變成佢嘅新數值；
重複以上步驟，理想嘅係直至誤差值變成 0 為止，或者係變到一個接受得到嘅程度。可例子碼
以下係一段用 MATLAB寫嘅簡單前饋神經網絡嘅源碼：

function m = neural()
[Attributes, Classifications] = mendez; % 由「mendez」嗰度攞數據，「mendez」係個檔案嘅名。
n = 2.6; % 設個變數做學習率。
nbrOfNodes = 8;
nbrOfEpochs = 800;

% 設矩陣嚟代表啲權重。
W = rand(nbrOfNodes, length(Attributes(1,:)));
U = rand(length(Classifications(1,:)),nbrOfNodes);

m = 0; figure; hold on; e = size(Attributes);

% 係噉 run 若干次。
while m < nbrOfEpochs

% m 用嚟數住喺第幾個 loop。
    m = m + 1;

for i=1:e(1)
        % 由數據嗰度攞輸入。
            I = Attributes(i,:).';
            D = Classifications(i,:).';

% 根據輸入同權重計吓個神經網絡俾啲乜嘢輸出。
            H = f(W*I);
            O = f(U*H);

% 計誤差值。
            delta_i = O.*(1-O).*(D-O);

% 計前面嗰層嘅誤差值。
            delta_j = H.*(1-H).*(U.'*delta_i);

% 根據誤差值調較吓啲權重。
            U = U + n.*delta_i*(H.');
            W = W + n.*delta_j*(I.');
        end

RMS_Err = 0;

% 計 RMS 誤差值。
        for i=1:e(1)
            D = Classifications(i,:).';
            I = Attributes(i,:).';
            RMS_Err = RMS_Err + norm(D-f(U*f(W*I)),2);
        end

y = RMS_Err/e(1);
        plot(m,log(y),'*'); % 畫幅圖展示 RMS 誤差值點樣隨住學習次數演變；結果通常會係個誤差隨時間變細。

end

function x = f(x)
x = 1./(1+exp(-x));

呢個網絡用嘅學習屬於監督式學習。

批量式訓練 
要用反向傳播算法訓練一個神經網絡學習，可以用所謂嘅批量式訓練。喺一個用批量式訓練學習嘅神經網絡入面，源碼會講定一個批量大細，而個神經網絡會「每讀取咗  個個案之後先至更新啲權重」。想像以下呢段虛擬碼：

loop maxEpochs times /* 將柞數據睇 maxEpochs 噉多次。*/

for each training item /* 將直至「end for」為止段碼，對每個個案做一次。*/
    compute weights and bias deltas for curr item /* 計權重要變幾多。*/
    accumulate the deltas /* 累積權重值變幅，而唔係即刻改變啲權重值。*/
  end for

adjust weights and bias deltas using accumulated deltas /* 喺 run 嗮所有個案之後，先 update 柞權重值；喺呢段碼入面，b = 個案數量。*/
end loop

批量式訓練嘅一個好處係，用佢會令到每一次嘅權重更新都有考慮成個批量入面嘅趨勢，所以可以令個神經網絡學起嘢上嚟更加穩定。

學習率 

學習率係一個神經網絡入面好緊要嘅參數。喺每次更新啲權重之前，會有條式計每個權重要變幾多，而個變幅往往會乘以學習率。因為噉，學習率掌管咗個神經網絡學習學得有幾快，例如如果學習率係 0，噉個神經網絡啲權重數值永遠都唔會變，而學習率數值愈大，個神經網絡學習就會愈快，但係學習快唔一定係一件好事：學習率快就表示喺每次更新啲權重嗰陣，每個權重嘅變幅都會偏大，好多時噉會搞到權重改變嗰陣「郁過龍」－假想有個權重家陣數值係 0.7，而佢個理想數值係 0.65，但因為個神經網絡學習率大得滯，搞到權重更新嗰陣佢個數值唔係變成理想嘅 0.65，而係變成 0.6；另一方面，學習率細得滯又會搞到個神經網絡學嘢好慢。所以喺對神經網絡嘅研究上，「學習率要設做幾多先算理想」係一個相當重要嘅課題。

動量 

喺最原始嘅神經網絡當中，學習率係一個常數，但近期啲嘅研究者有嘗試將個學習率設做一個可以視乎手上個案嘅屬性而變化嘅數值。其中一個最簡單嘅方法係運用所謂嘅動量：喺神經網絡研究上，動量建基於一個諗頭－如果喺之前嗰幾個個案入面，個權重都係要下降嘅話，噉呢個權重喺下一個個案當中都要將數值下降嘅機會率相當大，而同理如果個權重喺之前嗰幾個個案入面都係要數值上升嘅話，噉佢喺下一個個案都要將數值上升嘅機會率相當大。

喺一個原始嘅神經網絡裏面，一個權重嘅改變幅度如下：

當中  係權重改變幅度， 係學習率， 係梯度值。而喺用動量嘅情況下，權重變幅條式如下：

係一個常數，掌控「動量衰退得有幾快」，而  喺之前嗰個個案入面嘅權重變幅－即係話喺呢個情況下，當個權重喺之前嗰一個個案係下降咗嗰陣，佢喺今個個案下降起上嚟會下降得更勁，而上升起上嚟會上升得冇咁快。調較  嘅數值可以左右「之前嘅權重變幅」對「而家嘅權重變幅」有幾大影響力。

在線學習 

當 數值偏向極大嗰陣，一個研究者冇咁易有嗮數據喺手頭上，好多時會靠在線機械學習－指喺一段時間之內俾個神經網絡係噉由外界攞輸入，例如喺整一個用嚟預測股價嘅在線神經網絡嗰陣，可以俾個神經網絡日日睇一次隻股票嘅價格，每次睇完，都要個神經網絡估吓隻股票聽日係乜嘢價格，跟手聽日睇吓個真實價格同個神經網絡嘅估計差幾遠，再計返個誤差值出嚟同埋用呢個數值改變個神經網絡啲權重，等佢第日可以做到更加準嘅預測。在線機械學習成本低，而且喺要預測嗰樣嘢嘅變化規律唔係恆定不變嘅情況下零舍有用。

修剪法 

修剪法係做完學習之後可能會做嘅一樣工作，指喺做完訓練之後，刪除個網絡嘅部份細胞，用意在於減低電腦嘅運算負擔：原則上，一個人工神經網絡當中可以有一啲細胞係多餘嘅， 數值細，用字面講就係「嗰粒細胞嘅啟動值對成個網絡嘅輸出值冇大影響」；因為噉，喺做完訓練之後，有唔少人工神經網絡嘅設計者會用修剪法，刪除啲對整體輸出影響唔大嘅人工神經細胞。一個簡單嘅做法如下：
Foreach 細胞，評估粒細胞有幾重要；
按量度重要性嘅指標，將細胞分高低；
將重要性最低嗰粒細胞刪除；
按某啲條件決定係咪要返去步驟 1 嗰度。

喺實際應用上，修剪法能夠減低部電腦嘅運算負荷。

學習範式 

一個神經網絡可以隨住經驗變得更加有能力做準確嘅預測－曉好似動物噉樣學習。所以神經網絡技術對機械學習嚟講至關重要，而要訓練一個神經網絡學嘢，主要有三大學習範式：監督式學習、非監督式學習、同埋強化學習。

監督式學習 

監督式學習會搵一柞例子個案返嚟，將每個個案嘅輸入入落去個神經網絡嗰度等佢計個輸出出嚟，跟手再計返誤差值同埋用誤差值計吓個神經網絡啲權重要點改。經過一餐訓練，等到隻網絡對於訓練集數據嘅計算結果個誤差值可以接受得到之後，又將未見過嘅測試集數據挃入隻網絡進行預測，又得到。若果個誤差值都可以接受得到，噉意味呢個網絡模型實現咗，可以作為結果呈現；唔係就要調整權重、返去重新訓練。用數學行話講嘅話，即係要搵出一柞已知嘅例子，有若干對輸入同正確輸出，，並且由可容許嘅函數當中搵返個同啲例子最吻合嘅函數  出嚟。喺呢種學習之下，個神經網絡會由個研究者嗰度收到一柞訓練數據俾佢學、入邊有「題」同埋「答案」，好似有個老師噉－所以就叫「監督」式學習。

用監督式學習可以訓練一個神經網絡做好多工作，好似係圖形辨識同埋迴歸分析
呀噉。舉個例說明，家吓有個研究員想訓練一個神經網絡分辨一個病人係咪有肺癌，用嚟幫啲醫生手做檢查；佢可以
去問醫院同醫學院等嘅單位借有關肺癌病人嘅數據，呢柞數據要包括咗每個病人嘅檢查結果以及佢係咪真係有肺癌等嘅資訊；
跟手個研究員就會逐個逐個將啲病人個案嘅檢查結果同 X 光片嗰柞數字入落去個神經網絡嘅輸入層嗰度，啲隱藏層會計吓啲輸入嘅數據，而個輸出層就會係是但一個二元嘅輸出－「有肺癌」同「冇肺癌」。
喺初頭嗰陣，個神經網絡會犯好多錯，但係喺用呢柞數據訓練到咁上下之後，個神經網絡會根據佢啲學習法則改變咗佢啲權重，順利嘅話啲誤差會變到愈嚟愈細；而最後如果個誤差細到去一個可以接受嘅水平嘅話，啲醫生就有可能會有興趣用呢個神經網絡幫佢哋手做肺癌檢查。

事實係，喺醫學上經已有唔少醫護人員會用神經網絡幫手做診斷，有研究甚至發現，用神經網絡嚟做診斷有陣時仲準過用人手做。

例子碼
用電腦程式嚟整人工神經細胞，例如以下呢段碼，係頭先嗰個用 Python 寫嘅感知機嘅擴充版，用一個簡單嘅演算法教個感知機學識邏輯或：

import numpy, random, os # 指明要用邊柞指令。
a = 1 # 設一個數做學習率。
bias = 1 # 設定 bias 值
weights = [random.random(),random.random(),random.random()]
 設定三個權重值，每個都係一個隨機喺 0 同 1 之間揀嘅數值。

set 好嗮所有嘢喇，開始程式。

def Perceptron(input1, input2, output) : # 定義一個感知機，個感知機有兩個輸入同一個輸出。
   x = input1
   y = input2
   outputP = input1*weights[0]+input2*weights[1]+bias*weights[2] # 按照柞權重、輸入、同 bias 計個感知機嘅輸出係乜。
   if outputP > 0 :
      outputP = 1
   else :
      outputP = 0
   # 個感知機得兩個輸出值－「0」同「1」。

error = output - outputP # 計個誤差值－即係「實際輸出」同「個感知機俾嘅輸出」差幾遠。
   weights[0] += error * input1 * a 
   weights[1] += error * input2 * a
   weights[2] += error * bias * a
   # 按誤差值計吓，每個權重值要改變幾多。
   print(x, "or", y, "is : ", outputP) # 將輸入值同輸出值 show 出嚟俾個用家睇。

for i in range(50) :
   Perceptron(1,1,1)
   Perceptron(1,0,1)
   Perceptron(0,1,1)
   Perceptron(0,0,0)
 俾柞數據個感知機 run 好多次。由呢柞數據睇得出，數據所顯示嘅係一個邏輯或－當「是但一個輸入係 1」或者「兩個都係 1」嗰陣，個輸出要係「1」，而當「兩個都係 0」嗰陣，輸出要係「0」－「輸出係 1」 if 「第一個輸入係 1」 or 「第二個輸入係 1」。
 結果係，初頭嗰陣個感知機會犯錯，例如喺其中一個輸入係 1 另一個係 0 嗰陣俾 0 做輸出，但係慢慢學吓學吓，佢就變到識得做邏輯或噉嘅反應。

非監督式學習 

喺非監督式學習當中，個研究者會有一柞數據  俾個神經網絡處理，但係同監督式學習唔同嘅係，個研究者唔會明確噉話俾個神經網絡知佢做嘅預測係啱定錯－所以就嗌做「非監督」式學習。

非監督式學習最常見嘅用途係攞嚟做聚類分析。舉個例子說明，家吓有個生態學家想研究吓一個區域入面嗰啲樹傾向聚集喺啲乜嘢位置，佢可以坐直昇機或者用人造衛星影啲相返嚟，再記錄嗮嗰個區域入面每樖樹生喺邊個位，會得出一個數據庫，記錄嗮每樖樹喺 X 軸同 Y 軸嗰度嘅坐標。跟手佢就可能會想睇吓啲樹會唔會傾向聚集喺個區域入面嘅某啲位置。如果有某一柞嘅樹彼此之間距離近，又同佢哋以外嘅樹距離遠，噉就可以話佢係「聚埋一羣」，而聚類分析就正係用嚟分析一柞個案入面會唔會有幾羣個體係「彼此之間距離近，同羣以外嘅個體距離遠」嘅。

喺呢次研究入面，個生態學家唔會事先知道啲樹要點分羣，所以用唔到監督式學習，但係佢可以運用非監督式學習嚟整一個神經網絡幫佢手做呢個聚類分析。一個簡單嘅可能做法係好似以下噉：將浸輸入層設做「樖樹嘅坐標」，等啲隱藏層用每一樖樹嘅數據逐個逐個計吓，而浸輸出層就有5 粒人工神經細胞，喺每樖樹嘅運算之後都會有一粒輸出層神經細胞嘅啟動程度係大過其他嘅－所以個生態學家就可以按「喺將嗰樖樹嘅數據入咗落去個神經網絡度之後，邊粒輸出層神經細胞嘅啟動程度最大」為準則將啲樹分做聚類，而且佢仲有得按照分類結果分得好唔好，嚟計吓使唔使改變吓個神經網絡嗰啲參數－個神經網絡喺度進行學習。除咗噉，電腦科學界仲有第啲更加精良嘅演算法嚟做非監督式學習。

例子碼
想像一個做聚類分析，用四個變數將啲個案分做三類嘅神經網絡：個神經網絡有四個輸入同三個輸出；每個個案喺嗰四個變數上都會各有一個數值，而當用呢個四個數值做個神經網絡嘅輸入嗰陣，會令個神經網絡嗰三粒輸出細胞都各有一定程度嘅啟動－跟住視乎嗰個個案引致邊粒輸出細胞有最勁嘅啟動，就可以將個個案歸做三個類嘅其中一個，同埋更新啲權重嘅數值。以下係個神經網絡嘅 Python 源碼：

指明要用邊柞指令。
import numpy as np
import pandas as pd

由網站嗰度讀取數據集，將柞數據集擺喺 ds 嗰度。ds 會係一個表，列嗮每個個案同埋佢喺變數上嘅數值出嚟。
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
ds = pd.read_csv(url, names=names)
ds.head()

整柞 list，並且將所有數字 normalize，每個 list 包含咗所有個案喺一個變數上嘅數值，個數據集有四個用嚟將個案分類嘅變數，所以有四個 list。
list_sl=[]
list_sw=[]
list_pl=[]
list_pw=[]
for sl in ds['sepal length']:
    sl = (sl-min(ds['sepal length'])) / (max(ds['sepal length'])-min(ds['sepal length']))
    list_sl.append(sl)
for sw in ds['sepal width']:
    sw = (sw-min(ds['sepal width'])) / (max(ds['sepal width'])-min(ds['sepal width']))
    list_sw.append(sw)    
for pl in ds['petal length']:
    pl = (pl-min(ds['petal length'])) / (max(ds['petal length'])-min(ds['petal length']))
    list_pl.append(pl)
for pw in ds['petal width']:
    pw = (pw-min(ds['petal width'])) / (max(ds['petal width'])-min(ds['petal width']))
    list_pw.append(pw) 

X 係一個 array，當中每個組成元素係一個個案喺四個變數上嘅數值。
X = np.array(list(zip(list_sl,list_sw, list_pl, list_pw)) )

設定啲參數
nc = 3         # 要將啲個案分做三類
W = []         # 儲住柞每粒輸出層細胞嘅權重嘅向量
M = len(X)     # 有幾多個個案
N = len(X[0])  # 有幾多個變數

呢個子程式會俾出隨機產生嘅數字，用嚟初始化嗰陣產生柞權重值。
def get_weights():
    y = np.random.random() * (2.0 / np.sqrt(M))
    return 0.5 - (1 / np.sqrt(M)) + y

產生權重，並且將柞數值放入去 W 嗰度。
for i in range(nc): # 三粒輸出層細胞，所以 W 有三個元件。
    W.append(list()) 
    for j in range(N): # 每粒輸出細胞又有四個子元件做權重，即係話每當個網絡讀到一個個案喺四個變數上嘅數值嗰時，三粒輸出層細胞都會分別有若干程度嘅啟動。
        W[i].append(get_weights() * 0.5)

一個子程式；呢個子程式會計出兩個點之間嘅距離。呢個子程式會俾個距離做輸出。
def distance(w, x):
    r = 0
    for i in range(len(w)):
        r = r + (w[i] - x[i])*(w[i] - x[i])

r = np.sqrt(r)
    return r

又一個子程式；呢個子程式會搵出 x 入面邊個向量同 W 呢個 array 當中嘅向量最接近。
def Findclosest(W, x):
    wm = W[0]
    r = distance(wm, x)
    i = 0
    i_n = i
    for w in W:
        if distance(w, x) < r:
            r = distance(w, x)
            wm = w
            i_n = i
        i = i + 1

return (wm, i_n)

將個權重向量 show 出嚟睇。
print(W)

la = 0.3    # λ 系數
dla = 0.05  # Δλ

while la >= 0: # 重複係噉做以下嘅作業，做到 la 變成 0 以下為止。
    for k in range(10):
        for x in X: # For X 入面每個元件 x，搵出 W 入面邊個最近 x，跟住...
            wm = Findclosest(W, x)[0]
            for i in range(len(wm)): # 再調較柞權重
                wm[i] = wm[i] + la * (x[i] - wm[i]) 

la = la - dla

Data = list() # 整個叫「data」嘅新 list 出嚟。

for i in range(len(W)):
    Data.append(list())

dfList = ds['class'].as_matrix()

DS = list() # 整個叫「DS」嘅新 list 出嚟。呢個 list 每個元件係一個個案由個神經網絡分嘅類同埋佢個實際類。
i = 0
for x in X: # For X 入面每個元件，做以下嘅指令。
    i_n = Findclosest(W, x)[1]
    Data[i_n].append(x)
    DS.append([i_n, dfList[i]])
    i = i + 1

print (DS) # Show 個 DS 出嚟睇。結果係，個神經網絡做嘅分類同數據集嘅分類好一致。

強化學習 

強化學習係機械學習嘅一種，喺機械人設計上好有用。喺神經網絡強化學習嘅過程裏面，個研究者唔會有個數據庫  俾個神經網絡睇同跟住學，而係俾個神經網絡係噉同佢周圍嘅環境互動：喺每一個時間點 ，個神經網絡會產生一個用輸出嘅數字表示嘅動作，而跟住佢周圍個環境會俾返一啲回輸－簡單啲講就係話返俾個神經網絡聽佢個動作係咪一個好嘅決定，然後個網絡會有方法知到呢個結果。而個神經網絡跟手就會根據呢個回輸計吓，睇吓要點樣改佢嗰啲參數先可以令到下次佢做行動嗰陣得到正面回應嘅機會率高啲－而上述嘅呢個例子就有可能可以攞嚟教一個機械人行路。

人工神經網絡強化學習嘅過程大致可以想像成噉：
個神經網絡俾出一個輸出，；
個環境會根據佢嘅內部運作法則決定回輸，，係乜；
個神經網絡會根據  決定係咪要修改自己內部嘅參數同埋要點改；
返去步驟 1。

個神經網絡內部要有一個演算法，個演算法要用  做輸入，然後輸出「內部參數要變幾多」。

Q-學習 

Q-學習係強化學習上常用嘅一種演算法，用 Q-學習嘅人工神經網絡會儲住一個數據庫，個數據庫包含咗一大柞「狀態－行動」嘅配對，每當有個行動喺某個狀態之下引致正面結果嗰陣，相應嘅狀態－行動配對嘅數值會上升，反之就下降－而當個神經網絡撞到類似狀態嗰陣，就可以靠「邊個行動同呢個狀態嘅配對數值最大」做準則決定採取乜嘢行動。 Q-學習嘅核心係以下嘅更新算式：

，當中
 係狀態  同行動  之間嘅配對值；
 係學習率；
 係環境所俾嘅回輸，數值視乎  等因素而定。
呢條式表達嘅係，喺每一個時間點， 都有可能改變數值，而佢新數值由「佢之前個數值」同「環境所俾嘅回輸」話事，學習率就主宰咗「環境所俾嘅回輸」對佢有幾大影響力。

一個簡單－得兩個行動同兩個狀態－嘅 Q-學習神經網絡嘅演算法例子大致上如下：
初始化，將行動 1 粒神經細胞嘅權重， 同 ，設做隨機揀嘅數值，而行動 2 嘅相應神經細胞， 同 ，設做同一數值，以是但一個狀態開始系統模擬，「發生咗幾多次狀態改變」設做 0，將  嘅最大值設做一個大嘅數值。
 係現時狀態， 就係下一個狀態。
評估每個 Q-因素。
更新啲權重，等下次再撞到  噉嘅狀態嗰陣，個網絡比較有機會作出能夠帶嚟回報嘅行動。
將  數值提升 1，除非  大過或者等如 ，返去步驟 2。

進階變種 

學界有好多進階嘅神經網絡類型。呢啲網絡類型複雜過普通嘅前饋同遞迴網絡，好多時每種都係專門攞嚟處理某啲特定類型嘅問題嘅，好似係：

圖像處理 

人工神經網絡可以攞嚟幫電腦處理傳統演算法好難搞得掂嘅圖像。想像以下一個噉嘅神經網絡：佢係一個卷積神經網絡，輸入層有若干粒細胞，若干浸隱藏層，同一浸輸出層；輸入層每粒細胞代表咗一個像素，第一浸隱藏層就每粒細胞相應輸入層嘅某一橛仔－例如第一粒隱藏層細胞負責處理輸入層最左上角嗰 3 x 3 粒像素大嘅一橛仔，而最後輸出層有 10 粒細胞，每一粒輸出層細胞代表咗一個類別；個神經網絡有個演算法能夠由一幅圖片嗰度讀取輸入，所以每當佢讀到一幅圖片嗰陣，佢嘅神經細胞會跟住輸入層嘅啟動，最後輸出層嘅規律就可能提供到「幅圖屬於邊個類別」嘅資訊。

喺電腦入面，一幅圖片可以用數字代表：一幅圖片由好多粒細點組成，每粒細點都有特定嘅色水；用三原色模式想像嘅話，任何色水都可以由紅、綠、同藍呢三隻原色砌出嚟，所以一個點嘅色水可以用  噉嘅陣列代表－當中  表示嗰一點嘅紅色量， 代表嗰點嘅綠色量，而  代表嗰點嘅藍色量，而一幅圖片喺部電腦內部可以用類似噉嘅陣列代表：

，表示第一個點有 207 個單位咁多嘅紅、229 咁多個單位嘅綠、同 78 個單位咁多嘅藍，如此類推。

例演算法
一個可以攞嚟將圖片分類嘅卷積神經網絡演算法大致上如下：
指定「有啲乜嘢類別」同埋啲輸入嘅圖片有幾多像素等嘅資訊；
由目標位置嗰度讀取圖片數據，得到每幅圖片嘅相應陣列，而且每幅圖片都要有個已知嘅類別；
做一啲事前處理，等啲圖片方便由神經網絡處理；
建立一個卷積神經網絡，輸入層嘅細胞係圖片每粒像素嘅色水，而輸出層就係幅圖片「屬乜嘢類別」；
重複噉做監督式學習嘅基本過程。

最後如果順利嘅話，呢個神經網絡就會曉分一幅圖片到底係屬於 A 類定 B 類。

深度學習 

喺廿一世紀嘅社會，互聯網嘅發展令到資訊嘅傳播變得好快，極大量嘅數據喺互聯網上流動，呢啲數據可以好有用，但係因為量大，所以用傳統嘅數據分析法好難處理，而大數據就係一門廿一世紀初嘅新興領域，專門研究點樣做自動化嘅數據分析同埋用呢啲分析方法嚟到由大量嘅數據當中提取有用嘅資訊，而人工神經網絡－尤其係深度信念網絡－就係大數據處理上常用嘅一種工具。

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

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

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

長短期記憶 

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

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

一粒 LSTM 嘅人工神經細胞除咗主細胞之外仲有幾個元件：
輸出門、
輸入門、同埋
遺忘門。

呢三道門當中每一道都可以當係一粒子細胞噉嚟睇，有各自嘅啟動程度值，會受到第啲人工神經細胞影響，決定自身嘅啟動程度，再按自身嘅啟動程度睇吓係咪要「做嘢」。輸出門「做嘢」嘅話會左右甚至封鎖粒細胞嘅輸出，輸入門「做嘢」嘅話會左右甚至封鎖粒細胞嘅輸入，而遺忘門「做嘢」嗰陣就可以完全刪除粒主細胞入面嘅資訊－即係重設粒主細胞嘅啟動值或者權重等。研究表明咗，LSTM 網絡可以用嚟教電腦做一啲要求長期記憶嘅作業，例如係閱讀理解呀噉。

應用 
人工神經網絡能夠模擬輸入同輸出之間一啲非線性嘅關係，所以好多時都能夠有效噉對現實世界嘅現象做出預測。比較普通嘅前饋同遞迴神經網絡都有好廣泛嘅用途：
醫療診斷：喺醫療上，人工神經網絡能夠幫手對病人做診斷。曉寫程式嘅醫療人員可以製作一啲人工神經網絡，輸入設做「病徵」，而輸出設做「診斷」，再用已有嘅醫療數據俾啲網絡做監督式學習，就會造出能夠基於病徵預測「診斷應該係乜」嘅網絡。事實係，廿一世紀初嘅學界經已有曉有效噉基於病人資訊診斷肺癌、大腸癌、同前列腺癌等病症嘅神經網絡。有啲神經網絡仲曉靠有關細胞形狀嘅數據嚟分辨邊啲癌細胞係比較惡性嘅。
電腦保安：電腦保安係一個研究點樣確保電腦同互聯網安全嘅領域，包含咗對電腦病毒等惡意程式嘅應付同埋探測黑客等等嘅課題。人工神經網絡嘅技術可以用嚟教電腦分辨邊啲程式係惡意程式、搵出搞破壞嘅人嘅戶口、探測邊啲網址具有威脅性、同埋探測信用卡詐騙呀噉；例：用一個監督式學習嘅神經網絡，輸入設做個網站嘅特徵而輸出設做「係咪惡意網站」。
遊戲控制：有遊戲人工智能方面嘅研究者指出，人工神經網絡能夠相當準確噉預測一個玩家有幾鍾意隻遊戲；於是佢哋就提議一個做法，將一隻電子遊戲嘅遊戲程式編寫成喺每一個時間點，都會用一個神經網絡按遊戲參數估計玩家有幾享受隻遊戲，並且計算「享受度」隨「遊戲參數」嘅偏導數，然後個程式會按呢份資訊調整隻遊戲；實驗結果顯示，噉嘅做法能夠提升一隻遊戲嘅玩家享受程度。
結構分析：喺建築學同結構工程學上，設計一棟建築物嗰陣需要分析吓棟嘢能唔能夠穩陣噉企到喺度，而建築師等嘅人員可以將有關過去嘅建築物嘅數據攞嚟幫個神經網絡做監督式學習，用嚟預測一楝建築物有幾穩陣。
其他：
教電腦玩遊戲；
圖形辨識；
金融；
機械翻譯。
... 等等。

批評

「黑盒」問題 

有好多神經網絡相關領域嘅學者批評神經網絡係「黑盒」。人類用個腦諗完嘢解決完問題之後，曉將自己嘅思考過程口頭報告返出嚟。但係一個神經網絡唔會識做呢樣嘢，唔會話到俾研究者聽佢經過啲乜嘢思考過程先能夠達到佢所俾嘅輸出。所以有人將神經網絡比喻做一個黑盒－就算佢嘅輸出係準確嘅都好，個研究者都淨係知個神經網絡嘅輸入同輸出，冇辦法知道當中嘅思考過程。即係話對於「個神經網絡俾嘅答案點解係啱」呢條問題，目前唯一嘅答覆係「因為一部醒過人類嘅系統俾咗個答案出嚟」，雖然呢點唔損害神經網絡喺實用上預測現象嘅能力，但噉表示神經網絡嘅可解釋度低得好交關，令好多學者都覺得難以接受。因為噉，有好多科學家都致力研究點樣先可以拆解一個經歷咗訓練、做緊準確預測嘅神經網絡。

理論特性 
雖然話人工神經網絡成個諗頭係建基於生物神經網絡嘅，但查實佢喺好多地方都同生物神經網絡好唔同，例如：
拓撲特徵：一個普通嘅人工神經網絡會分開做若干層，而且做起運算上嚟好多時都係逐層逐層噉做嘅，但生物嘅神經網絡通常都冇明顯分層，而且做起運算上嚟係成個網絡各部份同時間噉做嘅。有關唔分層嘅神經網絡，可以睇霍菲特網絡。
速度：喺生物神經網絡當中，訊號嘅速度唔淨只影響個網絡嘅運算速度，仲可以影響所傳送嘅資訊嘅內容，例如係人類嘅眼噉，眼嘅感光神經細胞會向個腦塊視覺皮層傳訊號，話俾個腦知睇到啲乜，而神經科學上嘅研究表明咗，一粒感光神經細胞射訊號嘅頻率係用嚟俾個腦知道光嘅強度嘅；相比之下，一個普通嘅人工神經網絡之中訊號嘅速度同頻率淨係會影響個網絡嘅運算速度。
容錯：喺生物神經網絡當中，一份資訊係儲多咗幾份嘅，所以個網絡能夠容許訊號傳播上嘅出錯，就算傳訊號嘅過程裏面個訊號走咗少少樣，都唔會造成記憶損失，而且生物神經網絡冇「中央」部份，就算個腦某部份受損，個腦嘅第啲部份好多時都有能力自己改變等自己可以做埋受損嗰部份本嚟做嘅工作。相比之下，人工神經網絡一般冇呢啲能力。
反向傳播：生物神經網絡並冇任何類似反向傳播嘅機制。

因為呢啲原因，科學界普遍質疑到底人工神經網絡可唔可以喺人工智能等嘅領域上攞嚟模仿人類同第啲動物所展現嘅智能。

硬件問題 
廿一世紀初，大同有效嘅人工神經網絡要求相當多嘅運算資源。動物嘅腦嘅能量效率好高，例如普通大人嘅腦平均用大約 20 瓦嘅能量；相比之下，廿一世紀初嘅 GPU 閒閒地要用幾百瓦嘅能量，而且能量流失好勁，行起上嚟產生嘅熱可以令塊 GPU 熱到攝氏 50 至 80 度。由此可見，廿一世紀初嘅人工神經網絡喺能量嘅使用效率上苲過生物神經網絡好多，而事實係，到咗 2019 年為止都仲係冇方法用近似生物神經網絡嘅能量效率嘅方法做一個模擬人腦嘅人工神經網絡。

有電腦科學家指出，廿一世紀初人工神經網絡之所以會再興起，好大程度上係因為電腦硬件上嘅進步：喺 1991 至 2015 年間，GPU 嘅運算力提高咗成 100 萬倍咁多，令到反向傳播算法變成有可能－打前嘅電腦因為運算速度低，可能同一個得幾粒細胞嘅神經網絡做反向傳播都要做幾日咁耐，所以實際應用上根本冇用。而運算能力上嘅進步令到本嚟要用成幾個月先做完嘅人工神經網絡學習喺幾日之間就做得嗮。

簡史

起源 
人工神經網絡呢條橋最先係由美國神經科學家和倫·麥扣羅同邏輯學家華特·畢特斯喺 1943 年提出嘅，佢哋基於數學方法同一種叫做閾值邏輯嘅演算法創造咗神經網絡嘅基本計算模型，令到科學界對神經網絡嘅研究分植咗做兩個唔同嘅子領域，一個專係分析大腦裏面嘅生物學過程，而另一個就研究神經網絡可以點樣應用落去人工智能嗰度，正式開展現代人工神經網絡研究。

海伯學習 

1950 年代仲開始有研究者受海伯理論啟發整人工神經網絡：喺 1940 年代尾，加拿大心理學家當奴海伯諗咗個假說出嚟描述神經細胞點隨住隻動物進行學習而有所改變，呢個後嚟會演變成所謂嘅海伯理論。海伯理論嘅基本原則係，兩粒神經細胞愈係會一齊射神經訊號，就愈係會有強嘅連繫，呢個理論後尾演變做描述長期增強作用嘅模型。喺 1954 年，美國有一啲科學家用運算機械去模擬一個跟住海伯定律嚟行嘅神經網絡，而呢種嘗試仲有第啲科學家跟住做，確立咗人類用運算機械嚟模擬神經網絡嘅做法。

不過呢個時期嘅人工神經網絡受當時啲電腦嘅運算能力局限：美國心理學家法蘭·羅新伯拉特喺 1956 年創造咗感知機呢個演算法嚟去做模式識別，用簡單嘅加減實現咗一個兩層嘅電腦學習網絡。羅新伯拉特仲用數學符號描述咗啲基本感知機冇嘅迴路，例如係異或迴路噉，呢啲迴路要打後電腦運算能力提高先有得用運算機械實現；後尾烏克蘭裔蘇聯數學家阿力斯·伊凡卡諾高同佢嘅同事史上首次成功噉整咗個行到嘅多層神經網絡出嚟。雖然神經網絡學界有呢啲成就，但係因為嗰陣啲電腦運算能力低得滯，搞到好多時啲科學家都冇辦法真係攞部電腦去模擬佢哋啲神經網絡模型，令到對人工神經網絡嘅研究停滯咗成十幾年。

反向傳播興起 
後嚟喺 1975 年出現咗個關鍵性嘅進展－反向傳播演算法。呢個演算法有效噉解決咗異或嘅問題同埋多層神經網絡要點樣訓練嘅問題，令到對神經網絡嘅研究開始復甦。喺廿世紀 80 年代中，科學界開始興用分散式並列處理模型嚟模擬人腦當中嘅過程，呢種模型將人腦當做一個同一時間處理大量資訊嘅物體，而一班美國心理學家詳細噉論述咗點樣將呢種模型用落去用電腦模擬神經活動嗰度。

廿一世紀 
打後嘅 1990 年至 2000 年代係人工神經網絡受挫同再起嘅時期：當時支援向量機同第啲簡單過神經網絡嘅運算方法喺機械學習上嘅人氣超越咗神經網絡，搞到神經網絡研究又稍微低沉咗一輪，但係喺 2000 年代尾興起嘅深度學習又重新激發咗人對神經網絡嘅興趣。

到咗 2010 年代，運算力勁嘅電腦同埋人工智能領域嘅展開令到世界各地嘅科學家都開始睇重神經網絡研究。神經網絡俾人廣泛噉用嚟解決一啲之前以為係電腦冇可能解到問題，例如係翻譯、視覺、數學上嘅解難甚至乎係藝術創作噉，仲開始有啲國際比賽俾啲科學家鬥用神經網絡嚟解決難題。總括嚟講，廿一世紀初嘅神經網絡學界可以話係多姿多采。

相關領域 

認知科學
神經科學
電腦科學
人工智能
機械學習
機械人學
資訊理論

通用近似定理
多層感知機
深度學習
演算法
腦
神經編碼
複雜系統
語義網絡

文獻 

Bhadeshia H. K. D. H. (1999). "'Neural Networks in Materials Science" (PDF). ISIJ International. 39 (10): 966–979. doi:10.2355/isijinternational.39.966.
Bishop, Christopher (1995). Neural networks for pattern recognition. Clarendon Press. ISBN 978-0198538493. OCLC 33101074.
Borgelt, Christian (2003). Neuro-Fuzzy-Systeme: von den Grundlagen künstlicher Neuronaler Netze zur Kopplung mit Fuzzy-Systemen. Vieweg. ISBN 9783528252656. OCLC 76538146.
Coolen, A. C. (1998). A beginner's guide to the mathematics of neural networks (PDF). In Concepts for Neural Networks (pp. 13-70). Springer, London.
Cybenko, G.V. (2006). "Approximation by Superpositions of a Sigmoidal function". In van Schuppen, Jan H. (ed.). Mathematics of Control, Signals, and Systems. Springer International. pp. 303–314.
Dewdney, A. K. (1997). Yes, we have no neutrons: an eye-opening tour through the twists and turns of bad science. New York: Wiley. ISBN 9780471108061. OCLC 35558945.
Duda, Richard O.; Hart, Peter Elliot; Stork, David G. (2001). Pattern classification (2 ed.). Wiley. ISBN 978-0471056690. OCLC 41347061.
Egmont-Petersen, M.; de Ridder, D.; Handels, H. (2002). "Image processing with neural networks – a review". Pattern Recognition. 35 (10): 2279–2301. CiteSeerX 10.1.1.21.5444. doi:10.1016/S0031-3203(01)00178-9.
Fahlman, S.; Lebiere, C (1991). "The Cascade-Correlation Learning Architecture" (PDF). 
created for National Science Foundation, Contract Number EET-8716324, and Defense Advanced Research Projects Agency (DOD), ARPA Order No. 4976 under Contract F33615-87-C-1499.
Gurney, Kevin (1997). An introduction to neural networks. UCL Press. ISBN 978-1857286731. OCLC 37875698.
Haykin, Simon S. (1999). Neural networks: a comprehensive foundation. Prentice Hall. ISBN 978-0132733502. OCLC 38908586.
Hertz, J.; Palmer, Richard G.; Krogh, Anders S. (1991). Introduction to the theory of neural computation. Addison-Wesley. ISBN 978-0201515602. OCLC 21522159.
Information theory, inference, and learning algorithms. Cambridge University Press. 25 September 2003. ISBN 9780521642989. OCLC 52377690.
Krishnan, G. P., Tadros, T., Ramyaa, R., & Bazhenov, M. (2019). Biologically inspired sleep algorithm for artificial neural networks (PDF). arXiv preprint arXiv:1908.02240.
Kruse, Rudolf; Borgelt, Christian; Klawonn, F.; Moewes, Christian; Steinbrecher, Matthias; Held, Pascal (2013). Computational intelligence: a methodological introduction. Springer. ISBN 9781447150121. OCLC 837524179.
Lawrence, Jeanette (1994). Introduction to neural networks: design, theory and applications. California Scientific Software. ISBN 978-1883157005. OCLC 32179420.
MacKay, David, J.C. (2003). Information Theory, Inference, and Learning Algorithms (PDF). Cambridge University Press. ISBN 9780521642989.
Masters, Timothy (1994). Signal and image processing with neural networks: a C++ sourcebook. J. Wiley. ISBN 978-0471049630. OCLC 29877717.
Misra, J., & Saha, I. (2010). Artificial neural networks in hardware: A survey of two decades of progress (PDF). Neurocomputing, 74(1-3), 239-255.
Ripley, Brian D. (2007). Pattern Recognition and Neural Networks. Cambridge University Press. ISBN 978-0-521-71770-0.
Siegelmann, H.T.; Sontag, Eduardo D. (1994). "Analog computation via neural networks". Theoretical Computer Science. 131 (2): 331–360. doi:10.1016/0304-3975(94)90178-3.
Smith, Murray (1993). Neural networks for statistical modeling. Van Nostrand Reinhold. ISBN 978-0442013103. OCLC 27145760.
Wasserman, Philip D. (1993). Advanced methods in neural computing. Van Nostrand Reinhold. ISBN 978-0442004613. OCLC 27429729.

攷

拎 

A brief introduction to Neural Networks (PDF)，一本 250 頁長嘅大學教科書，教有關人工神經網絡嘅基本知識。
An Introduction to Deep Neural Networks.
A Tutorial of Neural Network in Excel.

A Concise Introduction to Machine Learning with Artificial Neural Networks
Neural Networks for Machine Learning – a course by Geoffrey Hinton
Deep Learning
Interactive visualization of neural work
Neural Networks and Deep Learning.

類:神經科學
類:資訊科學
類:人工智能
類:機械學習

類:電腦科學