問題タブ [backpropagation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - ニューラル ネットワークのバックプロパゲーション - Python
Python でニューラル ネットワークを実行するプログラムを作成しています。バックプロパゲーション アルゴリズムを設定しようとしています。基本的な考え方は、5,000 のトレーニング例を調べてエラーを収集し、シータをどの方向に移動する必要があるかを見つけてから、その方向に移動するというものです。トレーニングの例があります。次に、1 つの非表示レイヤーを使用し、次に出力レイヤーを使用します。ただし、移動する必要があるため、シータを正しく移動していないため、ここで勾配/微分/エラーが間違っています。今日はこれに 8 時間費やしましたが、何が間違っているのかわかりません。ご協力いただきありがとうございます!!
c# - バックプロパゲーション アルゴリズムに関する質問
バックプロパゲーションについていくつか質問があります。私は、ニューラル ネットワーク理論の背後にある基礎を学ぼうとしており、単純な XOR 分類器を構築するために、小さく始めたいと考えていました。私は多くの記事を読み、複数の教科書をざっと読みましたが、XOR のパターンを教えることはできないようです。
まず、バックプロパゲーションの学習モデルがよくわかりません。これは、ネットワークをトレーニングしようとしている方法を表す擬似コードです。[ネットワークが適切にセットアップされていると仮定します (つまり、複数の入力が非表示層に接続され、出力層に接続され、すべてが適切に配線されている)]。
これはおそらく十分ではないことを認識しており、実装のどの部分についても喜んで説明します. 上記のアルゴリズムを使用すると、私のニューラル ネットワークはトレーニングされます。しかし、適切ではありません。出力は常に
[1,1] [0,0] を同じ値になるようにトレーニングすることはできません。
提案、追加のリソース、記事、ブログなどがあれば、このトピックについてもっと知りたいと思っています。ご支援いただきありがとうございます。
neural-network - バックプロパゲーション学習が収束しない
分類の問題には、3 層のニューラル ネットワークを使用します。1) ~2k ニューロン 2) ~2k ニューロン 3) 20 ニューロン。私のトレーニング セットは 2 つの例で構成されており、各例のほとんどの入力はゼロです。何らかの理由で、バックプロパゲーション トレーニングの後、ネットワークは両方の例で実質的に同じ出力を返します (これは、例の 1 つだけに有効であるか、例の 1 つに 1 がある出力に対して 1.0 を持ちます)。最初のエポックの後にこの状態になり、学習率が最小の double vale であっても、その後はあまり変化しません。アクティベーション関数としてシグモイドを使用します。私のコードに何か問題があるのではないかと思ったので、AForge オープン ソース ライブラリを使用しましたが、同じ問題が発生しているようです。ここで何が問題になる可能性がありますか?
解決策: 層を 1 つ削除し、隠れ層のニューロンの数を 800 に減らしました。
algorithm - バックプロパゲーションのアルゴリズムを誰か説明してくれませんか?
私は最近、Coursera で Ng 教授の機械学習コースを修了しました。コース全体は気に入りましたが、ニューラル ネットワークをトレーニングするためのバックプロパゲーション アルゴリズムを本当に理解することはできませんでした。
それを理解する上での私の問題は、完全に接続されたフィードフォワードネットワークのベクトル化された実装のみを教えていることです。私の線形代数はさび付いているので、誰かが汎用アルゴリズムを教えてくれたらもっと理解しやすいと思います。おそらくノード指向の方法で。
問題を簡単に表現してみますが、backprop がどのように機能するかを誤解している可能性があるため、これが意味をなさない場合は無視してください。
任意のノード N について、入力の重み/値、出力の重み/値、および N が出力するすべてのノードのエラー/コストが与えられた場合、N の「コスト」を計算し、これを使用して入力を更新するにはどうすればよいですか?重み?
c++ - ニューラル ネットワークは sin x を学習しますが、cos x は学習しません
私は独自のニューラルネットを構築しましたが、奇妙な問題があります。
ネットは非常に単純なフィードフォワード 1-N-1 ネットであり、逆伝播学習が行われます。シグモイドは活性化関数として使用されます。
私のトレーニング セットは、[-PI, PI] と [0,1] スケーリングされた正弦値の間のランダムな値で生成されます (これは、「シグモイド ネット」が [0,1] とスケーリングされていない正弦関数の間の値のみを生成するためです)。 [-1,1] の間の値を生成します)。
そのトレーニング セットと、学習率 0.5 でネットを 1-10-1 に設定すると、すべてがうまく機能し、ネットは必要に応じて sin 関数を学習します。しかし.. COSINE 関数に対してまったく同じ方法ですべてを実行すると、ネットはそれを学習しません。隠れ層のサイズや学習率の設定はありません。
何か案は?何か不足していますか?
編集:私の問題は、このアプレットで見られるものと似ているようです。最初に重みに対して「より簡単な」何かが教えられない限り、正弦関数を学習しないようです(2次関数の1400サイクルなど)。アプレットの他のすべての設定は、最初のままにしておくことができます。したがって、正弦または余弦の場合、解を見つける前に、重みを少なくとも部分的に正しい方向にブーストする必要があるようです。どうしてこれなの?
java - Backpropagation ニューラル ネットワークの Weight と Bias の値を別のプログラミング言語 (Java) に正しくエクスポートする方法
Matlab を使用してバックプロパゲーション ニューラル ネットワークを作成しました。私はMatlabを使用してXORゲートを実装しようとし、その重みとバイアスを取得してJavaでニューラルネットワークを作成しました。ネットワークは、2 つの入力ニューロン、それぞれ 2 つのニューロンと 1 つの出力ニューロンを使用する 2 つの隠れ層で構成されます。列車ネットワークの後、次の重みとバイアスを得ました:
入力が次の結果を得たので、1と1を使用してシミュレートします。
次に、このニューラル ネットワークをカウントするための簡単な Java コードを作成しようとしました。私のコード:
しかし、次のような結果が得られました。
私の質問は、重みとバイアスの値を matlab から Java にエクスポートする際にエラーまたは間違いがありますか? たぶん私は私のJavaプログラムで間違いを犯しましたか? どうもありがとうございました..
backpropagation - ショートカット接続を使用したニューラル ネットワークの逆伝播アルゴリズム
現在、F# で多層パーセプトロンを実装しており、標準の逆伝播アルゴリズムを実装する予定ですが、ショートカット接続を処理するためにアルゴリズムをどのように変更する必要があるか疑問に思っています。ショートカット接続とは、レイヤーをスキップする接続、たとえば、入力レイヤーを直接出力レイヤーに接続する接続を意味します。
ありがとう!
machine-learning - 多層パーセプトロンの活性化関数
関数を使用して単純なバックプロパゲーション ニューラル ネットワークをトレーニングしようとしましたxor
。tanh(x)
をアクティベーション関数として使用すると、導関数を使用して1-tanh(x)^2
、約 1000 回の反復後に正しい結果が得られます。ただし、g(x) = 1/(1+e^(-x))
導関数を使用してアクティベーション関数として使用する場合g(x)*(1-g(x))
、正しい結果を得るには約 50000 回の反復が必要です。その理由は何ですか?
ありがとうございました。
neural-network - ニューラル ネットワークの出力値が目的の値に到達しない
バックプロパゲーションも備えたニューラルネットワークを作成しました。入力層に5つのノード、非表示層に6つのノード、出力層に1つのノードがあり、ランダムな重みがありsigmoid
、活性化関数として使用します。
入力用のデータセットが2つあります。
例えば :
今、私は5000回の反復でネットワークをトレーニングします。エラーが発生した場合、反復は停止します
値 ( desired - calculated output value
) が 0.001 以下です。
各入力セットの最初の反復の出力値は約 60 であり、反復ごとに減少します。
ここでの問題は、入力の 2 番目のセット (目的の値が 0.03) が計算された出力値 3.001 のために反復を停止させるが、最初の入力のセットが目的の値 (つまり 0.02) に到達しなかったことです。その出力は約 0.03 です。
編集済み:
アルゴリズムを使用LMS
し、エラーしきい値 0.00001 を変更して正しいエラー値を見つけましたが、0.03 と 0.02 の両方の目的の値の最後の反復の出力値は 0.023 と 0.027 の間にあり、まだ正しくありません。