シャムニューラルネットワークで逆伝播はどのように機能しますか?


13

署名の認識のためにYann LeCunと彼の同僚によって1994年に導入されたシャムニューラルネットワークのアーキテクチャを研究しています(シャム時間遅延ニューラルネットワークを使用した署名検証」.pdf、NIPS 1994)。

このアーキテクチャの一般的な考え方は理解しましたが、この場合のバックプロパゲーションの仕組みは本当に理解できません。ニューラルネットワークのターゲット値が何であるか理解できません。バックプロパゲーションで各ニューロンの重みを適切に設定できます。

Chen Liu(トロント大学2013)による「表現を学習するための確率的シャムネットワーク」からの画像。

このアーキテクチャでは、アルゴリズムが2つのニューラルネットワークの最終的な表現間のコサイン類似度を計算します、そして署名の1つが偽造物である場合は大きな角度」

逆伝播を実行するためのターゲットとしてバイナリ関数(2つのベクトル間のコサイン類似度)をどのように使用できるか、私には本当に理解できません。

シャムニューラルネットワークで逆伝播はどのように計算されますか?


紙をダウンロードできません。別のソースまたはドロップボックスソースはありますか?
Brethlosze

1
NIPSはアーカイブ:papers.nips.cc/paper/...
ヤニスAssael

回答:


11

どちらのネットワークも同様のアーキテクチャを共有していますが、セクション4 [1]で公開されているのと同じ重みに制限されています。

彼らの目標は、署名が本物である場合の出力ベクトル間のコサイン類似性を最小化し、偽造された場合にそれを最大化する機能を学習することです(これはバックプロップの目標でもありますが、実際の損失関数は示されていません)。

cos(A,B)=ABABA,B

あなたは出力層を変更すべきではありません、それは線形値を持つ訓練されたニューロンとその入力のより高いレベルの抽象化で構成されています。ネットワーク全体を一緒にトレーニングする必要があります。と両方の出力は、余弦の類似度(類似している場合は、類似していない場合はを出力する関数を介して渡されます。それをとして、入力タプルの2つのセットとすると、トレーニングする必要がある最も単純な損失関数の例は次のようになります。O1O2cos(O1,O2)10XForged,XGenuine

L=(xA,xB)XForgedcos(xA,xB)(xC,xD)XGenuinecos(xC,xD)

ネットワークをトレーニングした後、2つのシグネチャを入力し、2つの出力がそれらを関数に渡して、それらの類似性を確認します。cos(O1,O2)

最後に、ネットワークの重みを同一に保つには、いくつかの方法があります(そして、それらはリカレントニューラルネットワークでも使用されます)。一般的なアプローチは、勾配降下法の更新ステップを実行する前に、2つのネットワークの勾配を平均化することです。

[1] http://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf


コサインの類似性を最小限に抑えることが目標であることはわかっていますが、ニューラルネットワークの出力層に何を挿入すればよいか理解できません。ニューラルネットワークを作成するとき、ターゲットを最後の出力レイヤーに配置します。それらが価値であるならば、それは大丈夫です。しかし、ターゲットが関数の場合、埋める値はどこにありますか?ありがとう
DavideChicco.it

回答を更新しました。出力レイヤーは、コサイン類似度関数に出力する通常のレイヤーになります。コサイン類似度関数に接続された2つのネットワークは、損失基準に対して一緒にトレーニングする必要があります。最後に、この場合に発生する可能性のある最も単純な損失を提案しました。
Yannis Assael

1
ありがとう。私は私の問題に気付いたと思います。それは、このニューラルネットワークアーキテクチャをTorch7に実装することです。ここでは、トレーニングとテストの前に、ニューラルネットワークの構築中に、入力データセットの値や出力ターゲットレイヤーの値など、多くのことを指定する必要があります。以前は、出力ターゲットレイヤーの値(たとえば、true / falseラベル、または[0、1]間隔の値)が常に固定されている監視対象の問題に対処しました。ただし、今回は異なります。出力層は、トレーニング中に計算される2つの値に依存する関数です。これは正しいです?
DavideChicco.it 2015年

まさに今回は、バイナリではなく出力層に線形値があります(つまり、ニューロンの出力だけです)。さらに、この場合、直接の出力ターゲット値はありませんが、最適化する損失関数があります。最後に、出力層は ニューロンの(ユニット数 はモデルアーキテクチャによって定義され、論文で参照されています)。選択した活性化関数(tanh、S字型など)に依存するニューロンは、それぞれバイナリではなく線形の活性化[-1,1]または[0,1]を持っています。noutputnoutput
Yannis Assael、2015年

@iassaelに感謝します。これをTorch7に実装する方法について何か考えがありますか?
DavideChicco.it 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.