タグ付けされた質問 「backpropagation」

20
ニューラルネットワークにおけるバイアスの役割は何ですか?
勾配降下法と逆伝播アルゴリズムを知っています。私が得られないのは、バイアスを使用することが重要で、それをどのように使用するかです。 たとえば、AND関数をマッピングするときに、2つの入力と1つの出力を使用すると、正しい重みが得られませんが、3つの入力(そのうちの1つはバイアス)を使用すると、正しい重みが得られます。

1
ニューラルネットワークのトレーニングで非常に小さい値またはNaN値が表示される
Haskellでニューラルネットワークアーキテクチャを実装し、MNISTで使用しようとしています。 hmatrix線形代数のパッケージを使用しています。私のトレーニングフレームワークは、pipesパッケージを使用して構築されています。 私のコードはコンパイルされ、クラッシュしません。ただし、問題は、レイヤーサイズ(たとえば、1000)、ミニバッチサイズ、および学習率の特定の組み合わせによってNaN、計算に値が生じることです。いくつかの検査の後、非常に小さな値(次数1e-100)が最終的にアクティベーションに表示されることがわかります。しかし、それが起こらなくても、トレーニングはまだ機能しません。その損失や精度に改善はありません。 私は自分のコードをチェックして再チェックしましたが、問題の根本が何であるかについて途方に暮れています。 各レイヤーのデルタを計算するバックプロパゲーショントレーニングは次のとおりです。 backward lf n (out,tar) das = do let δout = tr (derivate lf (tar, out)) -- dE/dy deltas = scanr (\(l, a') δ -> let w = weights l in (tr a') * (w <> δ)) δout (zip (tail $ toList n) das) return (deltas) …

1
ND畳み込み逆プログラム
私の教育では、畳み込みニューラルネットワークにN次元畳み込み層を実装しようとしています。 バックプロパゲーション機能を実装したいのですが。しかし、そのための最も効率的な方法はわかりません。 現在、私は以下を使用signal.fftconvolveしています: 転送ステップでは、フィルターを畳み込み、カーネルがすべてのフィルターを介して転送します。 バックプロパゲーションステップでは、派生物(FlipAllAxes関数ですべての次元で反転)を配列(https://jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/)で畳み込みます。すべてのフィルターとそれらを合計します。私が取る出力は、各フィルターの各導関数で畳み込まれた各画像の合計です。 私は、デリバティブをどのように畳み込むかについて特に混乱しています。以下のクラスを使用してバックプロパゲートすると、ウェイトのサイズが急激に増加します。 微分と出力およびフィルターの畳み込みをプログラムする正しい方法は何ですか? 編集: この論文(FFTによるたたみ込みネットワークの高速トレーニング)によると、これは私がしたいことを正確に実行しようとするものです。 前のレイヤーの導関数は、現在のレイヤーの導関数と重みの畳み込みによって与えられます。 dL / dy_f = dL / dx * w_f ^ T 重みの導関数は、導関数と元の入力の畳み込みの区分的合計です。 dL / dy = dL / dx * x 私が知っている限りでは、これを以下に実装しました。ただし、このレイヤーを使用して作成したネットワークは、トレーニング中に激しい変動を示すため、これは意図した結果を与えていないようです。 import numpy as np from scipy import signal class ConvNDLayer: def __init__(self,channels, kernel_size, dim): self.channels = channels self.kernel_size …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.