了解神經網絡

聞數起舞 發佈 2020-01-12T20:44:36+00:00

Neuralnetwork with two hidden layers從左邊開始,我們有:模型的輸入層為橙色。

我們探索神經網絡如何發揮作用,以建立對深度學習的直觀理解

如今,深度學習已成為熱門話題。 但是,什麼使它與眾不同並使它與機器學習的其他方面區分開? 這是一個很深的問題(對雙關語)。 為了甚至開始回答它,我們將需要學習神經網絡的基礎知識。

神經網絡是深度學習的主力軍。 儘管它們看起來像黑匣子,但內心深處(對不起,我將阻止可怕的雙關語),他們正在嘗試與其他模型一樣完成相同的任務-做出良好的預測。

在本文中,我們將探討簡單神經網絡的來龍去脈。 最後,希望您(和我)將對神經網絡的工作方式有更深入,更直觀的理解。

30,000英尺的視圖

讓我們從一個高層次的概述開始,以便我們知道我們正在使用什麼。 神經網絡是神經元的多層網絡(下圖中的藍色和洋紅色節點),用於對事物進行分類,進行預測等。下圖是一個簡單的神經網絡的示意圖,其中具有五個輸入,五個輸出和兩個神經元的隱藏層。

從左邊開始,我們有:

  • 模型的輸入層為橙色。
  • 我們的藍色神經元的第一個隱藏層。
  • 我們在洋紅色中隱藏的第二層神經元。
  • 我們模型的輸出層(也稱為預測)為綠色。

連接點的箭頭顯示了所有神經元如何相互連接,以及數據如何從輸入層一直傳遞到輸出層。

稍後,我們將逐步計算每個輸出值。 我們還將觀察神經網絡如何使用稱為反向傳播的過程從錯誤中學習。

獲取我們的裝備

但是首先讓我們了解一下。 神經網絡到底想做什麼? 與其他任何模型一樣,它正在嘗試做出良好的預測。 我們有一組輸入和一組目標值,並且我們試圖獲得與這些目標值儘可能接近的預測。

忘了我上面繪製的神經網絡的更複雜外觀的圖片,然後專注於下面的這個簡單的圖片。

這是通過神經網絡表示的單特徵邏輯回歸(我們只給模型一個X變量)(如果您需要對邏輯回歸進行複習,我在這裡寫過)。 要查看它們之間的關係,我們可以使用神經網絡顏色代碼重寫邏輯回歸方程。

讓我們檢查一下每個元素:

  • X(橙色)是我們的輸入,這是我們賦予模型以計算預測的唯一特徵。
  • B1(綠松石色,又稱藍綠色)是邏輯回歸的估計斜率參數-B1告訴我們Log_Odds隨著X的變化而變化了多少。 請注意,B1位於綠松石線上,該綠松石線將輸入X連接到隱藏層1中的藍色神經元。
  • B0(藍色)是偏差-與回歸的截距項非常相似。 關鍵區別在於在神經網絡中,每個神經元都有其自己的偏差項(而在回歸中,模型具有一個奇異的攔截項)。
  • 藍色神經元還包括一個S型激活函數(由藍色圓圈內的曲線表示)。 記住,Sigmoid函數是我們用來從對數奇數到機率的函數(在我的前一篇文章中用control -f搜索" Sigmoid")。
  • 最後,通過將S形函數應用於量(B1 * X + B0)來獲得預測機率。

還不錯吧? 因此,讓我們回顧一下。 一個超簡單的神經網絡僅包含以下組件:

  • 一個連接(儘管在實踐中,通常會有多個連接,每個連接都有自己的權重,進入特定的神經元),權重"在其中生活",可以轉換您的輸入(使用B1)並將其提供給神經元 。
  • 包含附加項(B0)和激活函數(在我們的情況下為S型)的神經元。

而這兩個對象是神經網絡的基本構建塊。 更複雜的神經網絡只是具有更多隱藏層的模型,這意味著更多的神經元和神經元之間的更多連接。 而這種更為複雜的連接網絡(以及權重和偏差)使神經網絡可以"學習"隱藏在數據中的複雜關係。

現在讓我們添加一點複雜性

現在我們有了基本的框架,讓我們回到稍微複雜的神經網絡,看看它如何從輸入到輸出。 這裡再次供參考:

第一隱藏層由兩個神經元組成。 因此,要將所有五個輸入連接到隱藏層1中的神經元,我們需要十個連接。 下一個圖像(下圖)僅顯示輸入1和隱藏層1之間的連接。

請注意我們對存在於連接中的權重的表示法-W1,1表示存在於輸入1和神經元1之間的連接權重,W1,2表示存在於輸入1和神經元2之間的連接權重。 我要遵循的是Wa,b表示輸入a(或神經元a)和神經元b之間的連接權重。

現在,我們計算隱藏層1中每個神經元的輸出(稱為激活)。 為此,我們使用以下公式(W表示重量,In表示輸入)。

Z1 = W1 * In1 + W2 * In2 + W3 * In3 + W4 * In4 + W5 * In5 + Bias_Neuron1

神經元1激活= Sigmoid(Z1)

我們可以使用矩陣數學來總結此計算(請記住我們的表示法規則-例如,W4,2表示輸入4和神經元2之間的連接中存在的權重):

對於神經網絡的任何一層,其中前一層的深度為m個元素,而當前層的深度為n個元素,這可以概括為:

[W] @ [X] + [Bias] = [Z]

其中[W]是您的權重的n×m矩陣(前一層和當前層之間的連接),[X]是您的m×1矩陣,是開始輸入或來自前一層的激活,[Bias]是您的 n×1的神經元偏差矩陣,[Z]是n×1的中間輸出矩陣。 在前面的公式中,我遵循Python表示法,並使用@表示矩陣乘法。 一旦有了[Z],就可以對[Z]的每個元素應用激活函數(在本例中為S型),這將為我們提供當前層的神經元輸出(激活)。

最後,在繼續進行操作之前,讓我們將這些元素中的每一個直觀地映射回我們的神經網絡圖上,以將所有元素捆綁在一起([Bias]嵌入在藍色神經元中)。

通過重複計算[Z]並將激活函數應用於每個連續層,我們可以從輸入移至輸出。 此過程稱為前向傳播。 現在我們知道了輸出的計算方式,是時候開始評估輸出的質量並訓練我們的神經網絡了。

神經網絡學習的時間

這將是一篇很長的文章,所以現在可以喝杯咖啡休息一下。 還在我這兒? 太棒了! 現在我們知道了神經網絡的輸出值是如何計算的,現在該訓練它了。

高層神經網絡的訓練過程類似於許多其他數據科學模型的訓練過程-定義成本函數並使用梯度下降優化將其最小化。

首先,讓我們考慮一下我們可以利用哪些槓桿來最小化成本函數。 在傳統的線性或邏輯回歸中,我們正在尋找最小化成本函數的β係數(B0,B1,B2等)。 對於神經網絡,我們正在做相同的事情,但是規模更大,更複雜。

在傳統回歸中,我們可以單獨更改任何特定的beta,而不會影響其他beta係數。 因此,通過對每個β係數應用較小的單獨變化,並測量其對成本函數的影響,相對容易地找出我們需要朝哪個方向降低和最終使成本函數最小化。

在神經網絡中,更改任何一個連接的權重(或神經元的偏置)會對所有其他神經元及其後續層中的激活產生迴響效果。

那是因為神經網絡中的每個神經元就像它自己的小模型。 例如,如果我們想要五特徵邏輯回歸,則可以通過神經網絡(如左側的神經網絡)僅使用單個神經元來表達它!

因此,神經網絡的每個隱藏層基本上都是模型的堆棧(該層中的每個神經元的行為都像其自己的模型一樣),其輸出會饋送至更下游的更多模型(神經網絡的每個連續的隱藏層都包含更多的神經元) 。

成本函數

因此,鑒於所有這些複雜性,我們該怎麼辦? 其實還不錯。 讓我們逐步進行。 首先,讓我明確說明我們的目標。 給定一組訓練輸入(我們的功能)和結果(我們試圖預測的目標):

我們想要找到一組權重(請記住,神經網絡中任意兩個元素之間的每條連接線都具有權重)和偏差(每個神經元都具有偏差)可以使我們的成本函數最小化-其中,成本函數近似於 錯誤的,我們的預測與目標結果有關。

為了訓練我們的神經網絡,我們將使用均方誤差(MSE)作為代價函數:

MSE =總和[(預測-實際)²] *(1 / num_observations)

模型的MSE平均告訴我們我們有多錯,但是有一個轉折-通過對預測的誤差求平方,然後對它們進行平均,我們對那些偏離很小的預測的懲罰要嚴重得多。 線性回歸和邏輯回歸的成本函數以非常相似的方式運行。

好的,很酷,我們有一個成本函數要最小化。 是時候觸發梯度下降了嗎?

並不是那麼快-要使用梯度下降,我們需要知道我們的成本函數的梯度,即指向最大陡度方向的向量(我們想在梯度的相反方向上反覆採取步驟,最終達到最小 )。

除了在神經網絡中,我們還有很多相互聯繫的可變權重和偏差。 我們將如何計算所有梯度? 在下一節中,我們將了解反向傳播如何幫助我們解決這個問題。

梯度下降快速回顧

函數的梯度是向量,向量的元素是其相對於每個參數的偏導數。 例如,如果我們試圖通過僅兩個可變參數B0和B1最小化成本函數C(B0,B1),則梯度將為:

C(B0,B1)的梯度= [[dC / dB0],[dC / dB1]]

因此,梯度的每個元素都告訴我們,如果對特定參數進行小的更改,則成本函數將如何更改-因此,我們知道要調整的內容以及調整的幅度。 總而言之,我們可以按照以下步驟邁向最低標準:

  • 計算"當前位置"的梯度(使用當前參數值計算梯度)。
  • 修改每個參數的量應與它的漸變元素成比例,並且方向與其漸變元素相反。 例如,如果我們的成本函數相對於B0的偏導數為正但很小,而相對於B1的偏導數為負且很大,那麼我們要小幅減少B0並大幅度增加B1到 降低我們的成本函數。
  • 使用新的調整後的參數值重新計算梯度,並重複前面的步驟,直到達到最小值。


反向傳播

對於詳細的數學知識,我將參考這本出色的教科書(在線和免費!)(如果您想更深入地了解神經網絡,請務必查看一下)。 取而代之的是,我們將盡最大努力對反向傳播的工作方式和原因建立直觀的了解。

請記住,正向傳播是通過神經網絡(從輸入到最終輸出或預測)前進的過程。 反向傳播是相反的。 除了代替信號,我們還在模型中向後移動誤差。

當我試圖了解反向傳播過程時,一些簡單的可視化效果大有幫助。 下面是我對一個簡單的神經網絡的心理印象,因為它正從輸入傳播到輸出。 該過程可以歸納為以下步驟:

  • 輸入被饋送到神經元的藍色層,並通過每個神經元中的權重,偏差和S形曲線進行修改以得到激活。 例如:Activation_1 = Sigmoid(Bias_1 + W1 * Input_1)
  • 來自藍色層的激活1和激活2被饋送到品紅色神經元中,洋紅色神經元使用它們來產生最終的輸出激活。

正向傳播的目的是為每個連續的隱藏層計算每個神經元的激活,直到我們到達輸出。


現在,我們將其反轉。 如果遵循紅色箭頭(如下圖所示),您會注意到我們現在從洋紅色神經元的輸出開始。 那就是我們用來進行預測的輸出激活,以及模型中誤差的最終來源。 然後,我們使用與正向傳播信號時所用的權重和連接相同的權重和連接,在模型中向後移動此錯誤(因此,除了激活1,現在我們有了Error1-歸因於頂部藍色神經元的錯誤)。

還記得我們說過的正向傳播的目標是逐層計算神經元激活,直到獲得輸出? 現在,我們可以用類似的方式陳述反向傳播的目標:

我們要計算可歸因於每個神經元的誤差(我將這個誤差量稱為神經元的誤差,因為一遍又一遍地說"歸因"是沒有意思的),從最接近輸出的層開始一直到起點,我們的模型層。

那麼,為什麼我們要關心每個神經元的錯誤呢? 請記住,神經網絡的兩個構建塊是將信號傳遞到特定神經元(每個連接中都有權重)和神經元本身(帶有偏差)的連接。 整個網絡中的這些權重和偏差也是我們調整以更改模型所作的預測的錶盤。

這部分非常重要:

特定神經元的誤差(相對於所有其他神經元的誤差)的大小與該神經元的輸出(也稱為激活)對我們的成本函數的影響成正比。

因此,每個神經元的誤差代表了成本函數相對於該神經元輸入的偏導數的代表。 這具有直覺上的意義-如果特定神經元的錯誤比所有其他神經元的錯誤大得多,那麼調整有問題的神經元的權重和偏差將比對模型中的任何其他神經元產生更大的影響。

關於每個權重和偏差的偏導數是構成我們成本函數的梯度向量的各個元素。 因此,基本上,反向傳播使我們能夠計算歸因於每個神經元的誤差,進而使我們能夠計算偏導數和最終的梯度,從而可以利用梯度下降。 歡呼!

一個有益的類比—責備遊戲

有很多東西需要消化,因此希望這個比喻會有所幫助。 幾乎每個人在他或她生命中的某個時刻都有一個可怕的同事-總是出問題的人,當事情出錯時總是把同事或下屬丟在公共汽車下。

好的神經元通過反向傳播是責備遊戲的主人。 當錯誤傳回特定神經元時,該神經元將快速有效地將手指指向上遊錯誤者(最容易引起錯誤的上游同事)(例如,第4層神經元會將手指指向第3層神經元, 第2層神經元的第3層神經元,依此類推)。

又由於神經元無法直接觀察其他神經元的錯誤,每個神經元又如何知道應該歸咎於誰呢? 他們只是從最高頻率和最頻繁激活的角度看誰發出了最多的信號。 就像在現實生活中一樣,懶惰的人會無罪責備地滑行(低激活和不頻繁的激活),而承擔最大工作量的神經元則會受到責備,並改變其體重和偏見。 憤世嫉俗,是的,但對於使我們達到最佳的權重和偏差(使成本函數最小化)也非常有效。 左側是神經元如何在總線下相互拋擲的視圖。

簡而言之,就是反向傳播過程背後的直覺。 我認為,這是反向傳播的三個關鍵要點:

  • 這是將錯誤逐層移回,並將錯誤的正確量分配給神經網絡中每個神經元的過程。
  • 歸因於特定神經元的錯誤,可以很好地近似於改變該神經元的權重(從通往神經元的連接)和偏見如何影響成本函數。
  • 當向後看時,活躍的神經元(非懶惰神經元)是由於反向傳播過程而受到指責和調整的神經元。


總結

如果您已經在這裡閱讀了所有內容,那麼您會感激和欽佩(為您的堅持不懈)。

我們從一個問題開始,"什麼使深度學習變得特別?",我現在將嘗試回答這個問題(主要是從基本神經網絡的角度出發,而不是從其更高級的表親(如CNN,RNN等)的角度出發)。 以我的拙見,以下方面使神經網絡變得特別:

  • 每個神經元都是具有自己的偏差以及一組傳入特徵和權重的自己的微型模型。
  • 每個單獨的模型/神經元都饋入該模型所有隱藏層中的許多其他單獨的神經元。 因此,我們最終以總和大於其各部分的方式將模型插入到其他模型中。 這使神經網絡能夠擬合我們數據的所有細節和缺點,包括非線性部分(但要提防過度擬合-絕對要考慮正則化,以防止模型在遇到新數據和過採樣數據時表現不佳)。
  • 許多互連模型方法的多功能性以及反向傳播過程能夠有效,最佳地設置每個模型的權重和偏差的能力,使神經網絡能夠以許多其他算法無法做到的方式從數據中穩健地"學習"數據。

作者注意:神經網絡和深度學習是極其複雜的主題。 我仍在早期學習它們的過程中。 寫這個博客的目的不僅在於增進我自己的理解,還在於幫助讀者。 我期待您的所有評論,建議和反饋。 乾杯!


(本文翻譯自Tony Yiu的文章《Understanding Neural Networks》,參考:https://towardsdatascience.com/understanding-neural-networks-19020b758230)

關鍵字: