溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

發(fā)布時(shí)間:2020-08-16 08:43:35 來源:ITPUB博客 閱讀:226 作者:磐創(chuàng)AI 欄目:互聯(lián)網(wǎng)科技

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述目錄:

  • 神經(jīng)網(wǎng)絡(luò)前言

  • 神經(jīng)網(wǎng)絡(luò)

    • 感知機(jī)模型

    • 多層神經(jīng)網(wǎng)絡(luò)

  • 激活函數(shù)

    • Logistic函數(shù)

    • Tanh函數(shù)

    • ReLu函數(shù)

  • 損失函數(shù)和輸出單元

    • 損失函數(shù)的選擇

      • 均方誤差損失函數(shù)

      • 交叉熵?fù)p失函數(shù)

      • 輸出單元的選擇

    • 線性單元

      • Sigmoid單元

      • Softmax單元

  • 參考文獻(xiàn)

一.神經(jīng)網(wǎng)絡(luò)前言

從本章起,我們將正式開始介紹神經(jīng)網(wǎng)絡(luò)模型,以及學(xué)習(xí)如何使用TensorFlow實(shí)現(xiàn)深度學(xué)習(xí)算法。人工神經(jīng)網(wǎng)絡(luò)(簡稱神經(jīng)網(wǎng)絡(luò))在一定程度上受到了生物學(xué)的啟發(fā),期望通過一定的拓?fù)浣Y(jié)構(gòu)來模擬生物的神經(jīng)系統(tǒng),是一種主要的連接主義模型(人工智能三大主義:符號(hào)主義、連接主義和行為主義)。本章我們將從最簡單的神經(jīng)網(wǎng)絡(luò)模型感知器模型開始介紹,首先了解一下感知器模型(單層神經(jīng)網(wǎng)絡(luò))能夠解決什么樣的問題,以及它所存在的局限性。為了克服單層神經(jīng)網(wǎng)絡(luò)的局限性,我們必須拓展到多層神經(jīng)網(wǎng)絡(luò),圍繞多層神經(jīng)網(wǎng)絡(luò)我們會(huì)進(jìn)一步介紹激活函數(shù)以及反向傳播算法等。本章的內(nèi)容是深度學(xué)習(xí)的基礎(chǔ),對(duì)于理解后續(xù)章節(jié)的內(nèi)容非常重要。

深度學(xué)習(xí)的概念是從人工神經(jīng)網(wǎng)絡(luò)的研究中發(fā)展而來的,早期的感知器模型只能解決簡單的線性分類問題,后來發(fā)現(xiàn)通過增加網(wǎng)絡(luò)的層數(shù)可以解決類似于“異或問題”的線性不可分問題,這種多層的神經(jīng)網(wǎng)絡(luò)又被稱為多層感知器。對(duì)于多層感知器,我們使用BP算法進(jìn)行模型的訓(xùn)練[1],但是我們發(fā)現(xiàn)BP算法有著收斂速度慢,以及容易陷入局部最優(yōu)等缺點(diǎn),導(dǎo)致BP算法無法很好的訓(xùn)練多層感知器。另外,當(dāng)時(shí)使用的激活函數(shù)也存在著梯度消失的問題,這使得人工神經(jīng)網(wǎng)絡(luò)的發(fā)展幾乎陷入了停滯狀態(tài)。為了讓多層神經(jīng)網(wǎng)絡(luò)能夠訓(xùn)練,學(xué)者們探索了很多的改進(jìn)方案,直到2006年Hinton等人基于深度置信網(wǎng)絡(luò)(DBN)提出了非監(jiān)督貪心逐層訓(xùn)練算法,才讓這一問題的解決有了希望,而深度學(xué)習(xí)的浪潮也由此掀起。

本章內(nèi)容主要包括五個(gè)部分,第一部分我們介紹一下神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu),從基本的感知器模型到多層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu);第二部分介紹神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù);第三部分介紹損失函數(shù)和輸出單元的選擇;第四部分介紹神經(jīng)網(wǎng)絡(luò)模型中的一個(gè)重要的基礎(chǔ)知識(shí)——反向傳播算法;最后我們使用TensorFlow搭建一個(gè)簡單的多層神經(jīng)網(wǎng)絡(luò),實(shí)現(xiàn)mnist手寫數(shù)字的識(shí)別。

二、神經(jīng)網(wǎng)絡(luò)

1. 感知機(jī)模型

感知器(Perceptron)是一種最簡單的人工神經(jīng)網(wǎng)絡(luò),也可以稱之為單層神經(jīng)網(wǎng)絡(luò),如圖1所示。感知器是由Frank Rosenblatt在1957年提出來的,它的結(jié)構(gòu)很簡單,輸入是一個(gè)實(shí)數(shù)值的向量,輸出只有兩個(gè)值:1或-1,是一種兩類線性分類模型。

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖1 感知器模型

如圖3-1所示,感知器對(duì)于輸入的向量先進(jìn)行了一個(gè)加權(quán)求和的操作,得到一個(gè)中間值,假設(shè)該值為,則有:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式1

接著再經(jīng)過一個(gè)激活函數(shù)得到最終的輸出,該激活函數(shù)是一個(gè)符號(hào)函數(shù):

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式2

公式1中的可以看做是一個(gè)閾值(我們通常稱之為偏置項(xiàng)),當(dāng)輸入向量的加權(quán)和大于該閾值時(shí)(兩者之和)感知器的輸出為1,否則輸出為-1。

2. 多層神經(jīng)網(wǎng)絡(luò)

感知器只能解決線性可分的問題,以邏輯運(yùn)算為例:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖2 邏輯運(yùn)算

感知器可以解決邏輯“與”和邏輯“或”的問題,但是無法解決“異或”問題,因?yàn)椤爱惢颉边\(yùn)算的結(jié)果無法使用一條直線來劃分。為了解決線性不可分的問題,我們需要引入多層神經(jīng)網(wǎng)絡(luò),理論上,多層神經(jīng)網(wǎng)絡(luò)可以擬合任意的函數(shù)(本書配套的GitHub項(xiàng)目中有相關(guān)資料供參考)。

與單層神經(jīng)網(wǎng)絡(luò)相比,多層神經(jīng)網(wǎng)絡(luò)除了有輸入層和輸出層以外,還至少需要有一個(gè)隱藏層,如圖3所示是含有一個(gè)隱藏層的兩層神經(jīng)網(wǎng)絡(luò):

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖3 兩層神經(jīng)網(wǎng)絡(luò)

為了更直觀的比較一下單層神經(jīng)網(wǎng)絡(luò)和多層神經(jīng)網(wǎng)絡(luò)的差別,我們利用TensorFlow PlayGround來演示兩個(gè)例子。TensorFlowPlayGround是Google推出的一個(gè)深度學(xué)習(xí)的可視化的演示平臺(tái):http://playground.tensorflow.org/。

我們首先看一個(gè)線性可分的例子,如圖4所示。圖的右側(cè)是數(shù)據(jù)可視化后的效果,數(shù)據(jù)是能夠用一條直線劃分的。從圖中可以看到,我們使用了一個(gè)單層神經(jīng)網(wǎng)絡(luò),輸入層有兩個(gè)神經(jīng)元,輸出層只有一個(gè)神經(jīng)元,并且使用了線性函數(shù)作為激活函數(shù)。

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖4 TensorFlowPlayGround示例:線性可分的數(shù)據(jù)

我們點(diǎn)擊開始訓(xùn)練的按鈕,最終的分類結(jié)果如圖5所示:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖5 TensorFlowplayground示例:線性可分的數(shù)據(jù)

在上面的例子里我們使用單層神經(jīng)網(wǎng)絡(luò)解決了一個(gè)線性可分的二分類問題,接下來我們?cè)倏匆粋€(gè)線性不可分的例子,如圖6所示:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖6  TensorFlow playground示例:線性不可分的數(shù)據(jù)

在這個(gè)例子里,我們使用了一組線性不可分的數(shù)據(jù)。為了對(duì)這組數(shù)據(jù)進(jìn)行分類,我們使用了一個(gè)含有一層隱藏層的神經(jīng)網(wǎng)絡(luò),隱藏層有四個(gè)神經(jīng)元,并且使用了一個(gè)非線性的激活函數(shù)ReLU。要想對(duì)線性不可分的數(shù)據(jù)進(jìn)行分類,我們必須引入非線性的因素,即非線性的激活函數(shù),在下一小節(jié)里,我們會(huì)再介紹一些常用的激活函數(shù)。

最終的分類結(jié)果如圖7所示。

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖7 TensorFlowplayground示例:線性不可分的數(shù)據(jù)

感興趣的讀者可以嘗試使用線性的激活函數(shù),看會(huì)是什么樣的效果,還可以嘗試其它的數(shù)據(jù),試著增加網(wǎng)絡(luò)的層數(shù)和神經(jīng)元的個(gè)數(shù),看看分別對(duì)模型的效果會(huì)產(chǎn)生什么樣的影響。

三.激活函數(shù)

為了解決非線性的分類或回歸問題,我們的激活函數(shù)必須是非線性的函數(shù),另外我們使用基于梯度的方式來訓(xùn)練模型,因此激活函數(shù)也必須是連續(xù)可導(dǎo)的。

1. Logistic函數(shù)

Logistic函數(shù)(又稱為sigmoid函數(shù))的數(shù)學(xué)表達(dá)式和函數(shù)圖像如圖8所示:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖8 Logistic函數(shù)表達(dá)式及函數(shù)圖像

Logistic函數(shù)在定義域上單調(diào)遞增,值域?yàn)?/span>,越靠近兩端,函數(shù)值的變化越平緩。因?yàn)長ogistic函數(shù)簡單易用,以前的神經(jīng)網(wǎng)絡(luò)經(jīng)常使用它作為激活函數(shù),但是由于Logistic函數(shù)存在一些缺點(diǎn),使得現(xiàn)在的神經(jīng)網(wǎng)絡(luò)已經(jīng)很少使用它作為激活函數(shù)了。它的缺點(diǎn)之一是容易飽和,從函數(shù)圖像可以看到,Logistic函數(shù)只在坐標(biāo)原點(diǎn)附近有很明顯的梯度變化,其兩端的函數(shù)變化非常平緩,這會(huì)導(dǎo)致我們?cè)谑褂梅聪騻鞑ニ惴ǜ聟?shù)的時(shí)候出現(xiàn)梯度消失的問題,并且隨著網(wǎng)絡(luò)層數(shù)的增加問題會(huì)越嚴(yán)重。

2. Tanh函數(shù)

Tanh函數(shù)(雙曲正切激活函數(shù))的數(shù)學(xué)表達(dá)式和函數(shù)圖像如圖9所示:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖9 Tanh函數(shù)表達(dá)式及函數(shù)圖像

Tanh函數(shù)很像是Logistic函數(shù)的放大版,其值域?yàn)?/span>。在實(shí)際的使用中,Tanh函數(shù)要優(yōu)于Logistic函數(shù),但是Tanh函數(shù)也同樣面臨著在其大部分定義域內(nèi)都飽和的問題。

3. ReLu函數(shù)

ReLU函數(shù)(又稱修正線性單元或整流線性單元)是目前最受歡迎,也是使用最多的激活函數(shù),其數(shù)學(xué)表達(dá)式和函數(shù)圖像如圖10所示:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖10 ReLU函數(shù)表達(dá)式及函數(shù)圖像

ReLU激活函數(shù)的收斂速度相較于Logistic函數(shù)和Tanh函數(shù)要快很多,ReLU函數(shù)在軸左側(cè)的值恒為零,這使得網(wǎng)絡(luò)具有一定的稀疏性,從而減小參數(shù)之間的依存關(guān)系,緩解過擬合的問題,并且ReLU函數(shù)在軸右側(cè)的部分導(dǎo)數(shù)是一個(gè)常數(shù)值1,因此其不存在梯度消失的問題。但是ReLU函數(shù)也有一些缺點(diǎn),例如ReLU的強(qiáng)制稀疏處理雖然可以緩解過擬合問題,但是也可能產(chǎn)生特征屏蔽過多,導(dǎo)致模型無法學(xué)習(xí)到有效特征的問題。

除了上面介紹的三種激活函數(shù)以外,還有很多其它的激活函數(shù),包括一些對(duì)ReLU激活函數(shù)的改進(jìn)版本等,但在實(shí)際的使用中,目前依然是ReLU激活函數(shù)的效果更好。現(xiàn)階段激活函數(shù)也是一個(gè)很活躍的研究方向,感興趣的讀者可以去查詢更多的資料,包括本書GitHub項(xiàng)目中給出的一些參考資料等。

四.損失函數(shù)和輸出單元

損失函數(shù)(LossFunction)又稱為代價(jià)函數(shù)(Cost Function),它是神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)中的一個(gè)重要部分。損失函數(shù)用來表征模型的預(yù)測值與真實(shí)類標(biāo)之間的誤差,深度學(xué)習(xí)模型的訓(xùn)練就是使用基于梯度的方法最小化損失函數(shù)的過程。損失函數(shù)的選擇與輸出單元的選擇也有著密切的關(guān)系。

1. 損失函數(shù)的選擇

1.1 均方誤差損失函數(shù)

均方誤差(MeanSquared Error,MSE)是一個(gè)較為常用的損失函數(shù),我們用預(yù)測值和實(shí)際值之間的距離(即誤差)來衡量模型的好壞,為了保證一致性,我們通常使用距離的平方。在深度學(xué)習(xí)算法中,我們使用基于梯度的方式來訓(xùn)練參數(shù),每次將一個(gè)批次的數(shù)據(jù)輸入到模型中,并得到這批數(shù)據(jù)的預(yù)測結(jié)果,再利用這批預(yù)測結(jié)果和實(shí)際值之間的距離更新網(wǎng)絡(luò)的參數(shù)。均方誤差損失函數(shù)將這一批數(shù)據(jù)的誤差的期望作為最終的誤差值,均方誤差的公式如下:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式3

                   

上式中為樣本數(shù)據(jù)的實(shí)際值,為模型的預(yù)測值。為了簡化計(jì)算,我們一般會(huì)在均方誤差的基礎(chǔ)上乘以,作為最終的損失函數(shù):

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式4

1.2交叉熵?fù)p失函數(shù)

交叉熵(Cross Entropy)損失函數(shù)使用訓(xùn)練數(shù)據(jù)的真實(shí)類標(biāo)與模型預(yù)測值之間的交叉熵作為損失函數(shù),相較于均方誤差損失函數(shù)其更受歡迎。假設(shè)我們使用均方誤差這類二次函數(shù)作為代價(jià)函數(shù),更新神經(jīng)網(wǎng)絡(luò)參數(shù)的時(shí)候,誤差項(xiàng)中會(huì)包含激活函數(shù)的偏導(dǎo)。在前面介紹激活函數(shù)的時(shí)候我們有介紹,Logistic等激活函數(shù)很容易飽和,這會(huì)使得參數(shù)的更新緩慢,甚至無法更新。交叉熵?fù)p失函數(shù)求導(dǎo)不會(huì)引入激活函數(shù)的導(dǎo)數(shù),因此可以很好地避免這一問題,交叉熵的定義如下:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式5

上式中為樣本數(shù)據(jù)的真實(shí)分布,為模型預(yù)測結(jié)果的分布。以二分類問題為例,交叉熵?fù)p失函數(shù)的形式如下:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式6

上式中為真實(shí)值,為預(yù)測值。對(duì)于多分類問題,我們對(duì)每一個(gè)類別的預(yù)測結(jié)果計(jì)算交叉熵后求和即可。

2. 輸出單元的選擇

2.1 線性單元

線性輸出單元常用于回歸問題,當(dāng)輸出層采用線性單元時(shí),收到上一層的輸出后,輸出層輸出一個(gè)向量。線性單元的一個(gè)優(yōu)勢(shì)是其不存在飽和的問題,因此很適合采用基于梯度的優(yōu)化算法。

2.2 Sigmoid單元

Sigmoid輸出單元常用于二分類問題,Sigmoid單元是在線性單元的基礎(chǔ)上,增加了一個(gè)閾值來限制其有效概率,使其被約束在區(qū)間之中,線性輸出單元的定義為:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式7

上式中是Sigmoid函數(shù)的符號(hào)表示,其數(shù)學(xué)表達(dá)式在3.2.1節(jié)中有介紹。

2.3 Softmax單元

Softmax輸出單元適用于多分類問題,可以將其看作是Sigmoid函數(shù)的擴(kuò)展。對(duì)于Sigmoid輸出單元的輸出,我們可以認(rèn)為其值為模型預(yù)測樣本為某一類的概率,而Softmax則需要輸出多個(gè)值,輸出值的個(gè)數(shù)對(duì)應(yīng)分類問題的類別數(shù)。Softmax函數(shù)的形式如下:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式8

我們以一個(gè)簡單的圖示來解釋Softmax函數(shù)的作用,如圖3-11所示。原始輸出層的輸出為,,,增加了Softmax層后,最終的輸出為:

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式9


Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式10


Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

式11

上式中的值可以看做是分類器預(yù)測的結(jié)果,值的大小代表分類器認(rèn)為該樣本屬于該類別的概率,Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

Tensorflow系列專題(四):神經(jīng)網(wǎng)絡(luò)篇之前饋神經(jīng)網(wǎng)絡(luò)綜述

圖11  Softmax輸出單元

需要注意的是,Softmax層的輸入和輸出的維度是一樣的,如果不一致,可以通過在Softmax層的前面添加一層全連接層來解決問題。

接下來將介紹第四部分:神經(jīng)網(wǎng)絡(luò)模型中的一個(gè)重要的基礎(chǔ)知識(shí)——反向傳播算法;與第五部分:使用TensorFlow搭建一個(gè)簡單的多層神經(jīng)網(wǎng)絡(luò),實(shí)現(xiàn)mnist手寫數(shù)字的識(shí)別。

五.參考文獻(xiàn)

1.《Parallel Distributed processing》. Rumelhart & McCelland .1986

原文鏈接:https://mp.weixin.qq.com/s/hYxM9VAW_9j6jOEWycY8Rg

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI