2016-02-21 11 views
7

これらのリンクからの理論は、畳み込みネットワークの次数が、Convolutional Layer - Non-liniear Activation - Pooling Layerであることを示しています。レイヤーまたは畳み込みレイヤをプールした後のアクティベーション機能?

  1. Neural networks and deep learning (equation (125)
  2. Deep learning book (page 304, 1st paragraph)
  3. Lenet (the equation)
  4. The source in this headline

しかし、それらのサイトから最後の実装では、それは順序があることを言った:Convolutional Layer - Pooling Layer - Non-liniear Activation

  1. network3.py
  2. The sourcecode, LeNetConvPoolLayer class

私はConv2D操作の構文を探求するために、あまりにも試してみたが、何の活性化機能はありません、それが反転し、カーネルを持つ唯一のコンボリューションです。誰かが私になぜこれが起こるのかを説明するのを助けることができますか

答えて

10

まあ、最大プールと単調に増加する非線形性は通っているので、結果は同じです。だから、最初にmax-poolingでサブサンプルしてから非線形性を適用する方が良いです(Sigmoidのようにコストがかかる場合)。

conv2Dについては、ではありません。カーネルを反転します。畳み込みの定義を正確に実装しています。これは線形演算ですので、次のステップで非線形性を追加する必要があります。 theano.tensor.nnet.relu

+0

ああ、結果は同じです(今日の実験の後)、そして推測すると、コストのためにそのように実装されている可能性があります。ありがとう:) – malioboro

+0

convolutionは線形演算ではないので、Relu、Sigmoidなどの非線形性をすべて削除すると、まだ動作しています。 畳み込み演算は、パフォーマンスアジェンダの相関演算として実装され、ニューラルネットワークではフィルタが自動的に学習されるため、最終効果は畳み込みフィルタと同じになります。 Bpのそれとは別に、畳み込みの性質が考慮されます。そのため、実際には畳み込み演算が行われ、非線形の演算が行われる。 – Breeze

+4

畳み込み*は、線形演算であり、相互相関も同様である。データとフィルタの両方で線形です。 – eickenberg

4

多くの論文で人々がconv -> pooling -> non-linearityを使用しています。それは、あなたが別の注文を使用して合理的な結果を得ることができないという意味ではありません。 MAX-プーリング層とReLUの場合、順序は重要では(両方とも同じことを計算)しません:

enter image description here

あなたは、これがReLUは、要素ごとの操作であるとことを覚えておいて、そうであることを証明することができます非減少関数ので

enter image description here

同じことは、ほぼすべての活性化関数(それらのほとんどは非減少している)のために起こります。しかし、一般的なプール層(average-pooling)では機能しません。両方の注文が同じ結果を生成


はいえ、Activation(MaxPool(x))は、業務量が少ないことにより、大幅に高速それをしません。サイズがkのプール層では、k^2回のアクティブ化機能の呼び出し回数を使用します。

悲しいことに、大部分の時間が畳み込みレイヤーで使用されるため、この最適化はCNNではごくわずかです。

関連する問題