前饋神經網絡FNN、多層感知機MLP和反向傳播推導

目錄

一、前饋神經網絡FNN

激活函數的使用

二、多層感知機MLP

MLP的典型結構

多層感知機MLP的特點

和前饋神經網絡FNN的區別

三、傳播推導

1、前向傳播(Forward propagation)

(1)輸入層到隱藏層

(2)隱藏層到輸出層

2、反向傳播(Backward propagation)

(1)正向傳播(Forward Pass)

(2)反向傳播(Backward Pass)

① 鏈式求導法則

② 梯度計算

反向傳播算法的作用

具體的推導步驟

總結

三、常見問題

1、如何理解“梯度指向了損失函數增加最快的方向”

2、為何說“最佳參數解的最簡單方式就是微分方程等于0找解”

3、學習率跟誰有關?


一、前饋神經網絡FNN

給定一組神經元,我們可以將神經元作為節點來構建一個網絡。不同的神 經網絡模型有著不同網絡連接的拓撲結構。一種比較直接的拓撲結構是前饋網絡。

前饋神經網絡(Feedforward Neural Network,FNN)是最早發明的簡單人工神經網絡。前饋神經網絡也經常稱為多層感知器(Multi-Layer Perceptron,MLP)。但多層感知器的叫法并不是十分合理,因為前饋神經網絡其實是由多層的 Logistic 回歸模型(連續的非線性函數)組成,而不是由多層的感知器(不連續的非線性函數)組成。

在前饋神經網絡中,各神經元分別屬于不同的層。每一層的神經元可以接收前一層神經元的信號,并產生信號輸出到下一層。第0層稱為輸入層,最后一層稱為輸出層,其他中間層稱為隱藏層。整個網絡中無反饋,信號從輸入層向輸出層單向傳播,可用一個有向無環圖表示。

多層前饋神經網絡

激活函數的使用

在FNN中處理二維矩陣輸入時,激活函數通常作用于每個元素上。也就是說,對于二維矩陣中的每個元素,都會獨立地應用激活函數f。這個過程通常發生在網絡的隱藏層,其中每個神經元接收來自前一層的加權輸入,然后通過激活函數轉換成一個新的矩陣,用作下一層的輸入。

在實際的神經網絡中,隱藏層的每個神經元通常會接收來自前一層所有神經元的加權和,然后通過激活函數。這意味著,雖然激活函數是逐元素應用的,但在計算每個隱藏層神經元的輸出時,會先進行一個線性變換(即 𝑤?𝑥+𝑏,其中 𝑤是權重,𝑏是偏置)。

二、多層感知機MLP

多層感知機(Multilayer Perceptron,MLP)是一種特殊的前饋人工神經網絡,是前饋神經網絡的一個子集。

所有的多層感知機都是前饋神經網絡,但并非所有的前饋神經網絡都是多層感知機。

MLP是機器學習中常見的模型之一,特別是在處理表格數據時。它們在許多領域都有應用,包括分類、模式識別、預測等。然而,MLP也有其局限性,比如容易過擬合,以及對輸入特征的縮放敏感等問題。

MLP的典型結構

  1. 輸入層:接收原始數據。
  2. 隱藏層:一個或多個層,負責處理輸入層的信息并提取特征。
  3. 輸出層:產生最終的預測結果。

多層感知機MLP的特點

  1. 至少三層:一個輸入層、至少一個隱藏層和一個輸出層。
  2. 全連接:除輸入層外,每一層的所有神經元都與前一層的所有神經元相連。
  3. 非線性激活函數:除輸入節點外,每個節點都是一個帶有非線性激活函數的神經元。每個神經元都使用非線性激活函數,如ReLU、sigmoid或tanh。

和前饋神經網絡FNN的區別

  • 復雜性:并非所有的前饋神經網絡需要有多個隱藏層或非線性激活函數。例如,一個只有輸入層和輸出層的網絡,沒有隱藏層,也是一個前饋神經網絡,但不是多層感知機。
  • 通用逼近能力:MLP因其多層結構和非線性激活函數,通常具有更強的學習和逼近復雜函數的能力。
  • 應用范圍:MLP由于其結構和學習能力,常用于分類、模式識別和預測任務,而更簡單的前饋網絡可能用于更特定的任務或作為更復雜網絡架構的一部分。

MLP中,每個連接的權重和偏差都通過訓練過程進行調整,以最小化輸出和目標值之間的差異。這個過程通常涉及大量的計算,因此MLP的實現通常依賴于高效的數學庫和硬件加速。

三、傳播推導

這是一個MLP的結構,共有n個樣本,每個樣本對應m個輸出值。假設隱藏層只有一層,其中隱藏層有p個hidden node。

其中每個輸入的圖片維度為d,則樣本表達形式為:

其中:d為每個輸入樣本的維度,x(i)是一個樣本,總共有n個(對應于樣本個數),m為每個樣本對應的輸出數量。

1、前向傳播(Forward propagation)

(1)輸入層到隱藏層

其中右側是從左側的圖中截取出來的一個運算過程。即輸入層到隱藏層的值為sk,k=1,2,…,p,是輸入層輸入數據的加權線性和

其中:vik是第i個輸入到第k個hidden node的權重。i對應的是輸入值的順序,k對應的是神經元節點的順序。

在隱藏層中,經過非線性轉換(假設激活函數為f1),得到隱藏層的輸出為hk,k=1,2,…,p。

(2)隱藏層到輸出層

隱藏層到輸出層的值為zj,j=1,2,…,m,是隱藏層輸出hk,k=1,2,…,p加權線性和

其中:wkj是第k個hidden node輸出到第j個輸出值的權重。

在輸出層中,經過非線性轉換(假設激活函數為f2),得到輸出層的輸出為yj,j=1,2,…,m。

2、反向傳播(Backward propagation)

反向傳播算法是訓練多層神經網絡,特別是前饋神經網絡(如多層感知機)的關鍵算法。它結合了梯度下降法和鏈式求導法則,用于計算網絡中每個參數的梯度,以便通過迭代調整這些參數來最小化網絡的預測誤差。反向傳播算法包括兩個主要的傳播過程:

(1)正向傳播(Forward Pass)

在這個階段,輸入數據通過網絡的多個層次(從輸入層到隱藏層,最后到輸出層)進行處理。在每個層級,數據會通過一個加權求和(包括一個偏置項)并應用一個非線性激活函數。每一層的輸出都是下一層的輸入。在每個神經元中,輸入信號通過加權求和,然后通過一個非線性激活函數進行轉換。

最終,輸出層生成一個預測值,這個值與真實值之間的差異用來衡量網絡的性能。

(2)反向傳播(Backward Pass)

反向傳播階段的目標是找到一種方法來調整網絡中的權重,以減少預測誤差。這個過程從輸出層開始,逆向遍歷網絡的每一層。

在這個階段,算法計算輸出層的預測值和真實值之間的誤差,然后這個誤差會通過網絡反向傳播,直到達到輸入層。在反向傳播過程中,利用鏈式求導法則計算每個權重對最終誤差的貢獻(即梯度),并更新權重以減少誤差。

① 鏈式求導法則

鏈式求導法則是微積分中的一種計算方法,用于計算復合函數的導數。在神經網絡的上下文中,它用于計算損失函數相對于網絡中每個權重的導數。這是因為損失函數(如均方誤差或交叉熵損失)是通過網絡的多個層次復合而成的。

② 梯度計算

梯度是一個向量,其每個元素都是損失函數相對于網絡中某個權重的偏導數。換句話說,梯度指向了損失函數增加最快的方向。在反向傳播算法中,我們計算損失函數相對于每個權重的偏導數,以確定如何調整權重以減少誤差。

反向傳播算法的作用
  • 梯度計算:為每個權重計算誤差梯度,這是權重更新的基礎。
  • 權重更新:利用梯度下降或其他優化算法來更新網絡中的權重和偏置,以減少預測誤差。
  • 損失函數最小化:通過迭代調整權重,反向傳播算法旨在最小化網絡的損失函數,即預測值和真實值之間的差異。
  • 泛化能力提升:通過優化網絡參數,提高模型對未見數據的預測能力,即提升模型的泛化能力。

反向傳播的目的是利用最后的目標函數(loss/cost function)來進行參數的更新,一般來說都是使用誤差均方和(mean square error)當做目標函數。誤差值越大,說明參數學習的不好,還需要繼續學習,直到參數或者誤差值收斂。

具體的推導步驟

  1. 計算最終誤差:首先計算輸出層的預測值和真實值之間的誤差,這通常通過損失函數來量化。
  2. 應用鏈式求導:然后,利用鏈式求導法則,從輸出層開始,逆向計算每個層的誤差相對于該層輸入的偏導數。這涉及到對激活函數求導以及對權重求導。
  3. 計算梯度:通過將這些偏導數與前一層的誤差信號相乘,可以得到每個權重的梯度。
  4. 更新權重:最后,使用這些梯度來更新每個權重,通常通過梯度下降法或其他優化算法來實現。權重更新的目的是減少損失函數的值,從而提高網絡的預測準確性。

假設x(i)是第i層的輸入值,其輸出值為:

其目標的誤差為:

所有樣本的誤差和當作目標函數:

所以要找到最佳參數解(參數只有兩個權重wkj和vik),最簡單的方式就是微分方程等于0找解:

但是當參數量比較多的時候,就不能直接找到唯一解,所以還是要依賴梯度下降(Gradient Descent)找最佳解。

針對上述的兩個參數(wkj和vik)求最佳值:

其中\eta為學習率(learning rate):

輸出層到隱藏層(權重為wkj):

鏈式求導(chain rule):

隱藏層到輸入層

隱藏層到輸入層(權重為vik):

鏈式求導(chain rule):

所以:

最后把n個樣本所有的梯度(gradient)相加得到參數的更新:

其中需要注意的地方:非線性轉換/激活函數(f1/f2)在反向傳播的時候都有微分,所以在選擇激活函數時必須選擇可微分函數。

總結

MLP是利用梯度下降(gradient descent)求最佳參數解:

最后代入到MLP內的前向傳播(Forward propagation)即得到最后的預測值。

三、常見問題

1、如何理解“梯度指向了損失函數增加最快的方向

梯度向量中的每個分量(即偏導數)都表示了在損失函數中,如果沿著該分量對應的維度(也就是權重)增加一個極小的量,損失函數增加的速度。換言之,梯度向量告訴你了損失函數在權重空間中的“最陡峭”的上升方向。

為了深入理解這個概念,可以從以下幾個方面考慮:

  1. 多維空間中的“方向”:在多維空間(比如權重空間)中,方向不再像在二維或三維空間中那樣直觀。在這里,“方向”可以用一個向量來表示,這個向量的每個分量對應于空間中的一個維度。

  2. 損失函數的曲面:想象損失函數是權重空間中的一個曲面,我們的目標是找到這個曲面的最小值。在曲面上任意一點,都存在一個方向使得曲面上升最快,這個方向就是損失函數在該點的梯度。

  3. 梯度下降:在機器學習中,我們通常使用梯度下降算法來優化損失函數。梯度下降的基本思想是沿著梯度的相反方向(即下降方向)移動,因為這樣做可以減少損失函數的值。通過不斷迭代這個過程,我們希望找到損失函數的局部最小值(或者在某些情況下是全局最小值)。

  4. 數學表述:梯度 ?𝐽(𝑤)?是損失函數 𝐽(𝑤)關于權重 𝑤的向量導數。如果我們有一個權重向量 𝑤,損失函數 𝐽(𝑤)的梯度可以寫作:

????????其中,\frac{\partial J}{\partial wi}是損? ? ?失函數相對于第 𝑖i個權重的偏導數。

直觀理解:如果將損失函數想象成一座山,那么梯度向量就指向了這座山“最陡”的地方,也就是上升最快的方向。梯度下降算法就是通過沿著與這個最陡方向相反的方向走,來試圖找到山的底部,即損失函數的最小值。

2、為何說“最佳參數解的最簡單方式就是微分方程等于0找解

當提到“微分方程等于0找解”時,通常是在談論如何找到損失函數相對于每個權重的偏導數的零點。這個過程是梯度下降算法的一部分,目的是找到損失函數的最小值。

  1. 微分方程:在機器學習中,通常不會使用傳統意義上的微分方程,而是使用偏導數的概念。當說“微分方程”時,我們實際上是在談論損失函數相對于權重的偏導數

  2. 偏導數:損失函數 𝐽相對于權重 𝑤𝑘𝑗或 𝑣𝑖𝑘的偏導數表示了當權重 𝑤𝑘𝑗或 𝑣𝑖𝑘增加一個極小量時,損失函數 𝐽的變化率。

  3. 等于0:當將損失函數相對于某個權重的偏導數設置為0時,是在尋找損失函數相對于該權重的局部最小值。在理論上,如果偏導數為0,那么在該點附近,損失函數不會隨著權重的增加而增加,這通常意味著找到了一個局部最小點

  4. 求解:在實際操作中,通常不會直接求解偏導數等于0的解析解,因為這樣的解可能很難找到,或者根本不存在。相反,我們使用數值優化方法,如梯度下降,來迭代地調整權重,直到找到損失函數的最小值。

3、學習率跟誰有關?

學習率(learning rate)是一個超參數,它決定了在每次迭代中權重更新的步長。選擇合適的學習率對模型的訓練過程和最終性能至關重要。學習率的選擇通常基于以下幾個方面:

  1. 經驗:在實踐中,數據科學家和機器學習工程師會根據經驗來設置學習率。一些常見的初始學習率值在不同的應用領域和問題中被廣泛使用。

  2. 文獻推薦:對于某些特定的問題或模型,研究文獻可能會推薦特定的學習率范圍。

  3. 網格搜索:可以通過網格搜索(grid search)等超參數調優技術來尋找最佳的學習率。這涉及在一組預定義的學習率值中進行訓練,并選擇產生最佳性能的學習率。

  4. 自適應學習率優化器:一些優化算法,如Adam(Adaptive Moment Estimation)、RMSprop(Root Mean Square Propagation)或AdaGrad(Adaptive Gradient),能夠自動調整學習率,使得訓練過程更加高效。

  5. 學習率衰減(Learning Rate Decay):在訓練過程中逐漸減小學習率是一種常見的做法。這可以通過多種方式實現,例如,隨著時間的增加線性或指數衰減學習率。

  6. 實驗:最終,確定最佳學習率通常需要實驗。可以通過多次訓練實驗,每次使用不同的學習率,然后選擇在驗證集上表現最好的學習率。

  7. 自動化超參數優化工具:使用如Hyperopt、Optuna或Ray Tune等工具可以自動化超參數搜索過程,包括學習率的優化。

  8. 問題規模:問題的規模有時也會影響學習率的選擇。對于大規模問題,可能需要較小的學習率以避免訓練過程中的不穩定。

  9. 損失函數的性質:損失函數的平滑性和曲率也會影響學習率的選擇。如果損失函數非常崎嶇,可能需要較小的學習率以避免錯過最小值。

在實際操作中,學習率的選擇是一個迭代的過程,可能需要根據模型的訓練動態和驗證性能進行多次調整。正確選擇學習率對于確保模型能夠快速收斂到最小損失函數值,同時避免過擬合和欠擬合,是非常重要的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12839.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12839.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12839.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試八股之WeakHashMap的工作原理

簡述WeakHashMap的工作原理 弱鍵(Weak Keys): WeakHashMap 的鍵(keys)是通過 WeakReference 弱引用進行封裝的。弱引用是一種特殊的引用類型,它不會阻止所引用的對象被垃圾收集器回收。這意味著&#xff…

冥想訓練具體方法有哪些|流靜冥想

冥想是一種身體的放松和敏銳的警覺性相結合的狀態。 每日練習的好處遠不止你花在集中注意力的那幾分鐘。桑托雷利是建在烏斯特的馬薩諸塞大學醫學院的減壓診所的所長,她也是《自愈》的作者,她說:"冥想是一種工具,通過練習&a…

ubuntu無法遠程連接,ssh不可用,ssh遠程連接被拒絕的解決方法。啟動sshd遠程連接

1、用以下命令檢查ssh狀態 systemctl status sshd2、如果查不到sshd狀態,或提示沒有ssh,就安裝ssh服務器和客戶機 $ sudo apt install openssh-server # 安裝ssh服務器 $ sudo apt install openssh-client # 安裝ssh客戶機3、如果不能安裝openssh-…

構建安全的GenAI/LLMs核心技術解密之大模型對抗攻擊(一)

LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四) 基于 LlaMA…

云手機的優缺點分析

云手機,作為云計算領域的創新,致力于提供更為靈活的移動設備體驗,特別適用于那些希望在不同設備之間無縫切換的用戶。雖然云手機帶來了一系列優勢,但也伴隨著一些挑戰,比如網絡延遲可能會影響用戶體驗,特別…

網絡安全|隱藏IP地址的5種不同方法

隱藏計算機的IP地址在互聯網在線活動種可以保護個人隱私,這是在線活動的一種常見做法,包括隱私問題、安全性和訪問限制內容等場景。那么如何做到呢?有很5種方法分享。每種方法都有自己的優點和缺點。 1. 虛擬網絡 當您連接到虛擬服務器時,您…

openGauss學習筆記-284 openGauss AI特性-AI4DB數據庫自治運維-DBMind模式說明-component子命令

文章目錄 openGauss學習筆記-284 openGauss AI特性-AI4DB數據庫自治運維-DBMind模式說明-component子命令284.1 命令參考openGauss學習筆記-284 openGauss AI特性-AI4DB數據庫自治運維-DBMind模式說明-component子命令 該子命令可以用于啟動DBMind的組件,包括可用于監控指標的…

Dubbo配置上的一些概念

對于dubbo在spring中我們可能看到有如下配置(可參考Schema 配置參考手冊 | Apache Dubbo): dubbo:application:id: dubbo-account-examplename: dubbo-account-example# 是否啟用 Dubbo 的 QoS(Quality of Service)服…

Blender雕刻建模_筆刷

1.雕刻模式 雕刻Scuplt,一種常用的建模方式 -選中物體,進入雕刻模式 -重構網格(修改體素大小,點擊重構網格)給物體添加更多面 -選擇筆刷,雕刻 -退出雕刻模式 2.重構網格 一種按體積的細分方式&#xf…

openstack部署nova中出現的問題:

[rootcontroller nova]# su -s /bin/sh -c “nova-manage db sync” nova /usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u’Duplicate index block_device_mapping_instance_uuid_virtual_name_device_name_idx. This is deprecated and will be…

Springboot+MybatisPlus如何實現帶驗證碼的登錄功能

實現帶驗證碼的登錄功能由兩部分組成::1、驗證碼的獲取 2、登錄(進行用戶名、密碼和驗證碼的判斷) 獲取驗證碼 獲取驗證碼需要使用HuTool中的CaptchaUtil.createLineCaptcha()來定義驗證碼的長度、寬度、驗證碼位數以及干擾線…

【JavaScript】嚴格模式

嚴格模式(Strict Mode)是一種運行模式,它提供了一種更加嚴格的語法和錯誤檢查,以幫助開發者編寫更可靠、更規范的代碼。 什么是嚴格模式: 嚴格模式是一種 JavaScript 的執行模式,通過啟用嚴格模式&#xff…

這個notebook集合,贊

這幾天在Github上看到一個數據科學倉庫,匯總了很多Python notebook代碼,主要是數據方向。 項目地址: https://github.com/donnemartin/data-science-ipython-notebooks 其中包括了pandas、numpy、matplotlib、scikit-learn、tensorflow、sp…

【Xilinx】程序可以綜合實現,但無法生成bit文件

項目場景: 使用xilinx vivado過程中遇到以下問題: 程序可以綜合實現,但無法生成bit文件 問題描述 最終生成bit文件時報錯如下 [DRC PDCN-1567] BUFGCTRL_CE_pins_both_connected_to_gnd: For cell ***/rxrecclk_bufg_i placed at site BU…

c++ visualstudio2017 opencv debug源碼 windows配置

源碼下載和cmake opencv源碼和opencv-contribue文件夾的層級目錄 在opencv-4.4.0中新建build文件夾,并啟動cmake-gui 配置如下,使用vs2017 x64, 需要注意contrib文件夾的設置,如下方藍色所示,依次點擊Configure和Generate 在bu…

半小時搞懂STM32知識點——UART

1.UART 1.1為什么要使用UART這種協議?介紹一下UART及其特點 成本低,硬件簡單,數據格式靈活; 低速全雙工異步串行通信 1.2 UART數據幀格式? 起始位(1)+數據位(5-8) 校驗位…

docker-java 操作docker

部署docker 10分鐘學會Docker的安裝和使用_docker安裝-CSDN博客文章瀏覽閱讀2.5w次,點贊44次,收藏279次。文章目錄Docker簡介Docker安裝Windows安裝Linux安裝CentOS安裝Ubuntu安裝最近花了些時間學習docker技術相關,在此做一些總結&#xff0…

12350 安全生產舉報投訴特服熱線系統解決方案

一、建設背景與系統概述 (一)背景介紹 隨著經濟的持續發展和社會的不斷進步,安全生產問題日益凸顯,成為影響社會穩定和人民福祉的重要因素。在此背景下,加強安全生產監管,提高監管效率和質量顯得尤為重要…

libasound+libsndfile讀取麥克風音頻保存為wav文件

依賴庫 要完成該功能依賴libasound、libsndfile庫,該命令在linux下可以通過命令行安裝安裝,安裝命令如下: sudo apt-get install libasound2-dev sudo apt-get install libsndfile1-dev 代碼實現 本文的目的是在linux下利用libasound和li…

wsl2遷移到非c盤

WSL2遷移 系統win11 核心步驟: 0) 以管理員身份運行powershell 查看已經安裝的Ubuntu分發版本,我的是默認 wsl -lPS C:\Users\Windows10> wsl -l 適用于 Linux 的 Windows 子系統分發版: Ubuntu (默認) 1)導出到D盤 wsl --export Ubuntu d://ubuntu.tar PS C:\U…