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

勾配降下法などの最適化手法と組み合わせてニューラルネットワークをトレーニングする際によく使用される、バックプロパゲーションに関する質問に使用します。

3
最大プール層を介したバックプロップ?
これは、しばらくの間私を悩ませてきた小さな概念的な質問です。ニューラルネットワークの最大プール層をどのように逆伝播できますか? Torch 7のnnライブラリに関するこのチュートリアルを実行しているときに、最大プール層に遭遇しました。このライブラリは、深層ネットワークの各レイヤーの勾配計算とフォワードパスを抽象化します。max-poolingレイヤーの勾配計算がどのように行われるかわかりません。 入力がレイヤーニューロンに入る場合、(として定義される): zilzil{z_i}^liiilllδilδil{\delta_i}^lδil=∂E∂zilδil=∂E∂zil{\delta_i}^l = \frac{\partial E}{\partial {z_i}^l}δil=θ′(zil)∑jδjl+1wl,l+1i,jδil=θ′(zil)∑jδjl+1wi,jl,l+1 {\delta_i}^l = \theta^{'}({z_i}^l) \sum_{j} {\delta_j}^{l+1} w_{i,j}^{l,l+1} そのため、最大プール層は、通常どおり次の層のを受け取ります。ただし、最大プーリングニューロンの活性化関数は値のベクトル(最大値)を入力として受け取るため、はもう1つの数値ではなく、ベクトル(はます。さらに、最大関数である、その入力に関して微分可能ではありません。δjl+1δjl+1{\delta_j}^{l+1}δilδil{\delta_i}^{l}θ′(zjl)θ′(zjl)\theta^{'}({z_j}^l)∇θ({zjl})∇θ({zjl})\nabla \theta(\left\{{z_j}^l\right\})θθ\theta だから....それは正確にどのように機能するのですか?

3
ニューラルネットワークをトレーニングするためのオプティマイザーを選択するためのガイドライン
私はしばらくの間ニューラルネットワークを使用しています。ただし、私が常に苦労しているのは、ネットワークをトレーニングするためのオプティマイザーの選択です(backpropを使用)。私が通常行うことは、1つ(例えば、標準SGD)から始めて、それから他のものをほぼランダムに試すことです。良いオプティマイザーを見つけるためのより良い(そしてそれほどランダムではない)アプローチがあるかどうか、例えばこのリストから疑問に思っていました: SGD(勢いのあるなしにかかわらず) アダデルタ AdaGrad RMSProp アダム 特に、訓練データに何らかの性質がある場合、たとえば、それがまばらであることを考えて、他のものよりも一つを選択する理論的な正当性があるかどうかに興味があります。また、特定のドメインでは、一部のオプティマイザが他のオプティマイザよりもうまく機能することを想像します。たとえば、畳み込みネットワークとフィードフォワードネットワーク、または分類と回帰をトレーニングする場合です。 オプティマイザーの選択方法に関する戦略や直感を開発している方がいれば、それを聞いてみたいと思います。さらに、あるものを別のものよりも選択するための理論的な正当性を提供する作業があれば、それはさらに良いでしょう。

1
ディープニューラルネットワーク-ReLUによる逆伝播
ReLUで逆伝播を導き出すのに多少の困難があり、いくつかの作業を行いましたが、正しい軌道に乗っているかどうかはわかりません。 コスト関数:ここで、は実数値で、は予測値です。また、 > 0は常に仮定します。 Y X12(y− y^)212(y−y^)2\frac{1}{2}(y-\hat y)^2yyyy^y^\hat yバツバツx 1層ReLU、1番目の層の重みはw1w1w_1 dCdw1= dCdRdRdw1dCdw1=dCdRdRdw1\frac{dC}{dw_1}=\frac{dC}{dR}\frac{dR}{dw_1} dCw1= (y−R e L U(w1x ))(x )dCw1=(y−ReLうん(w1バツ))(バツ)\frac{dC}{w_1}=(y-ReLU(w_1x))(x) 2層の番目の層の重みはで、2番目の層は、1番目の層を更新したかったw2w2w_2w1w1w_1w2w2w_2 dCdw2=dCdRdRdw2dCdw2=dCdRdRdw2\frac{dC}{dw_2}=\frac{dC}{dR}\frac{dR}{dw_2} dCw2= (y− R e LU(w1∗ R e LU(w2x ))(w1x )dCw2=(y−ReLうん(w1∗ReLうん(w2バツ))(w1バツ)\frac{dC}{w_2}=(y-ReLU(w_1*ReLU(w_2x))(w_1x) 以降R e L U(w1∗ R e LU(w2x ))= w1w2バツReLうん(w1∗ReLうん(w2バツ))=w1w2バツReLU(w_1*ReLU(w_2x))=w_1w_2x 3層ReLU、1番目の層の重みは番目の層および3番目の層w3w3w_3w2w2w_2w1w1w_1 dCdw3= dCdRdRdw3dCdw3=dCdRdRdw3\frac{dC}{dw_3}=\frac{dC}{dR}\frac{dR}{dw_3} dCw3= (y− R e L U(w1* R …

2
スライディングウィンドウは、LSTMでオーバーフィッティングにつながりますか?
スライディングウィンドウアプローチでLSTMをトレーニングする場合、LSTMをオーバーフィットしますか?なぜ人々はそれをLSTMに使用しないように見えるのですか? 簡単な例として、文字のシーケンスを予測する必要があると仮定します。 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 次のミニバッチを使用してLSTMをトレーニングし続けると、悪い(またはより良い)でしょうか。 A B C D E F G H I J K L M N, backprop, erase the cell B C D …

1
CNNの逆伝播
次のCNNがあります。 サイズ5x5の入力画像から始めます 次に、2x2カーネルとストライド= 1を使用して畳み込みを適用し、サイズ4x4の機能マップを作成します。 次に、ストライド= 2の2x2最大プーリングを適用します。これにより、機能マップがサイズ2x2に縮小されます。 次に、ロジスティックシグモイドを適用します。 次に、2つのニューロンを持つ1つの完全に接続されたレイヤー。 そして出力層。 簡単にするために、フォワードパスを既に完了し、δH1= 0.25とδH2= -0.15を計算したと 仮定します。 したがって、完全なフォワードパスと部分的に完了したバックワードパスの後、ネットワークは次のようになります。 次に、非線形層(ロジスティックシグモイド)のデルタを計算します。 δ11=(0.25∗0.61+−0.15∗0.02)∗0.58∗(1−0.58)=0.0364182δ12=(0.25∗0.82+−0.15∗−0.50)∗0.57∗(1−0.57)=0.068628δ21=(0.25∗0.96+−0.15∗0.23)∗0.65∗(1−0.65)=0.04675125δ22= (0.25 ∗ − 1.00 + − 0.15 ∗ 0.17 )∗ 0.55 ∗ (1 − 0.55 )= − 0.06818625δ11=(0.25∗0.61+−0.15∗0.02)∗0.58∗(1−0.58)=0.0364182δ12=(0.25∗0.82+−0.15∗−0.50)∗0.57∗(1−0.57)=0.068628δ21=(0.25∗0.96+−0.15∗0.23)∗0.65∗(1−0.65)=0.04675125δ22=(0.25∗−1.00+−0.15∗0.17)∗0.55∗(1−0.55)=−0.06818625 \begin{align} &\delta_{11}=(0.25 * 0.61 + -0.15 * 0.02) * 0.58 * (1 - 0.58) = 0.0364182\\ …

1
最大プーリング層を介した逆伝播
この質問に対する小さなサブ質問があります。 最大プーリング層を逆伝播すると、最大として選択された前の層のニューロンがすべての勾配を取得するように勾配が戻されることを理解しています。私が100%確信していないのは、次のレイヤーの勾配がどのようにプーリングレイヤーに戻されるかです。 したがって、最初の質問は、下の画像のように、完全に接続されたレイヤーに接続されたプーリングレイヤーがあるかどうかです。 プール層のシアンの「ニューロン」の勾配を計算するとき、FC層のニューロンからのすべての勾配を合計しますか?これが正しい場合、プーリング層のすべての「ニューロン」に同じ勾配がありますか? たとえば、FC層の最初のニューロンの勾配が2で、2番目の勾配が3で、3番目の勾配が6の場合、プール層の青と紫の「ニューロン」の勾配は何ですか。なぜですか。 2番目の質問は、プーリングレイヤーが別の畳み込みレイヤーに接続されるタイミングです。勾配を計算する方法は?以下の例を参照してください。 プール層の最上部の右端の「ニューロン」(緑色の輪郭線)については、次のconv層の紫色のニューロンの勾配を取得し、それを元に戻します。 緑色の塗りつぶしはどうですか?チェーンルールのため、次のレイヤーのニューロンの最初の列を乗算する必要がありますか?または、それらを追加する必要がありますか? 方程式の束を投稿しないでください、そして、方程式に頭を包み込もうとしているので、私の答えがそこにあると言ってください、そして、私はまだそれを完全に理解していないので、私はこの質問を簡単に尋ねています仕方。

3
逆伝播におけるバイアス項の勾配
ニューラルネットワークをゼロから実装して、その背後にある数学を理解しようとしました。私の問題は、バイアスに関する導関数を取るときの逆伝播に完全に関連しており、逆伝播で使用されるすべての方程式を導き出しました。これで、バイアスに関する微分を除いて、すべての方程式がニューラルネットワークのコードと一致しています。 z1=x.dot(theta1)+b1 h1=1/(1+np.exp(-z1)) z2=h1.dot(theta2)+b2 h2=1/(1+np.exp(-z2)) dh2=h2-y #back prop dz2=dh2*(1-dh2) H1=np.transpose(h1) dw2=np.dot(H1,dz2) db2=np.sum(dz2,axis=0,keepdims=True) オンラインでコードを検索しましたが、なぜ行列を加算してdb2=np.sum(dz2,axis=0,keepdims=True)からスカラーが元のバイアスから減算されるのか、行列全体が減算されないのはなぜですか。誰かがその背後にある直感を与えるのを手伝ってくれる?バイアスに関して損失の偏微分をとるz2=h1.dot(theta2)+b2と、h1とthetaが0になり、b2が1になるため、dz2である上部勾配のみが得られ ます。したがって、上部の項は残ります。 b2+=-alpha*db2

2
たたみ込みネットワークのバイアスに関する質問
CNNに必要な重みとバイアスの数を把握しようとしています。 (3、32、32)-imageがあり、(32、5、5)-filterを適用したいとします。各フィーチャマップには5x5の重みがあるので、3 x(5x5)x 32のパラメーターが必要です。次に、バイアスを追加する必要があります。(3 x(5x5)+ 1)x 32パラメータしかないので、バイアスはすべての色(RGB)で同じですか? これは正しいです?異なる重みを使用している間、各画像の深度全体にわたって同じバイアス(この場合は3)を維持しますか?何故ですか?

2
バッチを実行するとき、バックプロパゲーションはMax Poolingレイヤーを通じてどのように機能しますか?
学習に100サンプルのバッチサイズを使用していると仮定します。 したがって、すべてのバッチで、すべてのニューロン(およびバイアスなど)の重みは、学習率のマイナス* 100サンプルを使用して見つけた平均エラー値*に関するエラー関数の導関数を追加することによって更新されます。更新されている現在のニューロンの重み。 ここで、最大プールレイヤーを使用する場合、このレイヤーの微分をどのように計算できますか?フィードフォワードするすべてのサンプルで、異なるピクセル(たとえば、)が最大値として選択されているため、異なるパスが選択されるたびに100個を超えるサンプルをバックプロパゲートする場合、どうすればよいですか?私が心に留めている解決策は、最大値として選択されたすべてのピクセルを覚えてから、おそらくすべての最大ピクセルで微分を分割することです。これは何が行われているのですか?

3

2
合成グラデーション-実用的なメリットは何ですか?
RNNで合成グラデーションを使用する2つの動機を見ることができます。 予測された勾配で各レイヤーを即座に修正することにより、トレーニングをスピードアップします より長いシーケンスを学習できるようにするため どちらにも問題があります。注意してください、私は合成グラデーションが本当に好きで、それらを実装したいと思います。しかし、私の考えの軌跡がどこで間違っているかを理解する必要があります。 ここで、ポイント1とポイント2が効果がないように見える理由を示します。実際に効果がある場合は、修正する必要があります。 ポイント1: Synthetic Gradientsは、fwdプロップの間でも、別の「ミニヘルパーネットワーク」(DNIと呼ばれる)を使用して、現在のレイヤーに上からどの勾配が到達するかを通知できることを示しています。 ただし、このような勾配は、後でいくつかの操作を実行するだけです。DNIをトレーニングする必要があることを除いて、DNIを使用しない場合と同じ量のBackpropを実行する必要があります。 この非同期性を追加しても、デバイスで同じ数の計算を実行する必要があるため、従来の「ロックされた」フルfwdprop->フルバックプロップシーケンスよりもレイヤーのトレーニングが速くならないはずです。計算が時間内にスライドするだけです これにより、1)は機能しないと思います。各レイヤーの間にSGを追加するだけでは、トレーニング速度は向上しません。 ポイント2: では、最後のレイヤーにのみSGを追加して、「将来からの勾配」を予測し、それがforward propの最後のタイムステップである場合に限ってみましょう。 このようにして、LSTMは予測を停止し、バックプロパゲートする必要がありますが、受信した将来の勾配を予測できます(最後のタイムステップにあるDNIの助けを借りて)。 いくつかのトレーニングセッション(セッションA、セッションB)を検討してください。 fwdprop timestep_1A ---> fwdprop timestep_2A ---> fwdprop timestep_3A ---->停止してbkprop! fwdprop timestep_1B ---> fwdprop timestep_2B ---> fwdprop timestep_3B ---->停止してbkprop! ネットワークに2つの半分の6つのタイムステップを「解析」するように強制しました。3つのタイムステップ、残りの3つのタイムステップです。 「セッションA」の最後にDNIがあり、「セッションBの最初から(将来から)どのような勾配になるか」を予測していることに注意してください。そのため、timestep_3Aには「timestep_1Bから得られたであろう」勾配が備わっているため、A中に行われた修正の信頼性が高くなります。 しかし、ちょっと!これらの予測された「合成勾配」はとにかく非常に小さい(無視できる)-結局、それが新しいbackprop セッションBを開始する理由です。それらが小さすぎないのではなく、6つのタイムステップすべてを単一の長いbkprop "セッションA"で解析するだけです。 したがって、ポイント2)もメリットをもたらすべきではないと思います。fwdpropの最後のタイムステップにSGを追加すると、長いシーケンスを効果的にトレーニングできますが、勾配の消失はどこにも行きませんでした。 OK。たぶん、別々のマシンで"セッションA"、"セッションB" などをトレーニングすることの利点を得ることができますか?しかし、これは通常のミニバッチを並行して単にトレーニングすることとどのように異なるのでしょうか?覚えておいてください、ポイント2で言及されました:物事はとにかく消えているsessionA予測勾配によって悪化します 質問:上記の2つの点は有益ではないようですので、合成グラデーションの利点を理解してください。

1
バックプロップでソフトマックスの勾配を適用する方法
私は最近、MNISTの10桁分類のモデルを学習する必要がある宿題をしました。HWにはいくつかの足場コードがあり、私はこのコードのコンテキストで作業することになっていた。 私の宿題は機能します/テストに合格しましたが、今はすべてをゼロから実行しようとしています(自分のnnフレームワーク、ハードウェアスキャフォールディングコードなし)。バックプロップステップでソフトマックスの壮大さを適用して立ち往生しています。足場コードは正しくない可能性があります。 ハードウェアでは、nnの最後のノードとして、「softmax loss」と呼ばれるものを使用します。つまり、何らかの理由で、ソフトマックスをアクティベーション関数として扱い、クロスエントロピーを個別の損失関数として扱うのではなく、クロスエントロピー損失と一緒にソフトマックスのアクティベーションに参加することにしました。 hw loss funcは次のようになります(最低限私が編集します)。 class SoftmaxLoss: """ A batched softmax loss, used for classification problems. input[0] (the prediction) = np.array of dims batch_size x 10 input[1] (the truth) = np.array of dims batch_size x 10 """ @staticmethod def softmax(input): exp = np.exp(input - np.max(input, axis=1, keepdims=True)) return …

3
XOR関数のニューラルネットの作成
1層ネットワークは線形分離可能ではないため、xor関数を予測できないことはよく知られている事実です。xorを予測するために、ロジスティックシグモイド関数とbackpropを使用して、2層ネットワークを作成しようとしました。私のネットワークには、入力層に2つのニューロン(および1つのバイアス)、非表示層に2つのニューロンと1つのバイアス、および1つの出力ニューロンがあります。驚いたことに、これは収束しません。新しいレイヤーを追加すると、入力(2 + 1)、hidden1(2 + 1)、hidden2(2 + 1)、出力の3レイヤーネットワークが機能します。また、2層ネットワークを維持しながら、非表示層のサイズを4ニューロン+ 1バイアスに増やした場合も、収束します。3つ以下の非表示ニューロンを持つ2層ネットワークがxor関数をモデル化できない理由はありますか?

1
テンソル形式で「自然に」逆伝播方程式を導出する
画像は、フィードフォワードネットワークのどこかにある典型的なレイヤーを示しています。 a(k)iai(k)a_i^{(k)} のアクティベーション値です ithithi^{th} ニューロン kトンの時間kthk^{th} 層。 W(k )私はjWij(k)W_{ij}^{(k)} 接続している重量は 私トンの時間私thi^{th} ニューロン kトンの時間kthk^{th} レイヤーを jトンの時間jthj^{th} ニューロン (k + 1)トンの時間(k+1)th(k+1)^{th} 層。 z(k+ 1 )jzj(k+1)z_j^{(k+1)} は、 jトンの時間jthj^{th} ニューロン (k + 1)トンの時間(k+1)th(k+1)^{th}層。ロジスティック関数で使用される場合、これは「ロジット」と呼ばれることがあります。 フィードフォワードの方程式は次のとおりです。 z(k + 1 )j=Σ私W(k )私はja(k )私zj(k+1)=Σ私W私j(k)a私(k)z_j^{(k+1)} = \sum_i W_{ij}^{(k)}a_i^{(k)} a(k + 1 )j= f(z(k + 1 )j)aj(k+1)=f(zj(k+1))a_j^{(k+1)} = f(z_j^{(k+1)}) 簡単にするために、バイアスは1のダミーアクティベーションとして含まれ、暗黙的に反復で使用されます。 …

1
逆伝播:2次の方法では、ReLUの導関数は0になりますか?トレーニングへの影響は?
ReLUは、として定義されるアクティブ化関数です。ここで、a = Wx + bです。h=max(0,a)h=max(0,a)h = \max(0, a)a=Wx+ba=Wx+ba = Wx + b 通常、SGD、Adam、RMSprop、Adadelta、Adagradなどの1次の方法でニューラルネットワークをトレーニングします。1次メソッドの逆伝播には、1次導関数が必要です。したがって、xxxは1に導出され111ます。 しかし、2次法を使用する場合、ReLUの導関数は000ますか?なぜならxxxに誘導される111と再び導かれる000。エラーでしょうか?たとえば、ニュートンの方法では、0で除算します000。(まだヘッセなしの最適化を理解していません。IIRC、それは実際のヘッセの代わりに近似のヘッセを使用することの問題です)。 このh '' = 0の影響は何h′′=0h″=0h''=0ですか?二次法のReLUでニューラルネットワークをトレーニングできますか?それとも、トレーニング不可/エラー(nan / infinity)でしょうか? 明確にするために、これはf(x)としてのReLU f(x)f(x)f(x)です。 f(x)=f(x)=f(x) = 0xforforx&lt;0x≥00forx&lt;0xforx≥0\begin{array}{rcl} 0 & \mbox{for} & x < 0\\ x & \mbox{for} & x \ge 0\end{array} f′(x)=f′(x)=f'(x) = 01forforx&lt;0x≥00forx&lt;01forx≥0\begin{array}{rcl} 0 & \mbox{for} & x < 0\\ 1 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.