導航:首頁 > 異常信息 > 全連接神經網路演算法總結

全連接神經網路演算法總結

發布時間:2022-09-18 16:30:55

1. 【神經網路原理】神經網路結構 & 符號約定

神經元模型的符號約定:輸入: ,權重(weight): ,偏置(bias): ,未激活值: ,激活輸出值:
神經元可用於解決部分二分類問題 ——當有一個類別未知的 輸入感知機,若 輸出值a = 1時,感知機被激活 ,代表 x 屬於第一類;若 輸出值a = 0時,感知機未激活 ,則代表 x 屬於第二類。而對於sigmoid神經元,若輸出值a ≥ 0.5時,代表 x 屬於第一類,否則為第二類。

不難看出,感知機可以輕松實現「與非」邏輯,而與非邏輯可以組合成其他任意的邏輯,但對於一些過於復雜的問題,我們難以寫出其背後地邏輯結構。 這時候神經網路就能大顯身手 :它可以自適應的學習規律,調節網路地權重和偏置等參數,我們只需要用大量的數據對其正確地訓練,即可得到我們想要的效果!
那有一個很有意思的問題:相比於階躍函數,為什麼我們在神經網路中更願意採用sigmoid函數作為激活函數呢?

首先,由於感知機的激活函數為階躍函數(在0處突變),權重的一個小的變化就可能導致輸出值的突變,而如果將激活函數替換為sigmoid函數,輸出值的變化就能發生相應的小的變化,有利於網路學習;另外,由於採用二次代價函數作為損失函數時,利用BP演算法求梯度值需要對沖激函數求導,sigmoid函數正好時連續可導的,而且導數很好求。

為了便於理解,先畫一個三層的全連接神經網路示意圖,激活函數都選用sigmoid函數。 全連接神經網路 指除輸出層外,每一個神經元都與下一層中的各神經元相連接。網路的第一層為 輸入層 ,最後一層為 輸出層 ,中間的所有層統稱為 隱藏層 。其中,輸入層的神經元比較特殊,不含偏置 ,也沒有激活函數 。

神經網路結構的符號約定 : 代表第 層的第 個神經元與第 層的第 個神經元連線上的權重; 代表第 層與第 層之間的所有權重 構成的權重矩陣。 分別代表第 層的第 個神經元對應的偏置、未激活值、激活值; 則分別代表第 層的所有偏置組成的列向量、所有未激活值組成的列向量以及所有激活值組成的列向量。

下面展示了一個手寫體識別的三層全連接神經網路結構:

隱藏層的功能可以看作是各種特徵檢測器的組合:檢測到相應特徵時,相應的隱藏層神經元就會被激活,從而使輸出層相應的神經元也被激活。

2. 什麼是全連接神經網路怎麼理解「全連接」

1、全連接神經網路解析:對n-1層和n層而言,n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。

2、全連接的神經網路示意圖:


3、「全連接」是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連接就是認為的切斷某兩個節點直接的連接,這樣訓練時計算量大大減小。

3. 神經網路演算法原理

4.2.1 概述

人工神經網路的研究與計算機的研究幾乎是同步發展的。1943年心理學家McCulloch和數學家Pitts合作提出了形式神經元的數學模型,20世紀50年代末,Rosenblatt提出了感知器模型,1982年,Hopfiled引入了能量函數的概念提出了神經網路的一種數學模型,1986年,Rumelhart及LeCun等學者提出了多層感知器的反向傳播演算法等。

神經網路技術在眾多研究者的努力下,理論上日趨完善,演算法種類不斷增加。目前,有關神經網路的理論研究成果很多,出版了不少有關基礎理論的著作,並且現在仍是全球非線性科學研究的熱點之一。

神經網路是一種通過模擬人的大腦神經結構去實現人腦智能活動功能的信息處理系統,它具有人腦的基本功能,但又不是人腦的真實寫照。它是人腦的一種抽象、簡化和模擬模型,故稱之為人工神經網路(邊肇祺,2000)。

人工神經元是神經網路的節點,是神經網路的最重要組成部分之一。目前,有關神經元的模型種類繁多,最常用最簡單的模型是由閾值函數、Sigmoid 函數構成的模型(圖 4-3)。

儲層特徵研究與預測

以上演算法是對每個樣本作權值修正,也可以對各個樣本計算δj後求和,按總誤差修正權值。

4. 神經網路演算法的三大類分別是

神經網路演算法的三大類分別是:

1、前饋神經網路:

這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。

2、循環網路:

循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。

循環網路的目的是用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。

循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。

3、對稱連接網路:

對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。

這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。

(4)全連接神經網路演算法總結擴展閱讀:

應用及發展:

心理學家和認知科學家研究神經網路的目的在於探索人腦加工、儲存和搜索信息的機制,弄清人腦功能的機理,建立人類認知過程的微結構理論。

生物學、醫學、腦科學專家試圖通過神經網路的研究推動腦科學向定量、精確和理論化體系發展,同時也寄希望於臨床醫學的新突破;信息處理和計算機科學家研究這一問題的目的在於尋求新的途徑以解決不能解決或解決起來有極大困難的大量問題,構造更加逼近人腦功能的新一代計算機。

5. 利用神經網路進行文本分類演算法綜述(持續更新中)

傳統的文本分類一般都是使用詞袋模型/Tf-idf作為特徵+機器學習分類器來進行分類的。隨著深度學習的發展,越來越多的神經網路模型被用來進行文本分類。本文將對這些神經網路模型做一個簡單的介紹。

本文介紹了一種詞向量模型,雖然算不得文本分類模型,但由於其可以說是fasttext的基礎。因此也簡單提一下。

作者認為cbow和skipgram及大部分詞向量模型都沒有考慮到單詞的多態性,而簡單的將一個單詞的多種形態視為獨立的單詞。例如like的不同形式有likes,liking,liked,likes,這些單詞的意思其實是相同的,但cbow/skipgram模型卻認為這些單詞是各自獨立的,沒有考慮到其形態多樣性。

因此作者提出了一個可以有效利用單詞字元級別信息的n-gram詞向量模型,該模型是以skipgram模式實現的。例如單詞 where,其n-gram表示為<wh, whe, her, ere, re>, where。其中<>分別表示前後綴。在原始的skipgram模型中,輸入僅僅只是where的onehot向量,而在此模型中輸入則變成了<wh, whe, her, ere, re>, where的onehot編碼的加和,有效的利用了字元級別的信息,因此效果更加好。

而在loss方面,文中採用了負采樣+binary LogisticRegression的策略。即對每一個目標單詞都預測為正負中的一種。

在本文中作者提供了一個基於神經網路的文本分類模型,這個模型是基於cbow的,與cbow非常類似。

和CBOW一樣,fastText模型也只有三層:輸入層、隱含層、輸出層(Hierarchical Softmax),輸入都是多個經向量表示的單詞,輸出都是一個特定的target,隱含層都是對多個詞向量的疊加平均。不同的是,CBOW的輸入是目標單詞的上下文,fastText的輸入是多個單詞及其n-gram特徵的embeding表示方式,這些特徵用來表示單個文檔;CBOW的輸入單詞被onehot編碼過,fastText的輸入特徵是被embedding過;CBOW的輸出是目標詞彙,fastText的輸出是文檔對應的類標。輸出層的實現同樣使用了層次softmax,當然如果自己實現的話,對於類別數不是很多的任務,個人認為是可以直接使用softmax的。

最後,貼一個Keras的模型fasttext簡化版。

基於詞向量表示,本文提出利用卷積神經網路來進行文本分類。其演算法如上圖所示:

在本文中,作者嘗試了多種不同的詞向量模式:

在上一篇文章中CNN網路的輸入一般是預訓練好的詞向量,而在本文中作者提出一種直接將embedding訓練與分類任務結合在一起,且能有效提取/保留詞序信息,也即有效訓練出n-gram的模型方法,其實也可以理解為一種利用CNN來進行embedding的方法。

此外,另一個問題是輸入序列長度變化問題(在上一篇文章textCNN中通過padding解決的?),在本文作者提出使用一個動態可變的pooling層來解決這個問題,使得卷積層輸出的大小是相同的。關於可變pooling其實與圖像識別中的 空間金字塔池化 (Spatial Pyramid Pooling) 是類似的。

這篇文章有點將fastText與TextCNN結合在一起的感覺,將n-gram embedding與分類任務結合在了一起進行訓練,通過CNN來進行Embedding。

Text Categorization via Region Embedding》

在本篇文章中作者提出了一個tv-embedding(即two-view embedding),它也屬於region embedding(也可以理解為ngram embedding)。這種方法與上面的bow-CNN表示相似,使用bow(bag of words)的方式來表示一個區域的詞句,然後通過某個區域(region,左右鄰域的單詞或詞句)來預測其前後的區域(單詞或詞句),即輸入區域是view1,target區域是view2。tv-embedding是單獨訓練的,在使用的時候與CNN中的embedding組合在一起(形成多個channel?)。作者認為,word2vec方法預訓練得到的embedding向量是普適性的,而通過特定任務的數據集的訓練得到tv-embedding具有任務相關的一些信息,更有利於提升我們的模型效果。

吐槽一下,這篇文章沒太看懂,也可能是英語太差,作者文章中沒有那種一眼就能讓人理解的網路圖,像textCNN的圖就非常一目瞭然,看圖就知道是怎麼做的了。

本文提出了一個使用監督學習加半監督預訓練的基於LSTM的文本分類模型。文章作者與上面相同,所以用到的很多技術可以說與上面也是同出一轍。因此簡單說下本文的一些思路。

作者認為已有的直接使用LSTM作為文本分類模型並直接將LSTM的最後一個輸出作為後續全連接分類器的方法面臨兩個問題:(1)這種方式一般都是與word embedding整合在一起(即輸入onehot經過一個embedding層再進入LSTM),但是embedding訓練不穩定,不好訓練;(2)直接使用LSTM最後一個輸出來表示整個文檔不準確,一般來說LSTM輸入中後面的單詞會在最後輸出中佔有較重的權重,但是這對於文章表示來說並不總是對的。因此作者對這兩點進行了改進:

本文其實可以看作是作者將自己前面的tv-embedding半監督訓練與RCNN的一個融合吧,大有一種一頓操作猛如虎,一看人頭0-5的感覺(因為作者的實驗結果跟一般的CNN相比其實也搶不了多少)。

本文的作者也是前面兩篇使用CNN來進行文本分類處理的文章的作者。因此在本文中,結合了前面兩篇文章提出的一些方法,並使用了一個深層的卷積神經網路。具體的細節包括:

更多詳細的關於DPCNN的細節可以查看 從DPCNN出發,撩一下深層word-level文本分類模型 。

本文提出了一種基於CNN+Attention的文本分類模型。作者認為已有的基於CNN的文本分類模型大都使用的是固定大小的卷積核,因此其學習到的表示也是固定的n-gram表示,這個n與CNN filter大小相關。但是在進行句子的語義表示時,不同句子發揮重要作用的ngram詞語常常是不同的,也即是變化的。因此,模型能根據句子來自適應的選擇每個句子最佳的n-gram對於提升模型的語義表示能力是非常關鍵的。本文便是由此思路提出了一種自適應的來選擇不同n-gram表示的模型。

本文模型在主題結構上參照了CV中的DenseNet,藉由DenseNet中的稠密連接來提取到豐富的n-gram特徵表示。舉例來說,在layer3的特徵不僅能學習到f(x1, x2, x3),還能學習到f(x1(x2,x3))這種更多層次,更加豐富的特徵。網路的結構主要包括三部分:DenseCNN主網路,Attention mole和最後的全連接層分類網路。下面對這三部分進行簡單的說明:

本文通過Dense connection + Attention來自動獲取對於文本語義最重要的n-gram特徵,結果很好。但是缺點是,這個網路比較適合較短的文本,文中對輸入文本進行了padding補齊,對於不同數據集最大長度分別為50,100等,但這對於較長的文本明顯是不足的。因此對於較長的文本或許HAN這種借用RNN來不限制輸入長短的網路會更好。

本文提出了一種結合循環神經網路(RNN)和卷積神經網路來進行文本分類的方法,其結構如上圖所示,該網路可以分為三部分:

雖然說是RNN與CNN的結合,但是其實只用到了CNN中的pooling,多少有一點噱頭的意思。文中還提到了RCNN為什麼比CNN效果好的原因,即為什麼RCNN能比CNN更好的捕捉到上下文信息:CNN使用了固定大小window(也即kernel size)來提取上下文信息,其實就是一個n-gram。因此CNN的表現很大程度上受window大小的影響,太小了會丟失一些長距離信息,太大了又會導致稀疏性問題,而且會增加計算量。

在眾多自然語言處理任務中,一個非常突出的問題就是訓練數據不足,且標注難度大。因此文本提出了一種多任務共享的RNN模型框架,其使用多個不同任務數據集來訓練同一個模型共享參數,已達到擴充數據集的作用。

文中作者提出了三個模型,如上圖所示:

三個模型的訓練方式相同:

本文提出了一個層次LSTM+Attention模型。作者認為,雖然一篇文章有多個句子組成但真正其關鍵作用的可能是其中的某幾個,因此對各個句子施加了注意力機制,以使得對文章語義貢獻較多的句子佔有更多的權重。同樣的,組成一個句子的單詞有多個,但是發揮重要作用的可能就那麼幾個,因此使用注意力機制以使得重要單詞發揮更大的作用,這些便是本文的核心思想。整個網路可分為三層,兩個LSTM層分別用來進行word encode和sentence encode,最頂上為一個全連接分類層。若加上兩層注意力層,則可認為網路為5層。下面簡單聊聊這五層網路的結構:

總體來說,本文看起來還是比較有意思的,符合人閱讀文章的習慣,我們寫文章的時候也是有中心詞和中心句的。但是由於這個層級結構是否會導致訓練慢或者不好訓練還不得而知。最後,文中還提出對文章按長短先進行排序,長度相似的進入一個batch,這將訓練速度加快了3倍。

本文提出了一個基於圖神經網路的文本分類方法。該方法的主要思想是將所有文章及其包含的詞彙都放到一個圖網路裡面去,圖網路中的節點分為兩種類型:單詞節點和文章節點。其中連接單詞節點和文章節點的邊的權重使用TF-IDF來表示,而單詞與單詞之間邊的權重則是使用點互信息(PMI)來表示。點互信息與傳統語言模型中的條件概率計算方式非常相似。只不過PMI採用的是滑窗方式而條件概率是直接在所有語料中進行統計,可以認為是將所有語料當做一個大窗口,這時就又與PMI相同了。

A表示圖網路的鄰接矩陣,表示如下:

GCN同樣也是可以含有多層隱藏層的,其各個層的計算方式如下:

其中A'為歸一化對稱鄰接矩陣, W0 ∈ R^(m×k) 為權重矩陣,ρ是激活函數,例如 ReLU ρ(x) = max(0,x) 如前所述,可以通過疊加多個GCN層來合並更高階的鄰域信息:

其中j表示層數。
損失函數定義為所有已標記文檔的交叉熵誤差:

文中提到Text GCN運行良好的原因有兩個方面:

但是其也有一些缺:

總的來說,文章的idea還是挺有意思的,效果也還不錯。初識GCN可能還是有一點難以理解,可以參考如下資料進行進一步學習:
基於圖卷積網路的文本分類演算法
如何理解 Graph Convolutional Network(GCN)?

6. 全連接神經網路參數個數怎麼計算

對n-1層和n層而言
n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。

全連接是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連接就是認為的切斷某兩個節點直接的連接,這樣訓練時計算量大大減小

7. 理解神經網路卷積層、全連接層

https://zhuanlan.hu.com/p/32472241

卷積神經網路,這玩意兒乍一聽像是生物和數學再帶點計算機技術混合起來的奇怪東西。奇怪歸奇怪,不得不說,卷積神經網路是計算機視覺領域最有影響力的創造之一。

2012年是卷積神經網路崛起之年。這一年,Alex Krizhevsky帶著卷積神經網路參加了ImageNet競賽(其重要程度相當於奧運會)並一鳴驚人,將識別錯誤率從26%降到了15%,。從那開始,很多公司開始使用深度學習作為他們服務的核心。比如,Facebook在他們的自動標記演算法中使用了它,Google在照片搜索中使用了,Amazon在商品推薦中使用,Printerst應用於為他們的家庭飼養服務提供個性化定製,而Instagram應用於他們的搜索引擎。

然而,神經網路最開始也是最多的應用領域是圖像處理。那我們就挑這塊來聊聊,怎樣使用卷積神經網路(下面簡稱CNN)來進行圖像分類。

圖像分類是指,向機器輸入一張圖片,然後機器告訴我們這張圖片的類別(一隻貓,一條狗等等),或者如果它不確定的話,它會告訴我們屬於某個類別的可能性(很可能是條狗但是我不太確定)。對我們人類來說,這件事情簡單的不能再簡單了,從出生起,我們就可以很快地識別周圍的物體是什麼。當我們看到一個場景,我們總能快速地識別出所有物體,甚至是下意識的,沒有經過有意的思考。但這種能力,機器並不具有。所以我們更加要好好珍惜自己的大腦呀! (:зゝ∠)

電腦和人看到的圖片並不相同。當我們輸入一張圖片時,電腦得到的只是一個數組,記錄著像素的信息。數組的大小由圖像的清晰度和大小決定。假設我們有一張jpg格式的480 480大小的圖片,那麼表示它的數組便是480 480*3大小的。數組中所有數字都描述了在那個位置處的像素信息,大小在[0,255]之間。

這些數字對我們來說毫無意義,但這是電腦們可以得到的唯一的信息(也足夠了)。抽象而簡單的說,我們需要一個接受數組為輸入,輸出一個數組表示屬於各個類別概率的模型。

既然問題我們已經搞明白了,現在我們得想想辦法解決它。我們想讓電腦做的事情是找出不同圖片之間的差別,並可以識別狗狗(舉個例子)的特徵。

我們人類可以通過一些與眾不同的特徵來識別圖片,比如狗狗的爪子和狗有四條腿。同樣地,電腦也可以通過識別更低層次的特徵(曲線,直線)來進行圖像識別。電腦用卷積層識別這些特徵,並通過更多層卷積層結合在一起,就可以像人類一樣識別出爪子和腿之類的高層次特徵,從而完成任務。這正是CNN所做的事情的大概脈絡。下面,我們進行更具體的討論。

在正式開始之前,我們先來聊聊CNN的背景故事。當你第一次聽說卷積神經網路的時候,你可能就會聯想到一些與神經學或者生物學有關的東西,不得不說,卷積神經網路還真的與他們有某種關系。

CNN的靈感的確來自大腦中的視覺皮層。視覺皮層某些區域中的神經元只對特定視野區域敏感。1962年,在一個Hubel與Wiesel進行的試驗( 視頻 )中,這一想法被證實並且拓展了。他們發現,一些獨立的神經元只有在特定方向的邊界在視野中出現時才會興奮。比如,一些神經元在水平邊出現時興奮,而另一些只有垂直邊出現時才會。並且所有這種類型的神經元都在一個柱狀組織中,並且被認為有能力產生視覺。

在一個系統中,一些特定的組件發揮特定的作用(視覺皮層中的神經元尋找各自特定的特徵)。這一想法應用於很多機器中,並且也是CNN背後的基本原理。 (譯者註:作者沒有說清楚。類比到CNN中,應是不同的卷積核尋找圖像中不同的特徵)

回到主題。

更詳細的說,CNN的工作流程是這樣的:你把一張圖片傳遞給模型,經過一些卷積層,非線性化(激活函數),池化,以及全連層,最後得到結果。就像我們之前所說的那樣,輸出可以是單獨的一個類型,也可以是一組屬於不同類型的概率。現在,最不容易的部分來了:理解各個層的作用。

首先,你要搞清楚的是,什麼樣的數據輸入了卷積層。就像我們之前提到的那樣,輸入是一個32 × 32 × 3(打個比方)的記錄像素值的數組。現在,讓我來解釋卷積層是什麼。解釋卷積層最好的方法,是想像一個手電筒照在圖片的左上角。讓我們假設手電筒的光可以招到一個5 × 5的區域。現在,讓我們想像這個手電筒照過了圖片的所有區域。在機器學習術語中,這樣一個手電筒被稱為卷積核(或者說過濾器,神經元) (kernel, filter, neuron) 。而它照到的區域被稱為感知域 (receptive field) 。卷積核同樣也是一個數組(其中的數被稱為權重或者參數)。很重要的一點就是卷積核的深度和輸入圖像的深度是一樣的(這保證可它能正常工作),所以這里卷積核的大小是5 × 5 × 3。

現在,讓我們拿卷積核的初始位置作為例子,它應該在圖像的左上角。當卷積核掃描它的感知域(也就是這張圖左上角5 × 5 × 3的區域)的時候,它會將自己保存的權重與圖像中的像素值相乘(或者說,矩陣元素各自相乘,注意與矩陣乘法區分),所得的積會相加在一起(在這個位置,卷積核會得到5 × 5 × 3 = 75個積)。現在你得到了一個數字。然而,這個數字只表示了卷積核在圖像左上角的情況。現在,我們重復這一過程,讓卷積核掃描完整張圖片,(下一步應該往右移動一格,再下一步就再往右一格,以此類推),每一個不同的位置都產生了一個數字。當掃描完整張圖片以後,你會得到一組新的28 × 28 × 1的數。 (譯者註:(32 - 5 + 1) × (32 - 5 + 1) × 1) 。這組數,我們稱為激活圖或者特徵圖 (activation map or feature map) 。

如果增加卷積核的數目,比如,我們現在有兩個卷積核,那麼我們就會得到一個28 × 28 × 2的數組。通過使用更多的卷積核,我們可以更好的保留數據的空間尺寸。

在數學層面上說,這就是卷積層所做的事情。

讓我們來談談,從更高角度來說,卷積在做什麼。每一個卷積核都可以被看做特徵識別器。我所說的特徵,是指直線、簡單的顏色、曲線之類的東西。這些都是所有圖片共有的特點。拿一個7 × 7 × 3的卷積核作為例子,它的作用是識別一種曲線。(在這一章節,簡單起見,我們忽略卷積核的深度,只考慮第一層的情況)。作為一個曲線識別器,這個卷積核的結構中,曲線區域內的數字更大。(記住,卷積核是一個數組)

現在我們來直觀的看看這個。舉個例子,假設我們要把這張圖片分類。讓我們把我們手頭的這個卷積核放在圖片的左上角。

記住,我們要做的事情是把卷積核中的權重和輸入圖片中的像素值相乘。

(譯者註:圖中最下方應是由於很多都是0所以把0略過不寫了。)

基本上,如果輸入圖像中有與卷積核代表的形狀很相似的圖形,那麼所有乘積的和會很大。現在我們來看看,如果我們移動了卷積核呢?

可以看到,得到的值小多了!這是因為感知域中沒有與卷積核表示的相一致的形狀。還記得嗎,卷積層的輸出是一張激活圖。所以,在單卷積核卷積的簡單情況下,假設卷積核是一個曲線識別器,那麼所得的激活圖會顯示出哪些地方最有可能有曲線。在這個例子中,我們所得激活圖的左上角的值為6600。這樣大的數字表明很有可能這片區域中有一些曲線,從而導致了卷積核的激活 (譯者註:也就是產生了很大的數值。) 而激活圖中右上角的數值是0,因為那裡沒有曲線來讓卷積核激活(簡單來說就是輸入圖像的那片區域沒有曲線)。

但請記住,這只是一個卷積核的情況,只有一個找出向右彎曲的曲線的卷積核。我們可以添加其他卷積核,比如識別向左彎曲的曲線的。卷積核越多,激活圖的深度就越深,我們得到的關於輸入圖像的信息就越多。

在傳統的CNN結構中,還會有其他層穿插在卷積層之間。我強烈建議有興趣的人去閱覽並理解他們。但總的來說,他們提供了非線性化,保留了數據的維度,有助於提升網路的穩定度並且抑制過擬合。一個經典的CNN結構是這樣的:

網路的最後一層很重要,我們稍後會講到它。

現在,然我們回頭看看我們已經學到了什麼。

我們講到了第一層卷積層的卷積核的目的是識別特徵,他們識別像曲線和邊這樣的低層次特徵。但可以想像,如果想預測一個圖片的類別,必須讓網路有能力識別高層次的特徵,例如手、爪子或者耳朵。讓我們想想網路第一層的輸出是什麼。假設我們有5個5 × 5 × 3的卷積核,輸入圖像是32 × 32 × 3的,那麼我們會得到一個28 × 28 × 5的數組。來到第二層卷積層,第一層的輸出便成了第二層的輸入。這有些難以可視化。第一層的輸入是原始圖片,可第二層的輸入只是第一層產生的激活圖,激活圖的每一層都表示了低層次特徵的出現位置。如果用一些卷積核處理它,得到的會是表示高層次特徵出現的激活圖。這些特徵的類型可能是半圓(曲線和邊的組合)或者矩形(四條邊的組合)。隨著卷積層的增多,到最後,你可能會得到可以識別手寫字跡、粉色物體等等的卷積核。

如果,你想知道更多關於可視化卷積核的信息,可以看這篇 研究報告 ,以及這個 視頻 。

還有一件事情很有趣,當網路越來越深,卷積核會有越來越大的相對於輸入圖像的感知域。這意味著他們有能力考慮來自輸入圖像的更大范圍的信息(或者說,他們對一片更大的像素區域負責)。

到目前為止,我們已經識別出了那些高層次的特徵吧。網路最後的畫龍點睛之筆是全連層。

簡單地說,這一層接受輸入(來自卷積層,池化層或者激活函數都可以),並輸出一個N維向量,其中,N是所有有可能的類別的總數。例如,如果你想寫一個識別數字的程序,那麼N就是10,因為總共有10個數字。N維向量中的每一個數字都代表了屬於某個類別的概率。打個比方,如果你得到了[0 0.1 0.1 0.75 0 0 0 0 0 0.05],這代表著這張圖片是1的概率是10%,是2的概率是10%,是3的概率是75%,是9的概率5%(小貼士:你還有其他表示輸出的方法,但現在我只拿softmax (譯者註:一種常用於分類問題的激活函數) 來展示)。全連層的工作方式是根據上一層的輸出(也就是之前提到的可以用來表示特徵的激活圖)來決定這張圖片有可能屬於哪個類別。例如,如果程序需要預測哪些圖片是狗,那麼全連層在接收到一個包含類似於一個爪子和四條腿的激活圖時輸出一個很大的值。同樣的,如果要預測鳥,那麼全連層會對含有翅膀和喙的激活圖更感興趣。

基本上,全連層尋找那些最符合特定類別的特徵,並且具有相應的權重,來使你可以得到正確的概率。

現在讓我們來說說我之前有意沒有提到的神經網路的可能是最重要的一個方面。剛剛在你閱讀的時候,可能會有一大堆問題想問。第一層卷積層的卷積核們是怎麼知道自己該識別邊還是曲線的?全連層怎麼知道該找哪一種激活圖?每一層中的參數是怎麼確定的?機器確定參數(或者說權重)的方法叫做反向傳播演算法。

在講反向傳播之前,我們得回頭看看一個神經網路需要什麼才能工作。我們出生的時候並不知道一條狗或者一隻鳥長什麼樣。同樣的,在CNN開始之前,權重都是隨機生成的。卷積核並不知道要找邊還是曲線。更深的卷積層也不知道要找爪子還是喙。

等我們慢慢長大了,我們的老師和父母給我們看不同的圖片,並且告訴我們那是什麼(或者說,他們的類別)。這種輸入一幅圖像以及這幅圖像所屬的類別的想法,是CNN訓練的基本思路。在細細講反向傳播之前,我們先假設我們有一個包含上千張不同種類的動物以及他們所屬類別的訓練集。

反向傳播可以被分成四個不同的部分。前向傳播、損失函數、反向傳播和權重更新。

在前向傳播的階段,我們輸入一張訓練圖片,並讓它通過整個神經網路。對於第一個輸入圖像,由於所有權重都是隨機生成的,網路的輸出很有可能是類似於[.1 .1 .1 .1 .1 .1 .1 .1 .1 .1]的東西,一般來說並不對任一類別有偏好。具有當前權重的網路並沒有能力找出低層次的特徵並且總結出可能的類別。

下一步,是損失函數部分。注意,我們現在使用的是訓練數據。這些數據又有圖片又有類別。打個比方,第一張輸入的圖片是數字「3」。那麼它的標簽應該是[0 0 0 1 0 0 0 0 0 0]。一個損失函數可以有很多定義的方法,但比較常見的是MSE(均方誤差)。被定義為(實際−預測)22(實際−預測)22。

記變數L為損失函數的值。正如你想像的那樣,在第一組訓練圖片輸入的時候,損失函數的值可能非常非常高。來直觀地看看這個問題。我們想到達CNN的預測與數據標簽完全一樣的點(這意味著我們的網路預測的很對)。為了到達那裡,我們想要最小化誤差。如果把這個看成一個微積分問題,那我們只要找到哪些權重與網路的誤差關系最大。

這就相當於數學中的δLδWδLδW (譯者註:對L關於W求導) ,其中,W是某個層的權重。現在,我們要對網路進行 反向傳播 。這決定了哪些權重與誤差的關系最大,並且決定了怎樣調整他們來讓誤差減小。計算完這些導數以後,我們就來到了最後一步: 更新權重 。在這里,我們以與梯度相反的方向調整層中的權重。

學習率是一個有程序員決定的參數。一個很高的學習率意味著權重調整的幅度會很大,這可能會讓模型更快的擁有一組優秀的權重。然而,一個太高的學習率可能會讓調整的步伐過大,而不能精確地到達最佳點。

前向傳播、損失函數、反向傳播和更新權重,這四個過程是一次迭代。程序會對每一組訓練圖片重復這一過程(一組圖片通常稱為一個batch)。當對每一張圖片都訓練完之後,很有可能你的網路就已經訓練好了,權重已經被調整的很好。

最後,為了驗證CNN是否工作的很好,我們還有另一組特殊的數據。我們把這組數據中的圖片輸入到網路中,得到輸出並和標簽比較,這樣就能看出網路的表現如何了。

8. 一文看懂四種基本的神經網路架構

原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/

更多干貨就在我的個人博客 http://blackblog.tech 歡迎關注

剛剛入門神經網路,往往會對眾多的神經網路架構感到困惑,神經網路看起來復雜多樣,但是這么多架構無非也就是三類,前饋神經網路,循環網路,對稱連接網路,本文將介紹四種常見的神經網路,分別是CNN,RNN,DBN,GAN。通過這四種基本的神經網路架構,我們來對神經網路進行一定的了解。

神經網路是機器學習中的一種模型,是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
一般來說,神經網路的架構可以分為三類:

前饋神經網路:
這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。

循環網路:
循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。
循環網路的目的使用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。

對稱連接網路:
對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。

其實之前的帖子講過一些關於感知機的內容,這里再復述一下。
首先還是這張圖
這是一個M-P神經元

一個神經元有n個輸入,每一個輸入對應一個權值w,神經元內會對輸入與權重做乘法後求和,求和的結果與偏置做差,最終將結果放入激活函數中,由激活函數給出最後的輸出,輸出往往是二進制的,0 狀態代表抑制,1 狀態代表激活。

可以把感知機看作是 n 維實例空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的實例輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示。
與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。

如果我們要訓練一個感知機,應該怎麼辦呢?
我們會從隨機的權值開始,反復地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重復這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,法則如下:

這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。

多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,後續的CNN,DBN等神經網路只不過是將重新設計了每一層的類型。感知機可以說是神經網路的基礎,後續更為復雜的神經網路都離不開最簡單的感知機的模型,

談到機器學習,我們往往還會跟上一個詞語,叫做模式識別,但是真實環境中的模式識別往往會出現各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個對象。對象的某些部分可以隱藏在其他對象的後面。
物體光照:像素的強度被光照強烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。
卷積神經網路與普通神經網路的區別在於,卷積神經網路包含了一個由卷積層和子采樣層構成的特徵抽取器。在卷積神經網路的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這里共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網路的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網路各層之間的連接,同時又降低了過擬合的風險。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過程。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數。
卷積神經網路由三部分構成。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成。第三部分由一個全連結的多層感知機分類器構成。
這里舉AlexNet為例:

·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個,每個GPU上48個。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個,每個GPU上128個。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接,3*3的卷積核384個。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層連接沒有經過pooling層。
·第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
·第五層max-pooling:2×2的核。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量,作為該層的輸入。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的概率。

卷積神經網路在模式識別領域有著重要應用,當然這里只是對卷積神經網路做了最簡單的講解,卷積神經網路中仍然有很多知識,比如局部感受野,權值共享,多卷積核等內容,後續有機會再進行講解。

傳統的神經網路對於很多問題難以處理,比如你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNN之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN能夠對任何長度的序列數據進行處理。
這是一個簡單的RNN的結構,可以看到隱藏層自己是可以跟自己進行連接的。

那麼RNN為什麼隱藏層能夠看到上一刻的隱藏層的輸出呢,其實我們把這個網路展開來開就很清晰了。

從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:

在講DBN之前,我們需要對DBN的基本組成單位有一定的了解,那就是RBM,受限玻爾茲曼機。
首先什麼是玻爾茲曼機?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節點為隱層,白色節點為輸入層。
玻爾茲曼機和遞歸神經網路相比,區別體現在以下幾點:
1、遞歸神經網路本質是學習一個函數,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在於學習一組數據的「內在表示」,因此其沒有輸出層的概念。
2、遞歸神經網路各節點鏈接為有向環,而玻爾茲曼機各節點連接成無向完全圖。

而受限玻爾茲曼機是什麼呢?
最簡單的來說就是加入了限制,這個限制就是將完全圖變成了二分圖。即由一個顯層和一個隱層構成,顯層與隱層的神經元之間為雙向全連接。

h表示隱藏層,v表示顯層
在RBM中,任意兩個相連的神經元之間有一個權值w表示其連接強度,每個神經元自身有一個偏置系數b(對顯層神經元)和c(對隱層神經元)來表示其自身權重。
具體的公式推導在這里就不展示了

DBN是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。

生成對抗網路其實在之前的帖子中做過講解,這里在說明一下。
生成對抗網路的目標在於生成,我們傳統的網路結構往往都是判別模型,即判斷一個樣本的真實性。而生成模型能夠根據所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的。
GAN一般由兩個網路組成,生成模型網路,判別模型網路。
生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的雜訊 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。
舉個例子:生成網路 G 好比假幣製造團伙,專門製造假幣,判別網路 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。
傳統的判別網路:

生成對抗網路:

下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網路

判別網路

最終結果,使用MNIST作為初始樣本,通過學習後生成的數字,可以看到學習的效果還是不錯的。

本文非常簡單的介紹了四種神經網路的架構,CNN,RNN,DBN,GAN。當然也僅僅是簡單的介紹,並沒有深層次講解其內涵。這四種神經網路的架構十分常見,應用也十分廣泛。當然關於神經網路的知識,不可能幾篇帖子就講解完,這里知識講解一些基礎知識,幫助大家快速入(zhuang)門(bi)。後面的帖子將對深度自動編碼器,Hopfield 網路長短期記憶網路(LSTM)進行講解。

9. 神經網路:卷積神經網路(CNN)

神經網路 最早是由心理學家和神經學家提出的,旨在尋求開發和測試神經的計算模擬。

粗略地說, 神經網路 是一組連接的 輸入/輸出單元 ,其中每個連接都與一個 權 相關聯。在學習階段,通過調整權值,使得神經網路的預測准確性逐步提高。由於單元之間的連接,神經網路學習又稱 連接者學習。

神經網路是以模擬人腦神經元的數學模型為基礎而建立的,它由一系列神經元組成,單元之間彼此連接。從信息處理角度看,神經元可以看作是一個多輸入單輸出的信息處理單元,根據神經元的特性和功能,可以把神經元抽象成一個簡單的數學模型。

神經網路有三個要素: 拓撲結構、連接方式、學習規則

神經網路的拓撲結構 :神經網路的單元通常按照層次排列,根據網路的層次數,可以將神經網路分為單層神經網路、兩層神經網路、三層神經網路等。結構簡單的神經網路,在學習時收斂的速度快,但准確度低。

神經網路的層數和每層的單元數由問題的復雜程度而定。問題越復雜,神經網路的層數就越多。例如,兩層神經網路常用來解決線性問題,而多層網路就可以解決多元非線性問題

神經網路的連接 :包括層次之間的連接和每一層內部的連接,連接的強度用權來表示。

根據層次之間的連接方式,分為:

1)前饋式網路:連接是單向的,上層單元的輸出是下層單元的輸入,如反向傳播網路,Kohonen網路

2)反饋式網路:除了單項的連接外,還把最後一層單元的輸出作為第一層單元的輸入,如Hopfield網路

根據連接的范圍,分為:

1)全連接神經網路:每個單元和相鄰層上的所有單元相連

2)局部連接網路:每個單元只和相鄰層上的部分單元相連

神經網路的學習

根據學習方法分:

感知器:有監督的學習方法,訓練樣本的類別是已知的,並在學習的過程中指導模型的訓練

認知器:無監督的學習方法,訓練樣本類別未知,各單元通過競爭學習。

根據學習時間分:

離線網路:學習過程和使用過程是獨立的

在線網路:學習過程和使用過程是同時進行的

根據學習規則分:

相關學習網路:根據連接間的激活水平改變權系數

糾錯學習網路:根據輸出單元的外部反饋改變權系數

自組織學習網路:對輸入進行自適應地學習

摘自《數學之美》對人工神經網路的通俗理解:

神經網路種類很多,常用的有如下四種:

1)Hopfield網路,典型的反饋網路,結構單層,有相同的單元組成

2)反向傳播網路,前饋網路,結構多層,採用最小均方差的糾錯學習規則,常用於語言識別和分類等問題

3)Kohonen網路:典型的自組織網路,由輸入層和輸出層構成,全連接

4)ART網路:自組織網路

深度神經網路:

Convolutional Neural Networks(CNN)卷積神經網路

Recurrent neural Network(RNN)循環神經網路

Deep Belief Networks(DBN)深度信念網路

深度學習是指多層神經網路上運用各種機器學習演算法解決圖像,文本等各種問題的演算法集合。深度學習從大類上可以歸入神經網路,不過在具體實現上有許多變化。

深度學習的核心是特徵學習,旨在通過分層網路獲取分層次的特徵信息,從而解決以往需要人工設計特徵的重要難題。

Machine Learning vs. Deep Learning 

神經網路(主要是感知器)經常用於 分類

神經網路的分類知識體現在網路連接上,被隱式地存儲在連接的權值中。

神經網路的學習就是通過迭代演算法,對權值逐步修改的優化過程,學習的目標就是通過改變權值使訓練集的樣本都能被正確分類。

神經網路特別適用於下列情況的分類問題:

1) 數據量比較小,缺少足夠的樣本建立模型

2) 數據的結構難以用傳統的統計方法來描述

3) 分類模型難以表示為傳統的統計模型

缺點:

1) 需要很長的訓練時間,因而對於有足夠長訓練時間的應用更合適。

2) 需要大量的參數,這些通常主要靠經驗確定,如網路拓撲或「結構」。

3)  可解釋性差 。該特點使得神經網路在數據挖掘的初期並不看好。

優點:

1) 分類的准確度高

2)並行分布處理能力強

3)分布存儲及學習能力高

4)對噪音數據有很強的魯棒性和容錯能力

最流行的基於神經網路的分類演算法是80年代提出的 後向傳播演算法 。後向傳播演算法在多路前饋神經網路上學習。 

定義網路拓撲

在開始訓練之前,用戶必須說明輸入層的單元數、隱藏層數(如果多於一層)、每一隱藏層的單元數和輸出層的單元數,以確定網路拓撲。

對訓練樣本中每個屬性的值進行規格化將有助於加快學習過程。通常,對輸入值規格化,使得它們落入0.0和1.0之間。

離散值屬性可以重新編碼,使得每個域值一個輸入單元。例如,如果屬性A的定義域為(a0,a1,a2),則可以分配三個輸入單元表示A。即,我們可以用I0 ,I1 ,I2作為輸入單元。每個單元初始化為0。如果A = a0,則I0置為1;如果A = a1,I1置1;如此下去。

一個輸出單元可以用來表示兩個類(值1代表一個類,而值0代表另一個)。如果多於兩個類,則每個類使用一個輸出單元。

隱藏層單元數設多少個「最好」 ,沒有明確的規則。

網路設計是一個實驗過程,並可能影響准確性。權的初值也可能影響准確性。如果某個經過訓練的網路的准確率太低,則通常需要採用不同的網路拓撲或使用不同的初始權值,重復進行訓練。

後向傳播演算法學習過程:

迭代地處理一組訓練樣本,將每個樣本的網路預測與實際的類標號比較。

每次迭代後,修改權值,使得網路預測和實際類之間的均方差最小。

這種修改「後向」進行。即,由輸出層,經由每個隱藏層,到第一個隱藏層(因此稱作後向傳播)。盡管不能保證,一般地,權將最終收斂,學習過程停止。

演算法終止條件:訓練集中被正確分類的樣本達到一定的比例,或者權系數趨近穩定。

後向傳播演算法分為如下幾步:

1) 初始化權

網路的權通常被初始化為很小的隨機數(例如,范圍從-1.0到1.0,或從-0.5到0.5)。

每個單元都設有一個偏置(bias),偏置也被初始化為小隨機數。

2) 向前傳播輸入

對於每一個樣本X,重復下面兩步:

向前傳播輸入,向後傳播誤差

計算各層每個單元的輸入和輸出。輸入層:輸出=輸入=樣本X的屬性;即,對於單元j,Oj = Ij = Xj。隱藏層和輸出層:輸入=前一層的輸出的線性組合,即,對於單元j, Ij =wij Oi + θj,輸出=

3) 向後傳播誤差

計算各層每個單元的誤差。

輸出層單元j,誤差:

Oj是單元j的實際輸出,而Tj是j的真正輸出。

隱藏層單元j,誤差:

wjk是由j到下一層中單元k的連接的權,Errk是單元k的誤差

更新 權 和 偏差 ,以反映傳播的誤差。

權由下式更新:

 其中,△wij是權wij的改變。l是學習率,通常取0和1之間的值。

 偏置由下式更新:

  其中,△θj是偏置θj的改變。

Example

人類視覺原理:

深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和Torsten Wiesel,以及Roger Sperry。前兩位的主要貢獻,是「發現了視覺系統的信息處理」, 可視皮層是分級的 。

人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是只氣球)。

對於不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:

在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀乾等),到最上層,不同的高級特徵最終組合成相應的圖像,從而能夠讓人類准確的區分不同的物體。

可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。

卷積神經網路是一種多層神經網路,擅長處理圖像特別是大圖像的相關機器學習問題。卷積網路通過一系列方法,成功將數據量龐大的圖像識別問題不斷降維,最終使其能夠被訓練。

CNN最早由Yann LeCun提出並應用在手寫字體識別上。LeCun提出的網路稱為LeNet,其網路結構如下:

這是一個最典型的卷積網路,由 卷積層、池化層、全連接層 組成。其中卷積層與池化層配合,組成多個卷積組,逐層提取特徵,最終通過若干個全連接層完成分類。

CNN通過卷積來模擬特徵區分,並且通過卷積的權值共享及池化,來降低網路參數的數量級,最後通過傳統神經網路完成分類等任務。

降低參數量級:如果使用傳統神經網路方式,對一張圖片進行分類,那麼,把圖片的每個像素都連接到隱藏層節點上,對於一張1000x1000像素的圖片,如果有1M隱藏層單元,一共有10^12個參數,這顯然是不能接受的。

但是在CNN里,可以大大減少參數個數,基於以下兩個假設:

1)最底層特徵都是局部性的,也就是說,用10x10這樣大小的過濾器就能表示邊緣等底層特徵

2)圖像上不同小片段,以及不同圖像上的小片段的特徵是類似的,也就是說,能用同樣的一組分類器來描述各種各樣不同的圖像

基於以上兩個假設,就能把第一層網路結構簡化

用100個10x10的小過濾器,就能夠描述整幅圖片上的底層特徵。

卷積運算的定義如下圖所示:

如上圖所示,一個5x5的圖像,用一個3x3的 卷積核 :

   101

   010

   101

來對圖像進行卷積操作(可以理解為有一個滑動窗口,把卷積核與對應的圖像像素做乘積然後求和),得到了3x3的卷積結果。

這個過程可以理解為使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。在實際訓練過程中, 卷積核的值是在學習過程中學到的。

在具體應用中,往往有多個卷積核,可以認為, 每個卷積核代表了一種圖像模式 ,如果某個圖像塊與此卷積核卷積出的值大,則認為此圖像塊十分接近於此卷積核。如果設計了6個卷積核,可以理解為這個圖像上有6種底層紋理模式,也就是用6種基礎模式就能描繪出一副圖像。以下就是24種不同的卷積核的示例:

池化 的過程如下圖所示:

可以看到,原始圖片是20x20的,對其進行采樣,采樣窗口為10x10,最終將其采樣成為一個2x2大小的特徵圖。

之所以這么做,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數據維度,就進行采樣。

即使減少了許多數據,特徵的統計屬性仍能夠描述圖像,而且由於降低了數據維度,有效地避免了過擬合。

在實際應用中,分為最大值采樣(Max-Pooling)與平均值采樣(Mean-Pooling)。

LeNet網路結構:

注意,上圖中S2與C3的連接方式並不是全連接,而是部分連接。最後,通過全連接層C5、F6得到10個輸出,對應10個數字的概率。

卷積神經網路的訓練過程與傳統神經網路類似,也是參照了反向傳播演算法

第一階段,向前傳播階段:

a)從樣本集中取一個樣本(X,Yp),將X輸入網路;

b)計算相應的實際輸出Op

第二階段,向後傳播階段

a)計算實際輸出Op與相應的理想輸出Yp的差;

b)按極小化誤差的方法反向傳播調整權矩陣。

10. 卷積神經網路的 卷積層、激活層、池化層、全連接層

數據輸入的是一張圖片(輸入層),CONV表示卷積層,RELU表示激勵層,POOL表示池化層,Fc表示全連接層

全連接神經網路需要非常多的計算資源才能支撐它來做反向傳播和前向傳播,所以說全連接神經網路可以存儲非常多的參數,如果你給它的樣本如果沒有達到它的量級的時候,它可以輕輕鬆鬆把你給他的樣本全部都記下來,這會出現過擬合的情況。

所以我們應該把神經元和神經元之間的連接的權重個數降下來,但是降下來我們又不能保證它有較強的學習能力,所以這是一個糾結的地方,所以有一個方法就是 局部連接+權值共享 ,局部連接+權值共享不僅權重參數降下來了,而且學習能力並沒有實質的降低,除此之外還有其它的好處,下來看一下,下面的這幾張圖片:

一個圖像的不同表示方式

這幾張圖片描述的都是一個東西,但是有的大有的小,有的靠左邊,有的靠右邊,有的位置不同,但是我們構建的網路識別這些東西的時候應該是同一結果。為了能夠達到這個目的,我們可以讓圖片的不同位置具有相同的權重(權值共享),也就是上面所有的圖片,我們只需要在訓練集中放一張,我們的神經網路就可以識別出上面所有的,這也是 權值共享 的好處。

而卷積神經網路就是局部連接+權值共享的神經網路。

現在我們對卷積神經網路有一個初步認識了,下面具體來講解一下卷積神經網路,卷積神經網路依舊是層級結構,但層的功能和形式做了改變,卷積神經網路常用來處理圖片數據,比如識別一輛汽車:

在圖片輸出到神經網路之前,常常先進行圖像處理,有 三種 常見的圖像的處理方式:

均值化和歸一化

去相關和白化

圖片有一個性質叫做局部關聯性質,一個圖片的像素點影響最大的是它周邊的像素點,而距離這個像素點比較遠的像素點二者之間關系不大。這個性質意味著每一個神經元我們不用處理全局的圖片了(和上一層全連接),我們的每一個神經元只需要和上一層局部連接,相當於每一個神經元掃描一小區域,然後許多神經元(這些神經元權值共享)合起來就相當於掃描了全局,這樣就構成一個特徵圖,n個特徵圖就提取了這個圖片的n維特徵,每個特徵圖是由很多神經元來完成的。

在卷積神經網路中,我們先選擇一個局部區域(filter),用這個局部區域(filter)去掃描整張圖片。 局部區域所圈起來的所有節點會被連接到下一層的 一個節點上 。我們拿灰度圖(只有一維)來舉例:

局部區域

圖片是矩陣式的,將這些以矩陣排列的節點展成了向量。就能更好的看出來卷積層和輸入層之間的連接,並不是全連接的,我們將上圖中的紅色方框稱為filter,它是2*2的,這是它的尺寸,這不是固定的,我們可以指定它的尺寸。

我們可以看出來當前filter是2*2的小窗口,這個小窗口會將圖片矩陣從左上角滑到右下角,每滑一次就會一下子圈起來四個,連接到下一層的一個神經元,然後產生四個權重,這四個權重(w1、w2、w3、w4)構成的矩陣就叫做卷積核。

卷積核是演算法自己學習得到的,它會和上一層計算,比如,第二層的0節點的數值就是局部區域的線性組合(w1 0+w2 1+w3 4+w4 5),即被圈中節點的數值乘以對應的權重後相加。

卷積核計算

卷積操作

我們前面說過圖片不用向量表示是為了保留圖片平面結構的信息。 同樣的,卷積後的輸出若用上圖的向量排列方式則丟失了平面結構信息。 所以我們依然用矩陣的方式排列它們,就得到了下圖所展示的連接,每一個藍色結點連接四個黃色的結點。

卷積層的連接方式

圖片是一個矩陣然後卷積神經網路的下一層也是一個矩陣,我們用一個卷積核從圖片矩陣左上角到右下角滑動,每滑動一次,當然被圈起來的神經元們就會連接下一層的一個神經元,形成參數矩陣這個就是卷積核,每次滑動雖然圈起來的神經元不同,連接下一層的神經元也不同,但是產生的參數矩陣確是一樣的,這就是 權值共享

卷積核會和掃描的圖片的那個局部矩陣作用產生一個值,比如第一次的時候,(w1 0+w2 1+w3 4+w4 5),所以,filter從左上到右下的這個過程中會得到一個矩陣(這就是下一層也是一個矩陣的原因),具體過程如下所示:

卷積計算過程

上圖中左邊是圖矩陣,我們使用的filter的大小是3 3的,第一次滑動的時候,卷積核和圖片矩陣作用(1 1+1 0+1 1+0 0+1 1+1 0+0 1+0 0+1 1)=4,會產生一個值,這個值就是右邊矩陣的第一個值,filter滑動9次之後,會產生9個值,也就是說下一層有9個神經元,這9個神經元產生的值就構成了一個矩陣,這矩陣叫做特徵圖,表示image的某一維度的特徵,當然具體哪一維度可能並不知道,可能是這個圖像的顏色,也有可能是這個圖像的輪廓等等。

單通道圖片總結 :以上就是單通道的圖片的卷積處理,圖片是一個矩陣,我們用指定大小的卷積核從左上角到右下角來滑動,每次滑動所圈起來的結點會和下一層的一個結點相連,連接之後就會形成局部連接,每一條連接都會產生權重,這些權重就是卷積核,所以每次滑動都會產生一個卷積核,因為權值共享,所以這些卷積核都是一樣的。卷積核會不斷和當時卷積核所圈起來的局部矩陣作用,每次產生的值就是下一層結點的值了,這樣多次產生的值組合起來就是一個特徵圖,表示某一維度的特徵。也就是從左上滑動到右下這一過程中會形成一個特徵圖矩陣(共享一個卷積核),再從左上滑動到右下又會形成另一個特徵圖矩陣(共享另一個卷積核),這些特徵圖都是表示特徵的某一維度。

三個通道的圖片如何進行卷積操作?

至此我們應該已經知道了單通道的灰度圖是如何處理的,實際上我們的圖片都是RGB的圖像,有三個通道,那麼此時圖像是如何卷積的呢?

彩色圖像

filter窗口滑的時候,我們只是從width和height的角度來滑動的,並沒有考慮depth,所以每滑動一次實際上是產生一個卷積核,共享這一個卷積核,而現在depth=3了,所以每滑動一次實際上產生了具有三個通道的卷積核(它們分別作用於輸入圖片的藍色、綠色、紅色通道),卷積核的一個通道核藍色的矩陣作用產生一個值,另一個和綠色的矩陣作用產生一個值,最後一個和紅色的矩陣作用產生一個值,然後這些值加起來就是下一層結點的值,結果也是一個矩陣,也就是一張特徵圖。

三通道的計算過程

要想有多張特徵圖的話,我們可以再用新的卷積核來進行左上到右下的滑動,這樣就會形成 新的特徵圖

三通道圖片的卷積過程

也就是說增加一個卷積核,就會產生一個特徵圖,總的來說就是輸入圖片有多少通道,我們的卷積核就需要對應多少通道,而本層中卷積核有多少個,就會產生多少個特徵圖。這樣卷積後輸出可以作為新的輸入送入另一個卷積層中處理,有幾個特徵圖那麼depth就是幾,那麼下一層的每一個特徵圖就得用相應的通道的卷積核來對應處理,這個邏輯要清楚,我們需要先了解一下 基本的概念:

卷積計算的公式

4x4的圖片在邊緣Zero padding一圈後,再用3x3的filter卷積後,得到的Feature Map尺寸依然是4x4不變。

填充

當然也可以使用5x5的filte和2的zero padding可以保持圖片的原始尺寸,3x3的filter考慮到了像素與其距離為1以內的所有其他像素的關系,而5x5則是考慮像素與其距離為2以內的所有其他像素的關系。

規律: Feature Map的尺寸等於

(input_size + 2 * padding_size − filter_size)/stride+1

我們可以把卷積層的作用 總結一點: 卷積層其實就是在提取特徵,卷積層中最重要的是卷積核(訓練出來的),不同的卷積核可以探測特定的形狀、顏色、對比度等,然後特徵圖保持了抓取後的空間結構,所以不同卷積核對應的特徵圖表示某一維度的特徵,具體什麼特徵可能我們並不知道。特徵圖作為輸入再被卷積的話,可以則可以由此探測到"更大"的形狀概念,也就是說隨著卷積神經網路層數的增加,特徵提取的越來越具體化。

激勵層的作用可以理解為把卷積層的結果做 非線性映射

激勵層

上圖中的f表示激勵函數,常用的激勵函數幾下幾種:

常用的激勵函數

我們先來看一下激勵函數Sigmoid導數最小為0,最大為1/4,

激勵函數Sigmoid

Tanh激活函數:和sigmoid相似,它會關於x軸上下對應,不至於朝某一方面偏向

Tanh激活函數

ReLU激活函數(修正線性單元):收斂快,求梯度快,但較脆弱,左邊的梯度為0

ReLU激活函數

Leaky ReLU激活函數:不會飽和或者掛掉,計算也很快,但是計算量比較大

Leaky ReLU激活函數

一些激勵函數的使用技巧 :一般不要用sigmoid,首先試RELU,因為快,但要小心點,如果RELU失效,請用Leaky ReLU,某些情況下tanh倒是有不錯的結果。

這就是卷積神經網路的激勵層,它就是將卷積層的線性計算的結果進行了非線性映射。可以從下面的圖中理解。它展示的是將非線性操作應用到一個特徵圖中。這里的輸出特徵圖也可以看作是"修正"過的特徵圖。如下所示:

非線性操作

池化層:降低了各個特徵圖的維度,但可以保持大分重要的信息。池化層夾在連續的卷積層中間,壓縮數據和參數的量,減小過擬合,池化層並沒有參數,它只不過是把上層給它的結果做了一個下采樣(數據壓縮)。下采樣有 兩種 常用的方式:

Max pooling :選取最大的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖中取出最大的元素,最大池化被證明效果更好一些。

Average pooling :平均的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖算出平均值

Max pooling

我們要注意一點的是:pooling在不同的depth上是分開執行的,也就是depth=5的話,pooling進行5次,產生5個池化後的矩陣,池化不需要參數控制。池化操作是分開應用到各個特徵圖的,我們可以從五個輸入圖中得到五個輸出圖。

池化操作

無論是max pool還是average pool都有分信息被舍棄,那麼部分信息被舍棄後會損壞識別結果嗎?

因為卷積後的Feature Map中有對於識別物體不必要的冗餘信息,我們下采樣就是為了去掉這些冗餘信息,所以並不會損壞識別結果。

我們來看一下卷積之後的冗餘信息是怎麼產生的?

我們知道卷積核就是為了找到特定維度的信息,比如說某個形狀,但是圖像中並不會任何地方都出現這個形狀,但卷積核在卷積過程中沒有出現特定形狀的圖片位置卷積也會產生一個值,但是這個值的意義就不是很大了,所以我們使用池化層的作用,將這個值去掉的話,自然也不會損害識別結果了。

比如下圖中,假如卷積核探測"橫折"這個形狀。 卷積後得到3x3的Feature Map中,真正有用的就是數字為3的那個節點,其餘數值對於這個任務而言都是無關的。 所以用3x3的Max pooling後,並沒有對"橫折"的探測產生影響。 試想在這里例子中如果不使用Max pooling,而讓網路自己去學習。 網路也會去學習與Max pooling近似效果的權重。因為是近似效果,增加了更多的參數的代價,卻還不如直接進行最大池化處理。

最大池化處理

在全連接層中所有神經元都有權重連接,通常全連接層在卷積神經網路尾部。當前面卷積層抓取到足以用來識別圖片的特徵後,接下來的就是如何進行分類。 通常卷積網路的最後會將末端得到的長方體平攤成一個長長的向量,並送入全連接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類為四分類問題,所以卷積神經網路的輸出層就會有四個神經元。

四分類問題

我們從卷積神經網路的輸入層、卷積層、激活層、池化層以及全連接層來講解卷積神經網路,我們可以認為全連接層之間的在做特徵提取,而全連接層在做分類,這就是卷積神經網路的核心。

閱讀全文

與全連接神經網路演算法總結相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:527
電腦無法檢測到網路代理 瀏覽:1376
筆記本電腦一天會用多少流量 瀏覽:593
蘋果電腦整機轉移新機 瀏覽:1380
突然無法連接工作網路 瀏覽:1075
聯通網路怎麼設置才好 瀏覽:1230
小區網路電腦怎麼連接路由器 瀏覽:1052
p1108列印機網路共享 瀏覽:1215
怎麼調節台式電腦護眼 瀏覽:715
深圳天虹蘋果電腦 瀏覽:951
網路總是異常斷開 瀏覽:617
中級配置台式電腦 瀏覽:1010
中國網路安全的戰士 瀏覽:637
同志網站在哪裡 瀏覽:1420
版觀看完整完結免費手機在線 瀏覽:1464
怎樣切換默認數據網路設置 瀏覽:1113
肯德基無線網無法訪問網路 瀏覽:1290
光纖貓怎麼連接不上網路 瀏覽:1494
神武3手游網路連接 瀏覽:969
局網列印機網路共享 瀏覽:1005