畳み込みニューラルネットワークは、行列乗算の代わりに畳み込みをどのように正確に使用しますか?


13

ディープラーニングに関するヨシュアベンジオの本を読んでいたところ、224ページに次のように書かれています。

畳み込みネットワークは、少なくとも1つの層で一般的な行列乗算の代わりに畳み込みを使用する単純なニューラルネットワークです。

しかし、数学的に正確な意味で「畳み込みによる行列乗算を置き換える」方法を100%確信していませんでした。

本当に関心私は(のように1次元での入力ベクトルのためにこれを定義しているxRd Iが画像として入力を持っており、2Dでの畳み込みを回避しようとしませんので、)。

たとえば、「通常の」ニューラルネットワークでは、Andrew Ngのメモのように、操作とフィードワードパターンを簡潔に表現できます。

W(l)a(l)=z(l+1)
f(z(l+1))=a(l+1)

ここで、z(l)は、非線形性を通過する前に計算されたベクトルfです。非線形性は、ベクトル peroエントリに作用しz(l)a(l+1)は、問題のレイヤーの非表示ユニットの出力/アクティブ化です。

行列の乗算は明確に定義されているため、この計算は明らかですが、行列の乗算を畳み込みに置き換えるだけでは不明確に思えます。すなわち

W(l)a(l)=z(l+1)
f(z(l+1))=a(l+1)

上記の方程式を数学的に正確に理解するようにします。

行列の乗算を畳み込みに置き換えることに関する最初の問題は、通常、 1行をドット積で識別することです。したがって、a l 全体が重みにどのように関係し、W l )で示される次元のベクトルz l + 1 にマッピングされるかが明確にわかります。ただし、畳み込みに置き換えた場合、どの行または重みl のどのエントリに対応するかはわかりませんW(l)a(l)z(l+1)W(l)a(l)。重みを行列として表すことは実際にはもう理にかなっていることは私にとっても明らかではありません(その点を後で説明する例を提供します)

入力と出力がすべて1Dである場合、その定義に従ってたたみ込みを計算し、特異点を通過させますか?

たとえば、入力として次のベクトルがある場合:

x=[1,2,3,4]

そして、次の重みがありました(backpropで学習したのかもしれません):

W=[5,6,7]

畳み込みは次のとおりです。

xW=[5,16,34,52,45,28]

非線形性をそのまま通過させ、結果を隠れ層/表現として扱うのは正しいでしょうか?(現時点ではプーリングないと仮定してください)すなわち、次のとおりです。

f(xW)=f([5,16,34,52,45,28])=[f(5),f(16),f(34),f(52),f(45),f(28)])

(スタンフォードUDLFチュートリアルは、何らかの理由で畳み込みが0で収束するエッジをトリミングすると考えていますが、それをトリミングする必要がありますか?)

これはどのように機能するのですか?少なくとも1Dの入力ベクトルについては?ある、ベクターはもうありませんか?W

私が思うに、これがどのように見えるかについてのニューラルネットワークを描きました:

ここに画像の説明を入力してください

回答:


3

あなたは正しい道を進んでいるように聞こえますが、おそらく私は明確にするのを助けることができます。

シングル出力

入力ユニットと1個の出力を持つ従来のニューラルネットワークレイヤーを想像してみましょう(バイアスも仮定しません)。この層は、重みベクトルがあるワットRを nはそれは様々な方法(バックプロパゲーション、遺伝的アルゴリズムなど)を使用して学ぶことができますが、私たちは学習を無視し、ちょうど前方伝播に焦点を当てます。nwRn

層は、入力かかるし、活性化にマッピングRをのドット積を計算することによって、XWの非線形性と、次に印加σを= σ X W xRnaRxwσ

a=σ(xw)

ここで、の要素は、出力ユニットの全体的なアクティブ化を計算するためにxの対応する要素に重み付けする量を指定します。これは、入力信号(x)がフィルター(w)と同じ長さである「畳み込み」のように考えることもできます。wxxw

xwxRmm>nwx

a1=σ(x1:nw)a2=σ(x2:n+1w)a3=σ(x3:n+2w)amn+1=σ(xmn+1:mw)

w

あなたはすでに基本的にこれをあなたの質問に入れましたが、私は点積を使用してバニラニューラルネットワーク層との接続を調べようとしています。バニラネットワーク層との主な違いは、入力ベクトルが重みベクトルよりも長い場合、畳み込みによりネットワーク層の出力がベクトルに変換されることです。畳み込みネットワークでは、ベクトルがずっと下になります。この出力ベクトルは、このレイヤーの出力ユニットの「機能マップ」と呼ばれます。

複数の出力

nw1Rnw2Rn

W=[w1w2]

a1=σ(xw1)a2=σ(xw2)
a=[a1a2]=σ(xW)

w1w2a1=[a11a21amn+11]a2=[a12a22amn+12]A=[a1a2]

A=σ(XW)
XW

W

うまくいけば、それが役立つことです!


1

畳み込み層は、完全に接続されたネットワークの厳密なサブセット、つまり行列乗算です。フォワードパスの畳み込み層は、実際には行列乗算と同等です。

  • 一部の重みは同点/共有されています
  • いくつかの重みはゼロです

バックワードパスでは、どのウェイトがフォワードパスでどれだけ寄与しているかに応じて、ウェイトが更新されます。すなわち、ゼロだった重みはまだゼロです。複数の出力にわたって結び付けられた重みは、それらすべての出力から勾配を受け取ります(勾配は合計され、その重みの最終的な勾配更新が生成されます)。


0

いいえ、それは動作するはずの方法ではありません。畳み込み演算により、入力が常に小さくなり(サイズが1より大きいフィルターの場合)、例のように大きくなることはありません。

15+26+37=38


N+n1Nn+1

そのWebapgeで使用される畳み込みは、数学的畳み込みの定義ではありません。
チャーリーパーカー

1
nnn1

1
私はそれを調べたので、今では理にかなっていると思います。ただし、1つの小さな間違いがあります。入力は常に小さくなるとは限りません。現在、CNNでもさまざまな種類の畳み込みを認識しています。ヨシュアベンジョの本によると、3種類の畳み込み(完全、有効、同じ)iro.umontreal.ca/ 〜bengioy / dlbook。私はそれらの詳細を理解していませんが、少なくとも私はそれらを知っています!フェルボに感謝します。ビジョンコミュニティは、畳み込みという言葉を使用してはなりません。とりあえずありがとう。
チャーリーパーカー

1
MATLABで@CharlieParker関数convは「フル」に(完全に有効な、同じ)「形状」の同じ3種類、Matlabのちょうどデフォルトを持っている-のドキュメントを参照してくださいmathworks.com/help/matlab/ref/conv.html。カーネルを反転させない畳み込みは相互相関xcorr(x, y) = conv(x, fliplr(y))です。NNコミュニティは、実際に相互相関を行っているときに畳み込みを言う傾向がありますが、かなり似ています。
lmjohns3
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.