Resnet的加法變成減法會怎樣?
不會怎麼樣,效果應該差啊不多。Pre-activation 的輸出是沒有符號 bias 的,因此加和減並沒有任何區別。ResNet 的目的是為了使每個 residual block 可以儘可能的接近 identity operator,顯然 identity 無論是加一個還是減一個無符號 bias 的量都可以做到。
看見你這個問題後我馬上嘗試了一波實驗,然而對於我的訓練任務loss無法收斂 - 。 - !
自問自答一下哈。
減法有兩種操作
一個是輸入input 減去殘差塊內的特徵,即
另外一個是殘差塊內的特徵減去輸入input,即
簡單跑了一個數據集實驗了一下,發現第一種方法模型還是可以收斂的,第二種方法訓練不了。
我的理解是第一種方法其實跟resnet的加法是等價的。因為殘差塊內的特徵有正有負,取+號和-號影響不大。
而第二種則是強行給輸入取反,可能影響到後面的relu啟用,進而導致不收斂
不請自來
假設三個隱層,全零初始化,輸入x來看前饋。
[X,-X,X,-X,X],F只是對這些輸出進行調整(殘差),邏輯上沒有影響。
但是存在relu這樣的啟用函式,負值是阻斷梯度的。
做完資料歸一化,第二層符號一反轉,直接暴斃。
如果不做歸一化,最好的情況,正值負值一半一半,那麼每層最多隻能更新一半引數,而且還是隔層更新,很難搞清楚這是在訓練什麼。
啟用函式換成tanh,應該可以。
這麼好的問題居然沒多少人來回答!?
結論先行,
若改為
,則影響可能相對較小;相對地,若改為
則影響應該較大,甚至於導致網路不收斂。
從
ResNet的理念與思想
來看:
,ResNet是要保留一個Identity mapping:x,
當x已是最優的時候F(x)將趨於被push到0。
這樣,繼續加深網路時,也能處於最優狀態而不輸於淺層網路,
解決了深度網路難最佳化的問題。
這麼看來,如果改為
影響應該不會太大,其還是維護了identity mapping,只不過改變了深層的權重,可以看為
;
相對地,若改為
,那麼Identity mapping將不再是Identity,可以看作為
,
,這。。已經失去了ResNet的樣子了,等效於一個普通的深度網路,以往深度網路難最佳化甚至退化的問題大機率會出現,從而容易導致網路不收斂。
從
梯度傳播
的角度來看:
在ResNet中,對於第
層的輸入與輸出,有:
。
遞迴計算,則第
層:
。
於是,loss反向傳播到第
層輸入的梯度:
這揭示了兩點(也是ResNet的2個強大之處):
深層
的梯度得以傳播回淺層
;
淺層
的梯度不會輕易消失
而
以上這兩點的前提條件就是要維護Identity mapping
。因此,若改為
則破壞了這一條件,從而影響較大;而改為
還是保持了該條件,於是影響相對較小。
當然,以上是理論分析,建議各位還是結合實驗去分析,會讓你得到昇華~