『壹』 誰能科普一下「深度學習」網路和以前那種「多層神經網路」的區別
多層神經網路又叫全連接神經網路。當輸入圖像為1000*1000的解析度時,神經網路一層的系數就達到10^12。系數過多引起收斂問題導致訓練無法達到最優,並且容易過擬合。讓它不具有實現意義。深度學習採用權值共享和局部連接等技術,大大降低了系數的個數和各種避免過擬合的方法,使得網路層數可以達到數百,使得深層網路成為可能。感興趣可以搜搜我的課程,用Python做深度學習1——數學基礎
『貳』 第五章 神經網路
神經網路 :神經網路是由具有適應性的簡單單元組成的廣泛並行互連的網路,它的組織能夠模擬生物神經系統對真實世界物體所作出的交互反應。
神經網路中最基本的成分便是 神經元模型 。
M-P神經元模型:
感知機由兩層神經元組成,分別為輸入層、輸出層。
以下是具體過程:
多層神經網路的拓撲結構如圖:
如上圖可知,多層網路由輸入層、隱含層和輸出層組成,頂層是輸出層,底層是輸入層,中間的便是隱含層。隱含層與輸出層都具有功能神經元。
多層前饋神經網路的結構需要滿足:
1、每層神經元必須與下一層完全互連
2、神經元之間不存在同層連接
3、神經元不可跨層連接
只需包含一個足夠多神經元的隱層,就能以任意精度逼近任意復雜度的連續函數
BP神經網路由於學習能力太強大比較榮譽造成過擬合問題,故有兩種策略來減緩過擬合的問題:
1、早停:將數據分成訓練集和驗證集,訓練集學習,驗證集評估性能,在訓練過程中,若訓練集的累積誤差降低,而驗證集的累積誤差提高,則終止訓練;
2、引入正則化:其基本思想是在誤差目標函數中增加一個用於描述網路復雜程度的部分,有如連接權和閾值的平方和:
其中λ∈(0,1)用於對累積經驗誤差與網路復雜度這兩項進行折中,常通過交叉驗證法來估計。
神經網路的訓練過程可看作一個參數尋優的過程,即尋找到適當的參數使得E最小。於是我們時常會談及「全局最小」和「局部最小」。
1、全局最小:即全局最小解,在參數空間中,所有其他點的誤差函數值均大於該點;
2、局部最小:即局部最小解,在參數空間中,其鄰近的點的誤差函數值均大於該點。
我們要達到局部極小點,很容易,只要滿足梯度為零的點便是了,局部極小點可以有多個,但全局最小點只有一個。顯然,我們追求的是全局最小,而非局部極小,於是人們通常採用以下策略來試圖「跳出」局部極小,使其接近全局最小:
1、以多組不同參數值初始化多個神經網路,按標准方法訓練,在迭代停止後,取其中誤差最小的解作為最終參數;
2、使用隨機梯度下降(在計算梯度時加入了隨機因素),使得在局部最小時,計算的梯度仍可能不為0,從而可能跳出局部極小,繼續進行迭代;
3、「模擬退火」技術,在每一步都以一定的概率接受比當前解更差的結果,但接受「次優解」的概率要隨著迭代進行,時間推移而逐漸減低以確保演算法的穩定。
1、RBF網路
單隱層前饋神經網路 ,使用徑向基函數作為隱層神經元激活函數,輸出層是對隱層神經元輸出的線性組合。RBF網路可表示為:
2、ART網路
競爭型學習 (神經網路中一種常用的 無監督學習 策略),由 比較層、識別層、識別閾值和重置模塊 組成。接收到比較層的輸入信號後,識別層神經元相互競爭以產生獲勝神經元,最簡單的方式就是計算輸入向量與每個識別層神經元所對應的模式類代表向量間的距離,距離小者獲勝。若獲勝神經元對應的代表向量與輸入向量間 相似度大於識別閾值 ,則將輸入樣本歸為該代表向量所屬類別,網路 連接權 也會進行 更新 以保證後面接收到相似的輸入樣本時該模式類會計算出更大的相似度,使得這樣的樣本能夠歸於一類;如果 相似度不大於識別閾值 ,則 重置模塊 會在 識別層 加一個神經元,其 代表向量 就 設置 為當前 輸入向量 。
3、SOM網路
競爭型學習的無監督神經網路 ,將高維輸入數據映射到低維空間(通常是二維),且保持輸入數據在高維空間的拓撲結構。
4、級聯相關網路
結構自適應網路 。
5、Elman網路
遞歸神經網路 。
6、Boltzmann機
基於能量的模型,其神經元分為顯層與隱層,顯層用於數據輸入輸出,隱層被理解為數據的內在表達。其神經元皆為布爾型,1為激活,0為抑制。
理論上,參數越多的模型其復雜程度越高,能完成更加復雜的學習任務。但是復雜模型的訓練效率低下,容易過擬合。但由於大數據時代、雲計算,計算能力大幅提升緩解了訓練效率低下,而訓練數據的增加則可以降低過擬合風險。
於是如何增加模型的復雜程度呢?
1、增加隱層數;
2、增加隱層神經元數.
如何有效訓練多隱層神經網路?
1、無監督逐層訓練:每次訓練一層隱節點,把上一層隱節點的輸出當作輸入來訓練,本層隱結點訓練好後,輸出再作為下一層的輸入來訓練,這稱為預訓練,全部預訓練完成後,再對整個網路進行微調。「預訓練+微調」即把大量的參數進行分組,先找出每組較好的設置,再基於這些局部最優的結果來訓練全局最優;
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 ..
本文我們通過
這四點,全面的學習了神經網路這個知識點,希望本文能給你帶來幫助。
參考:
『肆』 神經網路連接方式分為哪幾類每一類有哪些特點
神經網路模型的分類
人工神經網路的模型很多,可以按照不同的方法進行分類。其中,常見的兩種分類方法是,按照網路連接的拓樸結構分類和按照網路內部的信息流向分類。
1 按照網路拓樸結構分類
網路的拓樸結構,即神經元之間的連接方式。按此劃分,可將神經網路結構分為兩大類:層次型結構和互聯型結構。
層次型結構的神經網路將神經元按功能和順序的不同分為輸出層、中間層(隱層)、輸出層。輸出層各神經元負責接收來自外界的輸入信息,並傳給中間各隱層神經元;隱層是神經網路的內部信息處理層,負責信息變換。根據需要可設計為一層或多層;最後一個隱層將信息傳遞給輸出層神經元經進一步處理後向外界輸出信息處理結果。
而互連型網路結構中,任意兩個節點之間都可能存在連接路徑,因此可以根據網路中節點的連接程度將互連型網路細分為三種情況:全互連型、局部互連型和稀疏連接型
2 按照網路信息流向分類
從神經網路內部信息傳遞方向來看,可以分為兩種類型:前饋型網路和反饋型網路。
單純前饋網路的結構與分層網路結構相同,前饋是因網路信息處理的方向是從輸入層到各隱層再到輸出層逐層進行而得名的。前饋型網路中前一層的輸出是下一層的輸入,信息的處理具有逐層傳遞進行的方向性,一般不存在反饋環路。因此這類網路很容易串聯起來建立多層前饋網路。
反饋型網路的結構與單層全互連結構網路相同。在反饋型網路中的所有節點都具有信息處理功能,而且每個節點既可以從外界接受輸入,同時又可以向外界輸出。
『伍』 一文看懂四種基本的神經網路架構
原文鏈接:
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)進行講解。
『陸』 神經網路(Neural Network)
(1)結構:許多樹突(dendrite)用於輸入,一個軸突 (axon)用於輸出。
(2)特性:興奮性和傳導性。興奮性是指當信號量超過某個閾值時,細胞體就會被激活,產生電脈沖。傳導性是指電脈沖沿著軸突並通過突觸傳遞到其它神經元。
(3)有兩種狀態的機器:激活時為「是」,不激活時為「否」。神經細胞的狀態取決於從其他神經細胞接收到的信號量,以及突觸的性質(抑制或加強)。
(1)神經元——不重要
① 神經元是包含權重和偏置項的 函數 :接收數據後,執行一些計算,然後使用激活函數將數據限制在一個范圍內(多數情況下)。
② 單個神經元:線性可分的情況下,本質是一條直線, ,這條直線將數據劃分為兩類。而線性分類器本身就是一個單層神經網路。
③ 神經網路:非線性可分的情況下,神經網路通過多個隱層的方法來實現非線性的函數。
(2)權重/參數/連接(Weight)——最重要
每一個連接上都有一個權重。一個神經網路的訓練演算法就是讓權重的值調整到最佳,以使得整個網路的預測效果最好。
(3)偏置項(Bias Units)——必須
① 如果沒有偏置項,所有的函數都會經過原點。
② 正則化偏置會導致欠擬合:若對偏置正則化,會導致激活變得更加簡單,偏差就會上升,學習的能力就會下降。
③ 偏置的大小度量了神經元產生激勵(激活)的難易程度。
(1)定義:也稱為轉換函數,是一種將輸入 (input) 轉成輸出 (output) 的函數。
(2)作用:一般直線擬合的精確度要比曲線差很多,引入激活函數能給神經網路 增加一些非線性 的特性。
(3)性質:
① 非線性:導數不是常數,否則就退化成直線。對於一些畫一條直線仍然無法分開的問題,非線性可以把直線變彎,就能包羅萬象;
② 可微性:當優化方法是基於梯度的時候,處處可導為後向傳播演算法提供了核心條件;
③ 輸出范圍:一般限定在[0,1],使得神經元對一些比較大的輸入會比較穩定;
④ 非飽和性:飽和就是指,當輸入比較大的時候輸出幾乎沒變化,會導致梯度消失;
⑤ 單調性:導數符號不變,輸出不會上躥下跳,讓神經網路訓練容易收斂。
(1)線性函數 (linear function)—— purelin()
(2)符號函數 (sign function)—— hardlim()
① 如果z值高於閾值,則激活設置為1或yes,神經元將被激活。
② 如果z值低於閾值,則激活設置為0或no,神經元不會被激活。
(3)對率函數 (sigmoid function)—— logsig()
① 優點:光滑S型曲線連續可導,函數閾值有上限。
② 缺點:❶ 函數飽和使梯度消失,兩端梯度幾乎為0,更新困難,做不深;
❷ 輸出不是0中心,將影響梯度下降的運作,收斂異常慢;
❸ 冪運算相對來講比較耗時
(4)雙曲正切函數(hyperbolic tangent function)—— tansig()
① 優點:取值范圍0中心化,防止了梯度偏差
② 缺點:梯度消失現象依然存在,但相對於sigmoid函數問題較輕
(5)整流線性單元 ReLU 函數(rectified linear unit)
① 優點:❶ 分段線性函數,它的非線性性很弱,因此網路做得很深;
❷ 由於它的線性、非飽和性, 對於隨機梯度下降的收斂有巨大的加速作用;
② 缺點:❶ 當x<0,梯度都變成0,參數無法更新,也導致了數據多樣化的丟失;
❷ 輸出不是0中心
(6)滲漏型整流線性單元激活函數 Leaky ReLU 函數
① 優點:❶ 是為解決「ReLU死亡」問題的嘗試,在計算導數時允許較小的梯度;
❷ 非飽和的公式,不包含指數運算,計算速度快。
② 缺點:❶ 無法避免梯度爆炸問題; (沒有體現優於ReLU)
❷ 神經網路不學習 α 值。
(7)指數線性單元 ELU (Exponential Linear Units)
① 優點:❶ 能避免「死亡 ReLU」 問題;
❷ 能得到負值輸出,這能幫助網路向正確的方向推動權重和偏置變化;
❸ 在計算梯度時能得到激活,而不是讓它們等於 0。
② 缺點:❶ 由於包含指數運算,所以計算時間更長;
❷ 無法避免梯度爆炸問題; (沒有體現優於ReLU)
❸ 神經網路不學習 α 值。
(8)Maxout(對 ReLU 和 Leaky ReLU的一般化歸納)
① 優點:❶ 擁有ReLU的所有優點(線性和不飽和)
❷ 沒有ReLU的缺點(死亡的ReLU單元)
❸ 可以擬合任意凸函數
② 缺點 :參數數量增加了一倍。難訓練,容易過擬合
(9)Swish
① 優點:❶ 在負半軸也有一定的不飽和區,參數的利用率更大
❷ 無上界有下界、平滑、非單調
❸ 在深層模型上的效果優於 ReLU
每個層都包含一定數量的單元(units)。增加層可增加神經網路輸出的非線性。
(1)輸入層:就是接收原始數據,然後往隱層送
(2)輸出層:神經網路的決策輸出
(3)隱藏層:神經網路的關鍵。把前一層的向量變成新的向量,讓數據變得線性可分。
(1)結構:僅包含輸入層和輸出層,直接相連。
(2)作用:僅能表示 線性可分 函數或決策,且一定可以在有限的迭代次數中收斂。
(3)局限:可以建立與門、或門、非門等,但無法建立更為復雜的異或門(XOR),即兩個輸入相同時輸出1,否則輸出0。 (「AI winter」)
(1)目的:擬合某個函數 (兩層神經網路可以逼近任意連續函數)
(2)結構:包含輸入層、隱藏層和輸出層 ,由於從輸入到輸出的過程中不存在與模型自身的反饋連接,因此被稱為「前饋」。 (層與層之間全連接)
(3)作用: 非線性 分類、聚類、預測等,通過訓練,可以學習到數據中隱含的知識。
(4)局限:計算復雜、計算速度慢、容易陷入局部最優解,通常要將它們與其他網路結合形成新的網路。
(5)前向傳播演算法(Forward Propagation)
① 方法:從左至右逐級依賴的演算法模型,即網路如何根據輸入X得到輸出Y,最終的輸出值和樣本值作比較, 計算出誤差 。
② 目的:完成了一次正反向傳播,就完成了一次神經網路的訓練迭代。通過輸出層的誤差,快速求解對每個ω、b的偏導,利用梯度下降法,使Loss越來越小。
② 局限:為使最終的誤差達到最小,要不斷修改參數值,但神經網路的每條連接線上都有不同權重參數,修改這些參數變得棘手。
(6)誤差反向傳播(Back Propagation)
① 原理:梯度下降法求局部極值
② 方法:從後往前,從輸出層開始計算 L 對當前層的微分,獲得各層的誤差信號,此誤差信號即作為修正單元權值的依據。計算結束以後,所要的兩個參數矩陣的 梯度 就都有了。
③ 局限:如果激活函數是飽和的,帶來的缺陷就是系統迭代更新變慢,系統收斂就慢,當然這是可以有辦法彌補的,一種方法是使用 交叉熵函數 作為損失函數。
(1)原理:隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。在神經網路中,每一層神經元學習到的是前一層神經元值的更抽象的表示。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。
(2)方法:ReLU函數在訓練多層神經網路時,更容易收斂,並且預測性能更好。
(3)優點:① 易於構建,表達能力強,基本單元便可擴展為復雜的非線性函數
② 並行性號,有利於在分布是系統上應用
(4)局限:① 優化演算法只能獲得局部極值,性能與初始值相關
② 調參理論性缺乏
③ 不可解釋,與實際任務關聯性模糊
(1)原理:由手工設計卷積核變成自動學習卷積核
(2)卷積(Convolutional layer): 輸入與卷積核相乘再累加 (內積、加權疊加)
① 公式:
② 目的:提取輸入的不同特徵,得到維度很大的 特徵圖(feature map)
③ 卷積核:需要訓練的參數。一般為奇數維,有中心像素點,便於定位卷積核
④ 特點:局部感知、參數變少、權重共享、分層提取
(3)池化(Pooling Layer):用更高層的抽象表達來表示主要特徵,又稱「降采樣」
① 分類: 最大 (出現與否)、平均(保留整體)、隨機(避免過擬合)
② 目的:降維,不需要訓練參數,得到新的、維度較小的特徵
(4)步長(stride):若假設輸入大小是n∗n,卷積核的大小是f∗f,步長是s,則最後的feature map的大小為o∗o,其中
(5)填充(zero-padding)
① Full模式:即從卷積核(fileter)和輸入剛相交開始做卷積,沒有元素的部分做補0操作。
② Valid模式:卷積核和輸入完全相交開始做卷積,這種模式不需要補0。
③ Same模式:當卷積核的中心C和輸入開始相交時做卷積。沒有元素的部分做補0操作。
(7)激活函數:加入非線性特徵
(8)全連接層(Fully-connected layer)
如果說卷積層、池化層和激活函數層等是將原始數據映射到隱層特徵空間(決定計算速度),全連接層則起到將學到的「分布式特徵表示」映射到樣本標記空間的作用(決定參數個數)。
參考:
[1] 神經網路(入門最詳細)_ruthy的博客-CSDN博客_神經網路演算法入門
[2] 神經網路(容易被忽視的基礎知識) - Evan的文章 - 知乎
[3] 人工神經網路——王的機器
[4] 如何簡單形象又有趣地講解神經網路是什麼? - 舒小曼的回答 - 知乎
[5] 神經網路15分鍾入門!足夠通俗易懂了吧 - Mr.括弧的文章 - 知乎
[6] 神經網路——最易懂最清晰的一篇文章_illikang的博客-CSDN博客_神經網路
[7] 直覺化深度學習教程——什麼是前向傳播——CSDN
[8] 「反向傳播演算法」過程及公式推導(超直觀好懂的Backpropagation)_aift的專欄-CSDN
[9] 卷積、反卷積、池化、反池化——CSDN
[10] 浙大機器學習課程- bilibili.com
『柒』 神經網路簡述
機器學習中談論的神經網路是指「神經網路學習」,或者說,是機器學習和神經網路這兩個學科領域的交叉部分[1]。
在這里,神經網路更多的是指計算機科學家模擬人類大腦結構和智能行為,發明的一類演算法的統稱。
神經網路是眾多優秀仿生演算法中的一種,讀書時曾接觸過蟻群優化演算法,曾驚訝於其強大之處,但神經網路的強大,顯然蟻群優化還不能望其項背。
A、起源與第一次高潮。有人認為,神經網路的最早討論,源於現代計算機科學的先驅——阿蘭.圖靈在1948年的論文中描述的「B型組織機器」[2]。二十世紀50年代出現了以感知機、Adaling為代表的一系列成功,這是神經網路發展的第一個高潮[1]。
B、第一次低谷。1969年,馬文.明斯基出版《感知機》一書,書中論斷直接將神經網路打入冷宮,導致神經網路十多年的「冰河期」。值得一提的是,在這期間的1974年,哈佛大學Paul Webos發明BP演算法,但當時未受到應有的重視[1]。
C、第二次高潮。1983年,加州理工學院的物理學家John Hopfield利用神經網路,在旅行商問題上獲得當時最好結果,引起轟動;Rumelhart等人重新發明了BP演算法,BP演算法迅速走紅,掀起神經網路第二次高潮[1]。
D、第二次低谷。二十世紀90年代中期,統計學習理論和支持向量機興起,較之於這些演算法,神經網路的理論基礎不清晰等缺點更加凸顯,神經網路研究進入第二次低谷[1]。
E、深度學習的崛起。2010年前後,隨著計算能力的提升和大數據的涌現,以神經網路為基礎的「深度學習」崛起,科技巨頭公司谷歌、Facebook、網路投入巨資研發,神經網路迎來第三次高潮[1]。2016年3月9日至15日,Google人工智慧程序AlphaGo對陣韓國圍棋世界冠軍李世乭,以4:1大比分獲勝,比眾多專家預言早了十年。這次比賽,迅速在全世界經濟、科研、計算機產業各領域掀起人工智慧和深度學習的熱烈討論。
F、展望。從幾個方面討論一下。
1)、近期在Google AlphaGo掀起的熱潮中,民眾的熱情與期待最大,甚至有少許恐慌情緒;計算機產業和互聯網產業熱情也非常巨大,對未來充滿期待,各大巨頭公司對其投入大量資源;學術界的反應倒是比較冷靜的。學術界的冷靜,是因為神經網路和深度神經網路的理論基礎還沒有出現長足的進步,其缺點還沒有根本改善。這也從另一個角度說明了深度神經網路理論進步的空間很大。
2)、"當代神經網路是基於我們上世紀六十年代掌握的腦知識。"關於人類大腦的科學與知識正在爆炸式增長。[3]世界上很多學術團隊正在基於大腦機制新的認知建立新的模型[3]。我個人對此報樂觀態度,從以往的仿生演算法來看,經過億萬年進化的自然界對科技發展的促進從來沒有停止過。
3)、還說AlphaGo,它並不是理論和演算法的突破,而是基於已有演算法的工程精品。AlhphaGo的工作,為深度學習的應用提供了非常廣闊的想像空間。分布式技術提供了巨大而廉價的計算能力,巨量數據的積累提供了豐富的訓練樣本,深度學習開始騰飛,這才剛剛開始。
一直沿用至今的,是McChlloch和Pitts在1943年依據腦神經信號傳輸結構抽象出的簡單模型,所以也被稱作」M-P神經元模型「。
其中,
f函數像一般形如下圖的函數,既考慮階躍性,又考慮光滑可導性。
實際常用如下公式,因形如S,故被稱作sigmoid函數。
把很多個這樣的神經元按一定層次連接起來,就得到了神經網路。
兩層神經元組成,輸入層接收外界輸入信號,輸出層是M-P神經元(只有輸出層是)。
感知機的數學模型和單個M-P神經元的數學模型是一樣的,如因為輸入層只需接收輸入信號,不是M-P神經元。
感知機只有輸出層神經元是B-P神經元,學習能力非常有限。對於現行可分問題,可以證明學習過程一定會收斂。而對於非線性問題,感知機是無能為力的。
BP神經網路全稱叫作誤差逆傳播(Error Propagation)神經網路,一般是指基於誤差逆傳播演算法的多層前饋神經網路。這里為了不佔篇幅,BP神經網路將起篇另述。
BP演算法是迄今最為成功的神經網路學習演算法,也是最有代表性的神經網路學習演算法。BP演算法不僅用於多層前饋神經網路,還用於其他類型神經網路的訓練。
RBF網路全程徑向基函數(Radial Basis Function)網路,是一種單隱層前饋神經網路,其與BP網路最大的不同是採用徑向基函數作為隱層神經元激活函數。
卷積神經網路(Convolutional neural networks,簡稱CNNs)是一種深度學習的前饋神經網路,在大型圖片處理中取得巨大成功。卷積神經網路將起篇另述。
循環神經網路(Recurrent Neural Networks,RNNs)與傳統的FNNs不同,RNNs引入定向循環,能夠處理那些輸入之間前後關聯的問題。RNNs已經在眾多自然語言處理(Natural Language Processing, NLP)中取得了巨大成功以及廣泛應用[5]。RNNs將起篇另述。[5]
[1]、《機器學習》,周志華著
[2]、《模式識別(第二版)》,Richard O.Duda等著,李宏東等譯
[3]、《揭秘IARPA項目:解碼大腦演算法或將徹底改變機器學習》,Emily Singerz著,機器之心編譯出品
[4]、圖片來源於互聯網
[5]、 循環神經網路(RNN, Recurrent Neural Networks)介紹
『捌』 由眾多MP-神經元有層次的連接組成的網路是人工神經網路
是MLP(multi-level perceptron)吧, 由多層神經元組成的、且每層神經元都與上層和下層各神經元連接的結構叫全連接神經網路(Densely-connected Neural Network)
『玖』 【神經網路原理】神經網路結構 & 符號約定
神經元模型的符號約定:輸入: ,權重(weight): ,偏置(bias): ,未激活值: ,激活輸出值:
神經元可用於解決部分二分類問題 ——當有一個類別未知的 輸入感知機,若 輸出值a = 1時,感知機被激活 ,代表 x 屬於第一類;若 輸出值a = 0時,感知機未激活 ,則代表 x 屬於第二類。而對於sigmoid神經元,若輸出值a ≥ 0.5時,代表 x 屬於第一類,否則為第二類。
不難看出,感知機可以輕松實現「與非」邏輯,而與非邏輯可以組合成其他任意的邏輯,但對於一些過於復雜的問題,我們難以寫出其背後地邏輯結構。 這時候神經網路就能大顯身手 :它可以自適應的學習規律,調節網路地權重和偏置等參數,我們只需要用大量的數據對其正確地訓練,即可得到我們想要的效果!
那有一個很有意思的問題:相比於階躍函數,為什麼我們在神經網路中更願意採用sigmoid函數作為激活函數呢?
首先,由於感知機的激活函數為階躍函數(在0處突變),權重的一個小的變化就可能導致輸出值的突變,而如果將激活函數替換為sigmoid函數,輸出值的變化就能發生相應的小的變化,有利於網路學習;另外,由於採用二次代價函數作為損失函數時,利用BP演算法求梯度值需要對沖激函數求導,sigmoid函數正好時連續可導的,而且導數很好求。
為了便於理解,先畫一個三層的全連接神經網路示意圖,激活函數都選用sigmoid函數。 全連接神經網路 指除輸出層外,每一個神經元都與下一層中的各神經元相連接。網路的第一層為 輸入層 ,最後一層為 輸出層 ,中間的所有層統稱為 隱藏層 。其中,輸入層的神經元比較特殊,不含偏置 ,也沒有激活函數 。
神經網路結構的符號約定 : 代表第 層的第 個神經元與第 層的第 個神經元連線上的權重; 代表第 層與第 層之間的所有權重 構成的權重矩陣。 分別代表第 層的第 個神經元對應的偏置、未激活值、激活值; 則分別代表第 層的所有偏置組成的列向量、所有未激活值組成的列向量以及所有激活值組成的列向量。
下面展示了一個手寫體識別的三層全連接神經網路結構:
隱藏層的功能可以看作是各種特徵檢測器的組合:檢測到相應特徵時,相應的隱藏層神經元就會被激活,從而使輸出層相應的神經元也被激活。
『拾』 Tensorflow系列3:多層神經網路--解決非線性問題
這里拿醫院的數據做一個簡單的線性分類任務,任務特徵是病人的年齡和腫瘤大小,任務目標是病人的腫瘤是良性的還是惡性的。
補充知識:
補充知識:
MSE 的公式為:
cross entropy 一般用於分類問題,表達的意思是樣本屬於某一類的概率,公式為:
這里用於計算的a也是經過分布統一化處理的(或者是經過Sigmoid函數激活的結果),取值范圍在0~1之間。
在tensorflow中常見的交叉熵函數有:Sgimoid交叉熵,softmax交叉熵,Sparse交叉熵,加權Sgimoid交叉熵
MSE的預測值和真實值要控制在同樣的數據分布內,假設預測值經過Sigmoid激活函數得到取值范圍時候0 1之間,那麼真實值也要歸一化成0 1之間。
在tensorflow中沒有單獨的MSE函數,可以自己組合:
MSE=tf.rece_mean(tf.square(logits-outputs))
softmax_cross_entropy_with_logits 函數,必須要自己定義,比如:
loss = tf.rece_mean(-tf.rece_sum(labels*tf.log(logits_scaled),1))
損失函數的選取取決於輸入標簽數據的類型:如果輸入是實數、無界的值,多使用MSE;如果輸入標簽是位矢量(分類標志),使用cross entropy比較合適
補充知識點:
reshape() 函數接受-1時,該行(列)數可以為任意值。[-1,1]代錶行數隨意,列數變成1。
模型生成的z用公式可以表示成z=x1w1+x2w2+b,如果將x1和x2映射到直角坐標系中的x和y坐標,那麼z就可以被分為小於0和大於0兩部分。當z=0時,就代表直線本身。
這次再在剛剛的二分類基礎上再增加一類,變成三類,可以使用多條直線將數據分成多類。
生成的X,Y的數據樣本如下內容:
常用的激活函數比如sigmoid,relu,tanh輸出值只有兩種,面對以上多分類問題,就需要使用softmax演算法。該演算法的主要應用就是多分類,而且是互斥的,即只能屬於某一類。(對於不是互斥的分類問題,一般使用多個二分類來組成)
補充知識:
也可以畫出更直觀的圖示:
例如:
對於線性不可分的數據樣本,可以使用多層神經網路來解決,也就是在輸入層和輸出層中間多加一些神經元,每一層可以加多個,也可以加多層。
在模型訓練過程中會出現欠擬合和過擬合的問題,欠擬合的原因並不是模型不行,而是我們的學習方法無法更精準地學習到適合的模型參數。模型越薄弱,對訓練的要求就越高,但是可以採用增加節點或者增加隱藏層的方式,讓模型具有更高的擬合性,從而降低模型的訓練難度。過擬合的表現在模型在訓練集上的表現非常好,loss很小;但是在測試集上的表現卻非常差。
避免過擬合的方法很多:常用的有early stopping、數據集擴增、正則化、dropout
本質就是加入雜訊,在計算loss時,在損失後面再加上意向,這樣預測結果與標簽間的誤差就會受到干擾,導致學習參數W和b無法按照目標方向來調整,從而實現模型與訓練數據無法完全擬合的效果,從而防止過擬合。
這個添加的干擾項必須具有如下特性:
這里有兩個范數L1和L2:
tf.rece_sum(tf.abs(w))
tf.nn.l2_loss(t,name=None)
拿上面的異或數據做舉例,dropout方法就是在剛剛的layer_1層後面再添加一個dropout層。
實際訓練時,將keep_prob設置成0.6,意味著每次訓練將僅允許0.6的節點參與學習運算。由於學習速度這樣就變慢了,可以將learning_rate調大,加快訓練速度。 注意:在測試時,需要將keep_prob設置為1。
全連接神經網路是一個通用的擬合數據的框架,只要有足夠多的神經元,及時只有一層hidden layer,利用常見的Sigmoid,relu等激活函數,就可以無限逼近任何連續函數。在實際使用中,如果想利用淺層神經網路擬合復雜非線性函數,就需要你靠增加的神經元個數來實現,神經元過多會造成參數過多,從而增加網路的學習難度,並影響網路的泛化能力。因此,在實際構建網路結構時,一般傾向於使用更深的模型,開減少所需要的神經元數量。