教你用卷積神經網路對視覺神經元進行建模
作者:Ioannis Kalfas
翻譯:笪潔瓊
校對:丁楠雅
本文共3400字,建議閱讀13分鐘。
本文將通過卷積神經網路層的人工神經元來模擬大腦視覺區域的神經元,在HMAX模型下最終輸出向量結果的詮釋。
我們的大腦很奇特。它是一個神奇的器官,已經進化了數百萬年,不斷變化和調整來應對遇到的各種刺激和條件,它看起來就像一袋黏糊糊的物質,在我們的頭腦中以不同的方式組建起來。這個器官和組成它的數十億個神經元,是我們理解智力以及智力是如何產生的最佳研究對象。然而我們還有另一個選擇,那就是自己創造(人工)智能,然後闡述我們自己的創造力。
圖一:我們的大腦幫助我們創造智能
近年來,我們離創造智能機器又近了一步。至少在(計算機)視覺方面,我們現在擁有能夠從數千個類別中精確地分類圖像的系統。這要歸功於卷積神經網路(CNN)(以及用於訓練它們的圖形處理單元的效率)。如果每個類別都有足夠的圖像來訓練,CNNs可以學會調整裡面的人造神經元的權重,這樣,經過訓練,CNNs就能對之前從未見過的圖像進行分類。
有趣的是,CNNs的靈感來自於我們大腦的視覺系統,為了做到這一點(在這裡,這裡和這裡(鏈接)幸好CNNs與神經科學關係密切,我有機會從神經生理學的角度(在魯汶大學)來開展研究,發揮我對人工神經網路的熱情和好奇心去了解大腦構造。
圖二:一個典型的CNN的架構
在這篇博客文章中,我們將通過卷積神經網路層的人工神經元來模擬大腦視覺區域的神經元。通過「建模」,我指的是函數的創建,它與生物神經元的輸入相同,並可以產生相似的輸出。
def model_neuron(image):
return realistic_response
在我們的舉例中,輸入是在空白背景下的剪影(黑色填充的形狀)的圖像。
圖三:示例圖像顯示為生物神經元(沒有綠色框架)
來自生物神經元的數據是通過電生理學實驗收集的。在這些實驗中,我們通過顯示器對一隻猴子顯示圖像(輸入刺激),並在猴子大腦中插入一個電極,記錄神經元的活動或反應。
這裡說的活動或反應,通常指的是神經元每單位時間產生的動作電位(或峰值)的數量(如響應=30峰值/秒)。
圖四:神經元很興奮地看著這個...
在我們的例子中,數據是從下顳葉皮層收集的,這是我們視覺系統的「後期」處理階段之一,更確切地說,是來自大腦的顳上溝(MSB)部分。
這些小區域中的神經元,正如你猜到的那樣,對身體形狀的圖像的反應比其他類別的圖像(如面孔)要敏感。當一個身體形狀出現在圖像中時,它們會感到興奮,即使它們並沒有頭腦!
基本操作
讓我們繼續討論基本操作部分的技術細節,同時需要不能讓非技術讀者感到厭煩。
在這裡,我們將研究單個神經元的數據,稱為「C65b」(不要問我為什麼,它就叫這個名字)。
這個神經元被呈現出來(通過它的主人的眼睛,也就是一隻叫埃舍爾的獼猴),有605張圖像,圖中有黑色形狀和白色背景。有些形狀是隨機的,有些形狀像動物或人類的身體,其他形狀就像其他類別的剪影(更多細節請閱讀我們論文的「材料和方法」)。
Materials and Methods:
http://www.eneuro.org/content/4/3/ENEURO.0113-17.2017
這些圖像被調整以匹配我們選擇的CNN的輸入大小(例如224x224)。沒有對它們進行進一步的預處理。
對於每一個圖像(刺激),在實驗室實驗中,我們會記錄單獨的發射速率(峰值/秒)。我們的目標是找出是否可以使用來自CNN層的人造神經元來預測神經元對每個圖像的實際生物反應(即回歸問題)。我們該如何使用人工神經元?具體做法是,我們將給CNN提供同樣的圖像,並從每一層提取它們的特徵。
(可選的)卷積神經網路的背景
讓我們來詳細解釋一下CNNs的工作原理,以及在案例中的「特徵」是什麼。
正如你可能已經知道的,CNN的層由成千上萬的人工神經元組成,它們被分成數百個特徵地圖(見圖二)。每一個神經元都被分配了一些數學運算來執行,這個操作涉及到神經元的輸入和它的權重,也就是神經元與它的輸入的連接有多強。
例如,第一個卷積層中的一個神經元,在它的權重和輸入圖像的一個小窗口之間執行卷積運算(如圖二所示。基本上是兩個2D矩陣之間的元素乘法,然後是加上所有的)。這個想法是,如果神經元檢測到一個類似它的權重,通過訓練網路,我們實際上是在改變它們的權重,這樣它們看起來就像是輸入的模式。
因此,您可以將神經元看作是一個模式(或特徵)檢測器,檢查它所看到的區域,包含一些熟悉的東西的權重模式,並輸出一個「分數」來表示這種熟悉程度。有趣的是神經元的映射功能將具有相同的權重,所以基本上每個特徵需要掃描整個輸入圖像來尋找一個特定的模式(這顯然有助於訓練權重時的計算和更新,因為你不需要更新每個神經元)。
在任何平均池層中,一個神經元接受上一層的一個小窗口的平均值。因此,一個最大池化層的神經元只是簡單獲取那個小窗口的最大值。這裡的想法是,即使你把輸入圖像移到一邊,或者旋轉,或者縮放它,池中的神經元仍然會檢測到相似的模式。這使得CNNs能夠允許這些圖像轉換。
所以,通過「特徵」,我們指的是一堆數字,這些數字是我們神經元的輸出(或「模式檢測器」)。
「激活」一詞也可以與特徵互換使用。從神經科學的角度來看,這更容易理解,因為它指的是一個神經元在輸入刺激下被「激活」的程度。我不會詳細講CNNs的工作方式,因為網上有很多很棒的資源可以很好地解釋這個問題(例如,卡洛西的課程,C. Olah的博客,Adit Deshpande的博客,hackernoon等等)。
Karpathy』s course:
http://cs231n.github.io/convolutional-networks/
C. Olah』s blog:
http://colah.github.io/posts/2014-07-Conv-Nets-Modular/
Adit Deshpande』s blog:
https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/
hackernoon article:
https://hackernoon.com/visualizing-parts-of-convolutional-neural-networks-using-keras-and-cats-5cc01b214e59
數學建模
我們將使用CNN層的VGG-16。像任何回歸問題一樣,我們需要一個預測矩陣X和一個目標矩陣y。在我們的舉例中,X將是一個2D矩陣,其中每一行對應一個輸入圖像,每一列對應一個特定的CNN層神經元的激活。我們可以考慮整個CNN的神經元,建立一個巨大的X矩陣,但那將是計算量密集型的,它不會讓我們知道層之間的差異。
因此,我們將為每個CNN層建立一個單獨的回歸設置,其中X將是nr。
輸入圖像的nr,CNN圖層單元就會激活。
因此,對於VGG16的最後一層(fc8由1000單元組成),我們的X矩陣將是605x1000。
Y矩陣將是長度為605的一維向量,它將包含生物細胞的響應(峰值)到我們的每一個輸入圖像(刺激)。
圖五:我們的回歸問題中X和Y矩陣
請注意,這些圖像是黑-白(二進位的),但是為了將它們輸入到CNN,我們複製它們兩次以得到一個3D卷(bnw圖像3次)。要了解它們是如何與輸入交互的,請從Karpathy的CS231n課程中了解這個令人難以置信的可視化(同時也要閱讀其他的博客以獲得更多的細節)。
Karpathy CS231n:
https://cs231n.github.io/assets/conv-demo/index.html
直觀地說,到目前為止我們所做的是把一隻猴子的生物神經元更換成出現在CNN層中的人工神經元。我們建立了一個人工的方式來表示相同的函數作為神經元C65b,我們需要找到一種有效的數學方法得到Y給X。接下來,我們將討論建模選項以及為什麼它不是一個簡單的線性多重回歸可以解決的問題。
基本歷史:CNNs和神經科學的前身
在前文中,我提到CNNs是受神經科學的啟發。為了讓你知道為什麼會這樣,我將提供在CNNs出現之前的一個舊模型例子,它被用於視覺神經科學。
CNNs的神經科學靈感來自於它們處理和表示信息的方式。
特別是,卷積神經和最大池化的操作,並不是視覺計算的外來概念。
它們也被用於更古老的、受生物學啟發的HMAX模型,它試圖將大腦皮層的視覺處理解釋為「越來越複雜的現象的層次」。
圖六:信息通過我們的眼睛進入大腦,再通過大腦區域的神經元傳遞
TAG:數據派THU |