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

「エラーの後方伝播」の省略形であるバックプロパゲーションは、勾配降下法などの最適化方法と組み合わせて使用​​される人工ニューラルネットワークをトレーニングする一般的な方法です。

2
ニューラルネットワークで重みを初期化する際の切り捨てられた正規分布の利点は何ですか?
フィードフォワードニューラルネットワークで接続の重みを初期化する場合、学習アルゴリズムが破れない対称性を避けるために、それらをランダムに初期化することが重要です。 さまざまな場所(TensorFlowのMNISTチュートリアルなど)で見た推奨事項は、標準偏差1を使用して切り捨てられた正規分布を使用することです。、ここでNは特定のニューロン層への入力の数です。1N−−√1N\dfrac{1}{\sqrt{N}}NNN 標準偏差の式により、バックプロパゲーションされた勾配が急速に溶解または増幅されないことが保証されます。しかし、通常の正規分布ではなく、切り捨てられた正規分布を使用している理由がわかりません。まれな異常値の重みを避けるためですか?

2
LSTMユニットを持つRNNも「勾配の爆発」に悩まされるのはなぜですか?
RNN(特にLSTMユニット)がどのように機能するかについての基本的な知識があります。LSTMユニット、つまりセルと、値の流れを制御するいくつかのゲートのアーキテクチャの図式的な考えがあります。 しかし、明らかに、従来のRNNである逆伝播を使用してトレーニング中に発生する「勾配の消失と爆発」問題をLSTMがどのように解決するかを完全に理解していないようです。私は数学を完全に理解するために論文を読む機会がありませんでした。 この回答は、LSTMユニットを備えたRNNが「勾配の消失」問題をどのように解決するかについて簡単に説明しています。数学的には、その理由は、ゼロにならない、すなわち消滅しない誘導体の存在がないようです。その結果、著者は「勾配が消えないパスが少なくとも1つある」と述べています。私見、この説明は少しあいまいです。 その間、私はニューラルネットワークを使用したシーケンスからシーケンスへの学習(Ilya Sutskever、Oriol Vinyals、Quoc V. Le)の論文を読んでおり、その論文のセクション「3.4 Training details」には、 LSTMは勾配の消失の問題に悩まされることはありませんが、勾配が爆発する可能性があります。 LSTMユニットを備えたRNNは、「消失」と「爆発勾配」の両方の問題を解決すると常に考えていましたが、明らかに、LSTMユニットを備えたRNNも「爆発勾配」に苦しんでいます。 直観的に、それはなぜですか?数学的には、その理由は何ですか?

1
バッチ正規化による逆伝播の行列形式
バッチの正規化は、ディープニューラルネットのパフォーマンスが大幅に向上したとされています。インターネット上の多くの資料は、アクティベーションごとにそれを実装する方法を示しています。私はすでに行列代数を使用してバックプロップを実装しましたが、高レベル言語で作業していることを考えてRcpp(そして、最終的にはGPUの高密度行列乗算に依存しています)、すべてをリッピングして- forループに頼るとおそらくコードが遅くなります実質的に、大きな痛みに加えて。 バッチ正規化関数である b(xp)=γ(xp−μxp)σ−1xp+βb(xp)=γ(xp−μxp)σxp−1+β b(x_p) = \gamma \left(x_p - \mu_{x_p}\right) \sigma^{-1}_{x_p} + \beta xpxpx_pは、アクティブ化される前のppp番目のノードです。 γγ\gammaとββ\betaはスカラーパラメーターです μxpμxp\mu_{x_p}とσxpσxp\sigma_{x_p}平均値とのSDいるxpxpx_p。(分散の平方根とファッジファクターが通常使用されることに注意してください-コンパクト化のために非ゼロ要素を仮定しましょう) 行列形式では、層全体のバッチの正規化は次のようになり b(X)=(γ⊗1p)⊙(X−μX)⊙σ−1X+(β⊗1p)b(X)=(γ⊗1p)⊙(X−μX)⊙σX−1+(β⊗1p) b(\mathbf{X}) = \left(\gamma\otimes\mathbf{1}_p\right)\odot \left(\mathbf{X} - \mu_{\mathbf{X}}\right) \odot\sigma^{-1}_{\mathbf{X}} + \left(\beta\otimes\mathbf{1}_p\right) ここで XX\mathbf{X}はN×pN×pN\times p 1N1N\mathbf{1}_Nは1の列ベクトルです γγ\gammaとββ\betaは、レイヤーごとの正規化パラメーターの行pppベクトルです。 μXμX\mu_{\mathbf{X}}及びσXσX\sigma_{\mathbf{X}}でありN×pN×pN \times p各列は行列、NNN -ベクトル列方向手段と標準偏差の ⊗⊗\otimesはクロネッカー積であり、⊙⊙\odotは要素単位(アダマール)積です。 無バッチの正規化及び連続結果に非常に単純な1層ニューラルネットであり y=a(XΓ1)Γ2+ϵy=a(XΓ1)Γ2+ϵ y = a\left(\mathbf{X\Gamma}_1\right)\Gamma_2 + \epsilon どこ Γ1Γ1\Gamma_1あるp1×p2p1×p2p_1 \times p_2 Γ2Γ2\Gamma_2ありp2×1p2×1p_2 \times …

2
切り捨てられた逆伝搬を使用した場合の初期パターンのキャプチャ(RNN / LSTM)
RNN / LSTMを使用してセンチメント分析を行います。これは多対1のアプローチです(このブログを参照)。ネットワークは、通常の30の最後のステップでのみ展開される、切り捨てられたバックプロパゲーション(BPTT)によってトレーニングされます。 私の場合、分類したい各テキストセクションは、展開されている30ステップ(〜100ワード)よりもはるかに長くなっています。私の知識に基づいて、BPTTは単一のテキストセクションに対して1回だけ実行されます。これは、テキストセクション全体を通過し、バイナリ分類ターゲットを計算したときに、損失関数と比較してエラーを見つけます。yyy この場合、各テキストセクションの最初の単語に関して、勾配は計算されません。RNN / LSTMはどのようにして重みを調整し、最初の数ワード内でのみ発生する特定のパターンをキャプチャすることができますか?たとえば、とマークされたすべての文は「I love this」で始まり、とマークされたすべての文は「I hate this」で始まります。RNN / LSTMは、100ステップの長いシーケンスの最後に到達したときに、最後の30ステップだけ展開された場合、どのようにキャプチャしますか?P O S I T IのVのEpos私t私vepositiveN 、E 、Ga t i v enegat私venegative

2
ミニバッチ勾配降下法は、バッチ内の各例の重みをどのように更新しますか?
10個の例をバッチで処理すると、各例の損失を合計できることは理解できますが、各例の重みの更新に関して逆伝播はどのように機能しますか? 例えば: 例1->損失= 2 例2->損失= -2 この結果、平均損失は0(E = 0)になるので、これにより各重みが更新されて収束するでしょうか。遅かれ早かれ「うまくいけば」収束するのは、単にバッチのランダム化によるものですか?また、これは処理された最後の例の最初の重みのセットの勾配のみを計算しませんか?

1
畳み込みニューラルネットワークのトレーニング
現在、畳み込みニューラルネットワークを使用して顔を認識する顔認識ソフトウェアに取り組んでいます。私の測定値に基づいて、トレーニング中の時間を節約するために、畳み込みニューラルネットワークが重みを共有していることを集めました。しかし、畳み込みニューラルネットワークで使用できるように、逆伝播をどのように適応させるのでしょうか。逆伝播では、これに似た式を使用して重みをトレーニングします。 New Weight = Old Weight + LEARNING_RATE * 1 * Output Of InputNeuron * Delta ただし、畳み込みニューラルネットワークでは重みが共有されているため、各重みは複数のニューロンで使用されるので、どのニューロンを使用するかをどのように決定しOutput of InputNeuronますか? つまり、重みは共有されているので、重みをどれだけ変更するかをどのように決定すればよいのでしょうか。

2
バックプロパゲーションを介してSVMをトレーニングする方法は?
バックプロパゲーションを使用してSVMをトレーニングする(たとえば、物事を簡単にするために線形のものにする)ことが可能かどうか疑問に思いましたか? 現在、分類器の出力を f(x;θ,b)=sgn(θ⋅x−(b+1))=sgn(g(x;θ,b))f(x;θ,b)=sgn(θ⋅x−(b+1))=sgn(g(x;θ,b)) f(\mathbf{x};\theta,b) = \text{sgn}(\theta\cdot\mathbf{x} - (b+1)) = \text{sgn}(g(\mathbf{x};\theta,b)) したがって、「後方パス」(伝播エラー)を計算して計算すると、 以降の誘導体は sgn(x)dsgn(x)∂E∂バツ= ∂E∂f(x ; θ 、b )∂f(x ; θ 、b )バツ= ∂E∂f(x ; θ 、b )∂sgn (g(x ; θ 、b ))∂g(x ; θ 、b )∂g(x ; θ 、b )∂バツ= δdsgn (z)dzθ= δ⋅ 0 ⋅ θ= 0∂E∂x=∂E∂f(x;θ,b)∂f(x;θ,b)x=∂E∂f(x;θ,b)∂sgn(g(x;θ,b))∂g(x;θ,b)∂g(x;θ,b)∂x=δdsgn(z)dzθ=δ⋅0⋅θ=0 \begin{align} \frac{\partial E}{\partial …

2
事前トレーニングとは何ですか?また、どのようにニューラルネットワークを事前トレーニングしますか?
従来のトレーニングの問題の一部を回避するために事前トレーニングが使用されていることを理解しています。オートエンコーダなどでバックプロパゲーションを使用すると、バックプロパゲーションが遅いために時間の問題が発生することを知っています。また、ローカルオプティマで動けなくなり、特定の機能を学習できない場合もあります。 私が理解していないのは、ネットワークをどのように事前トレーニングするか、具体的に事前トレーニングするために何をするかです。たとえば、制限されたボルツマンマシンのスタックが与えられた場合、このネットワークをどのように事前トレーニングしますか?

2
バックプロパゲーションアルゴリズムを使用してニューラルネットワークのエラーを導出する方法
Andrew Ngによるこのビデオから5:00頃 とはどのように導出されますか?実際、はどういう意味ですか? はyと比較して取得されますが、非表示レイヤーの出力ではそのような比較はできませんよね?δ3δ3\delta_3δ2δ2\delta_2δ3δ3\delta_3δ4δ4\delta_4

1
スキップグラムword2vecのグラデーション
スタンフォード大学NLPディープラーニングクラスの課題の問題http://cs224d.stanford.edu/assignment1/assignment1_soln 私は3aの答えを理解しようとしています。ここで、彼らは中心語のベクトルの派生物を探しています。 あなたが予測単語ベクトル与えられていると仮定し、中心ワードに対応するC skipgramのために、と単語予測がword2vecモデルで見つかったソフトマックス関数で作られています。vcvcv_{c} y^o=p(o|c)=exp(uTovc)∑Ww=1exp(uTwvc)y^o=p(o|c)=exp(uoTvc)∑w=1Wexp(uwTvc)\hat{y}^{o} = p(o | c) = \frac {exp(u_{o}^{T} v_{c})}{\sum_{w=1}^{W}exp(u_{w}^{T} v_{c})} ここで、wはw番目の単語を表し、(w = 1、。。、W)は語彙内のすべての単語の「出力」単語ベクトルです。クロスエントロピーコストがこの予測に適用され、単語oが期待される単語であると仮定します。uwuwu_w ここで、すべての出力ベクトルの行列であり、およびlet yは単語のソフトマックス予測の列ベクトルであり、そしてyはワンホットラベルでいますも列ベクトルです。U=[u1,u2,⋅⋅⋅,uW]U=[u1,u2,···,uW]U = [u_1,u_2, · · · ,u_W ]y^y^\hat{y} クロスエントロピーでありCE(y,y^)=−∑iyilog(y^i)CE(y,y^)=−∑iyilog⁡(y^i)CE(y, \hat{y}) = − \sum_iy_i\log(\hat{y}_i) だから、中心ベクトルのための勾配のための答えがある∂J∂vc=UT(y^−y).∂J∂vc=UT(y^−y).\frac{∂J}{∂v_c}= U^T(\hat{y} − y). UT(y^−y).UT(y^−y).U^T(\hat{y} − y).

2
Recurrent Neural Network(RNN)トポロジ:なぜ常に完全に接続されているのですか?
私は、リカレントニューラルネットワーク(RNN)と長期短期記憶(LSTM)について読み始めました... 取得できないことが1つあります。非表示層の各インスタンスのニューロンは、以前のself /自分自身(そしておそらく他のカップル)。 完全に接続されていることが本当に必要ですか?ストレージと実行時間を大幅に節約でき、必要がない場合はさらに「ルックバック」できるようです。 これが私の質問の図です... これは、反復する非表示レイヤー間の「シナプス」の「W ^ hh」行列に対角線(または対角線に近い)要素のみを保持してもよいかどうかを尋ねることに相当すると思います。私はこれを実行中のRNNコード(Andrew Traskの2進加算のデモに基づく)を使用して実行しました-つまり、すべての非対角項をゼロに設定しました-ひどく実行されましたが、対角線に近い項、つまりバンド線形システム3要素幅-完全に接続されたバージョンと同じように機能するように見えました。入力と非表示レイヤーのサイズを増やしたときでも...運が良かったのでしょうか? 私はLai Wan Chanの論文を見つけました。彼は、線形活性化関数の場合、ネットワークを「ヨルダンの標準形式」(つまり、対角要素と近くの要素)に縮小することが常に可能であることを示しています。しかし、そのような証明はシグモイドやその他の非線形活性化には利用できないようです。 また、「部分的に接続された」RNNへの参照は、2003年頃にほとんど姿を消しているように見え、過去数年間に読んだ処理はすべて完全に接続されていると想定しているようです。それで...それはなぜですか?

1
分類のMLPが回帰のMLPとどのように、そしてなぜ異なるのですか?異なる逆伝播と伝達関数?
2つの3レイヤーフィードフォワードマルチレイヤーパーセプトロン(MLP)を使用しています。同じ入力データ(14個の入力ニューロン)を使用して、1つの分類(true / false)と1つの回帰(trueの場合は「どのくらい」)を行います¹。これまでは、Matlabsのpatternnetとfitnetをそれぞれ遅延して使用してきました。怠惰です。何が起こっているのかを本当に理解するのに時間をかけていなかったからです。さらに、OSSライブラリ(おそらくFANN)に移行する必要があります。これには、Matlab NN Toolboxよりも多くの手動設定が必要になる可能性があります。したがって、私は何が起こっているのかをより正確に理解しようとしています。 ネットワークにより作成されたpatternnetとfitnetほぼ同一である:14個の入力ニューロン、11個の隠されたニューロン、1個の標的ニューロン(2ためのfitnet情報のが、唯一1個)。しかし、それらは完全に同一ではありません。デフォルトの違いは次のとおりです。 Matlabは、分類ネットワークにスケーリングされた共役勾配逆伝播を使用し(patternnet)、回帰ネットワークにLevenberg-Marquardt逆伝播を使用します(fitnet)。 分類ネットワークは、入力層と非表示層の間、および非表示層と出力層の間で双曲線正接シグモイド伝達関数を使用します。回帰ネットワーク(fitnet)は、入力層と非表示層の間の双曲線正接シグモイド伝達関数と、非表示層と出力層の間の純粋な線形伝達関数を使用します。 それらの違いはありますか? 分類にはどのような逆伝播関数が最適で、回帰にはどのような種類の関数が最適ですか?なぜですか? 分類にはどのような伝達関数が最適で、回帰にはどのような種類の伝達関数が最適ですか?なぜですか? ¹ 分類が「曇り」または「クラウド・フリー」(2つの相補的ターゲット)のためである、回帰は、「どのくらいの雲」(1ターゲット)を定量化するためのものです。

2
逆伝播の背後にある直感の明確化
私は、日常生活で使用している機械学習アルゴリズムの計算とメカニズムを理解するために、少し時間をかけています。 CS231nコースのバックプロパゲーションに関する文献を研究しているので、研究を続ける前にチェーンルールを正しく理解していることを確認したいと思います。 私がシグモイド関数を持っているとしましょう: σ(x)=11+e−xσ(x)=11+e−x\sigma(x) = \frac{1}{1+e^{-x}} この場合、x=w0x0+w1x1+w2x=w0x0+w1x1+w2x=w0x0+w1x1+w2 この関数を計算グラフとして書くことができます(今のところ色付きの値は無視しています): 我々は、グループシグモイドの勾配を計算するためのモジュール化ノード缶単一の導出にその入力を:w.r.t.w.r.t.w.r.t. dσ(x)dx=(1−σ(x))σ(x)dσ(x)dx=(1−σ(x))σ(x)\frac{d\sigma(x)}{d x}=(1 - \sigma(x))\sigma(x) 最初に、前方伝搬を実行して、各ユニットの出力を取得します。 w = [2,-3,-3] x = [-1, -2] # Compute the forward pass product = [w[0]*x[0]+w[1]*x[1]+w[2]] activation = 1 / 1 + math.exp(-product) 活性化の勾配を計算するには、上記の式を使用できます。 grad_product = (1 - activation) * activation 私が混乱しているかもしれない、または少なくとも直感的ではないと感じる場所では、xおよびの勾配を計算していwます: grad_x = [w[0] * activation …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.