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

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀神經(jīng)網(wǎng)絡(luò)入門(mén)之bp算法,梯度下降
神經(jīng)網(wǎng)絡(luò)入門(mén)之bp算法,梯度下降
2018-08-01
收藏

神經(jīng)網(wǎng)絡(luò)入門(mén)之bp算法,梯度下降

本人作為一個(gè)想進(jìn)行NLP研究的新手,看了很多網(wǎng)絡(luò)上很好的神經(jīng)網(wǎng)絡(luò)的入門(mén)代碼和數(shù)學(xué)原理。但是個(gè)人數(shù)學(xué)比較爛,很多東西想了很久才想明白,又害怕忘掉。為此寫(xiě)下這篇大白話入門(mén)篇作為自己學(xué)習(xí)的一個(gè)記錄,也想為跟我同樣想入門(mén)的同學(xué)們一個(gè)參考。希望有問(wèn)題多多交流。
備注:很多內(nèi)容都是本人自己想當(dāng)然的結(jié)果,有錯(cuò)誤的話,望大神們多多指教。
廢話都說(shuō)完了本文將從一個(gè)最簡(jiǎn)單一個(gè)BP網(wǎng)絡(luò)開(kāi)始講起。
bp網(wǎng)絡(luò)的bp(back propagation)中文就是反向傳播的意思,為什么反向傳播呢。是為了將配合梯度下降法進(jìn)行迭代求出好的結(jié)果。這個(gè)會(huì)稍后講解。

上圖來(lái)自百度圖片(懶得畫(huà)了)
x為輸入,w為權(quán)重,這個(gè)f(x)被稱為激活函數(shù)(activation function)。如sigmoid,tanh等。他們的特點(diǎn)有一個(gè)就是可以容易的求出他們的導(dǎo)數(shù)(很關(guān)鍵)。激活函數(shù)的意義可以看這篇神經(jīng)網(wǎng)絡(luò)激勵(lì)函數(shù)的作用是什么?有沒(méi)有形象的解釋?
可以看到輸出的o = f(w1x1+w2x2+w3x3+w4x4) = f(∑WiXi)。
第一次運(yùn)算的結(jié)果很明顯就是上邊的o。但是此時(shí)問(wèn)題出來(lái)了,運(yùn)算出來(lái)的o和實(shí)際的結(jié)果肯定式有誤差的,該如何利用這個(gè)誤差優(yōu)化這個(gè)運(yùn)算呢?也就是得到好的w呢?

梯度下降法

此時(shí)就出現(xiàn)了反向傳播這個(gè)過(guò)程。而配合反向傳播的就是梯度下降法了。
現(xiàn)在很多同學(xué)可能會(huì)很暈,當(dāng)時(shí)我第一次看的時(shí)候也很暈。
為了容易理解梯度下降法,建議去看Ng的斯坦福網(wǎng)課第二節(jié),非常清楚。比我寫(xiě)的清楚多了。
梯度下降法是求(局部)最好的w。
設(shè)誤差函數(shù)為:


y為實(shí)際結(jié)果,o為預(yù)測(cè)結(jié)果。
設(shè)激活函數(shù)f(x)為sigmoid函數(shù),此時(shí)就可以很方便的求出其導(dǎo)數(shù)了(其他激活函數(shù)也是一樣)


所以我們要求的就是J最小的時(shí)候wi的值。a是變化的速率。下式就可以比作從山頂走到山底的過(guò)程,而a表示行走的步長(zhǎng)或者是速率。


此時(shí)可以發(fā)現(xiàn)每一項(xiàng)都是可以求出的,則經(jīng)過(guò)多次運(yùn)算,可以求出好的Wi
一般我們把前兩項(xiàng)作為


此時(shí)我們可以發(fā)現(xiàn)

BP的原因

上邊介紹完了梯度下降,現(xiàn)在再說(shuō)反向傳播理由。其實(shí)很簡(jiǎn)單了。它用的就是鏈?zhǔn)椒▌t。我們第一步是前向傳播,進(jìn)行一系列運(yùn)算得到了預(yù)測(cè)結(jié)果o。為了使用梯度下降法,我們需要得到,上邊需要的delta,也就是說(shuō) J 這個(gè)誤差函數(shù)。因?yàn)閷?shí)際結(jié)果我們知道,而激活函數(shù)的導(dǎo)數(shù)我們也知道怎么運(yùn)算。所以我們得到預(yù)測(cè)結(jié)果o時(shí),delta就可以求出來(lái)。而delta屬于輸出層的運(yùn)算,再乘以輸入層的Xi就能得到?

Wi,進(jìn)一步更新Wi。
很明顯可以看出整個(gè)一輪的運(yùn)算是:
前向傳播:
輸入層—-w—》輸出層(sigmoid)—-》預(yù)測(cè)結(jié)果
后向傳播:
誤差—》輸出層(sigmoid)求導(dǎo)—-》輸入層—–》更新Wi

換句話說(shuō),BP算法就是提供了給梯度下降法所需要的所有值。
由鏈?zhǔn)椒▌t可知,如果網(wǎng)絡(luò)層數(shù)為3層以上時(shí)也可以得到每層的delta。
python代碼來(lái)說(shuō):
layer_n_delta = layer_n+1_delta.dot((W_n_n+1).T)
(W_n_n+1) += (Xn).T.dot(layer_n+1_delta)

上邊有很多符號(hào)有點(diǎn)問(wèn)題,但是我覺(jué)得閱讀應(yīng)該沒(méi)有什么障礙。因?yàn)榈谝淮斡眠@個(gè)marddown編輯器,很多東西不好弄。


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

若不方便掃碼,搜微信號(hào):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(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".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 = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+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); }