Python搭建開(kāi)發(fā)環(huán)境-Anaconda+PyCharm的安裝和入門(mén)教程
Jupyter Notebook神器-免費(fèi)體驗(yàn)來(lái)自微軟的Azure Notebook
Windows 10 本地搭建TensorFlow(CPU版本)深度學(xué)習(xí)環(huán)境
主流深度學(xué)習(xí)框架-MXNet、Caffe、TensorFlow、Torch、Theano
機(jī)器學(xué)習(xí)算法和深度學(xué)習(xí)算法比較
TensorFlow 的計(jì)算模型、數(shù)據(jù)模型和運(yùn)行模型
Windows下的Jupyter Notebook 安裝與自定義啟動(dòng)(圖文詳解)
結(jié)合TensorFlow Playground理解神經(jīng)網(wǎng)絡(luò)的主要功能
TensorFlow讀書(shū)筆記:使用placeholder填充方式讀取數(shù)據(jù)
記錄TensorFlow訓(xùn)練過(guò)程中數(shù)據(jù)變化趨勢(shì)-weight、bias、loss等
記錄TensorFlow訓(xùn)練過(guò)程中數(shù)據(jù)變化趨勢(shì)-直方圖(Histogram)
本文主要介紹深度神經(jīng)網(wǎng)絡(luò)的基本概念,包括激活函數(shù)、梯度下降算法、反向傳播算法和損失函數(shù)的概念,以及部分計(jì)算公式,省略了具體的推導(dǎo)公式。
神經(jīng)網(wǎng)絡(luò)的基本單位是神經(jīng)元,每個(gè)神經(jīng)元分別接受輸入和輸出,但與感知器(perceptron)不同的是,除了進(jìn)行加權(quán)計(jì)算,還需要利用激活函數(shù)輸出。
網(wǎng)絡(luò)的最左邊一層被稱為輸入層,其中的神經(jīng)元被稱為輸入神經(jīng)元。
最右邊及輸出層包含輸出神經(jīng)元。
中間層被稱為隱含層,因?yàn)槔锩娴纳窠?jīng)元既不是輸入也不是輸出。下面的4層網(wǎng)絡(luò)具有2個(gè)隱含層。
神經(jīng)網(wǎng)絡(luò)的基本思想就是建立在感知器和激活函數(shù)上的。對(duì)于多個(gè)輸入,在神經(jīng)網(wǎng)絡(luò)經(jīng)過(guò)多個(gè)神經(jīng)元計(jì)算之后,得到多個(gè)或者單個(gè)輸出。檢查輸出結(jié)果是否與期望的一致,如果不一致,就對(duì)神經(jīng)網(wǎng)絡(luò)中神經(jīng)元的權(quán)重進(jìn)行調(diào)整,我們已經(jīng)知道,神經(jīng)元權(quán)重的細(xì)微調(diào)整會(huì)引起輸出結(jié)果的細(xì)微變化,這樣多個(gè)神經(jīng)元組合起來(lái),逐漸調(diào)整,直到符合預(yù)期的輸出結(jié)果,我們就可以認(rèn)為神經(jīng)網(wǎng)絡(luò)訓(xùn)練成功了!這里所說(shuō)的訓(xùn)練調(diào)整的方法,利用到了梯度下降法,對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行反向傳播。
對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程,就是不斷調(diào)整網(wǎng)絡(luò)中w和b的值,目標(biāo)是整個(gè)網(wǎng)絡(luò)表現(xiàn)出我們想要的行為。
激活函數(shù)是用來(lái)加入非線性因素的,解決線性模型所不能解決的問(wèn)題。
激活函數(shù)用來(lái)對(duì)前面計(jì)算得到的結(jié)果做一個(gè)非線性計(jì)算,這樣,人工神經(jīng)網(wǎng)絡(luò)的表現(xiàn)力會(huì)更好。
常見(jiàn)的激活函數(shù)有:sigmoid, tanh, relu 以及它們的變種。
神經(jīng)元節(jié)點(diǎn) a的值,可以寫(xiě)成向量的形式:
再將每個(gè)節(jié)點(diǎn)的值的計(jì)算公式都整合在一起,寫(xiě)成矩陣運(yùn)算的方式:
神經(jīng)網(wǎng)絡(luò)中的一層,就是對(duì)數(shù)據(jù)的一次非線性映射。
Wx+B 實(shí)現(xiàn)了對(duì)輸入數(shù)據(jù)的范圍轉(zhuǎn)換、空間旋轉(zhuǎn)以及平移操作,而非線性的激活函數(shù)f()則完成了對(duì)輸入數(shù)據(jù)原始空間的扭曲。
當(dāng)網(wǎng)絡(luò)層數(shù)變多時(shí),在前面層網(wǎng)絡(luò)已經(jīng)學(xué)習(xí)到初步特征的基礎(chǔ)上,后面層網(wǎng)絡(luò)可以形成更加高級(jí)的特征,對(duì)原始空間的扭曲也更大。很多復(fù)雜的任務(wù)需要高度的非線性的分界面,深度更深的網(wǎng)絡(luò)可以比淺層的神經(jīng)網(wǎng)絡(luò)有更好的表達(dá)。
梯度下降方法是常用的參數(shù)優(yōu)化方法,經(jīng)常被用在神經(jīng)網(wǎng)絡(luò)中的參數(shù)更新過(guò)程中。
神經(jīng)網(wǎng)絡(luò)中,將樣本中的輸入X和輸出Y當(dāng)做已知值(對(duì)于一個(gè)樣本[X,Y],其中X和Y分別是標(biāo)準(zhǔn)的輸入值和輸出值,X輸入到模型中計(jì)算得到Y(jié),但是模型中的參數(shù)值我們并不知道,所以我們的做法是隨機(jī)初始化模型的參數(shù),不斷更新迭代這些參數(shù),使得模型的輸出與Y接近),將連接權(quán)(weight)和偏置值(bias)當(dāng)做自變量,誤差L(loss 損失函數(shù)的值)作為因變量。
梯度下降的目的是找到全部連接權(quán)和偏置值在取何值的情況下誤差最小。
經(jīng)常有人把梯度下降的過(guò)程比作從山頂走到谷底,一次走多遠(yuǎn)比作“學(xué)習(xí)率(Learning Rate)”。那么,它的數(shù)學(xué)表現(xiàn)形式是什么呢?
這就是梯度下降算法的迭代公式,當(dāng)梯度下降為零時(shí),w、b收斂,訓(xùn)練結(jié)束。
其中 α 是學(xué)習(xí)率(Learing Rate);另外兩個(gè)分別是損失函數(shù)對(duì)W和b的偏導(dǎo)數(shù)。
用來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)的反向傳播算法是梯度下降法,它需要計(jì)算損失函數(shù)對(duì)眾多權(quán)重(weight)和偏置值(bias)的偏導(dǎo)數(shù)。
(1)殘差δ定義:損失函數(shù)對(duì)神經(jīng)元節(jié)點(diǎn)v 偏導(dǎo)數(shù)。
利用殘差可以以統(tǒng)一的形式表示各層節(jié)點(diǎn)的連接權(quán)和偏置值的迭代公式。
計(jì)算損失函數(shù)對(duì)權(quán)值 w 和 b 的偏導(dǎo)數(shù),可以轉(zhuǎn)換為計(jì)算每一層每個(gè)節(jié)點(diǎn)的“殘差”。
最后一層的殘差計(jì)算公式(省去推導(dǎo)過(guò)程):
即輸出層的第 i 個(gè)節(jié)點(diǎn)的殘差為:(該點(diǎn)的激活值a-該點(diǎn)的真實(shí)值y)*該點(diǎn)激活函數(shù)f() 對(duì)該點(diǎn)值(v)的導(dǎo)數(shù)。
對(duì)于第K-1層的殘差,可以根第K層的殘差計(jì)算出來(lái)。
倒數(shù)第二層的第 i 個(gè)節(jié)點(diǎn)的殘差的值,等于最后一層所有節(jié)點(diǎn)的殘差值和連接此節(jié)點(diǎn)的權(quán)值 w 相乘之后的累加,再乘以此節(jié)點(diǎn)上的激活函數(shù)對(duì)它的導(dǎo)數(shù)值。
不斷地重復(fù)這個(gè)過(guò)程,就得到了K-3, K-4, K-5,…2層上所有節(jié)點(diǎn)的殘差值。
(2)基于殘差,求偏導(dǎo)數(shù),計(jì)算更新值
在計(jì)算所有節(jié)點(diǎn)上的殘差之后,就可以根據(jù)公式得到損失函數(shù)對(duì)所有W和b的偏導(dǎo)數(shù):
獲得偏導(dǎo)數(shù)計(jì)算結(jié)果之后,在利用下面的公式對(duì)參數(shù)W和b進(jìn)行更新。
如果多個(gè)樣本作為一個(gè)分組進(jìn)行訓(xùn)練,則將W和b的偏導(dǎo)數(shù)做累加求平均后,再更新參數(shù)值:
(3)反向傳播算法的思路
損失函數(shù)有很多種,可以根據(jù)使用場(chǎng)景選擇不同的損失函數(shù)。最簡(jiǎn)單的情況是可以使用兩個(gè)值的差的絕對(duì)值作為損失函數(shù)。
總之,損失函數(shù)用于衡量預(yù)測(cè)值與實(shí)際值的偏離程度,損失值越小表示預(yù)測(cè)值越接近真實(shí)值。如果預(yù)測(cè)是完全精確的,則損失值為0;如果損失值不為0,則表示預(yù)測(cè)和真實(shí)值不一致。損失值越大,表示差的越遠(yuǎn)。
聯(lián)系客服