神經網絡總結

神經網絡的總結

發現現在每天看點東西都有新的認識,也有對以前知識的從新認識。

之前聽過張玉宏老師的一些課,今天去看了下他在雲棲社區的一些深度學習系列文章,其中有介紹神經網絡的發展歷史,這個老師挺幽默的,理論一大堆,不管什麼反正都能說出個一二三,但是感覺文章有時候太寬泛,感興趣的可以去看下,附上老師文章的鏈接。
一入侯門“深”似海,深度學習深幾許(入門系列之一)

機器學習

  • 機器學習的兩層作用

    (1)面向過去(對收集到的歷史數據,用作訓練),發現潛藏在數據之下的模式,我們稱之爲描述性分析(Descriptive Analysis);

    (2)面向未來,基於已經構建的模型,對於新輸入數據對象實施預測,我們稱之爲預測性分析(Predictive Analysis)。

  • 機器學習的形式化定義
    臺灣大學李宏毅博士的說法,所謂機器學習,在形式上,可近似等同於在數據對象中,通過統計或推理的方法,尋找一個適用特定輸入和預期輸出功能函數(如圖2-5所示)。習慣上,我們把輸入變量寫作大寫的X ,而把輸出變量寫作大寫的Y 。那麼所謂的機器學習,在形式上,就是完成如下變換:Y= f(X) 。
    這裏寫圖片描述

具體說來,機器學習要想做得好,需要走好三大步:
(1) 如何找一系列函數來實現預期的功能,這是建模問題。
(2) 如何找出一組合理的評價標準,來評估函數的好壞,這是評價問題。
(3) 如何快速找到性能最佳的函數,這是優化問題(比如說,機器學習中梯度下降法乾的就是這個活)。

M-P神經元模型1943年

這裏寫圖片描述
它模擬大腦神經元的工作機理,是上世紀40年代提出但一直沿用至今的“M-P神經元模型”。

在這個模型中,神經元接收來自n個其它神經元傳遞過來的輸入信號,這些信號的表達,通常通過神經元之間連接的權重(weight)大小來表示,神經元將接收到的輸入值按照某種權重疊加起來,並將當前神經元的閾值進行比較,然後通過“激活函數(activation function)”向外表達輸出(這在概念上就叫感知機,是15之後纔出來的概念)

所謂神經網絡的學習規則,就是調整權值和閾值的規則

此模型可以完成“與(AND)”、“或(OR)”及“非(NOT)”狀態轉換,但是卻不能完成“異或(XOR)”

異或(XOR),就是當且僅當輸入值x1和x2不相等,則輸出爲1。反之,輸出爲0。你可以簡單粗暴地把“異或”理解爲:男歡女愛輸出爲1,搞基都是沒有結果的(輸出爲0)!老師的理解幽默風趣,容易記住φ(>ω<*) 。

簡單來說,感知機模型,就是一個由兩層神經元構成的網絡結構,輸入層接收外界的輸入,通過激活函數(閾值)變換,把信號傳送至輸出層,因此它也稱之爲“閾值邏輯單元(threshold logic unit)”,正是這種簡單的邏輯單元,慢慢演進,越來越複雜,就構成了我們目前研究的熱點——深度學習網絡。

原子布爾函數中的“與、或、非”等問題都是線性可分的(linearly separable)的問題。對於線性不可分原子布爾函數(如“異或”操作),就不存在簡單地線性超平面將其區分開來。
這裏寫圖片描述
有問題肯定就要尋求解決的辦法了!

我們在輸入層和輸出層之間,添加一層神經元,將其稱之爲隱含層(hidden layer,亦有簡稱爲“隱層”)。這樣一來,隱含層和輸出層中的神經元都擁有激活函數。直到1975年(此時,距離伊瓦赫年科提出多層神經網絡概念已達10年之久了),感知機的“異或難題”才被理論界徹底解決。
這裏寫圖片描述

多層前饋神經網絡

M-P感知機的模型就是一個神經元模型 多層感知機也就是指多層神經網絡(這是筆者自己觀點,有錯誤還請讀者指出互相交流)。 在常見的多層神經網絡中,每一層神經元僅僅與下一層的神經元全連接。而在同一層,神經元彼此不連接,而且跨層的神經元,彼此間也不相連。這種被簡化的神經網絡結構,被稱之爲“多層前饋神經網絡(multi-layer feedforward neural networks)”。

這裏寫圖片描述

神經網絡學習的本質,其實就是利用“損失函數(loss function)”,來調節網絡中的權重(weight)。
神經網絡的權值,到底應該怎麼調整?
第一種方法就是“誤差反向傳播(Error Back propagation,簡稱BP)”。
第二類改進方法就是當前主流的方法,也就是“深度學習”常用的“逐層初始化”(layer-wise pre-training)訓練機制,不同於BP的“從後至前”的訓練參數方法,“深度學習”採取的是一種從“從前至後”的逐層訓練方法

BP神經網絡

簡單說來,就是首先隨機設定初值,然後計算當前網絡的輸出,然後根據網絡輸出與預期輸出之間的差值,採用迭代的算法,反方向地去改變前面各層的參數,直至網絡收斂穩定。
這裏寫圖片描述

BP神經網絡可以分爲兩步(具體內容可以去看作者原作)
(1)正向傳播信號,輸出分類信息;
這裏寫圖片描述
(2)反向傳播誤差,調整網絡權值。如果沒有達到預期目的,重走回頭路(1)和(2)。
這裏寫圖片描述

它最早是由Geoffrey Hinton 和 David Rumelhart等人1986年在《Nature》(自然)雜誌上發表的論文:“Learning Representations by Back-propagating errors”中提出來的。該論文首次系統而簡潔地闡述了反向傳播算法在神經網絡模型上的應用。

BP反向傳播算法直接把糾錯的運算量,降低到只和神經元數目本身成正比的程度。但是在一個層數較多網絡中,當它的殘差反向傳播到最前面的層(即輸入層),其影響已經變得非常之小,甚至出現梯度擴散(gradient-diffusion),嚴重影響訓練精度。其根源在於對於非凸函數,梯度一旦消失,就沒有指導意義,導致它可能限於局部最優。而且“梯度擴散”現象會隨着網絡層數增加而愈發嚴重,也就是說,隨着梯度的逐層消減,導致它對調整網絡權值的調整效益,作用越來越小,故此BP算法多用於淺層網絡結構(通常小於等於3),這就限制了BP算法的數據表徵能力,從而也就限制了BP的性能上限。相比於原生態的BP算法,雖然它降低了網絡參數的訓練量,但其網絡參數的訓練代價還是不小,耗時非常“可觀”。
這裏附一張梯度的示意圖

這裏寫圖片描述

爬坡愈平緩(相當於斜率較小),抵達山峯(函數峯值)的過程就越緩慢,而如果不考慮爬山的重力阻力(對於計算機而言不存在這樣的阻力),山坡越陡峭(相當於斜率越大),順着這樣的山坡爬山,就越能快速抵達山峯(對於函數而言,就是愈加快速收斂到極值點)。
如果我們把山峯“乾坤大挪移”,把爬山峯變成找谷底(即求極小值),這時找斜率最陡峭的坡而攀爬山峯的方法,並沒有本質變化,不過是方向相反而已。如果把登山過程中求某點的斜率稱爲“梯度(gradient)”,而找谷底的方法,就可以把它稱之爲“梯度遞減(gradient descent)”,我們也很容易看到“梯度遞減”的問題所在,那就是它很容易收斂到局部最小值。正如攀登高峯,我們會感嘆“一山還比一山高”,探尋谷底時,我們也可能發現,“一谷還比一谷低”,只能是“只緣身在此山中”。
所以第二類改進方法就孕育而生了。

深度學習

深度信念網(DBN)的組成元件就是受限玻爾茲曼機 (Restricted Boltzmann Machines, RBM)。而DBN的構建其實分兩步走的:(1)單獨“無監督”地訓練每一層RBM網絡,以確保特徵向量在映射到不同特徵空間時,能夠儘可能多地保留特徵信息;(2)在DBN的最後一層,設置BP網絡,用以接收RBM的輸出特徵向量作爲它的輸入特徵向量,然後“有監督”地訓練實體關係分類器,對網絡權值實施微調(Fine-Tune)。

卷積神經網絡CNN是深度學習中一大里程碑。“卷積”的概念:所謂卷積,不過是一個函數和另一個函數在某個維度上的加權“疊加”作用而已。
李德毅院士的主題報告。在報告中,李院士便提到了卷積的理解問題,非常有意思。他講到,什麼叫卷積呢?舉例來說,在一根鐵絲某處不停地彎曲,假設發熱函數是f(t) ,散熱函數是 g(t) ,此時此刻的溫度就是 f(t) 跟g(t)的卷積。在一個特定環境下,發聲體的聲源函數是f(t) ,該環境下對聲源的反射效應函數是 g(t) ,那麼這個環境下的接受到聲音就是 f(t) 和 g(t) 的卷積。

在不考慮輸入層的情況下,一個典型的卷積神經網絡通常由若干個卷積層(Convolutional Layer)、激活層(Activation Layer)、池化層(Pooling Layer)及全連接層(Fully Connected Layer)組成。
典型CNN結構
這裏寫圖片描述

CNN拓撲結構
這裏寫圖片描述

卷積層:這個是卷積神經網絡的核心所在。在卷積層,通過實現“局部感知”和“權值共享”等系列的設計理念,可達到兩個重要的目的:對高維輸入數據實施降維處理和實現自動提取原始數據的核心特徵。
激活層:其作用是將前一層的線性輸出,通過非線性激活函數處理,從而可模擬任意函數,進而增強網絡的表徵能力。在深度學習領域,ReLU(Rectified-Linear Unit,修正線性單元)是目前使用較多的激活函數,原因是它收斂更快,且不會產生梯度消失問題。
池化層:亦稱亞採樣層(Subsampling Layer)。簡單來說,利用局部相關性,“採樣”在較少數據規模的同時保留了有用信息。巧妙的採樣還具備局部線性轉換不變性,從而增強卷積神經網絡的泛化處理能力。
全連接層:這個網絡層相當於傳統的多層感知機(Multi-Layer Perceptron,簡稱MLP,例如我們已經講解過的BP算法[2])。通常來說,“卷積-激活-池化”是一個基本的處理棧,通過多個前棧處理之後,待處理的數據特性已有了顯著變化:一方面,輸入數據的維度已下降到可用“全連接”網絡來處理了;另一方面,此時全連接層的輸入數據已不再是“泥沙俱下、魚龍混雜”,而是經過反覆提純過的結果,因此最後輸出的結果要可控得高。

卷積層的3個核心概念 局部連接、空間位置排列及權值共享

感興趣的可以去拜讀老師的原作
局部連接來減參,權值共享肩並肩(深度學習入門系列之十一)

感謝張玉宏老師的文章,科普作家 (張老師的目標)

如需轉載請說明文章來源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章