神經網絡的工作原理介紹

2021-12-29 深度學習這件小事

概要

單純的講神經網絡的概念有些抽象,先通過一個實例展示一下機器學習中的神經網絡進行數據處理的完整過程。

神經網絡的實例1.1 案例介紹

實例:訓練一個神經網絡模型擬合 廣告投入(TV,radio,newspaper 3種方式)和銷售產出的關係,實現根據廣告投放來預測銷售情況。

樣本數據:參考下圖

樣本數據

TV,radio和newspaper是樣本數據的3個特徵,sales是樣本標籤。

1.2 準備數據

#添加引用
import tensorflow as tf
import pandas as pd
import numpy as np
#加載數據
data = pd.read_csv('../dataset/Advertising.csv')#pd 是數據分析庫pandas
# 建立模型 根據tv,廣播,報紙投放額 預測銷量
print(type(data),data.shape)###<class 'pandas.core.frame.DataFrame'> (200, 5)
#取特徵 x取值除去第一列和最後一列的值取出所有投放廣告的值
x = data.iloc[:,1:-1]#200*3
#y取值最後一列銷量的值 標籤
y = data.iloc[:,-1] #200*1

1.3 構建一個神經網絡

建立順序模型:Sequential

隱藏層:一個多層感知器(隱含層10層Dense(10),形狀input_shape=(3,),對應樣本的3個特徵列,激活函數activation="relu"),

輸出層:標籤是一個預測值,緯度是1

model = tf.keras.Sequential([tf.keras.layers.Dense(10,input_shape=(3,),activation="relu"),
tf.keras.layers.Dense(1)])

模型結構 print(model.summary())

模型結構

說明:

1)keras的模型,Sequential表示順序模型,因為是全連接的,選擇順序模型

2)tf.keras.layers.Dense 是添加網絡層數的API

3)隱藏層參數 40個,10個感知器(神經元),每個感知器有4個參數(w1,w2,w3,b),總共10*4 = 40

4)輸出層參數11個,1個感知器(神經元),參數(w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,b)共11個

5)模型參數個數總計40+11 = 51個

1.4 給創建的模型加入優化器和損失函數

# 優化器adam,線性回歸模型損失函數為均方差(mse)

model.compile(optimizer="adam",loss="mse")

1.5啟動訓練

# 訓練模型

model.fit(x,y,epochs=100)

x 是樣本的特徵;y 是樣本的標籤

epochs 是梯度下降中的概念,當一個完整的數據集通過了神經網絡一次並且返回了一次,這個過程稱為一個 epoch;當一個 epoch 對於計算機而言太龐大的時候,就需要把它分成多個小塊,需要設置batch_size,這部分內容在後面的梯度下降章節再詳細介紹。

1.6使用模型預測

# 使用該模型在現有數據上預測前10個樣本的銷量

test = data.iloc[:10,1:-1]

print('測試值',model.predict(test))

以上步驟展示一個神經網絡模型的構建,訓練和預測的全部過程,下面再介紹一下原理。

神經元的數學模型

神經元的數學模型

輸入 input

(x1, x2, x3) 是外界輸入信號,一般是一個訓練數據樣本的多個屬性/特徵,可以理解為實例中的3種廣告投放方式。

權重 weights

(w1,w2,w3) 是每個輸入信號的權重值,以上面的 (x1,x2,x3)的例子來說,x1的權重可能是 0.92,x2的權重可能是 0.2,x3的權重可能是 0.03。當然權重值相加之後可以不是 1。

偏移bias

還有個 b 是怎麼來的?一般的書或者博客上會告訴你那是因為 y=wx+by,b 是偏移值,使得直線能夠沿 Y軸上下移動。從生物學上解釋,在腦神經細胞中,一定是輸入信號的電平/電流大於某個臨界值時,神經元細胞才會處於興奮狀態,這個 b 實際就是那個臨界值。亦即當:w1*x1+w2*x2+w3*x3>=t 時,該神經元細胞才會興奮。我們把t挪到等式左側來,變成(−t),然後把它寫成 b,變成了:w1*x1+w2*x2+w3*x3+b>=0

神經網絡訓練過程

還是以前面的廣告投放為例,神經網絡訓練之前需要先搭建一個網絡,然後填充數據(加入含特徵和標籤的樣本數據)訓練,訓練的過程就是不斷更新權重w和偏置b的過程。輸入有10層,每一層的特徵個數由樣本確定(實例中的3種廣告投放方式即3個特徵列),每一層參數就有4個(w1,w2,w3,b),全連接時10層相當於10*4=40 個參數。如下是一個單層神經網絡模型,但是有2個神經元。

2個神經元的模型

訓練流程

訓練的過程就是不斷更新權重w和偏置b的過程,直到找到穩定的w和b 使得模型的整體誤差最小。具體的流程如下,

訓練過程示意圖


神經網絡相關的概念

4.1反向傳播

反向傳播算法是一種高效計算數據流圖中梯度的技術,每一層的導數都是後一層的導數與前一層輸出之積,這正是鏈式法則的奇妙之處,誤差反向傳播算法利用的正是這一特點。

反向傳播算法示意圖

前饋時,從輸入開始,逐一計算每個隱含層的輸出,直到輸出層。

正向過程

step1,輸入層,隨機輸入第一個 x值,x 的取值範圍 (1,10],假設x是 2;

step2,第一層網絡計算,接收step1傳入 x 的值,計算:a=x^2;

step3,第二層網絡計算,接收step2傳入 a 的值,計算:b=ln (a);

step4,第三層網絡計算,接收step3傳入 b 的值,計算:c=sqrt{b};

step5,輸出層,接收step4傳入 c 的值

然後開始計算導數,並從輸出層經各隱含層逐一反向傳播。為了減少計算量,還需對所有已完成計算的元素進行復用。

反向過程

反向傳播 --- 每一層的導數都是後一層的導數與前一層輸出之積

step6,計算y與c的差值:Δc = c-y,傳回step4

step7,step4 接收step5傳回的Δc,計算Δb = Δc*2sqrt(b)

step8,step3 接收step4傳回的Δb,計算Δa = Δb*a

step9,step2 接收step3傳回的Δa,計算Δx = Δ/(2*x)

step10,step1 接收step2傳回的Δx,更新x(x-Δx),回到step1,從輸入層開始下一輪循環

4.2.梯度下降

梯度下降是一個在機器學習中用於尋找最佳結果(曲線的最小值)的迭代優化算法,它包含了如下2層含義:

梯度:函數當前位置的最快上升點;

下降:與倒數相反的方向,用數學語言描述的就是那個減號,亦即與上升相反的方向運動,就是下降,代價函數減小。

梯度下降數學公式

其中:

θ(n+1):下一個值

θ(n):當前值

-:減號,梯度的反向,

η:學習率或步長,控制每一步走的距離,不要太快,避免錯過了極值點;也不要太慢,以免收斂時間過長

▽:梯度 ,函數當前位置的最快上升點

J(θ):函數

梯度下降算法是迭代的,意思是需要多次使用算法獲取結果,以得到最優化結果。梯度下降的迭代性質能使欠擬合的圖示演化以獲得對數據的最佳擬合。

梯度下降算法示意圖

如上圖左所示,剛開始學習率很大,因此下降步長更大。隨著點下降,學習率變得越來越小,從而下降步長也變小。同時,代價函數也在減小,或者說代價在減小,有時候也稱為損失函數或者損失,兩者都是一樣的。

在一般情況下,一次性將數據輸入計算機是不可能的。因此,為了解決這個問題,我們需要把數據分成小塊,一塊一塊地傳遞給計算機,在每一步的末端更新神經網絡的權重,擬合給定的數據。這樣就需要了解 epochsbatch size 這些概念。

epochs

當一個完整的數據集通過了神經網絡一次並且返回了一次,這個過程稱為一個 epoch。然而,當一個 epoch 對於計算機而言太龐大的時候,就需要把它分成多個小塊。

設置epoch 的個數

完整的數據集在同樣的神經網絡中傳遞多次。但是請記住,我們使用的是有限的數據集,並且我們使用一個迭代過程即梯度下降,優化學習過程和圖示。因此僅僅更新權重一次或者說使用一個 epoch 是不夠的。

在神經網絡中傳遞完整的數據集一次是不夠的,而且我們需要將隨著 epoch 數量增加,神經網絡中的權重的更新次數也增加,曲線從欠擬合變得過擬合。那麼,幾個 epoch 才是合適的呢?呵呵,這個問題並沒有確定的標準答案,需要開發者根據數據集的特性和個人經驗來設置。

batch

在不能將數據一次性通過神經網絡的時候,就需要將數據集分成幾個 batch

迭代

迭代是 batch 需要完成一個 epoch 的次數。記住:在一個 epoch 中,batch 數和迭代數是相等的。

比如對於一個有 2000 個訓練樣本的數據集。將 2000 個樣本分成大小為 400 的 batch(5個batch),那麼完成一個 epoch 需要 5次迭代。

4.3 損失函數

「損失」就是所有樣本的「誤差」的總和,亦即(mm 為樣本數):

損失函數表達式

均方差和交叉熵表達式

4.優化函數

實例中的第1.4節,給創建的模型加入優化器和損失函數

# 優化器adam,線性回歸模型損失函數為均方差(mse)
model.compile(optimizer="adam",loss="mse")

這裡使用的是adam優化器,在神經網絡中,優化方法還有很多,這裡選擇幾種做個簡單介紹,詳細信息還需要單獨去查找資料。

1)梯度下降法(Gradient Descent)

梯度下降法是最重要的一種方法,也是很多其他優化算法的基礎。

2)隨機梯度下降法(Stochastic Gradient Descent)

每次只用一個樣本進行更新,計算量小,更新頻率高;容易導致模型超調不穩定,收斂也不穩定

3)Mini Batch Gradient Descent

mini batch 梯度下降法是梯度下降法和隨機梯度下降法的折衷,即在計算loss的時候,既不是直接計算整個數據集的loss,也不是只計算一個樣本的loss,而是計算一個batch的loss,batch的大小自己設定。

4)Momentum

帶momentum(動量)的梯度下降法也是一種很常用的的優化算法。這種方法因為引入了momentum量,所以能夠對梯度下降法起到加速的作用。

5)Nesterov

NAG算法簡而言之,就是在進行Momentum梯度下降法之前,先做一個預演,看看沿著以前的方向進行更新是否合適,不合適就立馬調整方向。也就是說參數更新的方向不再是當前的梯度方向,而是參數未來所要去的真正方向。

6)Adagrad

在訓練過程中,每個不參數都有自己的學習率,並且這個學習率會根據自己以前的梯度平方和而進行衰減。

優點:在訓練的過程中不用人為地調整學習率,一般設置好默認的初始學習率就行了

缺點:隨著迭代的進行,公式(6)中的學習率部分會因為分母逐漸變大而變得越來越小,在訓練後期模型幾乎不再更新參數。

7)AdaDelta

AdaDelta是Adagrad的改進版,目的就是解決Adagrad在訓練的後期,學習率變得非常小,降低模型收斂速度。

8)Adam

這裡重點介紹一下Adam

前面我們從最經典的梯度下降法開始,介紹了幾個改進版的梯度下降法。

Momentum方法通過添加動量,提高收斂速度;

Nesterov方法在進行當前更新前,先進行一次預演,從而找到一個更加適合當前情況的梯度方向和幅度;

Adagrad讓不同的參數擁有不同的學習率,並且通過引入梯度的平方和作為衰減項,而在訓練過程中自動降低學習率;

AdaDelta則對Adagrad進行改進,讓模型在訓練後期也能夠有較為適合的學習率。

既然不同的參數可以有不同的學習率,那麼不同的參數是不是也可以有不同的Momentum呢?

Adam方法就是根據上述思想而提出的,對於每個參數,其不僅僅有自己的學習率,還有自己的Momentum量,這樣在訓練的過程中,每個參數的更新都更加具有獨立性,提升了模型訓練速度和訓練的穩定性。

Adam(Adaptive Moment Estimation):

一般的,ρ 1 設置為0.9, ρ 2 設置為0.999

套用別人說過的一句話:

Adam works well in practice and outperforms other Adaptive techniques.

事實上,如果你的數據比較稀疏,那麼像SGD,NAG以及Momentum的方法往往會表現得比較差,這是因為對於模型中的不同參數,他們均使用相同的學習率,這會導致那些應該更新快的參數更新的慢,而應該更新慢的有時候又會因為數據的原因的變得快。因此,對於稀疏的數據更應該使用Adaptive方法(Adagrad、AdaDelta、Adam)。同樣,對於一些深度神經網絡或者非常複雜的神經網絡,使用Adam或者其他的自適應(Adaptive)的方法也能夠更快的收斂。

總結

回顧一下本文的主要內容:

1)理解概念:人工神經網絡靈感來自於生物神經網絡,它可以通過增加隱層神經元的數量,按照任意給定的精度近似任何連續函數來提升模型近似的精度。

2)實例介紹了構建人工神經網絡模型的機器學習實現過程

3)人工神經網絡的訓練過程

4)詳細介紹了神經網絡相關的一些基本概念:反向傳播,梯度下降,損失函數,優化函數,epoch,batch size ,優化器,學習率等

版權歸原作者所有,如有侵權,請聯繫刪除。

相關焦點

  • RNN遞歸神經網絡原理介紹+數字識別應用
    介紹CNN卷積神經網絡和RNN遞歸神經網絡都是由BP神經網絡演化而來的。CNN卷積神經網絡主要應用在圖像識別領域;而RNN遞歸神經網絡的改進版LSTM網絡主要應用於自然語言處理中;為什麼我介紹RNN是叫——遞歸神經網絡?這之前是一個困擾我很久的問題。
  • 一文了解神經網絡工作原理
    用於計算機視覺的卷積神經網絡(CNN)3. 遞歸神經網絡(RNN)用於時間序列分析4. 自組織地圖以進行特徵提取5. 推薦系統的深玻爾茲曼機6. 推薦系統的自動編碼器在本文中,我們將儘可能的介紹人工神經網絡(ANN)的所有相關內容。
  • 循環神經網絡原理--RNN,LSTM,GRU
    U、V、W代表神經網絡中的權重矩陣。在循環神經網絡中,向量S的值不僅僅和X有關,還和上一層的隱藏層輸出向量S有關。因此U是X和S之間的映射矩陣,W是上一隱藏層S的輸出和該層的向量S的映射矩陣。V是每個隱藏層的向量和輸出層向量映射矩陣。RNN展開後
  • 卷積神經網絡的工作原理
    下面從起源,工作原理及構成模塊三個方面介紹一下卷積神經網絡。1.   起源:       神經元相互連接組成神經網絡。神經網絡的核心思想可追溯到1957年,Frank Rosenblatt提出的感知機(Perceptron)。感知機是第一個具有學習能力的神經網絡,它是二分類的線性模型,在模式識別算法的歷史上佔有重要的地位。
  • 針對初學者的循環神經網絡介紹
    循環神經網絡(RNN)是一種專門處理序列的神經網絡。它們通常用於自然語言處理(NLP)任務,因為它們在處理文本方面非常有效。在本文中,我們將探索什麼是RNN,了解它們是如何工作的,並使用Python從頭構建一個真正的RNN(僅使用numpy庫)。這篇文章假設你有神經網絡的基本知識。
  • 機器學習——RNN神經網絡
    二,原理1.1底層原理      遞歸神經網絡(recurrent neural network,RNN)是一種具有反饋結構的神經網絡,其輸出不但與當前輸入和網絡的權值有關,而且也與之前網絡的輸入有關;RNN通過添加跨越時間點的自連接隱藏層,對時間進行建模;
  • 零基礎入門神經網絡:從原理、主要類型到行業應用
    但是神經網絡是個啥?有啥用?這篇文章和大家嘮嘮,啥是神經網絡,對於初學者來說主要有哪些挑戰,以及介紹幾種經典的神經網絡類型,和相關行業應用。神經網絡的工作原理基本上,神經網絡是由一層一層的不同的計算單位連接起來的。我們把計算單位稱為神經元,這些網絡可以把數據處理分類,就是我們要的輸出。
  • 開源神經網絡框架Caffe2全介紹
    這是一個自動把圖片和視頻轉換成大師美術風格的神經網絡算法。在大約兩年前剛被發表的時候,在伺服器上處理單張照片需要秒級別的時間。到現在,我們已經成功做到實時的視頻風格轉換。不僅實時,在我們同事的努力下,我們還做到了在手機移動端本地實施演算。這相較於之前,已經有好幾個量級的效率提升。今天,我想給大家介紹一下讓這一切變成現實,以及將各種AI算法部署到產品中的神經網絡框架:Caffe2。
  • 神經網絡-BP神經網絡
    感知器作為初代神經網絡,具有簡單、計算量小等優點,但只能解決線性問題。BP神經網絡在感知器的基礎上,增加了隱藏層,通過任意複雜的模式分類能力和優良的多維函數映射能力,解決了異或等感知器不能解決的問題,並且BP神經網絡也是CNN等複雜神經網絡等思想根源。
  • 神經網絡算法
    雖然單個神經元的結構極其簡單,功能有限,但大量神經元構成的網絡系統所能實現的行為卻是極其豐富多彩的。神經網絡的研究內容相當廣泛,反映了多學科交叉技術領域的特點。主要的研究工作集中在以下幾個方面:(1)生物原型研究。從生理學、心理學、解剖學、腦科學、病理學等生物科學方面研究神經細胞、神經網絡、神經系統的生物原型結構及其功能機理。(2)建立理論模型。
  • 圖神經網絡的介紹(基礎,DeepWalk和GraphSage)
    點擊上方「AI公園」,關注公眾號,選擇加「星標「或「置頂」作者:Steeve Huang編譯:ronghuaiyang給大家介紹目前非常熱門的圖神經網絡
  • 火爆網絡的《神經網絡與深度學習》,有人把它翻譯成了中文版!
    ,就是《Neural Network and Deep Learning》,中文譯為《神經網絡與深度學習》。非常適合用來入門神經網絡和深度學習!全書共分為六章,目錄如下:第一章:使用神經網絡識別手寫數字第二章:反向傳播算法如何工作第三章:改進神經網絡的學習方法第四章:神經網絡可以計算任何函數的可視化證明第五章
  • TensorFlow神經網絡教程
    這篇文章主要涉及它的Python版本,並關注庫的安裝、基本的低級組件,以及從頭構建一個前饋神經網絡,以便在真正的數據集上學習。深層學習神經網絡的訓練時間往往是其在複雜場景應用時遇到的一個瓶頸。由於神經網絡,以及其他的學習算法,通常都在用矩陣乘法,用圖形處理器(GPU)而不是中央處理器(CPU)進行計算顯然會更快。
  • 循環神經網絡(RNN)
    6.求解RNN模型依然採取前向傳播與反向傳播算法多層感知機(MLP)是深度神經網絡(DNN)的基礎模型,通常DNN就是指多層感知機,在此基礎上加入卷積層和池化層,就得到了卷積神經網絡(CNN)。但這兩類模型對於訓練樣本輸入是連續且長短不一的序列比較難解決,比如一串語音或者一串文字,對於這類問題,循環神經網絡(RNN)則比較擅長解決。我們這一篇就介紹該模型。
  • Google 數據中心神經網絡運營優化介紹
    圖2  谷歌數據中心的PUE進一步優化碰到瓶頸為了解決這些問題,谷歌決定利用機器學習神經網絡算法讓其數據中心能效更上一層樓。神經網絡通過神經元之間的相互作用來模仿認知行為,是一類機器學習算法。他說採用神經網絡機器學習方法對複雜系統建模具有優勢,因為神經網絡不需要用戶預設模型的交互特徵,而是在數據中自行尋找模式和交互,然後自動生成最佳匹配模型。該神經網絡研究的要素包括了伺服器總負載、水泵、冷卻塔、冷水機組、乾式冷卻器、溼球溫度、戶外溼度、風速、風向等,如圖5總計多達19個變量。谷歌利用傳感器部署了幾萬個數據點來收集這些基礎設施運行數據和電能使用信息。
  • 《神經網絡和深度學習》系列文章四:神經網絡的結構
    本節譯者:哈工大SCIR碩士生 徐偉 (https://github.com/memeda)聲明:我們將在每周一,周四,周日定期連載該書的中文翻譯,如需轉載請聯繫wechat_editors@ir.hit.edu.cn,未經授權不得轉載。
  • 網絡中的集線器的工作原理
    大家好,我是情報小哥!
  • ARIMA時間序列與LSTM神經網絡的PK
    當時的我的工作是根據過往投資和贖回量,每天預估一個需要留的錢,有點類似銀行準備金。我本想自己寫個代碼,無奈能力不足,最後讓算法工程師幫我寫了一套,每天預測準確率大約90%。回頭過了1年多我現在都不會,當時肯定寫不出來了。正好這周末學習統計預測,上課老師講的是ARIMA模型為主,不過老師也說了目前要更高的準確率推薦神經網絡。正好我也查到了神經網絡相關代碼,嘗試做一個ARIMA與神經網絡結果比對。
  • Github火爆圖神經網絡框架pytorch_geometric原理解析—基於邊的高效GNN實現
    【導讀】近幾年來,圖神經網絡(GNN)在推薦系統、搜尋引擎、計算機視覺等領域中都引起了較大的關注。
  • 神經網絡解析|RNN(循環神經網絡)
    大家如果了解BP算法或者前文我們介紹的CNN網絡就會發現,他們的輸出都是只考慮前一個輸入的影響而不考慮其它時刻輸入的影響,比如簡單的貓,狗等圖片,或者手寫數字等單個物體的識別具有較好的效果。但是,對於一些與時間先後有關的,比如視頻的下一時刻的預測,文檔前後文內容的預測等,這些算法的表現就不盡如人意了。因此,RNN就應運而生了。