探索:
VGGNet試著探尋了一下深度神經(jīng)網(wǎng)絡(luò)的深度究竟可以深多少以能持續(xù)地提高分類準(zhǔn)確率。在我們的一般印象當(dāng)中,深度學(xué)習(xí)愈是深(復(fù)雜,參數(shù)多)愈是有著更強(qiáng)的表達(dá)能力。憑著這一基本準(zhǔn)則CNN分類網(wǎng)絡(luò)自Alexnet的7層發(fā)展到了VGG的16乃至19層,后來更有了GoogleNet的22層。可后來我們發(fā)現(xiàn)深度CNN網(wǎng)絡(luò)達(dá)到一定深度后再一味地增加層數(shù)并不能帶來進(jìn)一步地分類性能提高,反而會(huì)使網(wǎng)絡(luò)收斂變得更慢,分類準(zhǔn)確率也變得更差。常規(guī)CNN網(wǎng)絡(luò)后期層數(shù)增加帶來的分類準(zhǔn)確率的降低。正是受制于此不清不楚的問題,VGGNet達(dá)到19層后再增加層數(shù)就開始導(dǎo)致分類性能的下降。
ResNet想要解決的兩個(gè)問題:
(1)深度神經(jīng)網(wǎng)絡(luò)的梯度消失和梯度爆炸
(2)degradation問題(退化問題):在不斷增加卷積神經(jīng)網(wǎng)絡(luò)的深度時(shí),當(dāng)網(wǎng)絡(luò)深度達(dá)到一定程度后準(zhǔn)確度會(huì)達(dá)到飽和,如果繼續(xù)增加網(wǎng)絡(luò)深度,則會(huì)導(dǎo)致準(zhǔn)確率反而下降(訓(xùn)練集合測(cè)試集都會(huì)下降)
思路:
ResNet作者想到了常規(guī)計(jì)算機(jī)視覺領(lǐng)域常用的residual representation的概念,并進(jìn)一步將它應(yīng)用在了CNN模型的構(gòu)建當(dāng)中,于是就有了基本的Residual Learning的block,它通過使用多個(gè)有參層來學(xué)習(xí)輸入輸出之間的殘差表示,而非像一般CNN網(wǎng)絡(luò)那樣使用有參層來直接嘗試學(xué)習(xí)輸入、輸出之間的映射。
效果:
實(shí)驗(yàn)結(jié)果:ResNet訓(xùn)練收斂速度快,準(zhǔn)確度更高。
原因分析:
(1)訓(xùn)練速度快:有參層來直接學(xué)習(xí)殘差比直接學(xué)習(xí)輸入到輸出間映射要容易得多。
(2)準(zhǔn)確度高:網(wǎng)絡(luò)加深,其抽象能力更強(qiáng);Residual Unit在信息傳遞過程中減少了信息的丟失和損耗。
當(dāng)下ResNet已經(jīng)代替VGGNet成為一般計(jì)算機(jī)視覺領(lǐng)域問題中的基礎(chǔ)特征提取網(wǎng)絡(luò)。
分析:
傳統(tǒng)的卷積層或全連接層在傳遞信息時(shí),都會(huì)或多或少的存在信息丟失,損耗的問題。ResNet在某種程度上解決了這個(gè)問題,通過直接將輸入信息繞道傳到輸出,保護(hù)了信息的完整性,整個(gè)網(wǎng)絡(luò)只需要學(xué)習(xí)輸入與輸出之間的殘差,簡(jiǎn)化學(xué)習(xí)目標(biāo)和難度。
ResNet改變了神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)目標(biāo),讓它學(xué)習(xí)輸入和輸出之間的殘差表示,而不是輸入與輸出之間的映射。ResNet的主要思想是在網(wǎng)絡(luò)中增加了直連通道(shortcut 或者 skip connection),允許原始輸入信息直接傳到后面的層中,如下圖所示:

我們要求的映射是H(x), 其中H(x)=F(x)+x
現(xiàn)在我們將這個(gè)問題改變?yōu)榍蠼猓▽W(xué)習(xí))網(wǎng)絡(luò)的殘差映射函數(shù),即F(x), F(x)=H(x)-x : 即,求映射H(x)的本質(zhì)還是學(xué)習(xí)殘差F(x)
殘差(Residual):觀測(cè)值與估計(jì)值之間的差。
這里H(x)就是觀測(cè)值,x就是估計(jì)值(也就是上一層ResNet輸出的特征映射)。
我們一般稱x為Identity Function,它是一個(gè)跳躍連接;稱F(x)為ResNet Function。
理解:
我們?yōu)槭裁捶且?jīng)過F(x)之后再求解H(x),如果是采用一般的卷積神經(jīng)網(wǎng)絡(luò),原先要求解的是H(x) = F(x)這個(gè)值。
現(xiàn)在假設(shè),網(wǎng)絡(luò)已經(jīng)達(dá)到最優(yōu)狀態(tài)(兩層含義,此時(shí)網(wǎng)絡(luò)深度最合適,網(wǎng)絡(luò)錯(cuò)誤率最低,再往下加深網(wǎng)絡(luò)的話就會(huì)出現(xiàn)退化問題)。如果現(xiàn)在加深一層網(wǎng)絡(luò),現(xiàn)在要更新網(wǎng)絡(luò)的權(quán)值再次達(dá)到收斂就會(huì)變得很麻煩,這要調(diào)整網(wǎng)絡(luò)所有的參數(shù),而不只是新加一層的參數(shù);并且最后得到的錯(cuò)誤率將大于之前的網(wǎng)絡(luò)。
但是采用殘差網(wǎng)絡(luò)就能很好的解決這個(gè)問題。還是假設(shè)當(dāng)前網(wǎng)絡(luò)的深度能夠使得錯(cuò)誤率最低,如果繼續(xù)增加ResNet的層數(shù),為了保證下一層的網(wǎng)絡(luò)狀態(tài)仍然是最優(yōu)狀態(tài),只需要把令F(x)=0就可以,因?yàn)閤是當(dāng)前輸出的最優(yōu)解,為了讓它成為下一層的最優(yōu)解也就是希望咱們的輸出H(x)=x的話,只要讓F(x)=0就行了。
當(dāng)然上面提到的只是理想情況,在真實(shí)測(cè)試的時(shí)候x肯定是很難達(dá)到最優(yōu)的,但是總會(huì)有那么一個(gè)時(shí)刻它能夠無限接近最優(yōu)解。采用ResNet的話,也只用小小的更新F(x)部分的權(quán)重值就行了。不用像一般的卷積層一樣大動(dòng)干戈。
下圖是一個(gè)34層得ResNet網(wǎng)絡(luò)結(jié)構(gòu):
