看了不少反捲積和轉置卷積的文章,彷佛仍是一頭霧水,記錄下本身理解的過程~網絡
有人一句話總結:逆卷積相對於卷積在神經網絡結構的正向和反向傳播中作相反的運算。其實仍是不是很理解。ide
反捲積(轉置卷積)一般用來兩個方面:spa
1. CNN可視化,經過反捲積將卷積獲得的feature map還原到像素空間,來觀察feature map對哪些pattern相應最大,便可視化哪些特徵是卷積操做提取出來的;3d
2. FCN全卷積網絡中,因爲要對圖像進行像素級的分割,須要將圖像尺寸還原到原來的大小,相似upsampling的操做,因此須要採用反捲積;blog
3. GAN對抗式生成網絡中,因爲須要從輸入圖像到生成圖像,天然須要將提取的特徵圖還原到和原圖一樣尺寸的大小,即也須要反捲積操做。ip
其實這裏卷積核B的參數仍然只有9個,加上多個稀疏值0,來構成一個Toeplitz matrix和輸入進行矩陣乘積操做。這裏爲何B的shape會是16×4呢,由於其實輸入是[4,4],實際上是有16個值,因此第一維是16,而後由於kernel_size爲3,4×4大小的輸入須要計算四次,因此第二維是4。input
若是你不理解Toeplitz matrix是怎麼來的,你能夠在草稿紙上筆劃一下,即一個4×4的輸入矩陣和一個3×3的卷積核進行卷積操做,而後對照[1,16]*[16,4]矩陣相乘,你會發現其實計算的結果是同樣的。數學
另外要說明一點反捲積和轉置卷積的真正區別:it
反捲積在數學含義上是能夠還原輸入信號的;可是轉置卷積只能還原到原來輸入的shape,其value值是不同的。io
咱們知道,池化是不可逆的過程,然而咱們能夠經過記錄池化過程當中,最大激活值得座標位置。而後在反池化的時候,只把池化過程當中最大激活值所在的位置座標的值激活,其它的值置爲0,固然這個過程只是一種近似,由於咱們在池化的過程當中,除了最大值所在的位置,其它的值也是不爲0的。
2018.09.03
這裏說一下什麼是上採樣。
實際上,上採樣(upsampling)通常包括2種方式:
傳統的網絡是subsampling的,對應的輸出尺寸會下降;upsampling的意義在於將小尺寸的高維度feature map恢復回去,以便作pixelwise prediction,得到每一個點的分類信息。