电竞比分网-中国电竞赛事及体育赛事平台

分享

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

 taotao_2016 2019-07-18

TensorFlow 深度學(xué)習(xí)讀寫筆記

Python搭建開發(fā)環(huán)境-Anaconda+PyCharm的安裝和入門教程

Jupyter Notebook神器-免費體驗來自微軟的Azure Notebook

Windows 10 本地搭建TensorFlow(CPU版本)深度學(xué)習(xí)環(huán)境

主流深度學(xué)習(xí)框架-MXNet、Caffe、TensorFlow、Torch、Theano

機器學(xué)習(xí)算法和深度學(xué)習(xí)算法比較

TensorFlow 的計算模型、數(shù)據(jù)模型和運行模型

Windows下的Jupyter Notebook 安裝與自定義啟動(圖文詳解)

結(jié)合TensorFlow Playground理解神經(jīng)網(wǎng)絡(luò)的主要功能

TensorFlow讀書筆記:使用placeholder填充方式讀取數(shù)據(jù)

記錄TensorFlow訓(xùn)練過程中數(shù)據(jù)變化趨勢-weight、bias、loss等

記錄TensorFlow訓(xùn)練過程中數(shù)據(jù)變化趨勢-直方圖(Histogram)

本文主要介紹深度神經(jīng)網(wǎng)絡(luò)的基本概念,包括激活函數(shù)、梯度下降算法、反向傳播算法和損失函數(shù)的概念,以及部分計算公式,省略了具體的推導(dǎo)公式。

深度神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和思想

神經(jīng)網(wǎng)絡(luò)的基本單位是神經(jīng)元,每個神經(jīng)元分別接受輸入和輸出,但與感知器(perceptron)不同的是,除了進行加權(quán)計算,還需要利用激活函數(shù)輸出。

網(wǎng)絡(luò)的最左邊一層被稱為輸入層,其中的神經(jīng)元被稱為輸入神經(jīng)元。

最右邊及輸出層包含輸出神經(jīng)元。

中間層被稱為隱含層,因為里面的神經(jīng)元既不是輸入也不是輸出。下面的4層網(wǎng)絡(luò)具有2個隱含層。

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

神經(jīng)網(wǎng)絡(luò)的基本思想就是建立在感知器和激活函數(shù)上的。對于多個輸入,在神經(jīng)網(wǎng)絡(luò)經(jīng)過多個神經(jīng)元計算之后,得到多個或者單個輸出。檢查輸出結(jié)果是否與期望的一致,如果不一致,就對神經(jīng)網(wǎng)絡(luò)中神經(jīng)元的權(quán)重進行調(diào)整,我們已經(jīng)知道,神經(jīng)元權(quán)重的細微調(diào)整會引起輸出結(jié)果的細微變化,這樣多個神經(jīng)元組合起來,逐漸調(diào)整,直到符合預(yù)期的輸出結(jié)果,我們就可以認為神經(jīng)網(wǎng)絡(luò)訓(xùn)練成功了!這里所說的訓(xùn)練調(diào)整的方法,利用到了梯度下降法,對神經(jīng)網(wǎng)絡(luò)進行反向傳播。

對神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程,就是不斷調(diào)整網(wǎng)絡(luò)中w和b的值,目標(biāo)是整個網(wǎng)絡(luò)表現(xiàn)出我們想要的行為。

激活函數(shù)的理論解釋

激活函數(shù)是用來加入非線性因素的,解決線性模型所不能解決的問題。

激活函數(shù)用來對前面計算得到的結(jié)果做一個非線性計算,這樣,人工神經(jīng)網(wǎng)絡(luò)的表現(xiàn)力會更好。

常見的激活函數(shù)有:sigmoid, tanh, relu 以及它們的變種。

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

神經(jīng)元節(jié)點 a的值,可以寫成向量的形式:

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

再將每個節(jié)點的值的計算公式都整合在一起,寫成矩陣運算的方式:

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

神經(jīng)網(wǎng)絡(luò)中的一層,就是對數(shù)據(jù)的一次非線性映射。

Wx+B 實現(xiàn)了對輸入數(shù)據(jù)的范圍轉(zhuǎn)換、空間旋轉(zhuǎn)以及平移操作,而非線性的激活函數(shù)f()則完成了對輸入數(shù)據(jù)原始空間的扭曲。

當(dāng)網(wǎng)絡(luò)層數(shù)變多時,在前面層網(wǎng)絡(luò)已經(jīng)學(xué)習(xí)到初步特征的基礎(chǔ)上,后面層網(wǎng)絡(luò)可以形成更加高級的特征,對原始空間的扭曲也更大。很多復(fù)雜的任務(wù)需要高度的非線性的分界面,深度更深的網(wǎng)絡(luò)可以比淺層的神經(jīng)網(wǎng)絡(luò)有更好的表達。

梯度下降算法原理

梯度下降方法是常用的參數(shù)優(yōu)化方法,經(jīng)常被用在神經(jīng)網(wǎng)絡(luò)中的參數(shù)更新過程中。

神經(jīng)網(wǎng)絡(luò)中,將樣本中的輸入X和輸出Y當(dāng)做已知值(對于一個樣本[X,Y],其中X和Y分別是標(biāo)準的輸入值和輸出值,X輸入到模型中計算得到Y(jié),但是模型中的參數(shù)值我們并不知道,所以我們的做法是隨機初始化模型的參數(shù),不斷更新迭代這些參數(shù),使得模型的輸出與Y接近),將連接權(quán)(weight)和偏置值(bias)當(dāng)做自變量,誤差L(loss 損失函數(shù)的值)作為因變量。

梯度下降的目的是找到全部連接權(quán)和偏置值在取何值的情況下誤差最小。

經(jīng)常有人把梯度下降的過程比作從山頂走到谷底,一次走多遠比作“學(xué)習(xí)率(Learning Rate)”。那么,它的數(shù)學(xué)表現(xiàn)形式是什么呢?

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

這就是梯度下降算法的迭代公式,當(dāng)梯度下降為零時,w、b收斂,訓(xùn)練結(jié)束。

其中 α 是學(xué)習(xí)率(Learing Rate);另外兩個分別是損失函數(shù)對W和b的偏導(dǎo)數(shù)。

用來訓(xùn)練神經(jīng)網(wǎng)絡(luò)的反向傳播算法是梯度下降法,它需要計算損失函數(shù)對眾多權(quán)重(weight)和偏置值(bias)的偏導(dǎo)數(shù)。

反向傳播算法

(1)殘差δ定義:損失函數(shù)對神經(jīng)元節(jié)點v 偏導(dǎo)數(shù)。

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

利用殘差可以以統(tǒng)一的形式表示各層節(jié)點的連接權(quán)和偏置值的迭代公式。

計算損失函數(shù)對權(quán)值 w 和 b 的偏導(dǎo)數(shù),可以轉(zhuǎn)換為計算每一層每個節(jié)點的“殘差”。

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

最后一層的殘差計算公式(省去推導(dǎo)過程):

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

即輸出層的第 i 個節(jié)點的殘差為:(該點的激活值a-該點的真實值y)*該點激活函數(shù)f() 對該點值(v)的導(dǎo)數(shù)。

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

對于第K-1層的殘差,可以根第K層的殘差計算出來。

倒數(shù)第二層的第 i 個節(jié)點的殘差的值,等于最后一層所有節(jié)點的殘差值和連接此節(jié)點的權(quán)值 w 相乘之后的累加,再乘以此節(jié)點上的激活函數(shù)對它的導(dǎo)數(shù)值。

不斷地重復(fù)這個過程,就得到了K-3, K-4, K-5,…2層上所有節(jié)點的殘差值。

(2)基于殘差,求偏導(dǎo)數(shù),計算更新值

在計算所有節(jié)點上的殘差之后,就可以根據(jù)公式得到損失函數(shù)對所有W和b的偏導(dǎo)數(shù):

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

獲得偏導(dǎo)數(shù)計算結(jié)果之后,在利用下面的公式對參數(shù)W和b進行更新。

如果多個樣本作為一個分組進行訓(xùn)練,則將W和b的偏導(dǎo)數(shù)做累加求平均后,再更新參數(shù)值:

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

深度神經(jīng)網(wǎng)絡(luò)、激活函數(shù)、梯度下降、反向傳播等概念的快速理解

(3)反向傳播算法的思路

  • 給定一個樣本 (x, y) ,我們首先隨機初始化網(wǎng)絡(luò)中參數(shù)W 和 b 接近0的隨機值,然后進行“前向計算”。從輸入層開始,根據(jù)公式逐層計算神經(jīng)網(wǎng)絡(luò)中所有節(jié)點的激活值,包括最終輸出層的輸出。
  • 對于每一層節(jié)點,計算其“殘差” δ,其含義是該節(jié)點的值對最終輸出層的結(jié)果和真實值的偏差造成了多大的影響。
  • 反向傳播就是從最后一層開始,一層一層往前計算每一層神經(jīng)元的殘差值。
  • 根據(jù)殘差值計算損失函數(shù)對權(quán)值W和b的偏導(dǎo)數(shù),然后根據(jù)一定的學(xué)習(xí)率(Learning Rate)更新參數(shù)W和b的值。

損失函數(shù)(Loss Function)

損失函數(shù)有很多種,可以根據(jù)使用場景選擇不同的損失函數(shù)。最簡單的情況是可以使用兩個值的差的絕對值作為損失函數(shù)。

總之,損失函數(shù)用于衡量預(yù)測值與實際值的偏離程度,損失值越小表示預(yù)測值越接近真實值。如果預(yù)測是完全精確的,則損失值為0;如果損失值不為0,則表示預(yù)測和真實值不一致。損失值越大,表示差的越遠。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多