天天看點

常用卷積神經網絡 -- ResNet

在計算機視覺中,往往越深的網絡,特征越多,能夠訓練更好的模型。而非常非常深的神經網絡是很難訓練的,因為存在梯度消失和梯度爆炸問題。通過在一個淺層網絡基礎上疊加y=x的層(稱identity mappings,恒等映射),可以讓網絡随深度增加而不退化。但為了訓練更好的網絡,何恺明等人提出了殘差網絡(ResNet)。根據他的假設:如果對某一網絡中增添一些可以學到恒等映射的層組成新的網絡,那麼最差的結果也是新網絡中的這些層在訓練後成為恒等映射而不會影響原網絡的性能。ResNets是由殘差塊Residual block建構的。

1、殘差塊

常用卷積神經網絡 -- ResNet

設輸入為x。假設圖中最上方激活函數輸入的理想映射為f (x)。左圖虛線框中的部分需要直接拟合出該映射f (x),而右圖虛線框中的部分需要拟合出有關恒等映射的殘差映射f (x) − x。resnet學習的就是殘差函數F(x) = H(x) - x。

ResNet沿用了VGG全3 × 3卷積層的設計。殘差塊裡首先有2個有相同輸出通道數的3 × 3卷積層。 每個卷積層後接一個批量歸一化層和ReLU激活函數。然後我們将輸入跳過這兩個卷積運算後直接加在最後的ReLU激活函數前。這樣的設計要求兩個卷積層的輸出與輸入形狀一樣,進而可以相加。如果想改變通道數,就需要引入一個額外的1 × 1卷積層來将輸入變換成需要的形狀後再做相加運算。

2、ResNet模型

ResNet的前兩層跟GoogLeNet中的一樣:在輸出通道數為64、步幅為2的7 × 7卷積層後接步幅為2的3 × 3的最大池化層。不同之處在于ResNet每個卷積層後增加的批量歸一化層。GoogLeNet在後面接了4個由Inception塊組成的子產品。ResNet則使用4個由殘差塊組成的子產品,每個子產品使用若幹個同樣輸出通道數的殘差塊。第一個子產品的通道數同輸入通道數一緻。由于之前已經使用了步幅為2的最大池化層,是以無須減小高和寬。之後的每個子產品在第一個殘差塊裡将上一個子產品的通道數翻倍,并将高和寬減半。

常用卷積神經網絡 -- ResNet

繼續閱讀