雜談CNN:如何通過優化求解輸入圖像

2020-12-03 雷鋒網

雷鋒網按:本文作者達聞西,原載於作者知乎專欄,雷鋒網(公眾號:雷鋒網)經授權發布。

機器學習和優化問題

很多機器學習方法可以歸結為優化問題,對於一個參數模型,比如神經網絡,用 y=f(x;θ) 來表示的話,訓練模型其實就是下面的參數優化問題:

其中 L 是loss function,比如神經網絡中分類常用的 cross-entropy。

CNN學到了什麼?

特徵(Representation)。把原始圖像看做一個維度是像素×通道的向量,經過各種複雜的CNN結構,其實只不過成了另一個向量。這個向量所在的空間也許有更好的線性可分性,也許是相似樣本的「距離」更近,原始的數據經過變換到了這裡之後,就是特徵。

可視化CNN

那麼有個問題來了,如何可視化一個CNN結構學到的特徵呢?答案有很多,其中一種就是本文的主題:不再通過優化求解網絡的參數,而是求解輸入圖像

優化網絡的輸入,是相對於「正統」的機器學習優化參數而言的。當一個CNN訓練完全後,我們可以固定好參數,把輸入作為可訓練的量,根據目的給定一個新的目標函數。

把這種方法最早用在深度學習裡大概是Bengio組在2009年的一個Tech report:《Visualizing Higher-Layer Features of a Deep Network》。文章裡提出了下面的優化問題

其中 hij 代表第j層中的第i個神經元的響應。很直觀的,這是要尋找什麼樣的圖像可以最大程度地激活這個神經元,這種方法就叫做 activation maximization。利用這種辦法,原文中得到了類似下面的可視化,從左至右依次是一個DBN中從低到高的三層:

也許很多人一提起特徵可視化首先想到的是可視化特徵圖或是直接把卷積核畫出來,就像 Caffe 的 Tutorial(Image Classification and Filter Visualization,地址:http://t.cn/RqAEsPq中一樣。這樣的可視化其實是很不直觀的,尤其是卷積核的可視化,第一層之後的卷積核到底學到了什麼內容只能靠腦補。基於這個思路,Cornell的Jason Yosinski把公式改了改

其實就是Regularization項R(x)放到了目標函數裡。然後他把這種可視化作為功能之一,基於Caffe製作了一個年久失修的用於CNN可視化的工具包:yosinski/deep-visualization-toolbox(地址:http://t.cn/R2rXWi3)。用在AlexNet上的效果是下面樣子:

注意到這個可視化結果還考慮到了感受野,也就是實際優化的目標是響應圖中心的點,所以越高層的可視化圖像越大。

直接把某一類別的分數作為優化值可以得到關於該類別更直觀的可視化結果,比如下圖是這個工具包對幾個類別的可視化:

每個類別學到的視覺上的特徵一目了然。另外注意到這種方法因為是基於優化,所以每次優化的結果會有不同。

藉助這種可視化,我們能夠分析出網絡是不是真的學習到了我們希望其所學的特徵,比如Google的Research Blog中提到過啞鈴的例子:

可視化的類別是啞鈴,可是結果裡包含了一些我們不希望出現的元素:胳膊。這是因為用於訓練的啞鈴圖片中,大都有握著啞鈴的胳膊。

可視化網絡的方法有很多,以簡單粗暴為最大特點的大概只是activation maximization。

對抗樣本(Adversarial Examples)

對抗樣本也是機器學習中的一種常用概念,通常指人為製造的,讓一個機器學習模型發生錯誤的樣本。Anh Nguyen的論文《Deep Neural Networks are Easily Fooled: High Confidence Predictions for Unrecognizable Images》中有個比較形象的示意:

要理解這個圖,還要提一句機器學習的一個基本問題:學習數據的分布。具體到方法就是從訓練數據中進行學習,如果學習成功,則可以泛化到所有數據,包含沒見過的測試數據。回到這個圖,數據的分布就是最上邊那三坨。一種造對抗樣本的方法就是從一個類別的樣本出發,做一些小修改,讓模型將修改後的樣本判斷為另一個類別,而實際上(或是人的,顯然的判斷)該樣本仍為原來類別,這就是圖中從藍色原點到白色小方塊的方法。

當然更容易的方法是利用分類邊界的不可確定性。比如上圖中除了最上面部分的空間可以認為是數據存在概率極低的區域,從實際應用的角度甚至可以認為是我們完全不關心的區域。因為算法學習的樣本只有實心的小圓點,所以遠離小圓點的部分,分類邊界是難以控制的。在這裡面很容易輕鬆取到算法高概率認為是一個類別的樣本,而實際上卻難以辨認的對抗性樣本。

所以大體來說,對抗性樣本的存在是因為數據維度通常過高,即使考慮所在的子區域,往往還是過高,對整個(數據分布的)空間的搜索是不可行的。在訓練樣本沒有覆蓋的區域,無論該區域是否屬於數據分布所在的區域,無論模型的capacity夠不夠,都有出現對抗性樣本的可能。儘管深度學習中一直主張distributed representation已大幅優於局部泛化,維度的詛咒仍是一個無法擺脫的難題。

具體到CNN,下邊這個例子可能不少人見過:

熊貓的圖片上加上一個人眼難以察覺的噪音,對於人眼而言看上去還是熊貓,可是對於一個CNN而言,右邊的圖片以99%高概率被判斷為了長臂猿。上句話其實已經很清楚地指出了得到右邊圖片的方法,還是一個優化輸入圖像的問題:加上一個儘量小的噪音,並通過優化這個噪音,讓優化後的圖像具有另一個類別的高概率:

其中n是要求的噪音,α 是相應的係數,L是x+n屬於某個類別的loss,c是某個錯誤類別的標籤。這大概是基於深度學習的計算機視覺中第一個討論造對抗樣本的方法,見於Christian Szegedy的論文《Intriguing properties of neural networks》。同樣是在這篇論文中,Christian描述了一個比較令人擔憂的發現:就是這種樣本居然可以泛化,同一個對抗樣本,對於不同的CNN結構,在不同數據子集下訓練的模型,是可以達到一定程度的「通用」性的。也就是說對於一些涉及到安全的應用,攻擊者即使不知道部署的模型是什麼,通過某種手段猜測數據的分布,也是可以得到有效的攻擊樣本的。

語義信息和高層神經元

對於CNN,有個很基礎的認識:低層的部分學習紋理等簡單信息,高層部分學習語義信息。在《Intriguing properties of neural networks》中的另一個發現是,CNN中表示高層學習到的語義信息的,並不是某一個神經元,而是高層神經元構成的空間。這個看上去有些顯然的結論的一種佐證方式又是對輸入圖像進行優化:

其中 Φ(x) 是神經元激活值對應的向量,v是一個隨機向量。另外這和前邊的優化有些許不同,x的取值範圍限定在已有的圖片集裡。其實就是在某個高層響應的空間裡,沿著某個方向挑選了一些該方向上值最大的圖片。最後的結論是,無論是沿著某個隨機方向找到的圖片,還是以某一個神經元響應最大找到的圖片,都能看出一些語義上的共性,比如下圖:

黑線以上是最大化某個神經元響應的樣本,共性挺明顯,黑線以下是最大化某層特徵空間中某個方向響應的樣本,共性也挺明顯。

Deep Dream

很多人小時候都有這樣的經歷:抬頭看天空的雲彩,或是觀察地面的紋路,甚至是凝視廁所裡髒兮兮的牆面,這時候看到的卻是各種機器人大戰,武打畫面,或是動畫片中的人物和故事。

Deep Dream和這很像,輸入任何一幅圖像,都會得到在不同層的響應,前面已經提到過,低層的響應是紋理和細節的相應,高層的響應是語義信息的響應。所以Deep Dream的思想是:

對於某個高層的得到的語義信息響應,加強這些信息。這相當於讓網絡自己決定從輸入圖像中「看到」了什麼,並把「看到」的東西加強,所以又是一個優化問題。

要優化的目標,就是最大化輸入圖像在某個高層已有的響應,優化的初始值就是輸入圖像,當然還有一些其他項,比如不同的包含不同尺度,或是抑制梯度及高頻成分的約束,這些是否加上視情況而定。這並不是一個典型的優化問題,反而更像是一個單純的梯度下降問題,所以梯度下降通常也不會進行到底,而是進行若干步直到輸入圖像中出現一個「夢境」。下面是TensorFlow的官方tutorial裡,Inception模型在一幅圖片上生成的夢境:

基於Inception的DeepDream有個特點,就是夢境裡的狗很多,就像上面這幅圖一樣。

在電影《Inception》裡,夢境是可以操控的,DeepDream也可以,按照可視化中的思路,把優化目標換成某一層響應圖中的某個channel,這就是一個傳統的優化問題了:

和第一部分中的差別在於初始化的是一幅圖像,並且優化不會進行到底。比如一個對花朵一樣圖案敏感的channel,對應的夢境裡畫面中就會開滿了花:

其實那些隱藏在白雲裡和牆上的圖案,長大後也是能看到的,只不過大多數人不看了。

Neural Art/Style

2016年,如果要評選一款和神經網絡相關的最火爆的APP,一定非Prisma莫屬。其背後的算法,也是對輸入圖像的優化。關於神經網絡的藝術風格學習,首先要追溯到更早的一篇利用優化輸入方法的論文《Understanding Deep Image Representations by Inverting Them》,裡面討論的問題之一是通過優化算法和神經網絡中的特徵重建一幅圖像:

其中Φ0是某幅圖像在網絡中的特徵,這個特徵可以是部分層的響應,或者全部的響應。如果Φ0取低層的特徵,那麼細節的還原度就會很好,如果Φ0是高層的特徵,則畫面中的紋理和細節會丟失很多信息。比如下面的圖像:

用Vgg16模型執行一遍前向計算,然後分別取relu1~relu5的特徵作為 Φ0,重建的結果如下:

在基於神經網絡的圖像風格藝術化中,通常的輸入是一幅原始圖像,經過處理具有了其他畫面,比如一幅油畫的藝術風格。所以是原始圖像的內容+其他圖像的風格,那麼上面討論的部分就是內容的重建,所以接下來要討論的是風格的重建。

圖像風格其實是個很難定義的東西,不過在神經網絡中,談到風格,一般指的是紋理。紋理的特點是什麼呢?又是一個很難定義的東西……不過紋理有個特點是和所在位置無關,基於這個特點,只要是和位置無關的統計信息,都可以試著來表示紋理的特徵,Gram矩陣,就是在CNN中表示這種特徵辦法的一種:

其中 G代表第 l 層響應圖對應的Gram矩陣,Fi代表該層第 i 個卷積核對應的響應圖。通常一個響應圖是二維的,這裡把響應圖展開為一個一維向量,其中 Fik代表該層第i個響應圖的第k個元素。所以Gram矩陣的每一個元素就是求了個內積,把兩個響應圖之間,和位置無關的一種相關性給求了出來。

接下來的套路就和上一小節一樣了,把每層Gram矩陣作為特徵,讓重建圖像的Gram矩陣儘量接近原圖的Gram矩陣,也是個優化問題:

其中El是每一層的loss,wl是該層loss的權重。El的形式是考慮到每層響應圖大小後的Gram矩陣差異:

同樣是用Vgg16,用不同層的特徵,對梵谷的星空進行風格重建,結果如下:

至於Gram矩陣為什麼能作為重建風格的依據,論文《Demystifying Neural Style Transfer》(感謝 @Lyken 在評論中的分享)中給出了一個思路,是一個不錯的參考。比起原文中相關性的解釋,這篇論文更進一步把Gram矩陣轉化成了squared Maximum Mean Discrepancy,這直接把圖像和CNN中響應的分布聯繫了起來,並且可以通過替換計算MMD的方式嘗試其他風格重建的目標計算方式。

總之,重建內容和風格的方法都已有,接下來就很自然了,把某個較高層的特徵作為內容重建的目標,同時把每層響應的Gram矩陣以某個比例求和作為風格的重建目標,對輸入圖像進行優化:

這就是論文《A Neural Algorithm of Artistic Style》中的方法,也是Prisma背後的算法。

雷鋒網相關閱讀:

卷積神經網絡不能處理「圖」結構數據?這篇文章告訴你答案

手把手教你用 TensorFlow 實現卷積神經網絡(附代碼)

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 使用CNN生成圖像先驗,實現更廣泛場景的盲圖像去模糊
    本文的主要貢獻如下:提出了一種高效判別圖像先驗,它可以通過深度卷積神經網絡學習到,用於盲圖像去模糊。為了保證這個先驗(也就是分類器)能夠處理具有不同大小的輸入圖像,研究者利用全局平均池化和多尺度訓練策略來訓練這個卷積神經網絡。
  • 在多目標識別方面,maskr-cnn已經取得了一些進展
    maskr-cnn是業界首款實用的全卷積神經網絡模型,為計算機視覺中的多目標識別與自動對焦,開創性的成為計算機視覺發展的新方向。無論是基於計算機視覺的自動對焦系統、模式識別系統,還是圖像識別,maskr-cnn都是有標誌性意義的。它強調平滑準確的計算輸入、檢測框和定位點,訓練過程與特徵提取過程採用多級感受野融合技術進行自動優化提高目標解析度及精度,以及做出精度更高的語義推理判斷。
  • 自注意力可以替代CNN,能表達任何卷積濾波層
    為了研究這個問題,需要先來回顧一下它們分別是如何處理一張圖像。給定一張圖像,其大小為W x H x D。卷積層卷積神經網絡由多個卷積層和子採樣層組成。每個卷積層可以學習大小為K x K的卷積濾波器,輸入和輸出的維度分別是Din和Dout。
  • 【算法系列】凸優化的應用——Python求解優化問題(附代碼)
    2018-07-19 17:37:02 來源: 統計學家 舉報   優化問題一般可分為兩大類
  • 圖像識別技術——卷積神經網絡CNN詳解
    平常,為了保證圖像的質量,儘可能多的保存圖像的信息,我們圖像數據的解析度會很高,解析度高,意味著原始輸入的圖像數據是一個高維度向量。舉個例子,輸入是 1000* 1000* 3 的一張圖片,DNN 會對其做一個拉伸處理,拉長成一個向量。那麼這個向量維度就是 300w 。那麼就會有一個 300w 個值的輸入向量。
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    R-CNN 的操作步驟  Selective search(選擇性搜索):首先對每一張輸入圖像使用選擇性搜索來選取多個高質量的提議區域 (region proposal),大約提取 2000 個左右的提議區域;  Resize(圖像尺寸調整):接著對每一個提議區域,將其縮放 (warp) 成卷積神經網絡需要的輸入尺寸 (
  • 如何提高交互式圖像分割算法的效率?
    通過將迭代更新的交互式圖像分割的動態過程建模成馬爾可夫過程,並使用 MARL 解決,IteR-MRL 實現了更少的交互次數和更快的收斂速度,在多個醫療圖像數據集上超過了現有算法。論文地址:https://arxiv.org/abs/1911.10334現有交互式圖像分割策略的缺點目前的三維圖像自動分割算法很難達到醫用標準。為了得到更佳的分割結果,交互式的圖像分割策略成為有價值的研究方向,此類策略通過引入少量的用戶提示實現對分割結果的迭代優化。
  • R語言中求解一元方程的根
    求解一元一次方程求解形如ax+b=0的根。由於uniroot()函數每次只能計算一個根,而且要求輸入的區間端點值必須是正負號相反的。如果我們直接輸入(-3, 4)這個區間,那麼uniroot()函數會出現錯誤:Error in uniroot(f, c(-3, 4), a = 1, b = -1, c = -6, tol = 1e-09) : 位於極點邊的f()值之正負號不相反即要求f(lower) * f(upper) <=0。
  • 深度學習與圖像識別 圖像檢測
    特別適合處理大數據       a、用較為複雜的模型降低模型偏差       b、用大數據提升統計估計的準確度       c、用可擴展的梯度下降算法求解大規模優化問題這個大數據是除了數量上的大,還有更重要的是維度的大,很多算法本身是無法處理高緯度數據的,例如Kernel學習機相關的算法, 雖然理論上是先將數據向高維空間映射
  • AI求解薛丁格方程;陶大程等深度學習理論進展綜述
    計算這一能量的方式就是求解薛丁格方程。換句話說,求解出薛丁格方程,就可以知道化學反應的結果。然而,這並非易事。此前,我們可以精確求解的原子只有氫原子——僅具備一個質子和一個電子。最近,來自柏林自由大學的科學家提出利用人工智慧計算薛丁格方程的基態解。
  • 圖像性質與變換方法,求解高中數學三角函數圖像有關問題的要點
    3) 三角函數圖像、圖像變換及其性質。4) 三角恆等變換問題的求解一般方法與技巧。1.基本問題說明一般地,三角函數圖像問題就是利用三角函數圖像的特性與變換方法,求解以下有關的基本問題:① 根據三角函數解析式,選擇或畫出相應的圖像。② 三角函數圖像的變換。
  • 何愷明Mask R-CNN精度提升,一半輸入數據量...
    這一步是通過在機器學習中添加gate的方法,來學習每一個特徵圖片的重要性。  在訓練中,不僅能得出用於圖像推理的神經網絡中的權重,同時每一個特徵圖的重要性也被確定。有兩種方案來減少從圖像解碼模塊到圖像推理引擎的數據帶寬,分別是動態(Dynamic)方式和靜態(Static)方式。  所謂動態方式,就是每一個頻率分量的選擇開關由當前輸入的圖像決定,這種方法可以自適應每一次圖像推理(inference)的不同輸入。  而靜態方式,就是通過訓練(training)得到最重要的一些頻率分量。
  • 圖鴨科技 CVPR 2019 CLIC 圖像壓縮挑戰賽冠軍方案全解讀
    摘要:近年來隨著人工智慧技術的發展,基於深度學習的圖像壓縮技術已取得了飛速的發展。一個典型的基於深度學習的圖像壓縮框架包括:自編碼網絡結構設計、量化、碼率估計和率-失真優化等幾個模塊。本文將主要介紹圖鴨科技在 CVPR 2019 CLIC 圖像壓縮挑戰賽上的相關技術方案,針對於比賽所設置的低碼點和高碼點壓縮兩個賽道,我們基於變分自編碼網絡設計了可進行端到端優化的圖像壓縮方案。該方案包括一個非線性編碼網絡、軟量化模塊、一個非線性解碼網絡和一個熵估計模塊。我們技術方案的特色之處總結如下:1.
  • 從R-CNN到YOLO,一文帶你了解目標檢測模型(附論文下載)
    如何確定這些邊界框的大小和位置呢?R-CNN網絡是這樣做的:在圖像中提出了多個邊框,並判斷其中的任何一個是否對應著一個具體對象。你可以通過以下GitHub連結查看模型的各種實現代碼:https://github.com/rbgirshick/fast-rcnnhttps://github.com/precedenceguo/mx-rcnnhttps://github.com/mahyarnajibi/fast-rcnn-torch
  • 必備技能,高中數學「函數圖像」相關問題的求解一般方法與技巧
    問題說明提示:無論是畫圖、識圖還是用圖,都要涉及到函數的概念、解析式及其各種性質等,所以本文的『函數圖像』問題會涉及到其它函數相關的基本問題,因而具有綜合特性。但是,函數圖像本身具有一些共性的特徵,除了是高考的一類常見題型外,還是一個獲得問題的結果的重要工具、一種探求解題思路與方法的重要途徑,使其被廣泛地應用於很多問題(或題型)的求解過程中。
  • 基於PyTorch圖像特徵工程的深度學習圖像增強
    即使我們旋轉圖像,圖像的信息也保持不變。汽車就是一輛汽車,即使我們從不同的角度看它:因此,我們可以使用此技術,通過從原始圖像創建旋轉圖像來增加數據量。將模式設置為「wrap」,用圖像的剩餘像素填充輸入邊界之外的點。平移圖像可能會出現圖像中的對象沒有完全居中對齊的情況。 在這些情況下,可以使用圖像平移為圖像添加平移不變性。通過移動圖像,我們可以更改對象在圖像中的位置,從而使模型更具多樣性。 最終將生成更通用的模型。圖像平移是一種幾何變換,它將圖像中每個對象的位置映射到最終輸出圖像中的新位置。
  • 燈魚雜談 | 長鬚飄飄——龍鬚燈
    雖然現在長鬚丹屬輸入較少,但因為這類魚龐大的數量和廣泛的分布,以後可能還會有很多進口機會。長鬚丹(E. danrica),主要分布在南亞地區,這是南亞地區分布最廣的長鬚丹,甚至阿富汗都有分布,這種魚我在魚商的印度線魚中見過有混雜輸入,但沒見過批量的。長相有點類似金長鬚丹,但個體比較大,最大個體可達13釐米。
  • 圖鴨科技 CVPR 2018 圖像壓縮挑戰賽奪冠,獲獎論文全解讀
    CVPR 作為計算機視覺領域的全球頂級會議,其一直關注計算機視覺領域的發展,為了促進計算機視覺領域圖片壓縮的發展,Google 聯合 twitter、Netflix 等聯合贊助了機器學習圖像壓縮挑戰賽(CLIC)。
  • 解讀| 如何用進化方法優化大規模圖像分類神經網絡?
    作者:Angulia Chao參與:Joni、侯韻楚、高振讓機器具備生物一樣的進化能力一直是計算機科學的一個熱門研究領域,今年三月份,谷歌的多位研究者提出了一種圖像分類器的大規模進化方法,機器之心也曾報導過這項研究,參閱:《深度 | 谷歌和 OpenAI 新研究:如何使用達爾文進化論輔助設計人工智慧算法?》。
  • 基於CNN的單一圖像超分辨(SISR)方法總結
    首先將低解析度(LR)圖像進行bicubic插值,放大至高解析度(HR)的大小。之後輸入至端到端的三層CNN,輸出獲得高解析度圖像。文章的核心思想是,當時主流的基於稀疏編碼的方法,LR圖像特徵提取與表示->非線性映射->HR圖像重建流程,其中每一個環節都可以用卷積操作表示。文章修改擴充後發表在了PAMI上。