官术网_书友最值得收藏!

2.3 隨機(jī)梯度下降及實(shí)現(xiàn)

在2.2.3節(jié)線性回歸的實(shí)現(xiàn)中,我們看到在update_weights(更新權(quán)重)方法中,實(shí)際上每一次的更新都將所有輸入數(shù)據(jù)處理了一次,將所有輸入都作為一輪訓(xùn)練:

因?yàn)樯侠挠?xùn)練數(shù)據(jù)很少,所以每次都載入所有數(shù)據(jù)進(jìn)行訓(xùn)練并沒有什么關(guān)系。然而,在實(shí)際的生產(chǎn)環(huán)境中訓(xùn)練數(shù)據(jù)可達(dá)到千萬(wàn)級(jí)別,要每次都載入這些數(shù)據(jù)進(jìn)行訓(xùn)練是很不現(xiàn)實(shí)的。但我們可以換一種方式,每次只用一條隨機(jī)數(shù)據(jù)來(lái)訓(xùn)練,這便是隨機(jī)梯度下降的原理。

當(dāng)然,這樣會(huì)讓訓(xùn)練時(shí)間變長(zhǎng),所以人們?cè)趯?shí)際環(huán)境中通常會(huì)采用mini batch方法,也就是每次更新權(quán)重時(shí)既不使用所有數(shù)據(jù),也不隨機(jī)挑選一條數(shù)據(jù),而是隨機(jī)挑選一個(gè)子集來(lái)訓(xùn)練。例如,如果有1000條數(shù)據(jù),那么每次都可以隨機(jī)挑選16條或者64條數(shù)據(jù)進(jìn)行訓(xùn)練。對(duì)mini batch的大小設(shè)置是個(gè)很有趣的研究課題,和模型本身、數(shù)據(jù)特點(diǎn)等都有關(guān)系,這里不必細(xì)究。下面修改2.2節(jié)的線性回歸實(shí)現(xiàn),看看采用mini batch方法是如何進(jìn)行訓(xùn)練的。

如上所示,我們只需要修改update_weights方法即可。在第6行設(shè)置了一個(gè)數(shù)組用于存儲(chǔ)訓(xùn)練數(shù)據(jù)的索引下標(biāo);在第7行將有序索引數(shù)組隨機(jī)打亂;在第8行設(shè)定每次訓(xùn)練都取4條數(shù)據(jù)。于是在第10~11行,我們只需從已經(jīng)隨機(jī)打亂的數(shù)據(jù)索引表中取前4條進(jìn)行訓(xùn)練即可。

訓(xùn)練結(jié)果如下:

把這組結(jié)果和在2.2節(jié)中用全批量數(shù)據(jù)訓(xùn)練的結(jié)果相比,可以看到預(yù)測(cè)效果差別不大,這也證明了mini batch方法的有效性。至于隨機(jī)梯度下降,它只是batch_size為1時(shí)的特殊情況而已。

主站蜘蛛池模板: 南昌市| 朔州市| 油尖旺区| 建阳市| 平阳县| 静海县| 津南区| 博兴县| 大方县| 平江县| 平乐县| 山阳县| 安吉县| 青海省| 和政县| 桂林市| 富顺县| 龙里县| 万山特区| 菏泽市| 康马县| 镶黄旗| 基隆市| 交口县| 镇雄县| 睢宁县| 苏尼特左旗| 图们市| 尚义县| 新干县| 罗江县| 衡山县| 嘉峪关市| 项城市| 南乐县| 略阳县| 江安县| 陵川县| 万源市| 灯塔市| 读书|