1. 程式人生 > >【深度學習】經典神經網路 VGG 論文解讀

【深度學習】經典神經網路 VGG 論文解讀

VGG 在深度學習領域中非常有名,很多人 fine-tune 的時候都是下載 VGG 的預訓練過的權重模型,然後在次基礎上進行遷移學習。VGG 是 ImageNet 2014 年目標定位競賽的第一名,影象分類競賽的第二名,需要注意的是,影象分類競賽的第一名是大名鼎鼎的 GoogLeNet,那麼為什麼人們更願意使用第二名的 VGG 呢?

因為 VGG 夠簡單

VGG 是 Visual Geometry Group 的縮寫,是這個網路建立者的隊名,作者來自牛津大學。

VGG 最大的特點就是它在之前的網路模型上,通過比較徹底地採用 3x3 尺寸的卷積核來堆疊神經網路,從而加深整個神經網路的層級。

VGG 不是橫空出世

我們都知道,最早的卷積神經網路 LeNet,但 2012 年 Krizhevsk 在 ISRVC 上使用的 AlexNet 一戰成名,極大鼓舞了世人對神經網路的研究,後續人們不斷在 AlexNet 的架構上進行改良,並且成績也越來越好。

下面是 AlexNet 的網路結構圖。
在這裡插入圖片描述
對於 AlexNet 的改進的手段有 2 個:

  1. 在第一層卷積層上採用感受野更小的的尺寸,和更小的 stride。
  2. 在 AlexNet 的基礎上加深它的卷積層數量。

VGG 選擇的是在 AlexNet 的基礎上加深它的層數,但是它有個很顯著的特徵就是持續性的新增 3x3 的卷積核。

VGG 的網路結構

VGG 更多是被試驗出來的,這是我最直觀的看法

AlexNet 的改造

AlexNet 有 5 層卷積層,而 VGG 就是針對這 5 層卷積層進行改造,共進行了 6 種配置,得到了 6 中網路結構,下面是配置圖。

在這裡插入圖片描述

VGG 的細節之 3x3 卷積核

VGG 和 AlexNet 最大的不同就是 VGG 用大量的 3x3 卷積核替換了 AlexNet 的卷積核。

3x3 卷積核是能夠感受到上下、左右、重點的最小的感受野尺寸。

並且,2 個 3x3 的卷積核疊加,它們的感受野等同於 1 個 5x5 的卷積核,3 個疊加後,它們的感受野等同於 1 個 7x7 的效果

既然,感受野的大小是一樣的,那麼用 3x3 有什麼好處呢?

答案有 2,一是引數更少,二是層數加深了。

現在解釋引數變少的問題。

假設現在有 3 層 3x3 卷積核堆疊的卷積層,卷積核的通道是 C 個,那麼它的引數總數是 3x(3Cx3C) = 27C^2

同樣和它感受野大小一樣的一個卷積層,卷積核是 7x7 的尺寸,通道也是 C 個,那麼它的引數總數就是 49C^2
通過計算很容易得出結論,3x3 卷積方案的引數數量比 7x7 方案少了 81% 多,並且它的層級還加深了。

VGG 的細節之 1x1 卷積核

堆疊後的 3x3 卷積層可以對比之前的常規網路的基礎上,減少引數數量,而加深網路。

但是,如果我們還需要加深網路,怎麼辦呢?

堆疊更多的的卷積層,但有 2 個選擇。

選擇 1:繼續堆疊 3x3 的卷積層,比如連續堆疊 4 層或者以上。

選擇 2:在 3x3 的卷積層後面堆疊一層 1x1 的卷積層。

1x1 卷積核的好處是不改變感受野的情況下,進行升維和降維,同時也加深了網路的深度。

VGG 其它細節彙總

大家一般會聽說 VGG-16 和 VGG-19 這兩個網路,其中 VGG-16 更受歡迎。

16 和 19 對應的是網路中包含權重的層級數,如卷積層和全連線層,大家可以仔細觀察文章前面貼的配置圖資訊。

所有的 VGG 網路中,卷積核的 stride 是 1,padding 是 1.

max-pooling 的滑動視窗大小是 2x2 ,stride 也是 2.

VGG 不同配置的表現

在這裡插入圖片描述
VGG-19 表現的結果自然最好。

但是,VGG-19 的引數比 VGG-16 的引數多了好多。
在這裡插入圖片描述

所以,綜合考慮大家似乎更喜歡 VGG-16。

VGG 與其他模型的比較

在這裡插入圖片描述
VGG 在當時非常優秀,僅次於 GoogLeNet,但 VGG 結構更簡單易懂。

總結

VGG 在深度學習的歷史上還是很有意義的,它在當時證明了神經網路更深表現會更好,雖然後來 ResNet 進一步革命了,不過那是後話,最重要的是 VGG 向世人證明了更小的卷積核尺寸的重要性。

相關推薦

深度學習經典神經網路 VGG 論文解讀

VGG 在深度學習領域中非常有名,很多人 fine-tune 的時候都是下載 VGG 的預訓練過的權重模型,然後在次基礎上進行遷移學習。VGG 是 ImageNet 2014 年目標定位競賽的第一名,影象分類競賽的第二名,需要注意的是,影象分類競賽的第一名是大名

機器學習搭建神經網路筆記

一、簡單寫一個迴歸方程 import tensorflow as tf import numpy as np #creat data x_data = np.random.rand(100).astype(np.float32)#在x中生成隨機數,隨機數以np的float32型別展示 y_

機器學習人工神經網路(ANN)淺講

神經網路是一門重要的機器學習技術。它是目前最為火熱的研究方向--深度學習的基礎。學習神經網路不僅可以讓你掌握一門強大的機器學習方法,同時也可以更好地幫助你理解深度學習技術。  本文以一種簡單的,循序的方式講解神經網路。適合對神經網路瞭解不多的同學。本文對閱讀沒有一定的前提

深度學習Tensorflow——CNN 卷積神經網路 2

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-05-CNN3/ 目錄 圖片處理  建立卷積層  建立全連線層  選優化方法  完整程式碼

深度學習Tensorflow——CNN 卷積神經網路 1

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-04-CNN2/ 這一次我們會說道 CNN 程式碼中怎麼定義 Convolutional 的層和怎樣進行 pooling. 基於上一次卷積神經網路的介

深度學習卷積神經網路

講卷積神經網路之前說說為什麼能夠進行分類識別?按照傳統的SIFT,HOG演算法都是先進行特徵的提取過程,那麼卷積神經網路怎麼進行特徵的提取呢?   下面,我們就開始吧! 先提一個小問題:“你是通過什麼瞭解這個世界的?” 當一輛汽車從你身邊疾馳而過,你是通過哪些資訊知道那是一

深度學習神經網路的優化方法

前言 \quad\quad 我們都知道,神經網路的學習目的是找到使損失函式的值儘可能小的引數,這是一個尋找最優引數的

深度學習卷積神經網路的卷積層和池化層計算

一、簡介 \quad\quad 卷積神經網路(Convolutional neural network, CNN),

深度學習Python實現2層神經網路的誤差反向傳播法學習

前言 基於計算圖的反向傳播詳解一篇中,我們通過計算圖的形式詳細介紹了構建神經網路需要的層,我們可以將其視為元件,接下來我們只需要將這些元件組合起來就可以實現誤差反向傳播法。 首先我們回顧下神經網路的學習步驟如下: 從訓練資料中隨機選擇一部分資料(mini-batch)

深度學習Python實現基於數值微分的神經網路學習

回顧 \quad\quad 在之前的神經網路的學習過程一篇中,我們介紹瞭如何獲取批量資料、損失函式、梯度以及梯度下降

深度學習神經網路學習過程

神經網路的學習 \quad\quad 線上性可分的與非門、或門的感知機模型中,我們可以根據真值表人工設定引數來實現,

深度學習神經網路

原址:http://tieba.baidu.com/p/3013551686?pid=49703036815&see_lz=1# 我們先從迴歸(Regression)問題說起,要讓機器學會觀察並總結規律的言論。具體地說,要讓機器觀察什麼是圓的,什麼是方的,區分各種顏

深度學習Python實現簡單神經網路

Python簡單神經網路 環境介紹 定義神經網路的框架 初始化 建立網路節點和連結 簡單均勻分佈隨機初始權重 正態分佈初始權重 編寫查詢函式 階段性測試 編寫訓練函式

備忘python神經網路演算法與深度學習視訊

先準備好一個大硬碟,照著這個學習路線學習!站長也在學習這個教程,沿著數學->演算法->機器學習->資料探勘(分析)->人工智慧的學習路線學習。 第00_安裝包、開發工具、註冊(贈品) 第01階段-基礎必備篇    python3.6視訊零基礎2周快速

深度學習8:CNN卷積神經網路與sklearn資料集實現數字識別

前言:這個程式碼是自己閒暇無事時候寫的。 因為CNN卷積神經網路用MNIST資料集、sklearn資料集程式碼很多部分都很相似,這一篇就不附詳細說明,原始碼最下。CNN卷積神經網路的工作原理,請詳情參考——【深度學習】5:CNN卷積神經網路原理、MNIST資料

深度學習卷積神經網路CNN基本知識點

卷積神經網路與前面學的常規神經網路很相似,也有輸入、權重、偏差、損失函式、啟用函式、全連線層等概念,之前的一些小的技巧也仍然適用。 與常規神經網路的對比 卷積神經網路(Convolutional Neural Networks,CNNs / ConvNe

深度學習基於Numpy實現的神經網路進行手寫數字識別

直接先用前面設定的網路進行識別,即進行推理的過程,而先忽視學習的過程。 推理的過程其實就是前向傳播的過程。 深度學習也是分成兩步:學習 + 推理。學習就是訓練模型,更新引數;推理就是用學習到的引數來處理新的資料。 from keras.datasets.mnist impor

深度學習5:CNN卷積神經網路原理、識別MNIST資料集

前言:先坦白的說,深度神經網路的學習在一開始對我造成的困擾還是很大的,我也是通過不斷地看相關的視訊資料、文獻講解嘗試去理解記憶。畢竟這些內容大多都是不可查的,我們看到的都只是輸入輸出的東西,裡面的內部運作以及工作原理,都需要沉心靜思。 這篇CNN卷積神經網路的

深度學習卷積神經網路(CNN)

卷積神經網路(Convolutional Neural NetWork,CNN): 自然語言處理、醫藥發現、災難氣候發現、人工智慧程式。 輸入層: 整個神經網路的輸入 卷積層: 卷積神經網路中最重要的部分,卷積層中每一個節點的輸入只是上一層神經網路的一小塊,一般為3