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

熱線電話:13121318867

登錄
首頁精彩閱讀機器學習中使用的神經(jīng)網(wǎng)絡
機器學習中使用的神經(jīng)網(wǎng)絡
2017-03-14
收藏

機器學習中使用的神經(jīng)網(wǎng)絡

這一小節(jié)介紹隨機梯度下降法(stochastic gradient descent)在神經(jīng)網(wǎng)絡中的使用,這里首先回顧了第三講中介紹的線性神經(jīng)網(wǎng)絡的誤差曲面(error surface),如下圖所示。線性神經(jīng)網(wǎng)絡對應的誤差曲面的縱截面如碗裝,橫截面則如一組同心的橢圓。梯度下降法的作用就是不斷調(diào)整參數(shù),使得模型的誤差由“碗沿”降到“碗底”,參數(shù)由橢圓外部移動到橢圓的中心附近。當然,這里說的是只有兩個參數(shù)的情況,參數(shù)更多的情況則更復雜。

下圖給出了梯度方向?qū)μ荻雀淖兇笮〉挠绊憽?

下圖說明了學習步長(learning rate)對損失函數(shù)改變的影響。過大的學習速率會導致損失函數(shù)越來越大,模型距離最優(yōu)解(或次優(yōu)解)越來越遠。

上面是模型在所有的訓練數(shù)據(jù)上做完梯度下降法之后再對參數(shù)進行修正的,這叫做批量梯度下降法(batch gradient descent)。而隨機梯度下降法則是每一次計算某一個訓練數(shù)據(jù)上的梯度或者某一組訓練數(shù)據(jù)(訓練數(shù)據(jù)集的一個很小的子集)的梯度,然后更新參數(shù)。在每一個訓練數(shù)據(jù)上計算梯度然后更新參數(shù)的稱之為在線學習(online learning),在一小組訓練數(shù)據(jù)上計算梯度然后更新參數(shù)的稱之為小批量梯度下降法(mini-batch gradient descent),后者的效果可能比前者好一些。

下圖是對使用mini-batch gradient descent的幾點建議。

A bag of tricks for mini-batch gradient descent

這一小節(jié)介紹使用小批量梯度下降法(mini-batch gradient descent)的一些技巧。下圖是初始化權值參數(shù)的技巧。

下圖介紹的是shifting the inputs,其是指給輸入的每一個分量加上一個常數(shù)值,使不得輸入的平均值為0。(這里的意思應該是給輸入的每一個分量加上一個常數(shù),不同分量的常數(shù)可能不同,使得訓練數(shù)據(jù)集的所有輸入加在一起是個零向量。當然,這是我自己的理解,可能有出入。)下圖給出了一個二維的線性神經(jīng)網(wǎng)絡,且給出了兩組訓練數(shù)據(jù)及其相應向量參數(shù)對應的直線??梢钥吹缴厦娴哪莾蓷l直線夾角很小,二者結(jié)合在一起就會得到一個很狹長的橢圓的error surface,這樣的是我們不喜歡的error surface,不利于快速找到最優(yōu)解或次優(yōu)解。下面我們給輸入的每一個分量都加上一個-100,然后得到的error surface就有一個比較接近圓的形狀,這樣的是我們想要的,便于快速的找到最優(yōu)解或次優(yōu)解。另外這里還提到了對隱匿層神經(jīng)單元的調(diào)整,比較了雙曲正切函數(shù)(hyperbolic tangent function)和邏輯函數(shù)(logistic function),但是這里沒聽明白具體怎么使用。

下圖介紹的是scaling the inputs,該情況針對的是輸入向量的分量取值相差懸殊時,通過給分量乘上一個系數(shù)來使得error surface更接近圓形,從而便于快速找到最優(yōu)解或次優(yōu)解。

一個更thorough的方法是去除輸入向量不同分量之間的相關性(decorrelate the input components),相關的方法很多,這里給出了主成分分析法(PCA, Principal Components Analysis)。在Andrew Ng的課程中詳細介紹過PCA,詳細內(nèi)容請閱讀Machine Learning第八周筆記:K-means和降維 
。對于線性模型,PCA實現(xiàn)了降維,從而將橢圓形的error surface轉(zhuǎn)換成了圓形的。

下圖列出了在多層神經(jīng)網(wǎng)絡中經(jīng)常遇到的兩個問題。一個是,當我們以很大的學習步長(learning rate)開始訓練網(wǎng)絡時,隱匿單元的權重往往會取到很大的正數(shù)或很小的負數(shù),而此時這些權重對應的梯度又很小,給我們造成一種模型好像取得了一個局部最小值。另一個是,在分類網(wǎng)絡中,我們經(jīng)常使用平方誤差或者交叉熵誤差,一個好的策略是讓每一個輸出單元的輸出情況和實際上的輸出比例相當(實際上輸出1的比例是多少,那么輸出單元的輸出情況一個就是這樣)。神經(jīng)網(wǎng)絡很快就會發(fā)現(xiàn)這一策略,但需要很長的時間才能一點點的優(yōu)化網(wǎng)絡,看起來就好像模型處于一個局部最小值附近。

下圖提示我們不要太快得減小學習步長(learning rate)。

下面給出四種加快mini-batch learning的方法,前三種我們會在下面一一介紹,最后一種本課程不涉及,感興趣的話請自行搜索。這些方法具有很強的技巧性,需要我們在應用中不斷摸索。

The momentum method

這一小節(jié)詳細介紹動量方法(the momentum method),其應用很廣泛,在full-batch learning和mini-batch learning中都可以使用。下面給出了動量方法的intuition和計算公式。


Using momentum speeds up gradient descent learning because

Directions of consistent change get amplified.

Directions of fluctuations get damped.

Allows using much larger learning rates.


Momentum accumulates consistent components of the gradient and attenuates the fluctuating ones. It also allows us to use bigger learning rate because the learning is now more stable.

標準的動量方法(由Nesterov在1983年提出)是在當前位置計算梯度,然后在累積的更新梯度方向上做一個大的跳躍。下面給出了一種更好地動量方法(由IIya Sutskever在2012年提出),其先在先前累積的梯度方向上做一個大的跳躍,再計算新的梯度并修正錯誤。

下面對兩種方法做了比較,圖中藍色箭頭是做兩次標準動量方法得到的;而圖中棕色箭頭是改進動量方法先做的一次大跳躍得到的,紅色箭頭是修正,綠色箭頭是進行一次改進動量方法得到的。可以看到,改進的比標準的要快很多。

Adaptive learning rates for each connection

這一小節(jié)介紹the separate, adaptive learning rate for each connection(針對網(wǎng)絡中每個連接的自適應學習步長)。其思想是在神經(jīng)網(wǎng)絡的每一個連接處都應該有該連接自己的自適應學習步長,并在我們調(diào)整該連接對應的參數(shù)時調(diào)整自己的學習步長:如果權值參數(shù)修正梯度,那就應該減小步長;反之,應該增大步長。

下圖給出了intuition。我的理解是在多層神經(jīng)網(wǎng)絡中,不同層的梯度通常相差懸殊,最開始的幾層對應的梯度可能比最后幾層權值對應的梯度小幾個數(shù)量級。另外一方面,網(wǎng)絡中每一單元又受其扇入單元的影響,為了修正一個同樣的錯誤,各個單元的“學習步長”應該是不同的。

一個可行的方法是有一個全局的學習步長,然后對每一個權值參數(shù)有一個local gain,用gij表示。初始時gij均取值為1,后每次迭代根據(jù)權值梯度的變化情況作出調(diào)整,具體調(diào)整公式如下圖所示。

下圖列出了幾種提高自適應學習步長性能的幾個技巧。

Rmsprop: Divide the gradient by a running average of its recent magnitude

這一小節(jié)介紹rmsprop算法。在網(wǎng)上找到一個python模塊——climin,一個做優(yōu)化的機器學習包,里面包含了很多優(yōu)化算法。

首先介紹rprop算法。前面我們說過,不同權值參數(shù)的梯度的數(shù)量級可能相差很大,因此很難找到一個全局的學習步長。這時,我們想到了在full-batch learning中僅靠權值梯度的符號來選擇學習步長。rprop算法正是采用這樣的思想:對于網(wǎng)絡中的每一個權值參數(shù),當其對應的前面兩個梯度符號相同時,則增大該權值參數(shù)對應的學習步長;反之,則減小對應的學習步長。并且,rprop算法將每一個權值對應的學習步長限制在百萬分之一到50之間。

下圖解釋了prop算法為什么不能應用于mini-batch learning中。因為prop算法違背了隨機梯度下降的原理:假設有一個在線學習系統(tǒng),初始的學習步長較小,在其上應用prop算法。這里有十組訓練數(shù)據(jù),前九組都使得梯度符號與之前的梯度符號相同,那么學習步長就會增加九次;而第十次得來的梯度符號與之前的相反,那么學習步長就會減小一次。這樣一個過程下來,學習步長會增長很多,如果系統(tǒng)的訓練數(shù)據(jù)集非常之大,那學習步長可能頻繁的來回波動,這樣肯定是不利于學習的。

設想是否存在這樣一種算法,其既能保持rprop算法的健壯性,又能應用在mini-batch learning上呢,rmsprop算法應運而生。rmsprop算法不再孤立地更新學習步長,而是聯(lián)系之前的每一次梯度變化情況,具體如下。rmsprop算法給每一個權值一個變量MeanSquare(w,t)用來記錄第t次更新步長時前t次的梯度平方的平均值,具體計算方法如下圖所示(注意,其中的系數(shù)0.9和0.1只是個例子,具體取值還要看具體情況)。然后再用第t次的梯度除上MeanSquare(w,t)??????????????√得到學習步長的更新比例,根據(jù)此比例去得到新的學習步長。按我的理解,如果當前得到的梯度為負,那學習步長就會減小一點點;如果當前得到的梯度為正,那學習步長就會增大一點點。這里的MeanSquare(w,t)??????????????√是名稱中RMS的由來。數(shù)據(jù)分析師培訓

下圖列出了關于rmsprop算法的一些研究,想了解詳情的話請自行搜索。

最后一張圖是對神經(jīng)網(wǎng)絡學習方法的一個小總結(jié)。

這幾個算法都比較燒腦啊,全是憑大腦推理思考,回頭要好好做實驗。

數(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)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 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); }