神經網絡背后的簡單數學
> Image by Alina Grubnyak on Unsplash
神經網絡是將數據映射到信息的通用逼近器。這是什么意思?神經網絡可以解決任何問題嗎?神經網絡是一種經過驗證的解決方案,可用于按場景/逐幀分析,股票價格預測,零售,以及許多其他目的。我們中的許多人在企業級別使用它,但是我們當中有多少人真正理解它呢?
要回答"神經網絡可以解決任何問題嗎?"的問題,讓我們從基礎上進行探討。NeuralNet由稱為層的垂直堆疊組件組成:輸入,隱藏和輸出。每層由一定數量的神經元組成。輸入層具有數據集的屬性(特征)。根據問題陳述,可以存在具有多個神經元的多個隱藏層,而輸出層可以具有多個神經元。
了解感知器和激活功能
感知器(或神經元)是神經網絡的基本粒子。它根據閾值化原理工作。令f(x)是一個閾值為40的求和函數。

> Fig 1. Firing of Neurone (Image by Author)
在兩種情況下,定義的函數都返回兩個輸入x 1和x 2的加法。在情況1中,函數返回小于閾值的30。在情況2中,該函數返回大于閾值的50,并且神經元將觸發。現在,此功能變得比這復雜。典型神經網絡的神經元接收輸入值的總和乘以其權重和增加的偏差,該函數(也稱為激活函數或步進函數)有助于做出決策。

> Fig 2. Perceptron (Image by Author)
激活函數將節點的輸出轉換為二進制輸出。如果加權輸入超過閾值,則為1,否則為0(取決于激活功能)。共有三種最常用的激活功能:
Sigmoid
Sigmoid是一種廣泛使用的激活函數,有助于捕獲非線性關系。

> Fig 3. Sigmoid Curve (source)

對于任何z值,函數Φ(z)將始終返回二進制(0/1)輸出。因此,它被廣泛用于基于概率的問題中。
tanh(Tangent雙曲線)
它或多或少像Sigmoid函數,但tanh的范圍是-1到1,這使其適合分類問題。它是非線性的。

> Fig 4. tanh curve (Image by Author)
ReLu(整流線性單位)
它是深度學習中最常用的激活函數,因為它不像其他激活函數那樣復雜。f(x)返回0或x。

> Fig 5. ReLu curve (Image by Author)

由于ReLu函數的導數返回0或1,這使計算變得容易。
神經網絡
為了理解神經網絡的黑匣子,讓我們考慮一個具有三層的基本結構。輸入層,密集/隱藏層(連接在神經元的兩側)和輸出層。

> Fig 6. A simple Neural Network (Image by Author)
權重和偏差是隨機初始化的。神經網絡輸出的準確性在于通過不斷更新權重和偏差來找到最佳值。讓我們考慮一個方程,y = wx其中" w"是權重參數," x"是輸入特征。簡而言之,權重定義了賦予特定輸入屬性(功能)的權重。現在,方程y = wx的解將始終通過原點。因此,增加了一個截距以提供自由度,以適應被稱為偏差的完美擬合,并且方程式變為我們都熟悉的ŷ= wx + b。因此,偏置可以使激活函數的曲線向上或向下調整軸。
現在讓我們看看神經網絡會變得多么復雜。對于我們的網絡,輸入層有兩個神經元,密集層有四個神經元,輸出層有一個。每個輸入值都與其權重和偏差相關聯。輸入特征與權重和偏差的組合通過密集層,在該層中,網絡借助激活函數學習特征,并且網絡具有自己的權重和偏差,最后進行預測(輸出)。這就是正向傳播。那么,我們的網絡有多少個總參數?

> Fig 7. Total Parameter calculation of a Neural Network (Image by Author)
對于這樣一個簡單的網絡,總共需要優化17個參數才能獲得最佳解決方案。隨著隱藏層數量和其中神經元數量的增加,網絡獲得了更大的功率(達到特定點),但是隨后我們需要指數級的參數進行優化,這可能最終會占用大量的計算資源。因此,需要進行權衡。
更新網絡
在一次正向傳播迭代之后,通過獲取實際輸出與預測輸出之間的(平方)差來計算誤差。在網絡中,輸入和激活功能是固定的。因此,我們可以更改權重和偏差以最小化誤差。可以通過注意兩點來最大程度地減少錯誤:通過少量更改權重來更改錯誤,以及更改的方向。
成本函數
一個簡單的神經網絡根據線性關系value = wx + b來預測值,其中ŷ(預測)是y(實際)的近似值。現在,可以有幾條擬合linear的直線。為了選擇最佳擬合線,我們定義了成本函數。
令ŷ=θ₀+xθ₁。我們需要找到θ₀和θ₁的值,以使ŷ與y盡可能接近。為此,我們需要找到θ₀和θ₁的值,以使以下定義的誤差最小。

> (Image by Author)
誤差,E =實際值和預測值之間的平方差=(=-y)²
因此,Cost =(1 / 2n)(θ₀+xθ₁-y)²,其中n是用于計算均方差的總點數,并且將其除以2以減少數學計算量。因此,我們需要最小化此成本函數。
梯度下降
通過最小化成本函數,該算法有助于找到θ₀和θ₁的最佳值。我知道C =(1 / 2n)(θ₀+xθ₁— y)²。對于分析解決方案,我們將C相對于變量(θ)(稱為梯度)進行了部分微分。


這些梯度表示斜率。現在,原始成本函數是二次函數。因此,該圖將如下所示:

> Fig 8. Gradient Descent curve (Image by Author)
更新θ的公式為:

如果我們在點P1處,則斜率為負,這使梯度為負,整個方程為正。因此,該點沿正方向向下移動,直到達到最小值。類似地,如果我們在點P2處,則坡度為正,這使梯度為正,整個方程為負,使P2沿負方向移動,直到達到最小值。此處,η是點趨于極小值的速率,稱為學習速率。所有θ都會同時更新(對于某些時期),并計算誤差。
附帶說明
通過這樣做,我們可能會遇到兩個潛在問題:1.在更新θ值時,您可能會陷入局部最小值。一種可能的解決方案是使用具有動量的隨機梯度下降(SGD),這有助于越過局部極小值。2.如果η太小,收斂將花費很長時間。或者,如果η太大(或什至中等偏高),它將繼續圍繞最小值振蕩,并且永遠不會收斂。因此,我們不能對所有參數使用相同的學習率。為了解決這個問題,我們可以安排一個例程,該例程會隨著梯度向最小值移動(例如余弦衰減)而調整η的值。
后向傳播
使用梯度下降算法優化和更新NeuralNet中的權重和偏差的一系列操作。讓我們考慮一個具有輸入,單個隱藏層和輸出的簡單神經網絡(圖2)。
設x為輸入,h為隱藏層,σ為S型激活,w權重,b為偏置,wᵢ為輸入權重,wₒ為輸出權重,bᵢ為輸入偏置,bₒ為輸出偏置,O為輸出,E為誤差和μ是線性變換((∑wᵢxᵢ)+ b)。
現在,我們通過堆疊從輸入到輸出所需的一系列操作來創建圖2的計算圖。

> Fig 9. Computation Graph (Image by Author)
這里,E依賴于O,O依賴于μ2,μ2依賴于b 1,w 3和h,h依賴于μ1,并且μ1依賴于x,w 1和b 5。我們需要計算權重和偏差的中間變化(相關性)。由于只有一層隱藏層,因此存在輸入和輸出權重和偏差。因此,我們可以將其分為兩種情況。
案例1:w.r.t.輸出權重和偏差

> Fig 10. Computation Graph for case 1 (Image by Author)

因此,通過將導數的值放在上述兩個誤差變化方程中,可以得到如下的梯度

我們可以通過以下公式更新權重和偏差:

此計算用于隱藏層和輸出。同樣,對于輸入和隱藏層如下。
情況2:w.r.t。輸入權重和偏差

> Fig 11. Computation Graph for case 2. (Image by Author)

我們可以使用以下方法更新這些漸變:

兩種情況同時發生,并且計算錯誤直到重復的次數稱為時期。對神經網絡進行監督。在運行了一定數量的時間后,我們為數據集的選定要素設置了一組優化的權重和偏差。當在此優化網絡中引入新輸入時,將使用權重和偏差的優化值來計算它們,以實現最大精度。
神經網絡可以解決任何問題嗎?
如上所述,神經網絡是通用逼近器。從理論上講,它們能夠代表任何功能,因此可以解決任何問題。隨著網絡的增長(更多的隱藏層),它會獲得更多的功能,但是要優化的參數數量呈指數級增長,這會占用大量資源。
可以在這里找到實現。
本文由聞數起舞翻譯自Shubham Dhingra的文章《Simplified Mathematics behind Neural Networks》,轉載請注明出處,原文鏈接:https://towardsdatascience.com/simplified-mathematics-behind-neural-networks-f2b7298f86a4)