99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀深入淺出|深度學(xué)習(xí)算法之BP神經(jīng)網(wǎng)絡(luò) 詳細公式推導(dǎo)
深入淺出|深度學(xué)習(xí)算法之BP神經(jīng)網(wǎng)絡(luò) 詳細公式推導(dǎo)
2018-08-29
收藏

深入淺出|深度學(xué)習(xí)算法之BP神經(jīng)網(wǎng)絡(luò) 詳細公式推導(dǎo)

所謂神經(jīng)網(wǎng)絡(luò),目前用得最廣泛的一個定義是“的神經(jīng)網(wǎng)絡(luò)是由具有適應(yīng)性簡單單元組成的廣泛并行互連的網(wǎng)絡(luò),它的組織能夠模擬生物神經(jīng)系統(tǒng)對真實世界物體所做出的交互反應(yīng)”。

BP(back propagation)神經(jīng)網(wǎng)絡(luò)一種按照誤差逆向傳播算法訓(xùn)練的多層前饋神經(jīng)網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)。

神經(jīng)元模型

神經(jīng)網(wǎng)絡(luò)中最基本的單元是神經(jīng)元模型(neuron)。在生物神經(jīng)網(wǎng)絡(luò)的原始機制中,每個神經(jīng)元通常都有多個樹突(dendrite),一個軸突(axon)和一個細胞體(cell body),樹突短而多分支,軸突長而只有一個;在功能上,樹突用于傳入其它神經(jīng)元傳遞的神經(jīng)沖動,而軸突用于將神經(jīng)沖動傳出到其它神經(jīng)元,當(dāng)樹突或細胞體傳入的神經(jīng)沖動使得神經(jīng)元興奮時,該神經(jīng)元就會通過軸突向其它神經(jīng)元傳遞興奮。神經(jīng)元的生物學(xué)結(jié)構(gòu)如下圖所示:

一直沿用至今的“M-P神經(jīng)元模型”正是對這一結(jié)構(gòu)進行了抽象,也稱“閾值邏輯單元“,其中樹突對應(yīng)于輸入部分,每個神經(jīng)元收到n個其他神經(jīng)元傳遞過來的輸入信號,這些信號通過帶權(quán)重的連接傳遞給細胞體,這些權(quán)重又稱為連接權(quán)(connection weight)。細胞體分為兩部分,前一部分計算總輸入值(即輸入信號的加權(quán)和,或者說累積電平),后一部分先計算總輸入值與該神經(jīng)元閾值的差值,然后通過激活函數(shù)(activation function)的處理,產(chǎn)生輸出從軸突傳送給其它神經(jīng)元。M-P神經(jīng)元模型如下圖所示:

與線性分類十分相似,神經(jīng)元模型最理想的激活函數(shù)也是階躍函數(shù),即將神經(jīng)元輸入值與閾值的差值映射為輸出值1或0,若差值大于零輸出1,對應(yīng)興奮;若差值小于零則輸出0,對應(yīng)抑制。但階躍函數(shù)不連續(xù),不光滑(定義域內(nèi)不完全可導(dǎo)),故在M-P神經(jīng)元模型中,采用Sigmoid函數(shù)來近似, Sigmoid函數(shù)將較大范圍內(nèi)變化的輸入值擠壓到 (0,1) 輸出值范圍內(nèi),所以也稱為擠壓函數(shù)(squashing function)。

將多個神經(jīng)元按一定的層次結(jié)構(gòu)連接起來,就得到了神經(jīng)網(wǎng)絡(luò)。它是一種包含多個參數(shù)的模型,比方說10個神經(jīng)元兩兩連接,則有100個參數(shù)需要學(xué)習(xí)(每個神經(jīng)元有9個連接權(quán)以及1個閾值),若將每個神經(jīng)元都看作一個函數(shù),則整個神經(jīng)網(wǎng)絡(luò)就是由這些函數(shù)相互嵌套而成。

多次前饋神經(jīng)網(wǎng)絡(luò)有三部分組成,分別是輸入層(input layer),隱藏層(hide layer),輸出層(output layer)。隱藏層可以有,也可以沒有,輸入層和輸出層必須要有。沒有隱藏層的神經(jīng)網(wǎng)絡(luò)是線性的,只能處理線性可分的問題(線性可分問題從二維的角度就是分界線是一條直線,多維就是存在線性超平面將其分類)。一個沒有隱藏層且輸出層只有一個單元的神經(jīng)網(wǎng)絡(luò)就相當(dāng)于線性的Logistic模型。



感知機與多層網(wǎng)絡(luò)

感知機(Perceptron)是由兩層神經(jīng)元組成的一個簡單模型,但只有輸出層是M-P神經(jīng)元,即只有輸出層神經(jīng)元進行激活函數(shù)處理,也稱為功能神經(jīng)元(functionalneuron);輸入層只是接受外界信號(樣本屬性)并傳遞給輸出層(輸入層的神經(jīng)元個數(shù)等于樣本的屬性數(shù)目),而沒有激活函數(shù)。這樣一來,感知機與之前線性回歸的思想基本是一樣的,都是通過對屬性加權(quán)與另一個常數(shù)求和,再使用sigmoid函數(shù)將這個輸出值壓縮到0-1之間,從而解決分類問題。不同的是感知機的輸出層應(yīng)該可以有多個神經(jīng)元,從而可以實現(xiàn)多分類問題,同時兩個模型所用的參數(shù)估計方法十分不同。

給定訓(xùn)練集,則感知機的n+1個參數(shù)(n個權(quán)重+1個閾值)都可以通過學(xué)習(xí)得到。閾值Θ可以看作一個輸入值固定為-1的啞結(jié)點的權(quán)重ωn+1,即假設(shè)有一個固定輸入xn+1=-1的輸入層神經(jīng)元,其對應(yīng)的權(quán)重為ωn+1,這樣就把權(quán)重和閾值統(tǒng)一為權(quán)重的學(xué)習(xí)了。簡單感知機的結(jié)構(gòu)如下圖所示:


感知機權(quán)重的學(xué)習(xí)規(guī)則如下:對于訓(xùn)練樣本(x,y),當(dāng)該樣本進入感知機學(xué)習(xí)后,會產(chǎn)生一個輸出值,若該輸出值與樣本的真實標(biāo)記不一致,則感知機會對權(quán)重進行調(diào)整,若激活函數(shù)為階躍函數(shù),則調(diào)整的方法與Logistic回歸類似(基于梯度下降法)。


感知機是通過逐個樣本輸入來更新權(quán)重,首先設(shè)定好初始權(quán)重(一般為隨機),逐個地輸入樣本數(shù)據(jù),若輸出值與真實標(biāo)記相同則繼續(xù)輸入下一個樣本,若不一致則更新權(quán)重,然后再重新逐個檢驗,直到每個樣本數(shù)據(jù)的輸出值都與真實標(biāo)記相同。容易看出:感知機模型總是能將訓(xùn)練數(shù)據(jù)的每一個樣本都預(yù)測正確,和決策樹模型總是能將所有訓(xùn)練數(shù)據(jù)都分開一樣,感知機模型很容易產(chǎn)生過擬合問題。


由于感知機模型只有一層功能神經(jīng)元,因此其功能十分有限,只能處理線性可分的問題,對于這類問題,感知機的學(xué)習(xí)過程一定會收斂(converge),因此總是可以求出適當(dāng)?shù)臋?quán)值。


BP神經(jīng)網(wǎng)絡(luò)算法

由上面可以得知:神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)主要蘊含在權(quán)重和閾值中,多層網(wǎng)絡(luò)使用上面簡單感知機的權(quán)重調(diào)整規(guī)則顯然不夠用了,BP神經(jīng)網(wǎng)絡(luò)算法即誤差逆?zhèn)鞑ニ惴ㄕ菫閷W(xué)習(xí)多層前饋神經(jīng)網(wǎng)絡(luò)而設(shè)計,BP神經(jīng)網(wǎng)絡(luò)算法是迄今為止最成功的的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法。



一般而言,只需包含一個足夠多神經(jīng)元的隱層,就能以任意精度逼近任意復(fù)雜度的連續(xù)函數(shù),故下面以訓(xùn)練單隱層的前饋神經(jīng)網(wǎng)絡(luò)為例,介紹BP神經(jīng)網(wǎng)絡(luò)的算法思想。


上圖為一個單隱層前饋神經(jīng)網(wǎng)絡(luò)的拓撲結(jié)構(gòu),BP神經(jīng)網(wǎng)絡(luò)算法也使用梯度下降法(gradient descent),以單個樣本的均方誤差的負梯度方向?qū)?quán)重進行調(diào)節(jié)??梢钥闯觯築P算法首先將誤差反向傳播給隱層神經(jīng)元,調(diào)節(jié)隱層到輸出層的連接權(quán)重與輸出層神經(jīng)元的閾值;接著根據(jù)隱含層神經(jīng)元的均方誤差,來調(diào)節(jié)輸入層到隱含層的連接權(quán)值與隱含層神經(jīng)元的閾值。BP算法基本的推導(dǎo)過程與感知機的推導(dǎo)過程原理是相同的,下面給出調(diào)整隱含層到輸出層的權(quán)重調(diào)整規(guī)則的推導(dǎo)過程:


BP算法的最終目標(biāo)是要最小化整個訓(xùn)練集D上的累積誤差



學(xué)習(xí)率η∈(0,1)控制著沿反梯度方向下降的步長,若步長太大則下降太快容易產(chǎn)生震蕩,若步長太小則收斂速度太慢,一般地常把η設(shè)置為0.1,有時更新權(quán)重時會將輸出層與隱含層設(shè)置為不同的學(xué)習(xí)率。BP算法的基本流程如下所示:


BP算法的更新規(guī)則是基于每個樣本的預(yù)測值與真實類標(biāo)的均方誤差來進行權(quán)值調(diào)節(jié),即BP算法每次更新只針對于單個樣例。需要注意的是:BP算法的最終目標(biāo)是要最小化整個訓(xùn)練集D上的累積誤差。


BP神經(jīng)網(wǎng)絡(luò)matlab實現(xiàn)的基本步驟

1、數(shù)據(jù)歸一化

2、數(shù)據(jù)分類,主要包括打亂數(shù)據(jù)順序,抽取正常訓(xùn)練用數(shù)據(jù)、變量數(shù)據(jù)、測試數(shù)據(jù)

3、建立神經(jīng)網(wǎng)絡(luò),包括設(shè)置多少層網(wǎng)絡(luò)(一般3層以內(nèi)既可以,每層的節(jié)點數(shù)(具體節(jié)點數(shù),尚無科學(xué)的模型和公式方法確定,可采用試湊法,但輸出層的節(jié)點數(shù)應(yīng)和需要輸出的量個數(shù)相等),設(shè)置隱含層的傳輸函數(shù)等

4、指定訓(xùn)練參數(shù)進行訓(xùn)練,這步非常重要

5、完成訓(xùn)練后,就可以調(diào)用訓(xùn)練結(jié)果,輸入測試數(shù)據(jù),進行測試

6、數(shù)據(jù)進行反歸一化

7、誤差分析、結(jié)果預(yù)測或分類,作圖等

應(yīng)用案例

問題的matlab代碼:
P=[0.2286 0.1292 0.0720 0.1592 0.1335 0.0733 0.1159 0.0940 0.0522 0.1345 0.0090 0.1260 0.3619 0.0690 0.1828;
   0.2090 0.0947 0.1393 0.1387 0.2558 0.0900 0.0771 0.0882 0.0393 0.1430 0.0126 0.1670 0.2450 0.0508 0.1328;
   0.0442 0.0880 0.1147 0.0563 0.3347 0.1150 0.1453 0.0429 0.1818 0.0378 0.0092 0.2251 0.1516 0.0858 0.0670;
   0.2603 0.1715 0.0702 0.2711 0.1491 0.1330 0.0968 0.1911 0.2545 0.0871 0.0060 0.1793 0.1002 0.0789 0.0909;
   0.3690 0.2222 0.0562 0.5157 0.1872 0.1614 0.1425 0.1506 0.1310 0.0500 0.0078 0.0348 0.0451 0.0707 0.0880;
   0.0359 0.1149 0.1230 0.5460 0.1977 0.1248 0.0624 0.0832 0.1640 0.1002 0.0059 0.1503 0.1837 0.1295 0.0700;
   0.1759 0.2347 0.1829 0.1811 0.2922 0.0655 0.0774 0.2273 0.2056 0.0925 0.0078 0.1852 0.3501 0.1680 0.2668;
   0.0724 0.1909 0.1340 0.2409 0.2842 0.0450 0.0824 0.1064 0.1909 0.1586 0.0116 0.1698 0.3644 0.2718 0.2494;
   0.2634 0.2258 0.1165 0.1154 0.1074 0.0657 0.0610 0.2623 0.2588 0.1155 0.0050 0.0978 0.1511 0.2273 0.3220]';
T=[1 0 0;1 0 0;1 0 0;
   0 1 0;0 1 0;0 1 0;
   0 0 1;0 0 1;0 0 1]';
%輸入向量的最大值和最小值
threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];
net=newff(threshold,[31 3],{'tansig','logsig'},'trainlm');
%訓(xùn)練次數(shù)為1000,訓(xùn)練目標(biāo)為0.01,學(xué)習(xí)速率為0.1
net.trainParam.epochs=1000;
net.trainParam.goal=0.01;
LP.lr=0.1;
net = train(net,P,T);
%測試數(shù)據(jù),和訓(xùn)練數(shù)據(jù)不一致
P_test=[0.2101 0.0950 0.1298 0.1359 0.2601 0.1001 0.0753 0.0890 0.0389 0.1451 0.0128 0.1590 0.2452 0.0512 0.1319;
        0.2593 0.1800 0.0711 0.2801 0.1501 0.1298 0.1001 0.1891 0.2531 0.0875 0.0058 0.1803 0.0992 0.0802 0.1002;
        0.2599 0.2235 0.1201 0.1171 0.1102 0.0683 0.0621 0.2597 0.2602 0.1167 0.0048 0.1002 0.1521 0.2281 0.3205]';
Y=sim(net,P_test)
%計算訓(xùn)練誤差res(P106)
t=[1 0 0;
   0 1 0;
   0 0 1];
error=Y-t
res=norm(error)

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }