神經網絡


 

1. 神經網絡

神經網絡與深度學習

在過去的10年,AI不僅在學術界同時也在工業界取得了飛速的發展,背后離不開深度學習的貢獻。就是因為深度學習的崛起,人工智能逐步進入了人們的視野,也有了今天各種AI的落地場景。特別是,ImageNet

競賽和AlphaGo事件正好也起到了催化劑的作用,迅速引起了全球對AI的風波,促使人人談論AI,也讓很多公司開始對AI重視了起來。

 

 

實際上,基於神經網絡的深度學習在90年代已經被人提出來了,但那個年代很少人關注深度學習,而且只有以hinton為代表的少部分人一直堅持了下來。

深度學習實際上並不新鮮, 包括反向傳播算法在90年代已經被提出來了。但那個時候深度學習並沒有受到關注, 主要因為它並沒有帶來很好的效果。歸其原因:

  • 第一、那時候我們並不知道如何更好地訓練模型,預訓練等概念2000年后才被提了出來; 
  • 第二、那時候數據量也很少, 而且我們知道深度學習的優勢在於處理大量的數據。數據量較少時, 傳統的方法也能取得較好的效果;
  • 第三、訓練深度學習需要大量的算力, 那時候顯然不像今天, 有着很強的計算工具。

總結起來,對於深度學習的發展跟以下幾點是離不開的

  • 大量的數據(大數據)
  • 計算資源(如GPU)
  • 訓練方法(如預訓練) 

很多時候,我們也可以認為真正讓深度學習爆發起來的是數據和算力,這並不是沒道理的。

深度學習加速推進了AI的發展以及工業界中的落地,然而深度學習模型的基礎是神經網絡,所以理解神經網絡具有巨大意義。

神經網絡中所涉及到的前向傳播、反向傳播等技術以及梯度消失等現象都會出現在其他深度學習模型如深度神經網絡、卷積神經網絡、RNN、LSTM中。先學好神經網絡再去接觸深度學習相關的技術,這樣會事

半功倍。 

神經網絡與大腦 

對於監督學習來講,核心是要學出特征x到標簽y之間的關系,具體的學習過程可通過機器學習模型。每一種機器學習模型實際上是對函數ff的假設,比如線性回歸或者邏輯回歸模型假設f為線性,

所以它只能學出xy的線性映射關系。如果xy之間並不是線性關系,則效果會大打折扣。

神經網絡實際上也跟邏輯回歸等模型一樣,本質是要學出x到y之間的關系,但不同於其他的模型,我們希望神經網絡可以模擬出人類在處理信息時的情形。

神經網絡中的神經(neural)實際上跟大腦中的神經元(neuron)有着緊密的關系。 

神經網絡的提出是為了模擬大腦,你覺得目前的神經網絡或者深度學習能夠真正模擬出大腦的機理嗎?

目前我們對大腦的認知是非常有限的, 真正能夠打開大腦里的秘密可能需要未來很長時間, 但這也不是說, 我們對大腦完全不了解。從這個角度, 我們可以很容易判斷出神經網絡或者深度學習只能算是在我們有限的

認知下盡量模仿大腦。

學習的本質

 

 

 

 

 神經網絡試着模擬大腦中的信號傳遞

 從映射的角度考慮

神經網絡中的神經元

我們都知道神經網絡模型的提出是為了模擬人的大腦的,而且人的大腦由非常多的神經元組成,每個神經元是接受信號和輸出信號的最小單位。當我們人類接收外界信號時,這個信號會層層通過大腦里的神經元

進行傳遞,最終這些會使得人類對外界做出一些反應。類似的,神經網絡本身也是由大量的神經元(neuron)構成。那接下來先了解一下神經網絡中每一個神經元是如何工作的。

神經網絡

  • 神經元是神經網絡的最小組成部分;
  • 激活函數的作用是讓x到y的映射關系更為復雜;(激活函數的目的就是讓映射變得更復雜, 這樣訓練出來的模型可以學出 x到 y的更復雜的映射關系, 所以比較適合復雜一點的數據。
  • 神經元的作用實際上是接受數據,處理好之后再去輸出;

 

2. 不同類型的激活函數

線性激活函數

線性激活函數實際上是沒作用的,即便加了也等於什么都沒加,因為它對信號不會做任何的處理。這有點類似於管道,來了信號之后原封不動地輸出出去。之所以提出線性激活函數,其主要目的是為了完整性。

那什么會用到線性激活函數呢?通常在,深度模型中的最后一層會用到。另外,如果我們沒有疊加任何的激活函數到神經元,默認可以認為是加了線性激活函數。

非線性激活函數

激活函數 Sigmoid 

 

 二分類問題

 

 激活函數 "tanh"

 

 

3. 多層神經網絡的向前傳播

 多層神經網絡的前向傳播,也就是給定一個輸入之后,計算最終的輸出。

神經網絡是由神經元構成的,同時也是一層一層疊加而成的。那為什么要疊加呢? 之后會了解到。先看如何做前向傳播(forward propagation),也就是給定一個輸入之后,如何通過一層層的網絡結構最后得到輸

出,這一點對理解神經網絡來講格外重要。只有理解了這一點,才能清楚理解反向傳播算法(back propagation),也是深度學習訓練中最為核心的技術。

對於多層神經網絡, 假如針對於每個神經元我們都選擇線性激活函數,如果都是線性函數,多層是沒有意義的, 如果都是線性函數, 最終得出的x和y之間的關系就是線性的;

如果每一個激活函數都是線性的, 那最終得出來的x, y映射關系也是線性的。假設我們對樣本x 依次做了線性轉換T1, T2, T3, 則最終的輸出為T3 * ( T2* ( T1x)) , 利用矩陣的乘法性質,可以改寫成 (T3 T2 * T1 ) * x,

多個矩陣的乘積仍然是矩陣,也就是線性轉換。這就意味着,即便我們做了多層的轉換, 最終的出來的仍然是線性關系, 所以它並不增加模型的復雜度。

擁有一層隱含層的神經網絡

 

 多輸出 - 分類 & 損失函數

 多層神經網絡

當我們增加額外的隱含層時就可以得到多層神經網絡。至於隱含層的個數是沒有限制的,我們可以隨意搭建很多層的神經網絡。為什么要增加隱含層呢? 道理很簡單,增加隱含層可直接導致模型的復雜度變高,

隨之帶來的就是可以學出到 y的更復雜的映射關系。

不管是卷積神經網絡,還是RNN、STM,或是最新的模型像transform、bert,核心就是個反向傳播算法;

bp(反方傳播)算法如何在多層神經網絡里運作的;

對於神經網絡來講,網絡的層數、每一個隱含層所包含的神經元個數,這些都是模型的超參數。那這些超參數如何選擇呢? 最經典的方法仍然是交叉驗證,每種組合都實驗一遍,並找出其中最好的參數組合。然

而,對於很多層的神經網絡,我們具有非常多的超參數,僅僅做交叉驗證就需要大量的計算資源。幸運的是,交叉驗證本身可以並行化,每一組參數的嘗試互不影響。

訓練神經網絡或者深度學習,實際上最大的挑戰在於設計網絡結構。那問題就來了,有沒有更好地方式來設計網絡結構呢?是否真的必要人工去一個個嘗試呢?為了解決這些問題,AutoML概念被提了出來,也就

是讓機器自動去尋找最好的網絡結構。這個領域目前發展很迅速,在不久的將來我們應該都可以用上AutoML工具。

4. 學習模型的參數-反向傳播算法

 如何對深度神經網絡做反向傳播,從而去學習模型的參數。是整個深度學習領域的核心,貫穿任所有度學習模型。

任何模型訓練的第一步是明確損失函數。模型訓練過程無非就是在優化損失函數,從而找到讓損失函數最小的模型的參數。主要以深度神經網絡為例來講解反向傳播算法,自然而然的,第一步就是

要定義出損失函數。在這里先假定任務是分類任務,所以損失部分需要使用交叉熵損失(cross-entropy loss)。

神經網絡的損失

任何模型訓練的第一步是明確損失函數。模型訓練過程無非就是在優化損失函數,從而找到讓損失函數最小的模型的參數。以深度神經網絡為例來講解反向傳播算法,自然而然的,第一步就是要定義出損失函

數。在這里先假定任務是分類任務,所以損失部分需要使用交叉熵損失(cross-entropy loss)。

 

反向傳播算法

有了目標函數之后,就可以通過優化算法去學習參數了。在優化技術中,最經典的仍然是梯度下降法。如何把梯度下降法應用在深度神經網絡中呢? 優化過程跟之前講過的邏輯回歸等模型有些區別,主要在於計

算梯度時要做一層一層的反向傳播。詳細剖析一下反向傳播中具體會發生什么

 

 

 

 

 

 

 

 

 

 

 

 

總體來講,對於網絡的優化分為兩步:

第一步叫作前向傳播,也就是把特征向量放到模型里,然后通過一層一層得到預測值,再把預測值和實際真實值對比一下就可以得到針對於當前樣本的損失。

第二步就是反向傳播的過程了,核心是計算對於參數的梯度,同時在梯度計算過程中也依賴於正向傳播中所計算的中間結果。

看到這里,很多人可能意識到了反向傳播的復雜性,稍微不注意可能就會犯錯,從而讓整個的訓練面臨失敗。另外,在實現過程中也會遇到一些棘手的問題比如數據的溢出等等。總而言之,真的想完全正確實現

一個反向傳播算法是非常具有挑戰的,可以想象一下,對於幾十層、甚至幾百層的網絡結構如何准確地計算出參數的梯度?這個太難了!

深度學習框架的誕生

為了解決這個問題,很早之前人們就開始研究如何為用戶封裝反向傳播的部分,讓我們只專注於設計網絡結構,不再去關注具體反向傳播的細節。TensorFlow,Pytorch等框架就是為了這個目的而誕生的。這些

框架的核心價值就是幫助我們完成反向傳播部分,不再需要我們糾結如何實現。

一旦網絡結構設計好,這些框架就可以幫助計算梯度,隨后就可以做梯度更新了。比如在Pytorch里,我們只需要在forward函數中完成前向傳播的過程即可。這大大加速了模型的構建過程,同時也降低了應用深

度學習的門檻。所以,現在即便很多人沒有具備很強的理論基礎,仍可以使用這些框架來完成深度學習模型的搭建。今后,這種工具化的趨勢會越來越明顯,讓每個人的工作變得更加高效,促使我們把最主要的

經歷花在創新形的工作上。

5. 關於深度神經網絡

從淺層到深度模型

淺層模型和深度模型之間的區別。深度模型的核心在於“深”,比如一個深度神經網絡可能擁有幾個隱含層,甚至更多。有點像搭積木,把一個模塊一層一層地搭上去。 那為什么我們傾向於搭建一個多層的結構

呢? 而不是淺層的結構? 具體潛在的邏輯在哪兒呢?搭建多層的結構有很多好處。

深度神經網絡的好處

其他常見的深度網絡結構

RNN和LSTM模型主要用來解決時序(time series)的問題,比如預測天氣、預測股價、或者預測一個句子的情感等等。 另外,機器翻譯、文本生成、對話系統等很多任務可以基於LSTM模型來搭建的。 CNN主要

用來解決圖像方面的任務,比如圖像分類、交通信號識別、目標檢測、行人檢測等。 以上都屬於深度學習領域,只要把機器學習部分學好了,深度學習的學習會變得很輕松。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM