1. 人工神經網路概述(更新中)
智能: 從感覺到記憶再到思維的過程稱為「智慧」,智慧的結果是語言和行為。行為和語言予以表達稱為「能力」。智慧和能力的總稱為「智能」。感覺、記憶、思維、行為、語言的過程稱為「智能過程」。
人工智慧: 人工構建的智能系統。
人工智慧是研究和開發用於模擬、延伸和擴展人類智能的理論、方法、技術及應用的技術學科,其主要研究內容可以歸納為以下四個方面。
人工神經網路是基於生物神經元網路機制提出的一種計算結構,是生物神經網路的某種模擬、簡化和抽象。神經元是這一網路的「節點」,即「處理單元」。
人工神經網路可用於逼近非線性映射、分類識別、優化計算以及知識挖掘。近年來,人工神經網路在模式識別、信號處理、控制工程和優化計算領域得到了廣泛的應用。
M-P模型由心理學家McCulloch和數學家W. Pitts在1943年提出。
M-P模型結構是一個多輸入、單輸出的非線性元件。其I/O關系可推述為
其中, 表示從其他神經元傳來的輸入信號; 表示從神經元 到神經元 的連接權值; 表示閾值; 表示激勵函數或轉移函數; 表示神經元 的輸出信號。
作為一種最基本的神經元數學模型,M-P模型包括了加權、求和和激勵(轉移)三部分功能。
神經元的數據模型主要區別於採用了不同的激勵函數。
概率型函數的輸入和輸出之間的關系是不確定的。分布律如下
其中, 被稱為溫度參數。
感知機(Perceptron)是美國學者Rosenblatt於1957年提出的一種用於模式分類的神經網路模型。
M-P模型通常叫做單輸出的感知機。按照M-P模型的要求,該人工神經元的激活函數為階躍函數。為了方便表示,M-P模型表示為下圖所示的結構。
用多個這樣的單輸入感知機可以構成一個多輸出的感知機,其結構如下
對於二維平面,當輸入/輸出為 線性可分 集合時,一定可以找到一條直線將模式分成兩類。此時感知機的結構圖3所示,顯然通過調整感知機的權值及閾值可以修改兩類模式的分界線:
線性可分: 這里的線性可分是指兩類樣本可以用直線、平面或超平面分開,否則稱為線性不可分。
感知機的基本功能是對外部信號進行感知和識別,這就是當外部 個刺激信號或來自其它 個神經元(的信號)處於一定的狀態時,感知機就處於興奮狀態,而外部 個信號或 個神經元的輸出處於另一個狀態時,感知機就呈現抑制狀態。
如果 、 是 中兩個互不相交的集合,且有如下方程成立
則稱集合 為感知機的 學習目標 。根據感知機模型,學習演算法實際上是要尋找權重 、 滿足下述要求:
感知機的訓練過程是感知機權值的逐步調整過程,為此,用 表示每一次調整的序號。 對應於學習開始前的初始狀態,此時對應的權值為初始化值。
2. CNN、RNN、DNN的一般解釋
CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別?
轉自知乎 科言君 的回答
神經網路技術起源於上世紀五、六十年代,當時叫 感知機 (perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。 (扯一個不相關的:由於計算技術的落後,當時感知器傳輸函數是用線拉動變阻器改變電阻的方法機械實現的,腦補一下科學家們扯著密密麻麻的導線的樣子…)
但是,Rosenblatt的單層感知機有一個嚴重得不能再嚴重的問題,即它對稍復雜一些的函數都無能為力(比如最為典型的「異或」操作)。連異或都不能擬合,你還能指望這貨有什麼實際用途么o(╯□╰)o
隨著數學的發展,這個缺點直到上世紀八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)發明的 多層感知機 (multilayerperceptron)克服。多層感知機,顧名思義,就是有多個隱含層的感知機(廢話……)。好好,我們看一下多層感知機的結構:
圖1 上下層神經元全部相連的神經網路——多層感知機
多層感知機可以擺脫早期離散傳輸函數的束縛,使用sigmoid或tanh等連續函數模擬神經元對激勵的響應,在訓練演算法上則使用Werbos發明的反向傳播BP演算法。對,這貨就是我們現在所說的 神經網路 NN ——神經網路聽起來不知道比感知機高端到哪裡去了!這再次告訴我們起一個好聽的名字對於研(zhuang)究(bi)很重要!
多層感知機解決了之前無法模擬異或邏輯的缺陷,同時更多的層數也讓網路更能夠刻畫現實世界中的復雜情形。相信年輕如Hinton當時一定是春風得意。
多層感知機給我們帶來的啟示是, 神經網路的層數直接決定了它對現實的刻畫能力 ——利用每層更少的神經元擬合更加復雜的函數[1]。
(Bengio如是說:functions that can be compactly
represented by a depth k architecture might require an exponential number of
computational elements to be represented by a depth k − 1 architecture.)
即便大牛們早就預料到神經網路需要變得更深,但是有一個夢魘總是縈繞左右。隨著神經網路層數的加深, 優化函數越來越容易陷入局部最優解 ,並且這個「陷阱」越來越偏離真正的全局最優。利用有限數據訓練的深層網路,性能還不如較淺層網路。同時,另一個不可忽略的問題是隨著網路層數增加, 「梯度消失」現象更加嚴重 。具體來說,我們常常使用sigmoid作為神經元的輸入輸出函數。對於幅度為1的信號,在BP反向傳播梯度時,每傳遞一層,梯度衰減為原來的0.25。層數一多,梯度指數衰減後低層基本上接受不到有效的訓練信號。
2006年,Hinton利用預訓練方法緩解了局部最優解問題,將隱含層推動到了7層[2],神經網路真正意義上有了「深度」,由此揭開了深度學習的熱潮。這里的「深度」並沒有固定的定義——在語音識別中4層網路就能夠被認為是「較深的」,而在圖像識別中20層以上的網路屢見不鮮。為了克服梯度消失,ReLU、maxout等傳輸函數代替了sigmoid,形成了如今DNN的基本形式。單從結構上來說, 全連接的 DNN 和圖 1 的多層感知機是沒有任何區別的 。
值得一提的是,今年出現的高速公路網路(highway network)和深度殘差學習(deep resial learning)進一步避免了梯度消失,網路層數達到了前所未有的一百多層(深度殘差學習:152層)[3,4]!具體結構題主可自行搜索了解。如果你之前在懷疑是不是有很多方法打上了「深度學習」的噱頭,這個結果真是深得讓人心服口服。
圖2 縮減版的深度殘差學習網路,僅有34 層,終極版有152 層,自行感受一下
如圖1所示,我們看到 全連接 DNN 的結構里下層神經元和所有上層神經元都能夠形成連接 ,帶來的潛在問題是 參數數量的膨脹 。假設輸入的是一幅像素為1K*1K的圖像,隱含層有1M個節點,光這一層就有10^12個權重需要訓練,這不僅容易過擬合,而且極容易陷入局部最優。另外,圖像中有固有的局部模式(比如輪廓、邊界,人的眼睛、鼻子、嘴等)可以利用,顯然應該將圖像處理中的概念和神經網路技術相結合。此時我們可以祭出題主所說的卷積神經網路CNN。對於CNN來說,並不是所有上下層神經元都能直接相連,而是 通過「卷積核」作為中介。同一個卷積核在所有圖像內是共享的,圖像通過卷積操作後仍然保留原先的位置關系。 兩層之間的卷積傳輸的示意圖如下:
圖3 卷積神經網路隱含層(摘自Theano 教程)
通過一個例子簡單說明卷積神經網路的結構。假設圖3中m-1=1是輸入層,我們需要識別一幅彩色圖像,這幅圖像具有四個通道ARGB(透明度和紅綠藍,對應了四幅相同大小的圖像),假設卷積核大小為100*100,共使用100個卷積核w1到w100(從直覺來看,每個卷積核應該學習到不同的結構特徵)。用w1在ARGB圖像上進行卷積操作,可以得到隱含層的第一幅圖像;這幅隱含層圖像左上角第一個像素是四幅輸入圖像左上角100*100區域內像素的加權求和,以此類推。同理,算上其他卷積核,隱含層對應100幅「圖像」。每幅圖像對是對原始圖像中不同特徵的響應。按照這樣的結構繼續傳遞下去。CNN中還有max-pooling等操作進一步提高魯棒性。
圖4 一個典型的卷積神經網路結構,注意到最後一層實際上是一個全連接層(摘自Theano 教程)
在這個例子里,我們注意到 輸入層到隱含層的參數瞬間降低到了 100*100*100=10^6 個 !這使得我們能夠用已有的訓練數據得到良好的模型。題主所說的適用於圖像識別,正是由於 CNN 模型限制參數了個數並挖掘了局部結構的這個特點 。順著同樣的思路,利用語音語譜結構中的局部信息,CNN照樣能應用在語音識別中。
全連接的DNN還存在著另一個問題——無法對時間序列上的變化進行建模。然而, 樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要 。對了適應這種需求,就出現了題主所說的另一種神經網路結構——循環神經網路RNN。
在普通的全連接網路或CNN中,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被成為前向神經網路(Feed-forward Neural Networks)。而在 RNN 中,神經元的輸出可以在下一個時間戳直接作用到自身 ,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出!表示成圖就是這樣的:
圖5 RNN 網路結構
我們可以看到在隱含層節點之間增加了互連。為了分析方便,我們常將RNN在時間上進行展開,得到如圖6所示的結構:
圖6 RNN 在時間上進行展開
Cool, ( t+1 )時刻網路的最終結果O(t+1) 是該時刻輸入和所有歷史共同作用的結果 !這就達到了對時間序列建模的目的。
不知題主是否發現,RNN可以看成一個在時間上傳遞的神經網路,它的深度是時間的長度!正如我們上面所說, 「梯度消失」現象又要出現了,只不過這次發生在時間軸上 。對於t時刻來說,它產生的梯度在時間軸上向歷史傳播幾層之後就消失了,根本就無法影響太遙遠的過去。因此,之前說「所有歷史」共同作用只是理想的情況,在實際中,這種影響也就只能維持若干個時間戳。
為了解決時間上的梯度消失,機器學習領域發展出了 長短時記憶單元 LSTM ,通過門的開關實現時間上記憶功能,並防止梯度消失 ,一個LSTM單元長這個樣子:
圖7 LSTM 的模樣
除了題主疑惑的三種網路,和我之前提到的深度殘差學習、LSTM外,深度學習還有許多其他的結構。舉個例子,RNN既然能繼承歷史信息,是不是也能吸收點未來的信息呢?因為在序列信號分析中,如果我能預知未來,對識別一定也是有所幫助的。因此就有了 雙向 RNN 、雙向 LSTM ,同時利用歷史和未來的信息。
圖8 雙向RNN
事實上, 不論是那種網路,他們在實際應用中常常都混合著使用,比如 CNN 和RNN 在上層輸出之前往往會接上全連接層,很難說某個網路到底屬於哪個類別。 不難想像隨著深度學習熱度的延續,更靈活的組合方式、更多的網路結構將被發展出來。盡管看起來千變萬化,但研究者們的出發點肯定都是為了解決特定的問題。題主如果想進行這方面的研究,不妨仔細分析一下這些結構各自的特點以及它們達成目標的手段。入門的話可以參考:
Ng寫的Ufldl: UFLDL教程 - Ufldl
也可以看Theano內自帶的教程,例子非常具體: Deep Learning Tutorials
歡迎大家繼續推薦補充。
當然啦,如果題主只是想湊個熱鬧時髦一把,或者大概了解一下方便以後把妹使,這樣看看也就罷了吧。
參考文獻:
[1]
Bengio Y. Learning Deep
Architectures for AI[J]. Foundations & Trends® in Machine Learning, 2009,
2(1):1-127.
[2]
Hinton G E, Salakhutdinov R R.
Recing the Dimensionality of Data with Neural Networks[J]. Science, 2006,
313(5786):504-507.
[3]
He K, Zhang X, Ren S, Sun J. Deep
Resial Learning for Image Recognition. arXiv:1512.03385, 2015.
[4]
Srivastava R K, Greff K,
Schmidhuber J. Highway networks. arXiv:1505.00387, 2015.
3. 神經網路演算法
20 世紀五、六⼗年代,科學家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影響,發明了感知機(Perceptrons)。
⼀個感知器接受⼏個⼆進制輸⼊, ,並產⽣⼀個⼆進制輸出:
如上圖所示的感知機有三個輸⼊: 。通常可以有更多或更少輸⼊。 我們再引⼊權重: ,衡量輸入對輸出的重要性。感知機的輸出為0 或者 1,則由分配權重後的總和 ⼩於等於或者⼤於閾值決定。和權重⼀樣,閾值(threshold)是⼀個實數,⼀個神經元的參數。⽤更精確的代數形式如下:
給三個因素設置權重來作出決定:
可以把這三個因素對應地⽤⼆進制變數 來表⽰。例如,如果天⽓好,我們把
,如果不好, 。類似地,如果你的朋友陪你去, ,否則 。 也類似。
這三個對於可能對你來說,「電影好不好看」對你來說最重要,而天氣顯得不是那麼的重要。所以你會這樣分配權值: ,然後定義閾值threshold=5。
現在,你可以使⽤感知器來給這種決策建⽴數學模型。
例如:
隨著權重和閾值的變化,你可以得到不同的決策模型。很明顯,感知機不是⼈做出決策使⽤的全部模型。但是這個例⼦說明了⼀個感知機如何能權衡不同的依據來決策。這看上去也可以⼤致解釋⼀個感知機⽹絡有時確實能夠做出一些不錯的決定。
現在我們隊上面的結構做一點變化,令b=-threshold,即把閾值移到不等號左邊,變成偏置, 那麼感知器的規則可以重寫為:
引⼊偏置只是我們描述感知器的⼀個很⼩的變動,但是我們後⾯會看到它引導更進⼀步的符號簡化。因此,我們不再⽤閾值,⽽總是使⽤偏置。
感知機是首個可以學習的人工神經網路,它的出現引起的神經網路的第一層高潮。需要指出的是,感知機只能做簡單的線性分類任務,而且Minsky在1969年出版的《Perceptron》書中,證明了感知機對XOR(異或)這樣的問題都無法解決。但是感知機的提出,對神經網路的發展是具有重要意義的。
通過上面的感知機的觀察我們發現一個問題,每個感知機的輸出只有0和1,這就意味著有時我們只是在單個感知機上稍微修改了一點點權值w或者偏置b,就可能造成最終輸出完全的反轉。也就是說,感知機的輸出是一個階躍函數。如下圖所示,在0附近的時候,輸出的變化是非常明顯的,而在遠離0的地方,我們可能調整好久參數也不會發生輸出的變化。
這樣階躍的跳變並不是我們想要的,我們需要的是當我們隊權值w或者偏置b做出微小的調整後,輸出也相應的發生微小的改變。這同時也意味值我們的輸出不再只是0和1,還可以輸出小數。由此我們引入了S型神經元。
S型神經元使用 S 型函數,也叫Sigmoid function函數,我們用它作為激活函數。其表達式如下:
圖像如下圖所示:
利⽤實際的 σ 函數,我們得到⼀個,就像上⾯說明的,平滑的感知器。 σ 函數的平滑特性,正是關鍵因素,⽽不是其細部形式。 σ 的平滑意味著權重和偏置的微⼩變化,即 ∆w 和 ∆b,會從神經元產⽣⼀個微⼩的輸出變化 ∆output。實際上,微積分告訴我們
∆output 可以很好地近似表⽰為:
上面的式子是⼀個反映權重、偏置變化和輸出變化的線性函數。這⼀線性使得我們可以通過選擇權重和偏置的微⼩變化來達到輸出的微⼩變化。所以當 S 型神經元和感知器本質上是相同的,但S型神經元在計算處理如何變化權重和偏置來使輸出變化的時候會更加容易。
有了對S型神經元的了解,我們就可以介紹神經網路的基本結構了。具體如下:
在⽹絡中最左邊的稱為輸⼊層,其中的神經元稱為輸⼊神經元。最右邊的,即輸出層包含有輸出神經元,在圖中,輸出層只有⼀個神經元。中間層,既然這層中的神經元既不是輸⼊也不是輸出,則被稱為隱藏層。
這就是神經網路的基本結構,隨著後面的發展神經網路的層數也隨之不斷增加和復雜。
我們回顧一下神經網路發展的歷程。神經網路的發展歷史曲折盪漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經歷了數次大起大落。
從單層神經網路(感知機)開始,到包含一個隱藏層的兩層神經網路,再到多層的深度神經網路,一共有三次興起過程。詳見下圖。
我們希望有⼀個演算法,能讓我們找到權重和偏置,以⾄於⽹絡的輸出 y(x) 能夠擬合所有的 訓練輸⼊ x。為了量化我們如何實現這個⽬標,我們定義⼀個代價函數:
這⾥ w 表⽰所有的⽹絡中權重的集合, b 是所有的偏置, n 是訓練輸⼊數據的個數,
a 是表⽰當輸⼊為 x 時輸出的向量,求和則是在總的訓練輸⼊ x 上進⾏的。當然,輸出 a 取決於 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關系。符號 ∥v∥ 是指向量 v 的模。我們把 C 稱為⼆次代價函數;有時也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價函數的形式我們可以看到 C(w, b) 是⾮負的,因為求和公式中的每⼀項都是⾮負的。此外,代價函數 C(w,b)的值相當⼩,即 C(w; b) ≈ 0,精確地說,是當對於所有的訓練輸⼊ x, y(x) 接近於輸出 a 時。因
此如果我們的學習演算法能找到合適的權重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,當 C(w; b) 很⼤時就不怎麼好了,那意味著對於⼤量地輸⼊, y(x) 與輸出 a 相差很⼤。因此我們的訓練演算法的⽬的,是最⼩化權重和偏置的代價函數 C(w; b)。換句話說,我們想要找到⼀系列能讓代價盡可能⼩的權重和偏置。我們將采⽤稱為梯度下降的演算法來達到這個⽬的。
下面我們將代價函數簡化為C(v)。它可以是任意的多元實值函數, 。
注意我們⽤ v 代替了 w 和 b 以強調它可能是任意的函數,我們現在先不局限於神經⽹絡的環境。
為了使問題更加簡單我們先考慮兩個變數的情況,想像 C 是⼀個只有兩個變數 和 的函數,我們的目的是找到 和 使得C最小。
如上圖所示,我們的目的就是找到局部最小值。對於這樣的一個問題,一種方法就是通過微積分的方法來解決,我們可以通過計算導數來求解C的極值點。但是對於神經網路來說,我們往往面對的是非常道的權值和偏置,也就是說v的維數不只是兩維,有可能是億萬維的。對於一個高維的函數C(v)求導數幾乎是不可能的。
在這種情況下,有人提出了一個有趣的演算法。想像一下一個小球從山頂滾下山谷的過程, 我們的⽇常經驗告訴我們這個球最終會滾到⾕底。我們先暫時忽略相關的物理定理, 對球體的⾁眼觀察是為了激發我們的想像⽽不是束縛我們的思維。因此與其陷進物理學⾥凌亂的細節,不如我們就這樣問⾃⼰:如果我們扮演⼀天的上帝,能夠構造⾃⼰的物理定律,能夠⽀配球體可以如何滾動,那麼我們將會採取什麼樣的運動學定律來讓球體能夠總是滾落到⾕底呢?
為了更精確地描述這個問題,讓我們思考⼀下,當我們在 和 ⽅向分別將球體移動⼀個很⼩的量,即 ∆ 和 ∆ 時,球體將會發⽣什麼情況。微積分告訴我們 C 將會有如下變化:
也可以用向量表示為
現在我們的問題就轉換為不斷尋找一個小於0的∆C,使得C+∆C不斷變小。
假設我們選取:
這⾥的 η 是個很⼩的正數(稱為學習速率),於是
由於 ∥∇C∥2 ≥ 0,這保證了 ∆C ≤ 0,即,如果我們按照上述⽅程的規則去改變 v,那麼 C
會⼀直減⼩,不會增加。
所以我們可以通過不斷改變v來C的值不斷下降,是小球滾到最低點。
總結⼀下,梯度下降演算法⼯作的⽅式就是重復計算梯度 ∇C,然後沿著相反的⽅向移動,沿著⼭⾕「滾落」。我們可以想像它像這樣:
為了使梯度下降能夠正確地運⾏,我們需要選擇合適的學習速率η,確保C不斷減少,直到找到最小值。
知道了兩個變數的函數 C 的梯度下降方法,我們可以很容易的把它推廣到多維。我們假設 C 是⼀個有 m 個變數 的多元函數。 ∆C 將會變為:
其中, ∇C為
∆v為:
更新規則為:
在回到神經網路中,w和b的更新規則為:
前面提到神經⽹絡如何使⽤梯度下降演算法來學習他們⾃⾝的權重和偏置。但是,這⾥還留下了⼀個問題:我們並沒有討論如何計算代價函數的梯度。這里就需要用到一個非常重要的演算法:反向傳播演算法(backpropagation)。
反向傳播演算法的啟示是數學中的鏈式法則。
四個方程:
輸出層誤差方程:
當前層誤差方程:
誤差方程關於偏置的關系:
誤差方程關於權值的關系
演算法描述:
檢視這個演算法,你可以看到為何它被稱作反向傳播。我們從最後⼀層開始向後計算誤差向量δ。這看起來有點奇怪,為何要從後⾯開始。但是如果你認真思考反向傳播的證明,這種反向移動其實是代價函數是⽹絡輸出的函數的結果。為了理解代價隨前⾯層的權重和偏置變化的規律,我們需要重復作⽤鏈式法則,反向地獲得需要的表達式。
參考鏈接: http://neuralnetworksanddeeplearning.com/
4. 感知機(Perceptron)
在之前的文章中我們已經講過了邏輯回歸分類器,現在趁熱打鐵總結一下與邏輯回歸非常相似的感知機模型。感知機模型是一個非常古老的分類演算法,現在很少會單獨使用它,但是它的原理簡單有效,很值得學習和理解,從原理上來說,感知機模型是神經網路和支持向量機的基礎,理解了感知機有利於理解支持向量機和神經網路的原理。
在 廣義線性模型(4)邏輯回歸 中我們說邏輯回歸可以視為包含一個線性回歸和一個值域映射兩個過程,如果拿邏輯回歸與感知機作比較的話,可以說感知機也同樣包括這兩個過程,只不過它的值域映射比邏輯回歸簡單很多,感知機直接將線性模型的輸出映射為+1和-1,即需要預測的兩個類別上,正可謂簡單粗暴。所以說,感知機也是線性模型,用來處理線性可分的二分類問題,同樣屬於判別模型。
感知機假設數據線性可分的,希望通過學習得到一個線性的決策邊界,將訓練數據集正樣本點和負樣本點完全正確分開的分離,在決策邊界一側為正樣本,另一側為負樣本,這個思路跟邏輯回歸是一樣的。
感知機模型可以表示為下式,其中 函數將線性模型的輸出映射為預測類別:
由點到超平面的距離計算方法可知: 代表了樣本點到決策邊界的距離(文章沒有用 的形式,拋棄了常數項的問題,其實是不準確的,若有看官,還請不要介意);
同時我們可知, 的樣本類別輸出值取為1,滿足 的樣本類別輸出值取為-1,因此正確分類的樣本滿足 ,而錯誤分類的樣本滿足 , 表示了錯誤分類的樣本到決策超平面的距離,感知機損失函數的優化目標,就是期望使錯誤分類的所有樣本到超平面的距離之和最小(正樣本+1,負樣本-1這樣的定義方式使得定義損失函數變得很方便),損失函數為:
式中,M為樣本中所有錯誤分類樣本點的集合。實際上,我們會把損失函數中參數的L2正則項 扔掉,認為它不會影響優化結果,即得到損失函數:
為什麼可以不考慮 呢? 搜索解空間的時候, 會一直在變化啊?我覺得這個挺難理解的,根據資料及猜測,我覺得勉強能接受的原因為:
確定了損失函數的形式,接下來就要進行損失函數的優化,還是使用梯度下降,由於損失函數中只有錯誤分類的樣本點才參與計算,所以不需要使用普通的批量梯度下降了,我們選擇使用 隨機梯度下降 , 每次迭代只使用一個錯誤分類的樣本來對參數進行更新 。
感知機的學習演算法的原始形式即直接使用梯度下降,其學習過程為:
可以發現,在原始形式中,每一輪迭代都需要判斷各個樣本點是不是錯誤分類點,既對於每個樣本點 都需要計算 ,向量內積 的時間復雜度為 ,因此總的時間復雜度為 ,其中N為樣本點數量,k為迭代次數(雖然每次迭代不需要全部遍歷N個樣本,不過表達時間復雜度時可以去掉因子保留變數,表示成 ),這個時間復雜度還是比較高的,有沒有更快捷的計算方法呢?我們來看看感知機的學習演算法的對偶形式。
什麼叫對偶形式?這里的對偶可不是「三尺劍,六鈞弓」的意思,優化理論中的對偶問題是指每一個線性規劃問題(稱為原始問題)有一個與它對應的對偶線性規劃問題(稱為對偶問題),原始問題與對偶問題的解是對應的,得出一個問題的解,另一個問題的解也就得到了,可以簡單的理解為從不同角度看待同一個問題,通過改變這個問題的形式使得我們更好求解。
根據感知機學習演算法的原始形式可知,只有錯誤分類的樣本點才會用於梯度下降計算,對於被 次誤分類而更新的樣本 ,它參與 迭代的次數同樣為 。如果令參數 初始值為 , 這樣我們的 的表達式可以寫為:
表示對全部樣本 中的每個個樣本點進行 次梯度下降,其中沒被錯誤分類過的樣本點 。引用知乎上一個答案對 的理解:
這樣參數 的學習問題就轉變成了樣本錯誤分類次數 的學習問題,此之謂「對偶」也。這樣做的好處是什麼呢?原始形式的痛點在於 中的內積運算,在對偶問題中轉變為:
由內積 轉變為內積 ,區別是 是已知的,可以提前通過矩陣運算得到Gram矩陣保存下來重用,樣本循環和迭代的時間復雜度不變, 個 維向量的內積計算提前,所以時間復雜度大概可以表示為 ,與 倒不太好比較,不過這里按矩陣運算的時間復雜度完全沒有優化來計算的,實際肯定比這小得多,並且工程上矩陣運算都是高度優化過的,非常快,所以對偶形式在使用效率上是很有優勢的。
對偶形式的學習過程為:
感知機演算法原理很簡單,但其中很多思路很棒,所以由它發展出了神經網路、支持向量機這樣的更復雜、更准確的演算法,搞懂了感知機模型的基本原理,接下來我們就來寫一寫跟它很相似的支持向量機~
主要參考
《統計學習方法》 李航
感知機的損失函數為什麼可以採用函數間隔(忽略1/||w||)?
如何理解感知機學習演算法的對偶形式?
5. BP神經網路和感知器有什麼區別
1、發展背景不同:
感知器是Frank Rosenblatt在1957年所發明的一種人工神經網路,可以被視為一種最簡單形式的前饋式人工神經網路,是一種二元線性分類器。
而BP神經網路發展於20世紀80年代中期,David Runelhart。Geoffrey Hinton和Ronald W-llians、DavidParker等人分別獨立發現了誤差反向傳播演算法,簡稱BP,系統解決了多層神經網路隱含層連接權學習問題,並在數學上給出了完整推導。
2、結構不同:
BP網路是在輸入層與輸出層之間增加若干層(一層或多層)神經元,這些神經元稱為隱單元,它們與外界沒有直接的聯系,但其狀態的改變,則能影響輸入與輸出之間的關系,每一層可以有若干個節點。
感知器也被指為單層的人工神經網路,以區別於較復雜的多層感知器(Multilayer Perceptron)。 作為一種線性分類器,(單層)感知器可說是最簡單的前向人工神經網路形式。
3、演算法不同:
BP神經網路的計算過程由正向計算過程和反向計算過程組成。正向傳播過程,輸入模式從輸入層經隱單元層逐層處理,並轉向輸出層,每層神經元的狀態隻影響下一層神經元的狀態。感知器使用特徵向量來表示的前饋式人工神經網路,它是一種二元分類器,輸入直接經過權重關系轉換為輸出。
6. BP神經網路和感知器有什麼區別
1、BP神經網路,指的是用了「BP演算法」進行訓練的「多層感知器模型」。
2、感知器(MLP,Multilayer
Perceptron)是一種前饋人工神經網路模型,其將輸入的多個數據集映射到單一的輸出的數據集上,可以解決任何線性不可分問題。
3、多層感知器就是指得結構上多層的感知器模型遞接連成的前向型網路。BP就是指得反向傳播演算法
7. 人工神級網路最簡化形式
感知器(英語:Perceptron)。
是Frank Rosenblatt在1957年就職於康奈爾航空實驗室(Cornell Aeronautical Laboratory)時所發明的一種人工神經網路。它可以被視為一種最簡單形式的前饋神經網路,是一種二元線性分類器。
感知機是生物神經細胞的簡單抽象。神經細胞結構大致可分為:樹突、突觸、細胞體及軸突。單個神經細胞可被視為一種只有兩種狀態的機器——激動時為『是』,而未激動時為『否』。神經細胞的狀態取決於從其它的神經細胞收到的輸入信號量,及突觸的強度(抑制或加強)。
當信號量總和超過了某個閾值時,細胞體就會激動,產生電脈沖。電脈沖沿著軸突並通過突觸傳遞到其它神經元。為了模擬神經細胞行為,與之對應的感知機基礎概念被提出,如權量(突觸)、偏置(閾值)及激活函數(細胞體)。
在人工神經網路領域中,感知機也被指為單層的人工神經網路,以區別於較復雜的多層感知機(Multilayer Perceptron)。
作為一種線性分類器,(單層)感知機可說是最簡單的前向人工神經網路形式。盡管結構簡單,感知機能夠學習並解決相當復雜的問題。感知機主要的本質缺陷是它不能處理線性不可分問題。
歷史
1943年,心理學家沃倫·麥卡洛克和數理邏輯學家沃爾特·皮茨在合作的《A logical calculus of the ideas immanent in nervous activity》論文中提出並給出了人工神經網路的概念及人工神經元的數學模型,從而開創了人工神經網路研究的時代。
1949年,心理學家唐納德·赫布在《The Organization of Behavior》論文中描述了神經元學習法則——赫布型學習。
人工神經網路更進一步被美國神經學家弗蘭克·羅森布拉特所發展。他提出了可以模擬人類感知能力的機器,並稱之為『感知機』。
1957年,在Cornell航空實驗室中,他成功在IBM 704機上完成了感知機的模擬。兩年後,他又成功實現了能夠識別一些英文字母、基於感知機的神經計算機——Mark1,並於1960年6月23日,展示與眾。
為了『教導』感知機識別圖像,弗蘭克·羅森布拉特在Hebb學習法則的基礎上,發展了一種迭代、試錯、類似於人類學習過程的學習演算法——感知機學習。除了能夠識別出現較多次的字母,感知機也能對不同書寫方式的字母圖像進行概括和歸納。
但是,由於本身的局限,感知機除了那些包含在訓練集里的圖像以外,不能對受干擾(半遮蔽、不同大小、平移、旋轉)的字母圖像進行可靠的識別。
首個有關感知機的成果,由弗蘭克·羅森布拉特於1958年發表在《The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain》的文章里。
1962年,他又出版了《Principles of Neurodynamics: Perceptrons and the theory of brain mechanisms》一書,向大眾深入解釋感知機的理論知識及背景假設。此書介紹了一些重要的概念及定理證明,例如感知機收斂定理。
8. 前饋神經網路
深度前饋網路 (deep feedforward network),也叫作前饋神經網路(feedforward neural network)或者 多層感知機 (multilayer perceptron,MLP)。對深度前饋網路的理解,從感知機的角度可能更易。感知機又被成為最簡單的神經網路,顧名思義,多層感知機就是在感知機的基礎上設計添加了更多層。
前饋網路的目標是近似一個函數 ,意思是說對於目標函數 ,網路學習的最終目標是輸出一個函數 ,並且 盡可能接近 。舉個例子,一個二分類器 會將輸入 映射到一個類別 ,前饋網路會定義一個新的映射 ,然後通過學習參數 的值,使得新的映射能夠得到最佳的函數映射。
對於深度前饋網路,如圖1.1,由輸入層、隱藏層、輸出層和各層之間的連接組成,其中隱藏層根據模型的大小和復雜程度可以設計成數量任意的多層,各層之間的連接一般實際表示特徵的權重。「深度」是指一個神經網路模型通常是由不止一層組成的,設計的層數越多,深度就越大,模型也越復雜。對於前饋網路中的「前饋」,因為網路中的數據流向是單向的, 只會按照輸入層-隱藏層-輸出層的順序流動,即數據流經當前一層處理後,只會作為下一層的輸入流入,而不會對上一層有任何影響和反饋。如果當前層會對前面一層給出反饋或影響,這樣的網路模型叫做循環神經網路。
神經網路之所以被成為「網路」,是因為我們可以認為這樣的一個模型是由許多不同的函數復合在一起組成的,也就是說神經網路的每一層可以認為是一個函數,加上層與層之間的連接,就表示了多個函數復合在一起的過程。例如,對於一組輸入 ,我們希望得到的輸出是 ,現在有三個函數 ,那麼經過 的復合,就能產生近似的輸出,其中每一個函數就可以認為是神經網路的一層。我們只關注模型的輸入和輸出,而對於具體的復合過程,也就是層與層之間的連接細節並不關注,因此將這層處理的層成為「隱藏層」。
深度前饋網路又叫多層感知機,那麼從很早就被提出的感知機模型到多層感知機,有怎樣的區別和變化呢?
感知機最大的局限是只能處理線性的樣本空間,如圖2.1左,而對於線性不可分的數據無能為力。為了將線性不可分的樣本空間變換到線性可分,從而可以利用線性函數近似,就引入了隱藏層,即通
過隱藏層的處理,原有的樣本空間就變成了新的可以使用線性模型處理的樣本空間。
異或問題是指對於給定的兩個二進制輸入,通過異或邏輯門得到一個預測輸出,當輸入不相等時輸出1,否則輸出0。圖3.1展示了異或函數所有可能結果。
為什麼這里是解決異或問題,而不是與、或問題?前者的樣本空間是非線性的,而與、或問題的樣本空間都是線性可分的,即通過引入一個線性函數就能解決,如圖3.2。
本問題的全部樣本空間是四個樣本點:(0,0)(0,1)(1,0)(1,1),首先需要選取損失函數 ,這里我們使用均方誤差函數(MSE)
訓練一個神經網路模型與其他機器學習演算法一樣,一般都需要三個步驟:選擇一個優化模型、確定代價函數和輸出單元的形式。那麼,我們應該怎樣選取優化模型呢?一般說來,線性模型是優先被考慮的,假如 是線性函數, 包含 和 ,那麼模型可以定義為:
使用正規方程,可以解得 。我們發現線性模型在任意一點都輸出0.5,所以線性模型不能用來表示XOR函數。根據已有經驗,我們總是希望能夠通過使用一個線性模型來解決問題,但XOR問題的特徵空間不允許這樣做,如果能夠使用一個模型來學習一個不同的特徵空間,在這個新學得的空間上線性模型能夠表示這個解,那麼問題就能得到解決,這樣的思路正是神經網路隱藏層的設計需要達到的目的。
為了學的一個新的特徵空間,我們引入一個非常簡單的前饋神經網路,如圖3.3。該神經網路含
有一層隱藏層,包含兩個單元,對於輸入 ,神經網路將其變換到一個新的特徵空間 ,在新學得的空間中,使用一個線性模型就能得到期望的輸出 。
完整的模型是
現在 是明確的使用線性模型,那麼 應該是那種函數呢?
如果 是線性的,那麼前饋網路作為一個整體對於輸入依然是線性的,因此 必須是非線性的。
神經網路通過仿射變換之後緊跟一個被成為激活函數的固定非線性函數來實現 。定義: ,其中 是權重矩陣, 是偏置。
現代神經網路中,默認推薦使用 定義的整流線性單元作為激活函數。那麼我們問題的整體模型就是:
至此,我們已經導出了使用含有一層隱藏層的前饋神經網路解決異或問題的完整模型。最後給出XOR問題的一個解。
9. 感知機是監督還是非監督
感知機屬於有監督的學習,生成的模型稱為判別模型。
其通過特定的函數將輸入的特徵向量,輸出為實例的類別(+1或-1),該函數即為將實例劃分為兩類的分離超平面。為獲得最優化的超平面,感知機引入了基於誤分類的損失函數。感知機是神經網路和支持向量機的基礎。
感知機主要用於解決線性可分數據集的分類問題。線性可分數據集是指能夠找到一個超平面,完全正確的將數據集分割在該超平面的兩側。
有監督學習分為生成模型和判別模型兩種
其分別含義如下:
(1)生成模型:通過輸入數據學習聯合概率分布P(X,Y)得到的條件概率分布P(Y|X)作為預測模型;
(2)判別模型:通過輸入數據直接學習得到的決策函數f(x)或條件概率分布P(Y|X)作為預測模型。
10. CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別
如下:
1、DNN:存在著一個問題——無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要。對了適應這種需求,就出現了另一種神經網路結構——循環神經網路RNN。
2、CNN:每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被稱為前向神經網路。
3、RNN:神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出!
介紹
神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。
在實際應用中,所謂的深度神經網路DNN,往往融合了多種已知的結構,包括卷積層或是LSTM單元。