-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程(神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中靠近輸出層)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)
從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)
動(dòng)機(jī):為了更加深入的理解深度學(xué)習(xí),我們將使用 python 語(yǔ)言從頭搭建一個(gè)神經(jīng)網(wǎng)絡(luò),而不是使用像 Tensorflow 那樣的封裝好的框架。我認(rèn)為理解神經(jīng)網(wǎng)絡(luò)的內(nèi)部工作原理,對(duì)數(shù)據(jù)科學(xué)家來(lái)說(shuō)至關(guān)重要。
這篇文章的內(nèi)容是我的所學(xué),希望也能對(duì)你有所幫助。
神經(jīng)網(wǎng)絡(luò)是什么?
介紹神經(jīng)網(wǎng)絡(luò)的文章大多數(shù)都會(huì)將它和大腦進(jìn)行類比。如果你沒(méi)有深入研究過(guò)大腦與神經(jīng)網(wǎng)絡(luò)的類比,那么將神經(jīng)網(wǎng)絡(luò)解釋為一種將給定輸入映射為期望輸出的數(shù)學(xué)關(guān)系會(huì)更容易理解。
神經(jīng)網(wǎng)絡(luò)包括以下組成部分
? 一個(gè)輸入層,x
? 任意數(shù)量的隱藏層
? 一個(gè)輸出層,?
? 每層之間有一組權(quán)值和偏置,W and b
? 為隱藏層選擇一種激活函數(shù),σ。在教程中我們使用 Sigmoid 激活函數(shù)
下圖展示了 2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(注意:我們?cè)谟?jì)算網(wǎng)絡(luò)層數(shù)時(shí)通常排除輸入層)
2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
用 Python 可以很容易的構(gòu)建神經(jīng)網(wǎng)絡(luò)類
訓(xùn)練神經(jīng)網(wǎng)絡(luò)
這個(gè)網(wǎng)絡(luò)的輸出 ? 為:
你可能會(huì)注意到,在上面的等式中,輸出 ? 是 W 和 b 函數(shù)。
因此 W 和 b 的值影響預(yù)測(cè)的準(zhǔn)確率. 所以根據(jù)輸入數(shù)據(jù)對(duì) W 和 b 調(diào)優(yōu)的過(guò)程就被成為訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
每步訓(xùn)練迭代包含以下兩個(gè)部分:
? 計(jì)算預(yù)測(cè)結(jié)果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個(gè)過(guò)程:
前向傳播
正如我們?cè)谏蠄D中看到的,前向傳播只是簡(jiǎn)單的計(jì)算。對(duì)于一個(gè)基本的 2 層網(wǎng)絡(luò)來(lái)說(shuō),它的輸出是這樣的:
我們?cè)?NeuralNetwork 類中增加一個(gè)計(jì)算前向傳播的函數(shù)。為了簡(jiǎn)單起見(jiàn)我們假設(shè)偏置 b 為0:
但是我們還需要一個(gè)方法來(lái)評(píng)估預(yù)測(cè)結(jié)果的好壞(即預(yù)測(cè)值和真實(shí)值的誤差)。這就要用到損失函數(shù)。
損失函數(shù)
常用的損失函數(shù)有很多種,根據(jù)模型的需求來(lái)選擇。在本教程中,我們使用誤差平方和作為損失函數(shù)。
誤差平方和是求每個(gè)預(yù)測(cè)值和真實(shí)值之間的誤差再求和,這個(gè)誤差是他們的差值求平方以便我們觀察誤差的絕對(duì)值。
訓(xùn)練的目標(biāo)是找到一組 W 和 b,使得損失函數(shù)最好小,也即預(yù)測(cè)值和真實(shí)值之間的距離最小。
反向傳播
我們已經(jīng)度量出了預(yù)測(cè)的誤差(損失),現(xiàn)在需要找到一種方法來(lái)傳播誤差,并以此更新權(quán)值和偏置。
為了知道如何適當(dāng)?shù)恼{(diào)整權(quán)值和偏置,我們需要知道損失函數(shù)對(duì)權(quán)值 W 和偏置 b 的導(dǎo)數(shù)。
回想微積分中的概念,函數(shù)的導(dǎo)數(shù)就是函數(shù)的斜率。
梯度下降法
如果我們已經(jīng)求出了導(dǎo)數(shù),我們就可以通過(guò)增加或減少導(dǎo)數(shù)值來(lái)更新權(quán)值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。
但是我們不能直接計(jì)算損失函數(shù)對(duì)權(quán)值和偏置的導(dǎo)數(shù),因?yàn)樵趽p失函數(shù)的等式中并沒(méi)有顯式的包含他們。因此,我們需要運(yùn)用鏈?zhǔn)角髮?dǎo)發(fā)在來(lái)幫助計(jì)算導(dǎo)數(shù)。
鏈?zhǔn)椒▌t用于計(jì)算損失函數(shù)對(duì) W 和 b 的導(dǎo)數(shù)。注意,為了簡(jiǎn)單起見(jiàn)。我們只展示了假設(shè)網(wǎng)絡(luò)只有 1 層的偏導(dǎo)數(shù)。
這雖然很簡(jiǎn)陋,但是我們依然能得到想要的結(jié)果—損失函數(shù)對(duì)權(quán)值 W 的導(dǎo)數(shù)(斜率),因此我們可以相應(yīng)的調(diào)整權(quán)值。
現(xiàn)在我們將反向傳播算法的函數(shù)添加到 Python 代碼中
為了更深入的理解微積分原理和反向傳播中的鏈?zhǔn)角髮?dǎo)法則,我強(qiáng)烈推薦 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合并完成一個(gè)實(shí)例
既然我們已經(jīng)有了包括前向傳播和反向傳播的完整 Python 代碼,那么就將其應(yīng)用到一個(gè)例子上看看它是如何工作的吧。
神經(jīng)網(wǎng)絡(luò)可以通過(guò)學(xué)習(xí)得到函數(shù)的權(quán)重。而我們僅靠觀察是不太可能得到函數(shù)的權(quán)重的。
讓我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)進(jìn)行 1500 次迭代,看看會(huì)發(fā)生什么。 注意觀察下面每次迭代的損失函數(shù),我們可以清楚地看到損失函數(shù)單調(diào)遞減到最小值。這與我們之前介紹的梯度下降法一致。
讓我們看看經(jīng)過(guò) 1500 次迭代后的神經(jīng)網(wǎng)絡(luò)的最終預(yù)測(cè)結(jié)果:
經(jīng)過(guò) 1500 次迭代訓(xùn)練后的預(yù)測(cè)結(jié)果
我們成功了!我們應(yīng)用前向和方向傳播算法成功的訓(xùn)練了神經(jīng)網(wǎng)絡(luò)并且預(yù)測(cè)結(jié)果收斂于真實(shí)值。
注意預(yù)測(cè)值和真實(shí)值之間存在細(xì)微的誤差是允許的。這樣可以防止模型過(guò)擬合并且使得神經(jīng)網(wǎng)絡(luò)對(duì)于未知數(shù)據(jù)有著更強(qiáng)的泛化能力。
下一步是什么?
幸運(yùn)的是我們的學(xué)習(xí)之旅還沒(méi)有結(jié)束,仍然有很多關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的內(nèi)容需要學(xué)習(xí)。例如:
? 除了 Sigmoid 以外,還可以用哪些激活函數(shù)
? 在訓(xùn)練網(wǎng)絡(luò)的時(shí)候應(yīng)用學(xué)習(xí)率
? 在面對(duì)圖像分類任務(wù)的時(shí)候使用卷積神經(jīng)網(wǎng)絡(luò)
我很快會(huì)寫更多關(guān)于這個(gè)主題的內(nèi)容,敬請(qǐng)期待!
最后的想法
我自己也從零開(kāi)始寫了很多神經(jīng)網(wǎng)絡(luò)的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學(xué)習(xí)框架方便的搭建深層網(wǎng)絡(luò)而不需要完全理解其內(nèi)部工作原理。但是我覺(jué)得對(duì)于有追求的數(shù)據(jù)科學(xué)家來(lái)說(shuō),理解內(nèi)部原理是非常有益的。
這種練習(xí)對(duì)我自己來(lái)說(shuō)已成成為重要的時(shí)間投入,希望也能對(duì)你有所幫助
二、
三、
四、BP神經(jīng)網(wǎng)絡(luò)(誤差反傳網(wǎng)絡(luò))
雖然每個(gè)人工神經(jīng)元很簡(jiǎn)單,但是只要把多個(gè)人工
神經(jīng)元按一定方式連接起來(lái)就構(gòu)成了一個(gè)能處理復(fù)雜信息的神經(jīng)網(wǎng)絡(luò)。采用BP算法的多層前饋網(wǎng)絡(luò)是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò),稱之為BP神經(jīng)網(wǎng)絡(luò)。它的最大功能就是能映射復(fù)雜的非線性函數(shù)關(guān)系。
對(duì)于已知的模型空間和數(shù)據(jù)空間,我們知道某個(gè)模型和他對(duì)應(yīng)的數(shù)據(jù),但是無(wú)法寫出它們之間的函數(shù)關(guān)系式,但是如果有大量的一一對(duì)應(yīng)的模型和數(shù)據(jù)樣本集合,利用BP神經(jīng)網(wǎng)絡(luò)可以模擬(映射)它們之間的函數(shù)關(guān)系。
一個(gè)三層BP網(wǎng)絡(luò)如圖8.11所示,分為輸入層、隱層、輸出層。它是最常用的BP網(wǎng)絡(luò)。理論分析證明三層網(wǎng)絡(luò)已經(jīng)能夠表達(dá)任意復(fù)雜的連續(xù)函數(shù)關(guān)系了。只有在映射不連續(xù)函數(shù)時(shí)(如鋸齒波)才需要兩個(gè)隱層[8]。
圖8.11中,X=(x1,…,xi,…,xn)T為輸入向量,如加入x0=-1,可以為隱層神經(jīng)元引入閥值;隱層輸出向量為:Y=(y1,…,yi,…,ym)T,如加入y0=-1,可以為輸出層神經(jīng)元引入閥值;輸出層輸出向量為:O=(o1,…,oi,…,ol)T;輸入層到隱層之間的權(quán)值矩陣用V表示,V=(V1,…,Vj,…,Vl)T,其中列向量Vj表示隱層第j個(gè)神經(jīng)元的權(quán)值向量;隱層到輸出層之間的權(quán)值矩陣用W表示,W=(W1,…,Wk,…,Wl)T,
其中列向量Wk表示輸出層第k個(gè)神經(jīng)元的權(quán)值向量。
圖8.11 三層BP網(wǎng)絡(luò)[8]
BP算法的基本思想是:預(yù)先給定一一對(duì)應(yīng)的輸入輸出樣本集。學(xué)習(xí)過(guò)程由信號(hào)的正向傳播與誤差的反向傳播兩個(gè)過(guò)程組成。正向傳播時(shí),輸入樣本從輸入層傳入,經(jīng)過(guò)各隱層逐層處理后,傳向輸出層。若輸出層的實(shí)際輸出與期望的輸出(教師信號(hào))不符,則轉(zhuǎn)入誤差的反向傳播。將輸出誤差以某種形式通過(guò)隱層向輸入層逐層反傳,并將誤差分?jǐn)偨o各層的所有神經(jīng)元,獲得各層的誤差信號(hào),用它們可以對(duì)各層的神經(jīng)元的權(quán)值進(jìn)行調(diào)整(關(guān)于如何修改權(quán)值參見(jiàn)韓立群著作[8]),循環(huán)不斷地利用輸入輸出樣本集進(jìn)行權(quán)值調(diào)整,以使所有輸入樣本的輸出誤差都減小到滿意的精度。這個(gè)過(guò)程就稱為網(wǎng)絡(luò)的學(xué)習(xí)訓(xùn)練過(guò)程。當(dāng)網(wǎng)絡(luò)訓(xùn)練完畢后,它相當(dāng)于映射(表達(dá))了輸入輸出樣本之間的函數(shù)關(guān)系。
在地球物理勘探中,正演過(guò)程可以表示為如下函數(shù):
d=f(m) (8.31)
它的反函數(shù)為
m=f-1(d) (8.32)
如果能夠獲得這個(gè)反函數(shù),那么就解決了反演問(wèn)題。一般來(lái)說(shuō),難以寫出這個(gè)反函數(shù),但是我們可以用BP神經(jīng)網(wǎng)絡(luò)來(lái)映射這個(gè)反函數(shù)m=f-1(d)。對(duì)于地球物理反問(wèn)題,如果把觀測(cè)數(shù)據(jù)當(dāng)作輸入數(shù)據(jù),模型參數(shù)當(dāng)作輸出數(shù)據(jù),事先在模型空間隨機(jī)產(chǎn)生大量樣本進(jìn)行正演計(jì)算,獲得對(duì)應(yīng)的觀測(cè)數(shù)據(jù)樣本,利用它們對(duì)BP網(wǎng)絡(luò)進(jìn)行訓(xùn)練,則訓(xùn)練好的網(wǎng)絡(luò)就相當(dāng)于是地球物理數(shù)據(jù)方程的反函數(shù)??梢杂盟M(jìn)行反演,輸入觀測(cè)數(shù)據(jù),網(wǎng)絡(luò)就會(huì)輸出它所對(duì)應(yīng)的模型。
BP神經(jīng)網(wǎng)絡(luò)在能夠進(jìn)行反演之前需要進(jìn)行學(xué)習(xí)訓(xùn)練。訓(xùn)練需要大量的樣本,產(chǎn)生這些樣本需要大量的正演計(jì)算,此外在學(xué)習(xí)訓(xùn)練過(guò)程也需要大量的時(shí)間。但是BP神經(jīng)網(wǎng)絡(luò)一旦訓(xùn)練完畢,在反演中的計(jì)算時(shí)間可以忽略。
要想使BP神經(jīng)網(wǎng)絡(luò)比較好地映射函數(shù)關(guān)系,需要有全面代表性的樣本,但是由于模型空間的無(wú)限性,難以獲得全面代表性的樣本集合。用這樣的樣本訓(xùn)練出來(lái)的BP網(wǎng)絡(luò),只能反映樣本所在的較小范圍數(shù)據(jù)空間和較小范圍模型空間的函數(shù)關(guān)系。對(duì)于超出它們的觀測(cè)數(shù)據(jù)就無(wú)法正確反演。目前BP神經(jīng)網(wǎng)絡(luò)在一維反演有較多應(yīng)用,在二維、三維反演應(yīng)用較少,原因就是難以產(chǎn)生全面代表性的樣本空間。
以上就是關(guān)于神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
神經(jīng)網(wǎng)絡(luò)都有哪些(神經(jīng)網(wǎng)絡(luò)都有哪些層)
中國(guó)神經(jīng)科醫(yī)院排行榜(中國(guó)神經(jīng)科醫(yī)院排行榜最新)
神經(jīng)網(wǎng)絡(luò)是線性分類器嗎(神經(jīng)網(wǎng)絡(luò)是線性分類器嗎為什么)
拼多多上有的商品寫的是廣告(拼多多上有的商品寫的是廣告的好不好)