導航:首頁 > 網路共享 > 哪個邏輯不能用單層神經網路實現

哪個邏輯不能用單層神經網路實現

發布時間:2023-09-22 14:21:27

1. 神經網路模型-27種神經網路模型們的簡介

​ 

【1】Perceptron(P) 感知機

【1】感知機 

感知機是我們知道的最簡單和最古老的神經元模型,它接收一些輸入,然後把它們加總,通過激活函數並傳遞到輸出層。

【2】Feed Forward(FF)前饋神經網路

 【2】前饋神經網路

前饋神經網路(FF),這也是一個很古老的方法——這種方法起源於50年代。它的工作原理通常遵循以下規則:

1.所有節點都完全連接

2.激活從輸入層流向輸出,無回環

3.輸入和輸出之間有一層(隱含層)

在大多數情況下,這種類型的網路使用反向傳播方法進行訓練。

【3】Radial Basis Network(RBF) RBF神經網路

 【3】RBF神經網路

RBF 神經網路實際上是 激活函數是徑向基函數 而非邏輯函數的FF前饋神經網路(FF)。兩者之間有什麼區別呢?

邏輯函數--- 將某個任意值映射到[0 ,... 1]范圍內來,回答「是或否」問題。適用於分類決策系統,但不適用於連續變數。

相反, 徑向基函數--- 能顯示「我們距離目標有多遠」。 這完美適用於函數逼近和機器控制(例如作為PID控制器的替代)。

簡而言之,RBF神經網路其實就是, 具有不同激活函數和應用方向的前饋網路 。

【4】Deep Feed Forword(DFF)深度前饋神經網路

【4】DFF深度前饋神經網路 

DFF深度前饋神經網路在90年代初期開啟了深度學習的潘多拉盒子。 這些依然是前饋神經網路,但有不止一個隱含層 。那麼,它到底有什麼特殊性?

在訓練傳統的前饋神經網路時,我們只向上一層傳遞了少量的誤差信息。由於堆疊更多的層次導致訓練時間的指數增長,使得深度前饋神經網路非常不實用。 直到00年代初,我們開發了一系列有效的訓練深度前饋神經網路的方法; 現在它們構成了現代機器學習系統的核心 ,能實現前饋神經網路的功能,但效果遠高於此。

【5】Recurrent Neural Network(RNN) 遞歸神經網路

【5】RNN遞歸神經網路 

RNN遞歸神經網路引入不同類型的神經元——遞歸神經元。這種類型的第一個網路被稱為約旦網路(Jordan Network),在網路中每個隱含神經元會收到它自己的在固定延遲(一次或多次迭代)後的輸出。除此之外,它與普通的模糊神經網路非常相似。

當然,它有許多變化 — 如傳遞狀態到輸入節點,可變延遲等,但主要思想保持不變。這種類型的神經網路主要被使用在上下文很重要的時候——即過去的迭代結果和樣本產生的決策會對當前產生影響。最常見的上下文的例子是文本——一個單詞只能在前面的單詞或句子的上下文中進行分析。

【6】Long/Short Term Memory (LSTM) 長短時記憶網路

【6】LSTM長短時記憶網路 

LSTM長短時記憶網路引入了一個存儲單元,一個特殊的單元,當數據有時間間隔(或滯後)時可以處理數據。遞歸神經網路可以通過「記住」前十個詞來處理文本,LSTM長短時記憶網路可以通過「記住」許多幀之前發生的事情處理視頻幀。 LSTM網路也廣泛用於寫作和語音識別。

存儲單元實際上由一些元素組成,稱為門,它們是遞歸性的,並控制信息如何被記住和遺忘。

【7】Gated Recurrent Unit (GRU)

 【7】GRU是具有不同門的LSTM

GRU是具有不同門的LSTM。

聽起來很簡單,但缺少輸出門可以更容易基於具體輸入重復多次相同的輸出,目前此模型在聲音(音樂)和語音合成中使用得最多。

實際上的組合雖然有點不同:但是所有的LSTM門都被組合成所謂的更新門(Update Gate),並且復位門(Reset Gate)與輸入密切相關。

它們比LSTM消耗資源少,但幾乎有相同的效果。

【8】Auto Encoder (AE) 自動編碼器

 【8】AE自動編碼器

Autoencoders自動編碼器用於分類,聚類和特徵壓縮。

當您訓練前饋(FF)神經網路進行分類時,您主要必須在Y類別中提供X個示例,並且期望Y個輸出單元格中的一個被激活。 這被稱為「監督學習」。

另一方面,自動編碼器可以在沒有監督的情況下進行訓練。它們的結構 - 當隱藏單元數量小於輸入單元數量(並且輸出單元數量等於輸入單元數)時,並且當自動編碼器被訓練時輸出盡可能接近輸入的方式,強制自動編碼器泛化數據並搜索常見模式。

【9】Variational AE (VAE)  變分自編碼器

 【9】VAE變分自編碼器

變分自編碼器,與一般自編碼器相比,它壓縮的是概率,而不是特徵。

盡管如此簡單的改變,但是一般自編碼器只能回答當「我們如何歸納數據?」的問題時,變分自編碼器回答了「兩件事情之間的聯系有多強大?我們應該在兩件事情之間分配誤差還是它們完全獨立的?」的問題。

【10】Denoising AE (DAE) 降噪自動編碼器

 【10】DAE降噪自動編碼器

雖然自動編碼器很酷,但它們有時找不到最魯棒的特徵,而只是適應輸入數據(實際上是過擬合的一個例子)。

降噪自動編碼器(DAE)在輸入單元上增加了一些雜訊 - 通過隨機位來改變數據,隨機切換輸入中的位,等等。通過這樣做,一個強制降噪自動編碼器從一個有點嘈雜的輸入重構輸出,使其更加通用,強制選擇更常見的特徵。

【11】Sparse AE (SAE) 稀疏自編碼器

【11】SAE稀疏自編碼器 

稀疏自編碼器(SAE)是另外一個有時候可以抽離出數據中一些隱藏分組樣試的自動編碼的形式。結構和AE是一樣的,但隱藏單元的數量大於輸入或輸出單元的數量。

【12】Markov Chain (MC) 馬爾科夫鏈

 【12】Markov Chain (MC) 馬爾科夫鏈

馬爾可夫鏈(Markov Chain, MC)是一個比較老的圖表概念了,它的每一個端點都存在一種可能性。過去,我們用它來搭建像「在單詞hello之後有0.0053%的概率會出現dear,有0.03551%的概率出現you」這樣的文本結構。

這些馬爾科夫鏈並不是典型的神經網路,它可以被用作基於概率的分類(像貝葉斯過濾),用於聚類(對某些類別而言),也被用作有限狀態機。

【13】Hopfield Network (HN) 霍普菲爾網路

【13】HN霍普菲爾網路 

霍普菲爾網路(HN)對一套有限的樣本進行訓練,所以它們用相同的樣本對已知樣本作出反應。

在訓練前,每一個樣本都作為輸入樣本,在訓練之中作為隱藏樣本,使用過之後被用作輸出樣本。

在HN試著重構受訓樣本的時候,他們可以用於給輸入值降噪和修復輸入。如果給出一半圖片或數列用來學習,它們可以反饋全部樣本。

【14】Boltzmann Machine (BM) 波爾滋曼機

【14】 BM 波爾滋曼機 

波爾滋曼機(BM)和HN非常相像,有些單元被標記為輸入同時也是隱藏單元。在隱藏單元更新其狀態時,輸入單元就變成了輸出單元。(在訓練時,BM和HN一個一個的更新單元,而非並行)。

這是第一個成功保留模擬退火方法的網路拓撲。

多層疊的波爾滋曼機可以用於所謂的深度信念網路,深度信念網路可以用作特徵檢測和抽取。

【15】Restricted BM (RBM) 限制型波爾滋曼機

【15】 RBM 限制型波爾滋曼機 

在結構上,限制型波爾滋曼機(RBM)和BM很相似,但由於受限RBM被允許像FF一樣用反向傳播來訓練(唯一的不同的是在反向傳播經過數據之前RBM會經過一次輸入層)。

【16】Deep Belief Network (DBN) 深度信念網路

【16】DBN 深度信念網路 

像之前提到的那樣,深度信念網路(DBN)實際上是許多波爾滋曼機(被VAE包圍)。他們能被連在一起(在一個神經網路訓練另一個的時候),並且可以用已經學習過的樣式來生成數據。

【17】Deep Convolutional Network (DCN) 深度卷積網路

【17】 DCN 深度卷積網路

當今,深度卷積網路(DCN)是人工神經網路之星。它具有卷積單元(或者池化層)和內核,每一種都用以不同目的。

卷積核事實上用來處理輸入的數據,池化層是用來簡化它們(大多數情況是用非線性方程,比如max),來減少不必要的特徵。

他們通常被用來做圖像識別,它們在圖片的一小部分上運行(大約20x20像素)。輸入窗口一個像素一個像素的沿著圖像滑動。然後數據流向卷積層,卷積層形成一個漏斗(壓縮被識別的特徵)。從圖像識別來講,第一層識別梯度,第二層識別線,第三層識別形狀,以此類推,直到特定的物體那一級。DFF通常被接在卷積層的末端方便未來的數據處理。

【18】Deconvolutional Network (DN) 去卷積網路

 【18】 DN 去卷積網路

去卷積網路(DN)是將DCN顛倒過來。DN能在獲取貓的圖片之後生成像(狗:0,蜥蜴:0,馬:0,貓:1)一樣的向量。DNC能在得到這個向量之後,能畫出一隻貓。

【19】Deep Convolutional Inverse Graphics Network (DCIGN) 深度卷積反轉圖像網路

【19】 DCIGN 深度卷積反轉圖像網路

深度卷積反轉圖像網路(DCIGN),長得像DCN和DN粘在一起,但也不完全是這樣。

事實上,它是一個自動編碼器,DCN和DN並不是作為兩個分開的網路,而是承載網路輸入和輸出的間隔區。大多數這種神經網路可以被用作圖像處理,並且可以處理他們以前沒有被訓練過的圖像。由於其抽象化的水平很高,這些網路可以用於將某個事物從一張圖片中移除,重畫,或者像大名鼎鼎的CycleGAN一樣將一匹馬換成一個斑馬。

【20】Generative Adversarial Network (GAN) 生成對抗網路

 【20】 GAN 生成對抗網路

生成對抗網路(GAN)代表了有生成器和分辨器組成的雙網路大家族。它們一直在相互傷害——生成器試著生成一些數據,而分辨器接收樣本數據後試著分辨出哪些是樣本,哪些是生成的。只要你能夠保持兩種神經網路訓練之間的平衡,在不斷的進化中,這種神經網路可以生成實際圖像。

【21】Liquid State Machine (LSM) 液體狀態機

 【21】 LSM 液體狀態機

液體狀態機(LSM)是一種稀疏的,激活函數被閾值代替了的(並不是全部相連的)神經網路。只有達到閾值的時候,單元格從連續的樣本和釋放出來的輸出中積累價值信息,並再次將內部的副本設為零。

這種想法來自於人腦,這些神經網路被廣泛的應用於計算機視覺,語音識別系統,但目前還沒有重大突破。

【22】Extreme  Learning Machine (ELM) 極端學習機

【22】ELM 極端學習機 

極端學習機(ELM)是通過產生稀疏的隨機連接的隱藏層來減少FF網路背後的復雜性。它們需要用到更少計算機的能量,實際的效率很大程度上取決於任務和數據。

【23】Echo State Network (ESN) 回聲狀態網路

【23】 ESN 回聲狀態網路

回聲狀態網路(ESN)是重復網路的細分種類。數據會經過輸入端,如果被監測到進行了多次迭代(請允許重復網路的特徵亂入一下),只有在隱藏層之間的權重會在此之後更新。

據我所知,除了多個理論基準之外,我不知道這種類型的有什麼實際應用。。。。。。。

【24】Deep Resial Network (DRN) 深度殘差網路

​【24】 DRN 深度殘差網路 

深度殘差網路(DRN)是有些輸入值的部分會傳遞到下一層。這一特點可以讓它可以做到很深的層級(達到300層),但事實上它們是一種沒有明確延時的RNN。

【25】Kohonen Network (KN) Kohonen神經網路

​ 【25】 Kohonen神經網路

Kohonen神經網路(KN)引入了「單元格距離」的特徵。大多數情況下用於分類,這種網路試著調整它們的單元格使其對某種特定的輸入作出最可能的反應。當一些單元格更新了, 離他們最近的單元格也會更新。

像SVM一樣,這些網路總被認為不是「真正」的神經網路。

【26】Support Vector Machine (SVM)

​【26】 SVM 支持向量機 

支持向量機(SVM)用於二元分類工作,無論這個網路處理多少維度或輸入,結果都會是「是」或「否」。

SVM不是所有情況下都被叫做神經網路。

【27】Neural Turing Machine (NTM) 神經圖靈機

​【27】NTM 神經圖靈機 

神經網路像是黑箱——我們可以訓練它們,得到結果,增強它們,但實際的決定路徑大多數我們都是不可見的。

神經圖靈機(NTM)就是在嘗試解決這個問題——它是一個提取出記憶單元之後的FF。一些作者也說它是一個抽象版的LSTM。

記憶是被內容編址的,這個網路可以基於現狀讀取記憶,編寫記憶,也代表了圖靈完備神經網路。

2. 一文讀懂神經網路

要說近幾年最引人注目的技術,無疑的,非人工智慧莫屬。無論你是否身處科技互聯網行業,隨處可見人工智慧的身影:從 AlphaGo 擊敗世界圍棋冠軍,到無人駕駛概念的興起,再到科技巨頭 All in AI,以及各大高校向社會輸送海量的人工智慧專業的畢業生。以至於人們開始萌生一個想法:新的革命就要來了,我們的世界將再次發生一次巨變;而後開始焦慮:我的工作是否會被機器取代?我該如何才能抓住這次革命?

人工智慧背後的核心技術是深度神經網路(Deep Neural Network),大概是一年前這個時候,我正在回老家的高鐵上學習 3Blue1Brown 的 Neural Network 系列視頻課程,短短 4 集 60 多分鍾的時間,就把神經網路從 High Level 到推導細節說得清清楚楚,當時的我除了獲得新知的興奮之外,還有一點新的認知,算是給頭腦中的革命性的技術潑了盆冷水:神經網路可以解決一些復雜的、以前很難通過寫程序來完成的任務——例如圖像、語音識別等,但它的實現機制告訴我,神經網路依然沒有達到生物級別的智能,短期內期待它來取代人也是不可能的。

一年後的今天,依然在這個春運的時間點,將我對神經網路的理解寫下來,算是對這部分知識的一個學習筆記,運氣好的話,還可以讓不了解神經網路的同學了解起來。

維基網路這樣解釋 神經網路 :

這個定義比較寬泛,你甚至還可以用它來定義其它的機器學習演算法,例如之前我們一起學習的邏輯回歸和 GBDT 決策樹。下面我們具體一點,下圖是一個邏輯回歸的示意圖:

其中 x1 和 x2 表示輸入,w1 和 w2 是模型的參數,z 是一個線性函數:

接著我們對 z 做一個 sigmod 變換(圖中藍色圓),得到輸出 y:

其實,上面的邏輯回歸就可以看成是一個只有 1 層 輸入層 , 1 層 輸出層 的神經網路,圖中容納數字的圈兒被稱作 神經元 ;其中,層與層之間的連接 w1、w2 以及 b,是這個 神經網路的參數 ,層之間如果每個神經元之間都保持著連接,這樣的層被稱為 全連接層 (Full Connection Layer),或 稠密層 (Dense Layer);此外,sigmoid 函數又被稱作 激活函數 (Activation Function),除了 sigmoid 外,常用的激活函數還有 ReLU、tanh 函數等,這些函數都起到將線性函數進行非線性變換的作用。我們還剩下一個重要的概念: 隱藏層 ,它需要把 2 個以上的邏輯回歸疊加起來加以說明:

如上圖所示,除輸入層和輸出層以外,其他的層都叫做 隱藏層 。如果我們多疊加幾層,這個神經網路又可以被稱作 深度神經網路 (Deep Neural Network),有同學可能會問多少層才算「深」呢?這個沒有絕對的定論,個人認為 3 層以上就算吧:)

以上,便是神經網路,以及神經網路中包含的概念,可見,神經網路並不特別,廣義上講,它就是

可見,神經網路和人腦神經也沒有任何關聯,如果我們說起它的另一個名字—— 多層感知機(Mutilayer Perceptron) ,就更不會覺得有多麼玄乎了,多層感知機創造於 80 年代,可為什麼直到 30 年後的今天才爆發呢?你想得沒錯,因為改了個名字……開個玩笑;實際上深度學習這項技術也經歷過很長一段時間的黑暗低谷期,直到人們開始利用 GPU 來極大的提升訓練模型的速度,以及幾個標志性的事件:如 AlphaGo戰勝李世石、Google 開源 TensorFlow 框架等等,感興趣的同學可以翻一下這里的歷史。

就拿上圖中的 3 個邏輯回歸組成的神經網路作為例子,它和普通的邏輯回歸比起來,有什麼優勢呢?我們先來看下單邏輯回歸有什麼劣勢,對於某些情況來說,邏輯回歸可能永遠無法使其分類,如下面數據:

這 4 個樣本畫在坐標系中如下圖所示

因為邏輯回歸的決策邊界(Decision Boundary)是一條直線,所以上圖中的兩個分類,無論你怎麼做,都無法找到一條直線將它們分開,但如果藉助神經網路,就可以做到這一點。

由 3 個邏輯回歸組成的網路(這里先忽略 bias)如下:

觀察整個網路的計算過程,在進入輸出層之前,該網路所做的計算實際上是:

即把輸入先做了一次線性變換(Linear Transformation),得到 [z1, z2] ,再把 [z1, z2] 做了一個非線性變換(sigmoid),得到 [x1', x2'] ,(線性變換的概念可以參考 這個視頻 )。從這里開始,後面的操作就和一個普通的邏輯回歸沒有任何差別了,所以它們的差異在於: 我們的數據在輸入到模型之前,先做了一層特徵變換處理(Feature Transformation,有時又叫做特徵抽取 Feature Extraction),使之前不可能被分類的數據變得可以分類了

我們繼續來看下特徵變換的效果,假設 為 ,帶入上述公式,算出 4 個樣本對應的 [x1', x2'] 如下:

再將變換後的 4 個點繪制在坐標系中:

顯然,在做了特徵變換之後,這兩個分類就可以很容易的被一條決策邊界分開了。

所以, 神經網路的優勢在於,它可以幫助我們自動的完成特徵變換或特徵提取 ,尤其對於聲音、圖像等復雜問題,因為在面對這些問題時,人們很難清晰明確的告訴你,哪些特徵是有用的。

在解決特徵變換的同時,神經網路也引入了新的問題,就是我們需要設計各式各樣的網路結構來針對性的應對不同的場景,例如使用卷積神經網路(CNN)來處理圖像、使用長短期記憶網路(LSTM)來處理序列問題、使用生成式對抗網路(GAN)來寫詩和作圖等,就連去年自然語言處理(NLP)中取得突破性進展的 Transformer/Bert 也是一種特定的網路結構。所以, 學好神經網路,對理解其他更高級的網路結構也是有幫助的

上面說了,神經網路可以看作一個非線性函數,該函數的參數是連接神經元的所有的 Weights 和 Biases,該函數可以簡寫為 f(W, B) ,以手寫數字識別的任務作為例子:識別 MNIST 數據集 中的數字,數據集(MNIST 數據集是深度學習中的 HelloWorld)包含上萬張不同的人寫的數字圖片,共有 0-9 十種數字,每張圖片為 28*28=784 個像素,我們設計一個這樣的網路來完成該任務:

把該網路函數所具備的屬性補齊:

接下來的問題是,這個函數是如何產生的?這個問題本質上問的是這些參數的值是怎麼確定的。

在機器學習中,有另一個函數 c 來衡量 f 的好壞,c 的參數是一堆數據集,你輸入給 c 一批 Weights 和 Biases,c 輸出 Bad 或 Good,當結果是 Bad 時,你需要繼續調整 f 的 Weights 和 Biases,再次輸入給 c,如此往復,直到 c 給出 Good 為止,這個 c 就是損失函數 Cost Function(或 Loss Function)。在手寫數字識別的列子中,c 可以描述如下:

可見,要完成手寫數字識別任務,只需要調整這 12730 個參數,讓損失函數輸出一個足夠小的值即可,推而廣之,絕大部分神經網路、機器學習的問題,都可以看成是定義損失函數、以及參數調優的問題。

在手寫識別任務中,我們既可以使用交叉熵(Cross Entropy)損失函數,也可以使用 MSE(Mean Squared Error)作為損失函數,接下來,就剩下如何調優參數了。

神經網路的參數調優也沒有使用特別的技術,依然是大家剛接觸機器學習,就學到的梯度下降演算法,梯度下降解決了上面迭代過程中的遺留問題——當損失函數給出 Bad 結果時,如何調整參數,能讓 Loss 減少得最快。

梯度可以理解為:

把 Loss 對應到 H,12730 個參數對應到 (x,y),則 Loss 對所有參數的梯度可以表示為下面向量,該向量的長度為 12730:
$$
abla L(w,b) = left[

frac{partial L}{partial w_1},
frac{partial L}{partial w_2},...,
frac{partial L}{partial b_{26}}

ight] ^ op
$$
所以,每次迭代過程可以概括為

用梯度來調整參數的式子如下(為了簡化,這里省略了 bias):

上式中, 是學習率,意為每次朝下降最快的方向前進一小步,避免優化過頭(Overshoot)。

由於神經網路參數繁多,所以需要更高效的計算梯度的演算法,於是,反向傳播演算法(Backpropagation)呼之欲出。

在學習反向傳播演算法之前,我們先復習一下微積分中的鏈式法則(Chain Rule):設 g = u(h) , h = f(x) 是兩個可導函數,x 的一個很小的變化 △x 會使 h 產生一個很小的變化 △h,從而 g 也產生一個較小的變化 △g,現要求 △g/△x,可以使用鏈式法則:

有了以上基礎,理解反向傳播演算法就簡單了。

假設我們的演示網路只有 2 層,輸入輸出都只有 2 個神經元,如下圖所示:

其中 是輸入, 是輸出, 是樣本的目標值,這里使用的損失函數 L 為 MSE;圖中的上標 (1) 或 (2) 分別表示參數屬於第 (1) 層或第 (2) 層,下標 1 或 2 分別表示該層的第 1 或 第 2 個神經元。

現在我們來計算 和 ,掌握了這 2 個參數的偏導數計算之後,整個梯度的計算就掌握了。

所謂反向傳播演算法,指的是從右向左來計算每個參數的偏導數,先計算 ,根據鏈式法則

對左邊項用鏈式法則展開

又 是輸出值, 可以直接通過 MSE 的導數算出:

而 ,則 就是 sigmoid 函數的導數在 處的值,即

於是 就算出來了:

再來看 這一項,因為

所以

注意:上面式子對於所有的 和 都成立,且結果非常直觀,即 對 的偏導為左邊的輸入 的大小;同時,這里還隱含著另一層意思:需要調整哪個 來影響 ,才能使 Loss 下降得最快,從該式子可以看出,當然是先調整較大的 值所對應的 ,效果才最顯著 。

於是,最後一層參數 的偏導數就算出來了

我們再來算上一層的 ,根據鏈式法則 :

繼續展開左邊這一項

你發現沒有,這幾乎和計算最後一層一摸一樣,但需要注意的是,這里的 對 Loss 造成的影響有多條路徑,於是對於只有 2 個輸出的本例來說:

上式中, 都已經在最後一層算出,下面我們來看下 ,因為

於是

同理

注意:這里也引申出梯度下降的調參直覺:即要使 Loss 下降得最快,優先調整 weight 值比較大的 weight。

至此, 也算出來了

觀察上式, 所謂每個參數的偏導數,通過反向傳播演算法,都可以轉換成線性加權(Weighted Sum)計算 ,歸納如下:

式子中 n 代表分類數,(l) 表示第 l 層,i 表示第 l 層的第 i 個神經元。 既然反向傳播就是一個線性加權,那整個神經網路就可以藉助於 GPU 的矩陣並行計算了

最後,當你明白了神經網路的原理,是不是越發的認為,它就是在做一堆的微積分運算,當然,作為能證明一個人是否學過微積分,神經網路還是值得學一下的。Just kidding ..

本文我們通過

這四點,全面的學習了神經網路這個知識點,希望本文能給你帶來幫助。

參考:

3. 神經網路淺談

人工智慧技術是當前炙手可熱的話題,而基於神經網路的深度學習技術更是熱點中的熱點。去年穀歌的Alpha Go 以4:1大比分的優勢戰勝韓國的李世石九段,展現了深度學習的強大威力,後續強化版的Alpha Master和無師自通的Alpha Zero更是在表現上完全碾壓前者。不論你怎麼看,以深度學習為代表的人工智慧技術正在塑造未來。

下圖為英偉達(NVIDIA)公司近年來的股價情況, 該公司的主要產品是「圖形處理器」(GPU),而GPU被證明能大大加快神經網路的訓練速度,是深度學習必不可少的計算組件。英偉達公司近年來股價的飛漲足以證明當前深度學習的井噴之勢。

好,話不多說,下面簡要介紹神經網路的基本原理、發展脈絡和優勢。

神經網路是一種人類由於受到生物神經細胞結構啟發而研究出的一種演算法體系,是機器學習演算法大類中的一種。首先讓我們來看人腦神經元細胞:

一個神經元通常具有多個樹突 ,主要用來接受傳入信息,而軸突只有一條,軸突尾端有許多軸突末梢,可以給其他多個神經元傳遞信息。軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號

下圖是一個經典的神經網路(Artificial Neural Network,ANN):

乍一看跟傳統互聯網的拓撲圖有點類似,這也是稱其為網路的原因,不同的是節點之間通過有向線段連接,並且節點被分成三層。我們稱圖中的圓圈為神經元,左邊三個神經元組成的一列為輸入層,中間神經元列為隱藏層,右邊神經元列為輸出層,神經元之間的箭頭為權重。

神經元是計算單元,相當於神經元細胞的細胞核,利用輸入的數據進行計算,然後輸出,一般由一個線性計算部分和一個非線性計算部分組成;輸入層和輸出層實現數據的輸入輸出,相當於細胞的樹突和軸突末梢;隱藏層指既不是輸入也不是輸出的神經元層,一個神經網路可以有很多個隱藏層。

神經網路的關鍵不是圓圈代表的神經元,而是每條連接線對應的權重。每條連接線對應一個權重,也就是一個參數。權重具體的值需要通過神經網路的訓練才能獲得。我們實際生活中的學習體現在大腦中就是一系列神經網路迴路的建立與強化,多次重復的學習能讓迴路變得更加粗壯,使得信號的傳遞速度加快,最後對外表現為「深刻」的記憶。人工神經網路的訓練也借鑒於此,如果某種映射關系出現很多次,那麼在訓練過程中就相應調高其權重。

1943年,心理學家McCulloch和數學家Pitts參考了生物神經元的結構,發表了抽象的神經元模型MP:

符號化後的模型如下:

Sum函數計算各權重與輸入乘積的線性組合,是神經元中的線性計算部分,而sgn是取符號函數,當輸入大於0時,輸出1,反之輸出0,是神經元中的非線性部分。向量化後的公式為z=sgn(w^T a)(w^T=(w_1,w_2,w_3),a=〖(a_1,a_2,a_3)〗^T)。

但是,MP模型中,權重的值都是預先設置的,因此不能學習。該模型雖然簡單,並且作用有限,但已經建立了神經網路大廈的地基

1958年,計算科學家Rosenblatt提出了由兩層神經元組成(一個輸入層,一個輸出層)的神經網路。他給它起了一個名字–「感知器」(Perceptron)

感知器是當時首個可以學習的人工神經網路。Rosenblatt現場演示了其學習識別簡單圖像的過程,在當時引起了轟動,掀起了第一波神經網路的研究熱潮。

但感知器只能做簡單的線性分類任務。1969年,人工智慧領域的巨擘Minsky指出這點,並同時指出感知器對XOR(異或,即兩個輸入相同時輸出0,不同時輸出1)這樣的簡單邏輯都無法解決。所以,明斯基認為神經網路是沒有價值的。

隨後,神經網路的研究進入低谷,又稱 AI Winter 。

Minsky說過單層神經網路無法解決異或問題,但是當增加一個計算層以後,兩層神經網路不僅可以解決異或問題,而且具有非常好的非線性分類效果。

下圖為兩層神經網路(輸入層一般不算在內):

上圖中,輸出層的輸入是上一層的輸出。

向量化後的公式為:

注意:

每個神經元節點默認都有偏置變數b,加上偏置變數後的計算公式為:

同時,兩層神經網路不再使用sgn函數作為激勵函數,而採用平滑的sigmoid函數:

σ(z)=1/(1+e^(-z) )

其圖像如下:

理論證明: 兩層及以上的神經網路可以無限逼近真實的對應函數,從而模擬數據之間的真實關系 ,這是神經網路強大預測能力的根本。但兩層神經網路的計算量太大,當時的計算機的計算能力完全跟不上,直到1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)演算法,解決了兩層神經網路所需要的復雜計算量問題,帶動了業界使用兩層神經網路研究的熱潮。

但好景不長,演算法的改進僅使得神經網路風光了幾年,然而計算能力不夠,局部最優解,調參等一系列問題一直困擾研究人員。90年代中期,由Vapnik等人發明的SVM(Support Vector Machines,支持向量機)演算法誕生,很快就在若干個方面體現出了對比神經網路的優勢:無需調參;高效;全局最優解。

由於以上原因,SVM迅速打敗了神經網路演算法成為主流。神經網路的研究再一次進入低谷, AI Winter again 。

多層神經網路一般指兩層或兩層以上的神經網路(不包括輸入層),更多情況下指兩層以上的神經網路。

2006年,Hinton提出使用 預訓練 」(pre-training)和「微調」(fine-tuning)技術能優化神經網路訓練,大幅度減少訓練多層神經網路的時間

並且,他給多層神經網路相關的學習方法賦予了一個新名詞–「 深度學習 」,以此為起點,「深度學習」紀元開始了:)

「深度學習」一方面指神經網路的比較「深」,也就是層數較多;另一方面也可以指神經網路能學到很多深層次的東西。研究發現,在權重參數不變的情況下,增加神經網路的層數,能增強神經網路的表達能力。

但深度學習究竟有多強大呢?沒人知道。2012年,Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了近11個百分點,充分證明了多層神經網路識別效果的優越性。

同時,科研人員發現GPU的大規模並行矩陣運算模式完美地契合神經網路訓練的需要,在同等情況下,GPU的速度要比CPU快50-200倍,這使得神經網路的訓練時間大大減少,最終再一次掀起了神經網路研究的熱潮,並且一直持續到現在。

2016年基於深度學習的Alpha Go在圍棋比賽中以4:1的大比分優勢戰勝了李世石,深度學習的威力再一次震驚了世界。

神經網路的發展歷史曲折盪漾,既有被捧上神壇的高潮,也有無人問津的低谷,中間經歷了數次大起大落,我們姑且稱之為「三起三落」吧,其背後則是演算法的改進和計算能力的持續發展。

下圖展示了神經網路自發明以來的發展情況及一些重大時間節點。

當然,對於神經網路我們也要保持清醒的頭腦。由上圖,每次神經網路研究的興盛期持續10年左右,從最近2012年算起,或許10年後的2022年,神經網路的發展將再次遇到瓶頸。

神經網路作為機器學習的一種,其模型訓練的目的,就是使得參數盡可能的與真實的模型逼近。理論證明,兩層及以上的神經網路可以無限逼近真實的映射函數。因此,給定足夠的訓練數據和訓練時間,總能通過神經網路找到無限逼近真實關系的模型。

具體做法:首先給所有權重參數賦上隨機值,然後使用這些隨機生成的參數值,來預測訓練數據中的樣本。假設樣本的預測目標為yp ,真實目標為y,定義值loss,計算公式如下:

loss = (yp -y) ^2

這個值稱之為 損失 (loss),我們的目標就是使對所有訓練數據的損失和盡可能的小,這就轉化為求loss函數極值的問題。

一個常用方法是高等數學中的求導,但由於參數不止一個,求導後計算導數等於0的運算量很大,所以常用梯度下降演算法來解決這樣的優化問題。梯度是一個向量,由函數的各自變數的偏導數組成。

比如對二元函數 f =(x,y),則梯度∇f=(∂f/∂x,∂f/∂y)。梯度的方向是函數值上升最快的方向。梯度下降演算法每次計算參數在當前的梯度,然後讓參數向著梯度的反方向前進一段距離,不斷重復,直到梯度接近零時截止。一般這個時候,所有的參數恰好達到使損失函數達到一個最低值的狀態。下圖為梯度下降的大致運行過程:

在神經網路模型中,由於結構復雜,每次計算梯度的代價很大。因此還需要使用 反向傳播 (Back Propagation)演算法。反向傳播演算法利用了神經網路的結構進行計算,不一次計算所有參數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個參數矩陣的梯度,接著是中間層的梯度,再然後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所要的兩個參數矩陣的梯度就都有了。當然,梯度下降只是其中一個優化演算法,其他的還有牛頓法、RMSprop等。

確定loss函數的最小值後,我們就確定了整個神經網路的權重,完成神經網路的訓練。

在神經網路中一樣的參數數量,可以用更深的層次去表達。

由上圖,不算上偏置參數的話,共有三層神經元,33個權重參數。

由下圖,保持權重參數不變,但增加了兩層神經元。

在多層神經網路中,每一層的輸入是前一層的輸出,相當於在前一層的基礎上學習,更深層次的神經網路意味著更深入的表示特徵,以及更強的函數模擬能力。更深入的表示特徵可以這樣理解,隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。

如上圖,第一個隱藏層學習到「邊緣」的特徵,第二個隱藏層學習到「邊緣」組成的「形狀」的特徵,第三個隱藏層學習到由「形狀」組成的「圖案」的特徵,最後的隱藏層學習到由「圖案」組成的「目標」的特徵。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。

前面提到, 明斯基認為Rosenblatt提出的感知器模型不能處理最簡單的「異或」(XOR)非線性問題,所以神經網路的研究沒有前途,但當增加一層神經元後,異或問題得到了很好地解決,原因何在?原來從輸入層到隱藏層,數據發生了空間變換,坐標系發生了改變,因為矩陣運算本質上就是一種空間變換。

如下圖,紅色和藍色的分界線是最終的分類結果,可以看到,該分界線是一條非常平滑的曲線。

但是,改變坐標系後,分界線卻表現為直線,如下圖:

同時,非線性激勵函數的引入使得神經網路對非線性問題的表達能力大大加強。

對於傳統的樸素貝葉斯、決策樹、支持向量機SVM等分類器,提取特徵是一個非常重要的前置工作。在正式訓練之前,需要花費大量的時間在數據的清洗上,這樣分類器才能清楚地知道數據的維度,要不然基於概率和空間距離的線性分類器是沒辦法進行工作的。然而在神經網路中,由於巨量的線性分類器的堆疊(並行和串列)以及卷積神經網路的使用,它對雜訊的忍耐能力、對多通道數據上投射出來的不同特徵偏向的敏感程度會自動重視或忽略,這樣我們在處理的時候,就不需要使用太多的技巧用於數據的清洗了。有趣的是,業內大佬常感嘆,「你可能知道SVM等機器學習的所有細節,但是效果並不好,而神經網路更像是一個黑盒,很難知道它究竟在做什麼,但工作效果卻很好」。

人類對機器學習的環節干預越少,就意味著距離人工智慧的方向越近。神經網路的這個特性非常有吸引力。

1) 谷歌的TensorFlow開發了一個非常有意思的神經網路 入門教程 ,用戶可以非常方便地在網頁上更改神經網路的參數,並且能看到實時的學習效率和結果,非常適合初學者掌握神經網路的基本概念及神經網路的原理。網頁截圖如下:

2) 深度學習領域大佬吳恩達不久前發布的《 神經網路和深度學習 》MOOC,現在可以在網易雲課堂上免費觀看了,並且還有中文字幕。

3) 《神經網路於深度學習》(Michael Nielsen著)、《白話深度學習與TensorFlow》也是不錯的入門書籍。

4. 深層神經網路

如上圖所示,邏輯回歸是一個淺層模型,可以理解為是單層神經網路。深層或淺層是一個程度的問題。如果將邏輯回歸模型加入一個隱藏層就變了一個雙層神經網路,但還是比較淺的。如果加入 5 個隱藏層,則可以說是一個深層模型。通常可以把隱藏層數當作超參數,然後在交叉驗證數據集上進行評估,從而選擇合適的深度。

上圖是一個 4 層的神經網路,包括三個隱藏層和一個輸出層,隱藏層的單元數分別是 5 5 3,輸出層只有一個單元。通常用 L 表示神經網路的層數,用 表示第 層的單元數,可以把輸入層當作第 0 層孫雹。那麼圖中 L = 4, , , , , 。可以用 表示第 層的激活值,即 ,用 和 表示在 公式中計算 值的權重,即 。輸入用 X 表示,X 也是第 0 層,所以 ,最後一層 ,也就是說 即為神經網路的預測值(輸出值)。

假設有一個樣本 x,那麼:

第一層計算: ,其中 x 也可以表示為 , w 和 b 是會影響第 1 層的激活單元的參數,接下來計算: ,後面幾層的計算也是如此。

第二層計算: ,

第三層計算: ,

第四層計算: ,

可以總結出,計算規律為:

前向傳播的向量化計算:

輸入 X 即 ,是將 m 個樣本橫向堆疊構成的矩陣,前向傳播需要一層一層來迭代計算,所以需要用 for 循環從第 1 層迭代計算到第 L 層,深層神經網路只是比淺層神經網路有更多層的迭代計算。

在上圖的神經網路中,除去輸入層一共有 5 層,其中 4 個隱藏層,一個輸出層。第 1 個隱藏層有 3 個隱藏單元,可以表示為 , 是第 1 個隱藏層的激活函數向量,是一個 3 x 1 的列向量,x 有兩個輸入特徵,所以 x 是 2 x 1 的列向量。在第一層的計算中: ,如果忽略偏置項 , 。 乘以一個 2 x 1 的列向量 x,需要等於一個 3 x 1 的列向量,那麼 必須是一個 3 x 2 的矩陣,即 的矩陣。 的結果是一個 3 x 1 的向量, 也搜殲是一個 3 x1 的向量,所以結果 也是一個 3 x 1 的向量。可以發現, 必須是 維的矩陣, 必須是 維的列向量,所以 的維數是 5 x 3,即 , 的維數是 5 x 1,即 x 1,所以在第二層的計算中: ,5 x 3 的矩陣 乘以 3 x 1 的列向量 等於一個 5 x 1 的列向量,再加上一個 5 x 1 的偏置項 ,結果 是一個 5 x 1 的列向量。以此類推, 的維數是 4 x 5, 的維數是 2 x 4, 的維數是 1 x 2。

前面證實了, 必須是 維的矩陣, 必須是 維的列向量。而且,在反向傳播中, 和 的維度相同, 和 的維度相同。又因為 ,所以 和 的維度也相同,都是 。

以上是神經網路中單個樣本的計算,其中 x 表示單個樣本,通常為了加速運算,需要將 m 個樣本進行向量化計算,可以用 X 表示 m 個樣本,第一個隱藏層的向量化計算公式即為: ,其中 還是 維, X 變為 維, 的結果是 的矩陣, 的維度還是 ,但當一個 的矩陣和 相加時,Python會通過廣播將 復製成為 的矩陣,然後兩個矩陣逐個元素相加。所以 的維度變為 ,即 3 x m。 表示每一個單獨的 橫向疊加構成的行向量,即 。

單個樣本時, 和 的維世凱沖度相同,都是 ,m 個樣本時, 和 的維度相同,都是 ,當 等於 0 時, 等於 ,其中 是 x 的輸入特徵數。反向傳播時,dZ、dA 和 Z、A 的維度相同。

從直覺上可以把深度神經網路的前幾層當做探測簡單的函數,也就是學習一些低層次的簡單特徵,之後把它們和後幾層結合在一起,也就是把簡單的特徵結合起來,那麼總體上就能學習更多復雜的函數,也就是去探測更復雜的東西。可以把深度學習神經網路和人類大腦做類比,人的大腦也是先探測簡單的東西,然後組合起來才能探測復雜的物體。

神經網路為何有效的理論來源於電路理論,它和能夠用電路元件計算哪些函數有著分不開的聯系,根據不同的基本邏輯門(與,或,非),在非正式情況下,這些函數都可以用相對較小(指隱藏單元數量)但很深的神經網路來計算 ,如果用淺層神經網路則需要指數增長的隱藏單元數量才能達到同樣的效果。

上圖是一個 4 層的神經網路,梯度下降的一個迭代過程即為前向傳播和反向傳播的計算過程,如下圖所示:

在前向傳播計算中,從第 1 層開始,第 層的輸入為上一層(第 層)的激活函數計算結果 和當前層的參數 ,輸出為當前層激活函數計算結果 ,還要緩存 和 以供反向傳播使用, 則輸入到下一層(第 層),計算過程如下:

向量化計算為:

當計算完所有層的前向傳播後,第 L 層的激活函數計算結果 即當前樣本的預測值。接下來將進行反向傳播計算,從第 L 層開始,第 層的輸入為當前層激活函數計算結果的導數值 和當前層的參數 ,輸出為上一層(第 層)激活函數計算結果的導數值 ,以及當前層參數的導數值 ,計算過程如下:

首先

由 可知 ,將 da 帶入可求得:

向量化計算為:
首先

在每一層中根據梯度下降公式,更新參數:

這就是神經網路中梯度下降一個迭代的計算過程。

神經網路中的參數包括: W 和 b。超參數包括:學習率 ,梯度下降迭代次數(iterations),隱層數(L),隱藏單元數(units),激活函數(activefunction),因為這些參數是在某種程度上決定了參數 W 和 b 的參數,所以叫做超參數。其他超參數包括:momentum,batch size,正則化參數等

可以通過嘗試不同的超參數,觀察代價函數曲線變化,從而選擇表現最好的超參數。

沒有。

https://mooc.study.163.com/smartSpec/detail/1001319001.htm

5. 神經網路中的激活函數是用來干什麼的

不同的激活函數是用來實現不同的信息處理能力,神經元的變換函數反映了神經元輸出與其激活狀態之間的關系。

閱讀全文

與哪個邏輯不能用單層神經網路實現相關的資料

熱點內容
豐田知識共享網路能帶來很大效益 瀏覽:263
電腦網路連接的主要條件 瀏覽:38
安遠全網網路營銷參考價 瀏覽:951
蘋果6splus無線網路連不上 瀏覽:724
綏化市龍江網路投訴電話多少 瀏覽:659
網路模式切換軟體下載 瀏覽:167
學生網路安全常識ppt 瀏覽:244
網路貸款公司怎麼追債 瀏覽:541
網路異常怎麼刪除 瀏覽:511
最好網路電視免費影視軟體 瀏覽:267
網路被人言語攻擊怎麼辦 瀏覽:431
路由器有手機連接電腦沒有網路 瀏覽:612
無網路看cctv電視的軟體 瀏覽:943
保險理財網路營銷策劃 瀏覽:903
網路安全的重要任務是 瀏覽:400
路由器查詢網路日誌 瀏覽:711
桐廬移動網路卡 瀏覽:916
網路連接丟失堡壘之夜 瀏覽:41
用cmd打開無線網路連接wifi 瀏覽:637
怎麼區分自己手機的網路制式 瀏覽:651

友情鏈接