3
畳み込みニューラルネットワークは、行列乗算の代わりに畳み込みをどのように正確に使用しますか?
ディープラーニングに関するヨシュアベンジオの本を読んでいたところ、224ページに次のように書かれています。 畳み込みネットワークは、少なくとも1つの層で一般的な行列乗算の代わりに畳み込みを使用する単純なニューラルネットワークです。 しかし、数学的に正確な意味で「畳み込みによる行列乗算を置き換える」方法を100%確信していませんでした。 本当に関心私は(のように1次元での入力ベクトルのためにこれを定義しているx∈Rdx∈Rdx \in \mathbb{R}^d Iが画像として入力を持っており、2Dでの畳み込みを回避しようとしませんので、)。 たとえば、「通常の」ニューラルネットワークでは、Andrew Ngのメモのように、操作とフィードワードパターンを簡潔に表現できます。 W(l)a(l)=z(l+1)W(l)a(l)=z(l+1) W^{(l)} a^{(l)} = z^{(l+1)} f(z(l+1))=a(l+1)f(z(l+1))=a(l+1) f(z^{(l+1)}) = a^{(l+1)} ここで、z(l)z(l)z^{(l)}は、非線形性を通過する前に計算されたベクトルfffです。非線形性は、ベクトル peroエントリに作用しz(l)z(l)z^{(l)}、a(l+1)a(l+1)a^{(l+1)}は、問題のレイヤーの非表示ユニットの出力/アクティブ化です。 行列の乗算は明確に定義されているため、この計算は明らかですが、行列の乗算を畳み込みに置き換えるだけでは不明確に思えます。すなわち W(l)∗a(l)=z(l+1)W(l)∗a(l)=z(l+1) W^{(l)} * a^{(l)} = z^{(l+1)} f(z(l+1))=a(l+1)f(z(l+1))=a(l+1) f(z^{(l+1)}) = a^{(l+1)} 上記の方程式を数学的に正確に理解するようにします。 行列の乗算を畳み込みに置き換えることに関する最初の問題は、通常、 1行をドット積で識別することです。したがって、a (l )全体が重みにどのように関係し、W (l )で示される次元のベクトルz (l + 1 )にマッピングされるかが明確にわかります。ただし、畳み込みに置き換えた場合、どの行または重みが(l )のどのエントリに対応するかはわかりませんW(l)W(l)W^{(l)}a(l)a(l)a^{(l)}z(l+1)z(l+1)z^{(l+1)}W(l)W(l)W^{(l)}a(l)a(l)a^{(l)}。重みを行列として表すことは実際にはもう理にかなっていることは私にとっても明らかではありません(その点を後で説明する例を提供します) 入力と出力がすべて1Dである場合、その定義に従ってたたみ込みを計算し、特異点を通過させますか? たとえば、入力として次のベクトルがある場合: x=[1,2,3,4]x=[1,2,3,4]x = [1,2,3,4] そして、次の重みがありました(backpropで学習したのかもしれません): W=[5,6,7]W=[5,6,7]W …