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

1??神經網絡的實例

1.1 案例介紹

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

樣本數據:(https://github.com/justmarkham/scikit-learn-videos/blob/master/data/Advertising.csv)

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))

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

2? 神經元的數學模型

輸入 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

3??神經網絡訓練過程

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

訓練流程

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

4??神經網絡相關的概念

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.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)的方法也能夠更快的收斂。

5  總結

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

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

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

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

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

本文章轉載微信公眾號@算法進階

上一篇:

邏輯回歸優化技巧總結(全)

下一篇:

Transformer+時間序列預測實戰(Python)
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費