2.6 谷歌 Inception 网络简介-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 2.5 網(wǎng)絡(luò)中的網(wǎng)絡(luò)以及1x1卷積 | 回到目錄 | 2.7 Inception 網(wǎng)絡(luò) |
谷歌 Inception 網(wǎng)絡(luò)簡介 (Google Inception Network Motivation)
構(gòu)建卷積層時,你要決定過濾器的大小究竟是1×1(原來是1×3,猜測為口誤),3×3還是5×5,或者要不要添加池化層。而Inception網(wǎng)絡(luò)的作用就是代替你來決定,雖然網(wǎng)絡(luò)架構(gòu)因此變得更加復(fù)雜,但網(wǎng)絡(luò)表現(xiàn)卻非常好,我們來了解一下其中的原理。
例如,這是你28×28×192維度的輸入層,Inception網(wǎng)絡(luò)或Inception層的作用就是代替人工來確定卷積層中的過濾器類型,或者確定是否需要創(chuàng)建卷積層或池化層,我們演示一下。
如果使用1×1卷積,輸出結(jié)果會是28×28×#(某個值),假設(shè)輸出為28×28×64,并且這里只有一個層。
如果使用3×3的過濾器,那么輸出是28×28×128。然后我們把第二個值堆積到第一個值上,為了匹配維度,我們應(yīng)用same卷積,輸出維度依然是28×28,和輸入維度相同,即高度和寬度相同。
或許你會說,我希望提升網(wǎng)絡(luò)的表現(xiàn),用5×5過濾器或許會更好,我們不妨試一下,輸出變成28×28×32,我們再次使用same卷積,保持維度不變。
或許你不想要卷積層,那就用池化操作,得到一些不同的輸出結(jié)果,我們把它也堆積起來,這里的池化輸出是28×28×32。為了匹配所有維度,我們需要對最大池化使用padding,它是一種特殊的池化形式,因為如果輸入的高度和寬度為28×28,則輸出的相應(yīng)維度也是28×28。然后再進(jìn)行池化,padding不變,步幅為1。
這個操作非常有意思,但我們要繼續(xù)學(xué)習(xí)后面的內(nèi)容,一會再實現(xiàn)這個池化過程。
有了這樣的Inception模塊,你就可以輸入某個量,因為它累加了所有數(shù)字,這里的最終輸出為32+32+128+64=256。Inception模塊的輸入為28×28×192,輸出為28×28×256。這就是Inception網(wǎng)絡(luò)的核心內(nèi)容,提出者包括Christian Szegedy、劉偉、賈陽青、Pierre Sermanet、Scott Reed、Dragomir Anguelov、Dumitru Erhan、Vincent Vanhoucke和Andrew Rabinovich。基本思想是Inception網(wǎng)絡(luò)不需要人為決定使用哪個過濾器或者是否需要池化,而是由網(wǎng)絡(luò)自行確定這些參數(shù),你可以給網(wǎng)絡(luò)添加這些參數(shù)的所有可能值,然后把這些輸出連接起來,讓網(wǎng)絡(luò)自己學(xué)習(xí)它需要什么樣的參數(shù),采用哪些過濾器組合。
不難發(fā)現(xiàn),我所描述的Inception層有一個問題,就是計算成本,下一張幻燈片,我們就來計算這個5×5過濾器在該模塊中的計算成本。
我們把重點集中在前一張幻燈片中的5×5的過濾器,這是一個28×28×192的輸入塊,執(zhí)行一個5×5卷積,它有32個過濾器,輸出為28×28×32。前一張幻燈片中,我用一個紫色的細(xì)長塊表示,這里我用一個看起來更普通的藍(lán)色塊表示。我們來計算這個28×28×32輸出的計算成本,它有32個過濾器,因為輸出有32個通道,每個過濾器大小為5×5×192,輸出大小為28×28×32,所以你要計算28×28×32個數(shù)字。對于輸出中的每個數(shù)字來說,你都需要執(zhí)行5×5×192次乘法運算,所以乘法運算的總次數(shù)為每個輸出值所需要執(zhí)行的乘法運算次數(shù)(5×5×192)乘以輸出值個數(shù)(28×28×32),把這些數(shù)相乘結(jié)果等于1.2億(120422400)。即使在現(xiàn)在,用計算機執(zhí)行1.2億次乘法運算,成本也是相當(dāng)高的。下一張幻燈片會介紹1×1卷積的應(yīng)用,也就是我們上節(jié)課所學(xué)的。為了降低計算成本,我們用計算成本除以因子10,結(jié)果它從1.2億減小到原來的十分之一。請記住120這個數(shù)字,一會還要和下一頁看到的數(shù)字做對比。
這里還有另外一種架構(gòu),其輸入為28×28×192,輸出為28×28×32。其結(jié)果是這樣的,對于輸入層,使用1×1卷積把輸入值從192個通道減少到16個通道。然后對這個較小層運行5×5卷積,得到最終輸出。請注意,輸入和輸出的維度依然相同,輸入是28×28×192,輸出是28×28×32,和上一頁的相同。但我們要做的就是把左邊這個大的輸入層壓縮成這個較小的的中間層,它只有16個通道,而不是192個。
有時候這被稱為瓶頸層,瓶頸通常是某個對象最小的部分,假如你有這樣一個玻璃瓶,這是瓶塞位置,瓶頸就是這個瓶子最小的部分。
同理,瓶頸層也是網(wǎng)絡(luò)中最小的部分,我們先縮小網(wǎng)絡(luò)表示,然后再擴(kuò)大它。
接下來我們看看這個計算成本,應(yīng)用1×1卷積,過濾器個數(shù)為16,每個過濾器大小為1×1×192,這兩個維度相匹配(輸入通道數(shù)與過濾器通道數(shù)),28×28×16這個層的計算成本是,輸出28×28×192中每個元素都做192次乘法,用1×1×192來表示,相乘結(jié)果約等于240萬。
那第二個卷積層呢?240萬只是第一個卷積層的計算成本,第二個卷積層的計算成本又是多少呢?這是它的輸出,28×28×32,對每個輸出值應(yīng)用一個5×5×16維度的過濾器,計算結(jié)果為1000萬。
所以所需要乘法運算的總次數(shù)是這兩層的計算成本之和,也就是1204萬,與上一張幻燈片中的值做比較,計算成本從1.2億下降到了原來的十分之一,即1204萬。所需要的加法運算與乘法運算的次數(shù)近似相等,所以我只統(tǒng)計了乘法運算的次數(shù)。
總結(jié)一下,如果你在構(gòu)建神經(jīng)網(wǎng)絡(luò)層的時候,不想決定池化層是使用1×1,3×3還是5×5的過濾器,那么Inception模塊就是最好的選擇。我們可以應(yīng)用各種類型的過濾器,只需要把輸出連接起來。之后我們講到計算成本問題,我們學(xué)習(xí)了如何通過使用1×1卷積來構(gòu)建瓶頸層,從而大大降低計算成本。
你可能會問,僅僅大幅縮小表示層規(guī)模會不會影響神經(jīng)網(wǎng)絡(luò)的性能?事實證明,只要合理構(gòu)建瓶頸層,你既可以顯著縮小表示層規(guī)模,又不會降低網(wǎng)絡(luò)性能,從而節(jié)省了計算。
這就是Inception模塊的主要思想,我們在這總結(jié)一下。下節(jié)課,我們將演示一個完整的Inception網(wǎng)絡(luò)。
課程板書
| 2.5 網(wǎng)絡(luò)中的網(wǎng)絡(luò)以及1x1卷積 | 回到目錄 | 2.7 Inception 網(wǎng)絡(luò) |
總結(jié)
以上是生活随笔為你收集整理的2.6 谷歌 Inception 网络简介-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.5 网络中的网络及1x1卷积-深度学
- 下一篇: 2.7 Inception 网络-深度学