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

熱線電話:13121318867

登錄
首頁精彩閱讀神經(jīng)網(wǎng)絡(luò)中的前向和后向算法
神經(jīng)網(wǎng)絡(luò)中的前向和后向算法
2018-08-20
收藏

神經(jīng)網(wǎng)絡(luò)中的前向和后向算法

看了一段時間的深度網(wǎng)絡(luò)模型,也在tf和theano上都跑了一些模型,但是感覺沒有潛下去,對很多東西的理解都只停留在“這個是干什么的”層次上面。昨天在和小老師一起看一篇文章的時候,就被問到RNN里面的后向傳播算法具體是怎么推。當(dāng)時心里覺得BP算法其實很熟悉啊,然后在推導(dǎo)的過程中就一臉懵逼了。于是又去網(wǎng)上翻了翻相關(guān)內(nèi)容,自己走了一遍,準(zhǔn)備做個筆記,算是個交代。

準(zhǔn)備一個神經(jīng)網(wǎng)絡(luò)模型,比如:

其中,[i1,i2]

代表輸入層的兩個結(jié)點,[h1,h2]代表隱藏層的兩個結(jié)點,[o1,o2]為輸出。[b1,b2]

為偏置項。連接每個結(jié)點之間的邊已經(jīng)在圖中標(biāo)出。

來了解一下前向算法:

前向算法的作用是計算輸入層結(jié)點對隱藏層結(jié)點的影響,也就是說,把網(wǎng)絡(luò)正向的走一遍:輸入層—->隱藏層—->輸出層
計算每個結(jié)點對其下一層結(jié)點的影響。
?? 例如,我們要算結(jié)點h1

的值,那么就是:

是一個簡單的加權(quán)求和。這里稍微說一下,偏置項和權(quán)重項的作用是類似的,不同之處在于權(quán)重項一般以乘法的形式體現(xiàn),而偏置項以加法的形式體現(xiàn)。
??而在計算結(jié)點o1時,結(jié)點h1的輸出不能簡單的使用neth1的結(jié)果,必須要計算激活函數(shù),激活函數(shù),不是說要去激活什么,而是要指“激活的神經(jīng)元的特征”通過函數(shù)保留并映射出來。以sigmoid函數(shù)為例,h1的輸出:


于是


最后o1的輸出結(jié)果,也就是整個網(wǎng)絡(luò)的一個輸出值是:

按照上面的步驟計算出out02,則[outo1,outo2]就是整個網(wǎng)絡(luò)第一次前向運算之后得到的結(jié)果。

后向算法:

??在實際情況中,因為是隨機給定的權(quán)值,很大的可能(幾乎是100%)得到的輸出與實際結(jié)果之間的偏差非常的大,這個時候我們就需要比較我們的輸出和實際結(jié)果之間的差異,將這個殘差返回給整個網(wǎng)絡(luò),調(diào)整網(wǎng)絡(luò)中的權(quán)重關(guān)系。這也是為什么我們在神經(jīng)網(wǎng)絡(luò)中需要后向傳播的原因。其主要計算步驟如下:
1. 計算總誤差

2. 隱藏層的權(quán)值更新
在要更新每個邊的權(quán)重之前,必須要知道這條邊對最后輸出結(jié)果的影響,可以用整體誤差對w5求偏導(dǎo)求出:

具體計算的時候,可以采用鏈?zhǔn)椒▌t展開:

在計算的時候一定要注意每個式子里面哪些自變量是什么,求導(dǎo)千萬不要求錯了。
??需要講出來的一個地方是,在計算w1的權(quán)重時,Etotal中的兩部分都需要對它進行求導(dǎo),因為這條邊在前向傳播中對兩個殘差都有影響

3. 更新權(quán)重 這一步里面就沒什么東西了,直接根據(jù)學(xué)習(xí)率來更新權(quán)重:


至此,一次正向+反向傳播過程就到此為止,接下來只需要進行迭代,不斷調(diào)整邊的權(quán)重,修正網(wǎng)絡(luò)的輸出和實際結(jié)果之間的偏差(也就是training整個網(wǎng)絡(luò))。

數(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); }