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

熱線電話:13121318867

登錄
首頁精彩閱讀深度學(xué)習(xí)之損失函數(shù)與激活函數(shù)的選擇
深度學(xué)習(xí)之損失函數(shù)與激活函數(shù)的選擇
2018-08-21
收藏

深度學(xué)習(xí)損失函數(shù)與激活函數(shù)的選擇

在深度神經(jīng)網(wǎng)絡(luò)DNN)反向傳播算法(BP)中,我們對(duì)DNN的前向反向傳播算法的使用做了總結(jié)。其中使用的損失函數(shù)是均方差,而激活函數(shù)是Sigmoid。實(shí)際上DNN可以使用的損失函數(shù)和激活函數(shù)不少。這些損失函數(shù)和激活函數(shù)如何選擇呢?以下是本文的內(nèi)容。

MSE損失+Sigmoid激活函數(shù)的問題

先來看看均方差+Sigmoid的組合有什么問題?;仡櫹耂igmoid激活函數(shù)的表達(dá)式為:

函數(shù)圖像如下:

從圖上可以看出,對(duì)于Sigmoid,當(dāng)z的取值越來越大后,函數(shù)曲線變得越來越平緩,意味著此時(shí)的導(dǎo)數(shù)σ′(z)也越來越小。同樣的,當(dāng)z的取值越來越小時(shí),也有這個(gè)問題。僅僅在z取值為0附近時(shí),導(dǎo)數(shù)σ′(z)的取值較大。在均方差+Sigmoid的反向傳播算法中,每一層向前遞推都要乘以σ′(z),得到梯度變化值。Sigmoid的這個(gè)曲線意味著在大多數(shù)時(shí)候,我們的梯度變化值很小,導(dǎo)致我們的W,b更新到極值的速度較慢,也就是我們的算法收斂速度較慢。那么有什么什么辦法可以改進(jìn)呢?

交叉熵?fù)p失+Sigmoid改進(jìn)收斂速度

Sigmoid的函數(shù)特性導(dǎo)致反向傳播算法收斂速度慢的問題,那么如何改進(jìn)呢?換掉Sigmoid?這當(dāng)然是一種選擇。另一種常見的選擇是用交叉熵損失函數(shù)來代替均方差損失函數(shù)。每個(gè)樣本的交叉熵損失函數(shù)的形式:

其中,?為向量內(nèi)積。這個(gè)形式其實(shí)很熟悉,在邏輯回歸原理小結(jié)中其實(shí)我們就用到了類似的形式,只是當(dāng)時(shí)我們是用最大似然估計(jì)推導(dǎo)出來的,而這個(gè)損失函數(shù)的學(xué)名叫交叉熵。

使用了交叉熵損失函數(shù),就能解決Sigmoid函數(shù)導(dǎo)數(shù)變化大多數(shù)時(shí)候反向傳播算法慢的問題嗎?我們來看看當(dāng)使用交叉熵時(shí),我們輸出層δL的梯度情況。

對(duì)比一下均方差損失函數(shù)時(shí)在δL梯度

使用交叉熵,得到的的δl梯度表達(dá)式?jīng)]有了σ′(z),梯度為預(yù)測(cè)值和真實(shí)值的差距,這樣求得的Wl,bl的梯度也不包含σ′(z),因此避免了反向傳播收斂速度慢的問題。通常情況下,如果我們使用了sigmoid激活函數(shù),交叉熵損失函數(shù)肯定比均方差損失函數(shù)好用。

對(duì)數(shù)似然損失+softmax進(jìn)行分類輸出

在前面我們都假設(shè)輸出是連續(xù)可導(dǎo)的值,但是如果是分類問題,那么輸出是一個(gè)個(gè)的類別,那我們?cè)趺从?a href='/map/dnn/' style='color:#000;font-size:inherit;'>DNN來解決這個(gè)問題呢?

DNN分類模型要求是輸出層神經(jīng)元輸出的值在0到1之間,同時(shí)所有輸出值之和為1。很明顯,現(xiàn)有的普通DNN是無法滿足這個(gè)要求的。但是我們只需要對(duì)現(xiàn)有的全連接DNN稍作改良,即可用于解決分類問題。在現(xiàn)有的DNN模型中,我們可以將輸出層第i個(gè)神經(jīng)元的激活函數(shù)定義為如下形式:

這個(gè)方法很簡潔漂亮,僅僅只需要將輸出層的激活函數(shù)從Sigmoid之類的函數(shù)轉(zhuǎn)變?yōu)樯鲜降募せ詈瘮?shù)即可。上式這個(gè)激活函數(shù)就是我們的softmax激活函數(shù)。它在分類問題中有廣泛的應(yīng)用。將DNN用于分類問題,在輸出層用softmax激活函數(shù)也是最常見的了。

對(duì)于用于分類的softmax激活函數(shù),對(duì)應(yīng)的損失函數(shù)一般都是用對(duì)數(shù)似然函數(shù),即:

其中yk的取值為0或者1,如果某一訓(xùn)練樣本的輸出為第i類。則yi=1,其余的j≠i都有yj=0。由于每個(gè)樣本只屬于一個(gè)類別,所以這個(gè)對(duì)數(shù)似然函數(shù)可以簡化為:

可見損失函數(shù)只和真實(shí)類別對(duì)應(yīng)的輸出有關(guān),這樣假設(shè)真實(shí)類別是第i類,則其他不屬于第i類序號(hào)對(duì)應(yīng)的神經(jīng)元的梯度導(dǎo)數(shù)直接為0。對(duì)于真實(shí)類別第i類,它的WiL對(duì)應(yīng)的梯度計(jì)算為:

可見,梯度計(jì)算也很簡潔,也沒有第一節(jié)說的訓(xùn)練速度慢的問題。當(dāng)softmax輸出層的反向傳播計(jì)算完以后,后面的普通DNN層的反向傳播計(jì)算和之前講的普通DNN沒有區(qū)別。

梯度爆炸or消失與ReLU

學(xué)習(xí)DNN,大家一定聽說過梯度爆炸和梯度消失兩個(gè)詞。尤其是梯度消失,是限制DNN深度學(xué)習(xí)的一個(gè)關(guān)鍵障礙,目前也沒有完全攻克。

什么是梯度爆炸和梯度消失呢?簡單理解,就是在反向傳播的算法過程中,由于我們使用了是矩陣求導(dǎo)的鏈?zhǔn)椒▌t,有一大串連乘,如果連乘的數(shù)字在每層都是小于1的,則梯度越往前乘越小,導(dǎo)致梯度消失,而如果連乘的數(shù)字在每層都是大于1的,則梯度越往前乘越大,導(dǎo)致梯度爆炸。

比如如下的梯度計(jì)算:

如果不巧我們的樣本導(dǎo)致每一層的梯度都小于1,則隨著反向傳播算法的進(jìn)行,我們的δl會(huì)隨著層數(shù)越來越小,甚至接近越0,導(dǎo)致梯度幾乎消失,進(jìn)而導(dǎo)致前面的隱藏層的W,b參數(shù)隨著迭代的進(jìn)行,幾乎沒有大的改變,更談不上收斂了。這個(gè)問題目前沒有完美的解決辦法。

而對(duì)于梯度爆炸,則一般可以通過調(diào)整我們DNN模型中的初始化參數(shù)得以解決。

對(duì)于無法完美解決的梯度消失問題,一個(gè)可能部分解決梯度消失問題的辦法是使用ReLU(Rectified Linear Unit)激活函數(shù),ReLU在卷積神經(jīng)網(wǎng)絡(luò)CNN中得到了廣泛的應(yīng)用,在CNN中梯度消失似乎不再是問題。那么它是什么樣子呢?其實(shí)很簡單,比我們前面提到的所有激活函數(shù)都簡單,表達(dá)式為:

也就是說大于等于0則不變,小于0則激活后為0。

其他激活函數(shù)

DNN常用的激活函數(shù)還有:

 tanh

這個(gè)是sigmoid的變種,表達(dá)式為:

tanh激活函數(shù)和sigmoid激活函數(shù)的關(guān)系為:

tanh和sigmoid對(duì)比主要的特點(diǎn)是它的輸出落在了[-1,1],這樣輸出可以進(jìn)行標(biāo)準(zhǔn)化。同時(shí)tanh的曲線在較大時(shí)變得平坦的幅度沒有sigmoid那么大,這樣求梯度變化值有一些優(yōu)勢(shì)。當(dāng)然,要說tanh一定比sigmoid好倒不一定,還是要具體問題具體分析。

 softplus

這個(gè)其實(shí)就是sigmoid函數(shù)的原函數(shù),表達(dá)式為:

它的導(dǎo)數(shù)就是sigmoid函數(shù)。softplus的函數(shù)圖像和ReLU有些類似。它出現(xiàn)的比ReLU早,可以視為ReLU的鼻祖。

PReLU

從名字就可以看出它是ReLU的變種,特點(diǎn)是如果未激活值小于0,不是簡單粗暴的直接變?yōu)?,而是進(jìn)行一定幅度的縮小。如下圖。

小結(jié)

上面我們對(duì)DNN損失函數(shù)和激活函數(shù)做了詳細(xì)的討論,重要的點(diǎn)有:

1)如果使用sigmoid激活函數(shù),則交叉熵損失函數(shù)一般肯定比均方差損失函數(shù)好;

2)如果是DNN用于分類,則一般在輸出層使用softmax激活函數(shù)和對(duì)數(shù)似然損失函數(shù);

3)ReLU激活函數(shù)對(duì)梯度消失問題有一定程度的解決,尤其是在CNN模型中。


數(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ù)說明請(qǐng)參見: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); }