我的神經網絡剛剛學到了什麼?它關心哪些功能,為什麼?
神經網絡學習數據集的特徵作為實現某些目標的手段。完成後,我們可能想知道神經網絡學到了什麼。有哪些功能以及為什麼要關心這些功能。有人可以就有關此問題的工作主體提供一些參考嗎?
確實很難理解神經網絡在學習什麼,但在這方面已經做了很多工作。我們絕對可以了解我們的網絡正在尋找什麼。
讓我們考慮用於圖像的捲積神經網絡的情況。我們有我們正在滑動的第一層的解釋過濾圖像,因此我們的第一個隱藏層對應於圖像的小塊與我們的各種過濾器之間的一致性。我們可以可視化這些過濾器,看看我們的第一層表示是什麼:
這張圖片是來自AlexNet的第一層過濾器,取自這個精彩的教程:http ://cs231n.github.io/understanding-cnn/ 。這讓我們可以將第一個隱藏層解釋為學習將由原始像素組成的圖像表示為張量,其中每個坐標是濾波器與圖像小區域的一致性。然後下一層使用這些過濾器激活。
理解第一個隱藏層並不難,因為我們只需查看過濾器即可了解它們的行為,因為它們直接應用於輸入圖像。例如,假設您正在處理黑白圖像(因此我們的濾鏡是 2D 而不是 3D)並且您有一個類似於
想像一下將其應用於圖像的 3x3 區域(忽略偏差項)。如果每個像素都是相同的顏色,那麼你會得到因為他們會取消。但是,如果上半部分與下半部分不同,那麼您將獲得一個潛在的大值。實際上,這個過濾器是一個邊緣檢測器,我們可以通過將其應用於圖像並查看會發生什麼來弄清楚這一點。但是要理解更深的層次要困難得多,因為整個問題是我們不知道如何解釋我們將過濾器應用於什麼。
Erhan et al (2009) 的這篇論文同意這一點:他們說第一個隱藏層可視化很常見(那是在 2009 年),但更深層次的可視化是困難的部分。從那篇論文:
這項研究的主要實驗發現非常令人驚訝:作為圖像空間中的函數,內部單元對輸入圖像的響應似乎是單峰的,或者至少對於所有測試的隨機初始化,都可靠且一致地找到最大值. 這很有趣,因為找到這種主要模式相對容易,然後顯示它可以很好地描述該單元的功能。
Chris Olah 等人 ( https://distill.pub/2017/feature-visualization/ ) 在此基礎上討論了一般情況下您如何 (1) 生成導致大量激活的圖像,以便了解網絡是什麼在尋找; 或者 (2) 獲取實際的輸入圖像,看看圖像的不同部分如何激活網絡。那篇文章的重點是(1)。
在下圖中,取自 Olah 等人的鏈接文章,作者討論了您可以檢查的網絡的不同方面。最左邊的圖像顯示了在輸入圖像空間上優化特定神經元激活的結果,依此類推。
如果您想更深入地了解這一點,我強烈建議您完整閱讀該文章,並且通過閱讀它的參考資料,您應該可以很好地掌握對此所做的事情。
當然,這一切都只是為了我們人類可以理解輸入的圖像。如果你正在處理一些更難解釋的東西,比如只是一個大的數字向量,那麼你可能無法做出如此酷的可視化,但原則上你仍然可以考慮這些技術來評估各種神經元、層等.