1

我不明白爲什麼在使用卷積神經網絡時需要翻轉過濾器。爲什麼卷積濾波器在卷積神經網絡中翻轉?

據烤寬麪條文檔,

flip_filters:布爾(默認:true)

是否滑動他們在輸入, 進行卷積(這是默認值)之前翻轉過濾器,或者不要將它們翻轉 並執行關聯。需要注意的是在意大利千層麪的一些其他卷積 層,翻轉招致的開銷,並通過 默認情況下禁用 - 利用 另一層瞭解到的權重時查看文檔。

這是什麼意思?在任何神經網絡書籍中進行卷積時,我從來沒有讀過關於翻轉濾波器的內容。請問有人澄清?

+0

這是某種修正不同層類型,見https://github.com/Lasagne/Recipes/issues/39 – frozen

回答

1

的根本原因的轉置卷積濾波器是卷積運算的定義 - 這是信號處理的結果。在執行卷積時,您希望內核相對於執行卷積的軸進行翻轉,因爲如果不這樣做,您最終將計算信號與其自身的相關性。如果您考慮將時間序列應用於一個時間序列,其中所討論的函數變化非常劇烈 - 您不希望卷積與您的信號相關或相關,那麼理解起來會容易一些。

This answer來自數字信號處理堆棧交換站點給出了一個很好的解釋,它介紹了爲什麼卷積濾波器被定義爲沿着信號的反方向進行數學分析。

This page走過,其中翻蓋做了詳細的例子。這是用於邊緣檢測的特定類型的濾波器,稱爲Sobel濾波器。它沒有解釋爲什麼翻轉完成,但是很好,因爲它給了你一個2D解決方案。我提到在1D的情況下(來自DSP SE網站的答案真的是一個很好的解釋),它更容易理解(爲什麼是(因爲,爲什麼卷積是這樣定義的)?)。但此慣例也適用於2D和3D(Conv2DDNN和Conv3DDNN層都有flip_filter選項)。然而,歸根結底,是因爲卷積濾波器權都沒有的東西,人的計劃,而是由網絡「學習」,這完全是任意的 - 除非你是從另一個網絡加載權,在這種情況下,你必須是一致的與該網絡中卷積的定義一致。如果卷積被正確定義(即按照慣例),則過濾器將被翻轉。如果它被錯誤地定義(以更「幼稚」和「懶惰」的方式),它不會。

更廣領域是有迴旋的是「線性系統理論」,讓搜索這個詞,可能會找到更多關於這一點,儘管神經網絡的上下文之外的部分。

注意,在烤寬麪條卷積/相關區別還提到在corrmm.py類的文檔字符串:

flip_filters:布爾(默認值:假) 是否翻轉濾波器並執行卷積,或不翻轉 他們執行的相關性。翻轉增加了一些開銷,所以它 默認情況下禁用。在大多數情況下,這不會有所作爲 無論如何,因爲過濾器教訓。類:lasagne.layers.Conv2DLayer,例如然而,flip_filters應 來,如果權重被裝進去的是使用 定期瞭解到設爲True