問題タブ [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.
classification - 多層パーセプトロン-バックプロパゲーション
データを3つのクラスに分類する多層パーセプトロンをプログラムする学校のプロジェクトがあります。http://home.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.htmlからバックプロパゲーションアルゴリズムを実装しました。アルゴリズムがこの説明されたステップを実際に満たし、満たされているかどうかを(バックプロパゲーションの各ステップを手動で計算することによって)チェックしました。
分類には、ワンホットコードを使用しており、2つの値を持つベクトルと3つの出力ニューロン(それぞれが個々のクラス用)で構成される入力があります。各エポックの後、入力データをシャッフルします。分類にはシグモイド関数を使用しています。ソフトマックスも実装しようとしましたが、微分ソフトマックスがどのように見えるかわかりません。重みの調整に微分ソフトマックスが必要ですか?ネットワークが入力を正常に分類したかどうかを確認するために、出力ニューロンからの最大出力を持つ出力ニューロンの位置が、1に等しい現在の入力ワンホットコードベクトルからの位置に対応するかどうかを比較しています。
しかし、私の実装はこのニューラルネットワークをトレーニングしていません。私はこれに取り組んでいて、数日間デバッグし、インターネットを調べて自分が間違っていることを見つけていますが、答えが見つかりません。どこを間違えているのか本当にわかりません。私のニューラルネットワークは、10個の入力があると正常にトレーニングされますが、100個、200個、400個、800個の入力があると、分類された入力が半分になると循環を開始します。私が言ったように、私のバックプロパゲーションアルゴリズムは良いです。入力ファイルを含むVisualStudio2010のC++プロジェクト全体は次のとおりです:http ://www.st.fmph.uniba.sk/~vajda10/mlp.zip
構造:
グローバル変数:
これがバックプロパゲーションアルゴリズムの私のコードです:
誰かが私が間違っていることを教えてもらえますか、または私が間違いを探す必要がある場所についてアドバイスをくれますか?私はすべての重要なことを話したと思います。どうか、私の悪い英語を許してください。
neural-network - バックプロパゲーションニューラルネットワークの選択セットの使用を開始するのはいつですか?
ANNの初心者:
金の価格を予測するために、バックプロパゲーションニューラルネットワークを実装しています。データをトレーニングデータ、選択データ、テストデータに分割する必要があることを知っています。
ただし、これらのデータセットの使用方法がわかりません。最初はトレーニングセットを使用してデータネットワークをトレーニングしていましたが、トレーニング後、テストセットからネットワークへの入力を取得し、出力を比較しています。
私がこれを正しく行っているかどうかはわかりませんが、選択セットは入っていましたか?
前もって感謝します!
machine-learning - 評価関数としての Tic Tac Toe ニューラル ネットワーク
多層パーセプトロンとバックプロパゲーションを使用して、三目並べの AI をプログラムしようとしています。私の考えでは、ニューラル ネットワークをトレーニングしてボードの状態を正確に評価できるようにしようと考えていましたが、問題は、何千ものゲームを分析した後でも、ネットワークが正確な評価を出力しないことです。
27 個の入力ニューロンを使用しています。3x3 ボードの各正方形は、正方形に x、o、または空白があるかどうかに応じて、0 または 1 の値を受け取る 3 つの入力ニューロンに関連付けられています。これらの 27 個の入力ニューロンは、10 個の隠れニューロンに信号を送信します (10 個を任意に選択しましたが、5 個と 15 個も試しました)。
トレーニングのために、現在の評価関数を使用して自分自身と対戦し、各側に最適な動きと見なされるものを選択することで、プログラムに一連のゲームを生成させました。ゲームを生成した後、NN は、特定のボード状態の正しい出力を (評価関数を使用して) ボード状態の値として取得することにより、(ボード状態と正しい出力で構成される) トレーニング例をコンパイルします。ゲームシーケンス。これは、ジェラルド・テサウロが TD-Gammon をプログラミングするときに行ったことだと思いますが、記事を誤解した可能性があります。(注: 重みを更新するための特定のメカニズムについては、この投稿の最後に記載しています)。
学習率のさまざまな値とさまざまな数の隠れニューロンを試しましたが、何も機能していないようです。何時間も「学習」した後でも、戦略に目に見える改善は見られず、評価関数はどこにも正確にはほど遠い.
三目並べをプログラムするもっと簡単な方法があることを認識していますが、後で接続 4 に適用できるように、多層パーセプトロンを使用して実行したいと考えています。これは可能ですか?妥当な量の隠れニューロンを備えた三目並べボードの信頼できる評価関数はないと考え始めています。
宿題のために提出するための簡単なコードを探しているわけではないことを保証します。私はしばらくうまくいっていませんでしたが、何が間違っているのか知りたいだけです。すべてのアドバイスをいただければ幸いです。
これは、NN に使用した特定のメカニズムです。
27 個の入力ニューロンのそれぞれは、微分可能なシグモイド関数 1/(1+e^(-x)) を通過する 0 または 1 を受け取ります。各入力ニューロン i は、この出力 (i.output) に何らかの重み (i.weights[h]) を掛けて各隠れニューロン h に送信します。これらの値の合計は、隠れニューロン h (h.input) によって入力として取得され、この入力はシグモイドを通過して、各隠れニューロン (h.output) の出力を形成します。すべての非表示ニューロンの (h.output * h.weight) の合計を lastInput とします。ボードの出力値は sigmoid(lastInput) です。
学習率をアルファ、エラーを正しい出力から実際の出力を差し引いたものとします。また、dSigmoid(x) を点 x でのシグモイドの微分に等しくします。
各非表示ニューロン h の重みは、値 (alpha*err*dSigmoid(lastInput)*h.output) によって増分され、指定された入力ニューロン i から指定された非表示ニューロン h への信号の重みは、値によって増分されます。 : (alpha*err*dSigmoid(lastInput)*h.weight*dSigmoid(h.input)*i.output)。
バックプロパゲーションに関するこの講義からこれらの式を取得しました: http://www.youtube.com/watch?v=UnWL2w7Fuo8 .
c++ - 動的配列の並列化
これは、ニューラル ネットワークの逆伝播アルゴリズム コードの一部です。
この場合、for( pt=0; pt< N_PT_pair; pt++) ループを並列化したいのですが、 for(epoch=0; epoch< MaxEpoch; epoch++) は並列化できません。
これらは、配列の割り当てと割り当て解除のためのコードです
コードの並列化を手伝ってもらえますか?
neural-network - ニューラルネットワークの学習率とバッチの重みの更新
私はJavaでニューラルネットワークをプログラムし、現在バックプロパゲーションアルゴリズムに取り組んでいます。
重みのバッチ更新により、オンラインの重み更新ではなく、より安定した勾配検索が行われることを読みました。
x = [0..99]
テストとして、となどの100ポイントの時系列関数を作成しましたy = f(x)
。テスト用に、1つの入力と1つの出力、および10個のニューロンを持つ2つの隠れ層を持つニューラルネットワークを作成しました。私が苦労しているのは、この問題に取り組むときのバックプロパゲーションアルゴリズムの学習率です。
100個の入力ポイントがあるので、各ノードの重みの変化を計算すると、dw_{ij}
実際には合計になります。
この場合はどこp = 100
に。
これで、重みの更新が非常に大きくなるため、エラーがE
跳ね返り、最小値を見つけるのが困難になります。私が適切な行動をとる唯一の方法は、学習率y
をのようなものに設定したときでした0.7 / p^2
。
サンプル量に基づいて学習率を設定するための一般的なルールはありますか?
artificial-intelligence - バックプロパゲーションでシグモイド関数を使用して誤差を計算します
バックプロパゲーションについて簡単な質問があります。私は以下を見ています:
http://www4.rgu.ac.uk/files/chapter3%20-%20bp.pdf
この論文では、ニューロンの誤差を次のように計算すると言います。
エラー=出力(i)*(1-出力(i))*(ターゲット(i)-出力(i))
理解できない方程式の部分を太字で示しています。この論文では、シグモイド関数のためにOutput(i)*(1- Output(i))項が必要であると書かれていますが、なぜこれが必要なのかはまだわかりません。
使用することの何が問題になりますか
?
エラーはニューロンの活性化/伝達関数に関係なく機能しますか?
neural-network - シグモイド関数がニューラルネットで機能するのはなぜですか?
ニューラルネットワークのプログラミングを始めたばかりです。私は現在、バックプロパゲーション(BP)ニューラルネットがどのように機能するかを理解することに取り組んでいます。BPネットでトレーニングするためのアルゴリズムは非常に単純ですが、アルゴリズムが機能する理由についてのテキストを見つけることができませんでした。より具体的には、ニューラルネットでシグモイド関数を使用することを正当化するための数学的推論と、それらがスローされるほとんどすべてのデータ分布を模倣する理由を探しています。
ありがとう!
java - ニューラル ネットワーク バックプロパゲーションで重みが正しく計算されない
現在、バックプロパゲーション アルゴリズムに問題があります。私はそれを実装して、顔の方向(左、右、下、まっすぐ)を認識するために使用しようとしています。基本的に、N 個の画像があり、ピクセルを読み取り、その値 (0 から 255) を 0.0 から 1.0 の値に変更します。すべての画像は 32*30 です。960 ニューロンの入力層、3 ニューロンの隠れ層、4 ニューロンの出力層があります。たとえば、出力 <0.1,0.9,0.1,0.1> は、人が右を見ていることを意味します。私は疑似コードに従いました。ただし、正しく機能しません。正しい重みが計算されないため、トレーニングとテストの例を処理できません。コードの一部を次に示します。
アルゴリズムが機能するにつれて、重みがどんどん大きくなり、最終的に無限大 (NaN 値) に近づきます。コードを確認しました。残念ながら、私は自分の問題を解決できませんでした。私を助けようとする人には、心から感謝します。
backpropagation - バックプロパゲーションアルゴリズム:どこで間違いを犯したのですか?
BPアルゴリズムの私の実装があります。私はそれをテストし、トレーニング後に間違ったデータを見つけました。それで、私はどこで間違いを犯しましたか?
そして、トレーニングプロセスを停止するためのネットワークの出力のエラーを計算する方法は?
そして、ニューロンのバイアスを変更する方法は?
私の完全なコードがあります:必要に応じてhttps://github.com/NicholasShatokhin/OpenNNL 。
algorithm - パート 2 回復力のあるバックプロパゲーション ニューラル ネットワーク
これは、この投稿に続く質問です。特定のニューロンについて、そのエラーの偏導関数とその重みの偏導関数を取得する方法については不明です。
このWebページから作業すると、伝播がどのように機能するかは明らかです(ただし、私はResilient Propagationを扱っています). フィードフォワード ニューラル ネットワークの場合、1) ニューラル ネットワークを前方に移動しながらニューロンをトリガーし、2) 出力層のニューロンから総誤差を計算する必要があります。次に、3) 後方に移動し、ニューロンの各重みによってそのエラーを伝播し、4) 再び前方に移動して、各ニューロンの重みを更新します。
正確には、これらは私が理解していないことです。
A)各ニューロンについて、重みの偏微分に対する誤差の偏微分 (定義) をどのように計算しますか? 私の混乱は、微積分では、偏微分が n 変数関数に関して計算されるということです。この投稿でldogとBayer の回答を理解しています。チェーンルールも理解できました。しかし、それを ai) 線形コンバイナーと ii) シグモイド活性化関数の結果に適用する方法を正確に考えると、それはゲル化しません。
B) Resilient Propogation アプローチを使用して、特定のニューロンのバイアスをどのように変更しますか? それとも、Resilient Propagation トレーニングを使用する NN にバイアスやしきい値はありませんか?
C) 2 つ以上の出力ニューロンがある場合、どのように総誤差を伝播しますか? total-error * ニューロンの重みは、出力ニューロンの値ごとに発生しますか?
ありがとう