什么是殘差——一文讓你讀懂GBDT(梯度提升樹) 和 Resnet (殘差網(wǎng)絡(luò))的原理

殘差

殘差在數(shù)理統(tǒng)計(jì)中是指實(shí)際觀察值與估計(jì)值(擬合值)之間的差跪妥。在集成學(xué)習(xí)中可以通過基模型擬合殘差,使得集成的模型變得更精確;在深度學(xué)習(xí)中也有人利用layer去擬合殘差將深度神經(jīng)網(wǎng)絡(luò)的性能提高變強(qiáng)。這里筆者選了Gradient BoostingResnet兩個(gè)算法試圖讓大家更感性的認(rèn)識到擬合殘差的作用機(jī)理瘫辩。

Gradient Boosting

下面的式子時(shí)Gradient Boosting的損失函數(shù),其中F_n(x)=F_{n-1}+T_n(x)赡矢。
L(y,F_n(x)) =L(y,F_{n-1}+T_n(x))
這里的F_n(x)意味著最后通過 Gradient Boosting學(xué)習(xí)出來的模型杭朱,而這個(gè)最終的模型怎么來呢,參照下方代碼大致可以總結(jié)為三部:

  • 訓(xùn)練一個(gè)基學(xué)習(xí)器Tree_1(這里采用的是決策樹)去擬合data和label吹散。
  • 接著訓(xùn)練一個(gè)基學(xué)習(xí)器Tree_2弧械,輸入時(shí)data,輸出是label和上一個(gè)基學(xué)習(xí)器Tree_1的預(yù)測值的差值(殘差)空民,這一步總結(jié)下來就是使用一個(gè)基學(xué)習(xí)器學(xué)習(xí)殘差刃唐。
  • 最后把所有的基學(xué)習(xí)器的結(jié)果相加,做最終決策界轩。
    下方代碼僅僅做了3步的殘差擬合画饥,最后一步就是體現(xiàn)出集成學(xué)習(xí)的特征,將多個(gè)基學(xué)習(xí)器組合成一個(gè)組合模型浊猾。
from sklearn.tree import DecisionTreeRegressor
tree_reg1 = DecisionTreeRegressor(max_depth=2)
tree_reg1.fit(X, y)

y2 = y - tree_reg1.predict(X)
tree_reg2 = DecisionTreeRegressor(max_depth=2)
tree_reg2.fit(X, y2)

y3 = y2 - tree_reg2.predict(X)
tree_reg3 = DecisionTreeRegressor(max_depth=2)
tree_reg3.fit(X, y3)

y_pred = sum(tree.predict(X_new) for tree in (tree_reg1, tree_reg2, tree_reg3))

其實(shí)上方代碼就等價(jià)于調(diào)用sklearn中的GradientBoostingRegressor這個(gè)集成學(xué)習(xí)API,同時(shí)將基學(xué)習(xí)器的個(gè)數(shù)n_estimators設(shè)為3抖甘。

from sklearn.ensemble import GradientBoostingRegressor
gbrt = GradientBoostingRegressor(max_depth=2, n_estimators=3, learning_rate=1.0)
gbrt.fit(X, y)

形象的理解Gradient Boosting,其的過程就像射箭多次射向同一個(gè)箭靶葫慎,上一次射的偏右衔彻,下一箭就會盡量偏左一點(diǎn)薇宠,就這樣慢慢調(diào)整射箭的位置,使得箭的位置和靶心的偏差變小艰额,最終射到靶心澄港。這也是boosting的集成方式會減小模型bias的原因
接下來我們再來了解一下最近在深度學(xué)習(xí)領(lǐng)域中的比較火的Residual Block柄沮。

Resnet

Resnet是2015年何凱明大神提出來的一個(gè)深度CNN模型回梧,主要解決了隨著神經(jīng)網(wǎng)絡(luò)層數(shù)變多,擬合效果反而變差的問題祖搓。而Residual Block是Resnet中一個(gè)最重要的模塊狱意,Residual Block的做法是在一些網(wǎng)絡(luò)層的輸入和輸出之間添加了一個(gè)快捷連接,這里的快捷連接默認(rèn)為恒等映射(indentity)棕硫,說白了就是直接將原始輸入不做任何改變和輸出做加和髓涯,其公式如下:
H(x) = F(x)+x
如下圖所示,x 表示residual block的輸入哈扮, H(x)表示residual block的輸出,而F(x)代表著殘差蚓再,把公式簡單變換一下:
F(x)= H(x) - x
就變成了通過神經(jīng)網(wǎng)絡(luò)去擬合輸入與輸出之間的殘差F(x)滑肉。加了這個(gè)模塊之后,神經(jīng)網(wǎng)絡(luò)的層數(shù)可以構(gòu)建得越來越深摘仅,而且不會出現(xiàn)效果變差的現(xiàn)象靶庙,反之該模型在imagenet這個(gè)任務(wù)上再進(jìn)一步,拿下了2015年的冠軍娃属。這充分說明使用residual block擬合殘差使得深度學(xué)習(xí)模型變得更加強(qiáng)大六荒。

residual_block

對著下方代碼我們可以更清晰的看到residual block的具體操作:

  • 輸入x,
  • 將x通過三層convolutiaon層之后得到輸出m矾端,
  • 將原始輸入x和輸出m加和掏击。

就得到了residual block的總輸出,整個(gè)過程就是通過三層convolutiaon層去擬合residual block輸出與輸出的殘差m秩铆。

from keras.layers import Conv2D
from keras.layers import  add
def residual_block(x, f=32, r=4):
    """
    residual block
    :param x: the input tensor
    :param f: the filter numbers
    :param r:
    :return:
    """
    m = conv2d(x, f // r, k=1)
    m = conv2d(m, f // r, k=3)
    m = conv2d(m, f, k=1)
    return add([x, m])

在resnet中殘差的思想就是去掉相同的主體部分砚亭,從而突出微小的變化,讓模型集中注意去學(xué)習(xí)一些這些微小的變化部分殴玛。這和我們之前討論的Gradient Boosting中使用一個(gè)基學(xué)習(xí)器去學(xué)習(xí)殘差思想幾乎一樣捅膘。

結(jié)語

至此,我們了解到了集成學(xué)習(xí)和深度學(xué)習(xí)中如何使用模型擬合殘差去加強(qiáng)模型的性能滚粟。使用模型擬合殘差的過程寻仗,還可以理解成模型在 Loss 函數(shù)上沿著梯度下降的方向前進(jìn),每增加一個(gè)基學(xué)習(xí)器就對應(yīng)著梯度下降的一次更新凡壤。如下圖中署尤,每一個(gè)紅點(diǎn)就代表著一個(gè)當(dāng)前時(shí)刻的集成模型F_n(x)蔬咬,最終的模型對應(yīng)于loss函數(shù)圖像中最低的那個(gè)點(diǎn)。

Loss

Gradient Boosting通過擬合殘存使得模型的更加精確(降低模型的偏差Bias)沐寺,Residual Block的通過擬合殘差使得深度網(wǎng)絡(luò)能夠變得更深更強(qiáng)林艘。所以,如果你的模型效果性能不足混坞,可以考慮考慮擬合殘差讓模型變強(qiáng)哦狐援。

參考:
https://blog.csdn.net/u014665013/article/details/81985082
https://mp.weixin.qq.com/s/Dhp3FbbK5yPYRwJTKjGZSQ
Deep Residual Learning for Image Recognition

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市究孕,隨后出現(xiàn)的幾起案子啥酱,更是在濱河造成了極大的恐慌,老刑警劉巖厨诸,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镶殷,死亡現(xiàn)場離奇詭異,居然都是意外死亡微酬,警方通過查閱死者的電腦和手機(jī)绘趋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颗管,“玉大人陷遮,你說我怎么就攤上這事】呀” “怎么了帽馋?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長比吭。 經(jīng)常有香客問我绽族,道長,這世上最難降的妖魔是什么衩藤? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任吧慢,我火速辦了婚禮,結(jié)果婚禮上慷彤,老公的妹妹穿的比我還像新娘娄蔼。我一直安慰自己,他們只是感情好底哗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布岁诉。 她就那樣靜靜地躺著,像睡著了一般跋选。 火紅的嫁衣襯著肌膚如雪涕癣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天,我揣著相機(jī)與錄音坠韩,去河邊找鬼距潘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛只搁,可吹牛的內(nèi)容都是我干的音比。 我是一名探鬼主播,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼氢惋,長吁一口氣:“原來是場噩夢啊……” “哼洞翩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起焰望,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤骚亿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后熊赖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體来屠,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年震鹉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俱笛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,629評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡足陨,死狀恐怖嫂粟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情墨缘,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布零抬,位于F島的核電站镊讼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏平夜。R本人自食惡果不足惜蝶棋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忽妒。 院中可真熱鬧玩裙,春花似錦、人聲如沸段直。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸯檬。三九已至决侈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喧务,已是汗流浹背赖歌。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工枉圃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庐冯。 一個(gè)月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓孽亲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親展父。 傳聞我的和親對象是個(gè)殘疾皇子返劲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容