問題タブ [feed-forward]
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.
neural-network - フィードフォワード ニューラル ネットワークのトレーニング
バックプロパゲーション ニューラル ネットワークを実装しました。次に、フィード フォワード ニューラル ネットワークを実装して精度を比較したいと思います。
私の質問は、すべての記事が学習方法として逆伝播について言及しているため、フィード フォワードには (逆伝播以外に) どのような学習方法があるかということです。
machine-learning - FeedForward Neural Network: 多くのクラスに対して複数の出力ニューロンを持つ単一のネットワークを使用する
私は現在、MNIST 手書き数字分類に取り組んでいます。
次の構造を持つ単一の FeedForward ネットワークを構築しました。
- 入力: 28x28 = 784 入力
- 隠れ層: 1000 個のニューロンを持つ単一の隠れ層
- 出力層: 10 個のニューロン
すべてのニューロンはシグモイド活性化機能を持っています。
報告されるクラスは、最大出力値を持つ出力ニューロンに対応するクラスです
私の質問は次のとおりです。
- 複数の出力を持つ単一のネットワークを作成するのは良い方法ですか? つまり、各桁ごとに別のネットワークを作成する必要がありますか?
現在、ネットワークの成功率は ~75% にとどまっているため、お尋ねします。実際には「10 個の分類器」が隠れ層の同じニューロンを共有しているため (よくわかりません)、ネットワークの学習能力が低下しますか?
** 編集: **
他の人がこのスレッドを参考にするかもしれないので、正直に言って、75% の成功率は ~1500 エポック後だったことを更新したいと思います。現在、私はほぼ 3000 エポックを経ており、成功率は約 85% に達しているため、かなりうまく機能しています。
java - Java でのニューラル ネットワークの実装
バックプロパゲーションを使用してJavaでFFNNを実装しようとしていますが、何が間違っているのかわかりません。ネットワークにニューロンが 1 つしかないときは機能しましたが、より大きなネットワークを処理するために別のクラスを作成したところ、何も収束しませんでした。数学の問題、または数学の実装の問題のようですが、何度かチェックしましたが、問題は見つかりませんでした。これは機能するはずです。
ノード クラス:
LineNetwork クラス:
構造の簡単な説明: すべてのノードには活性化関数 f があります。f.eval関数をf.deriv評価し、その導関数を評価します。Functions.SIGは標準のシグモイド関数でFunctions.HSF、ヘビサイド ステップ関数です。関数の入力を設定するにaddIWは、前の出力の重みが既に含まれている値で呼び出します。同様のことが逆伝播でも行われaddEWます。説明したように、ノードは 2 次元配列で編成され、重みは 3 次元配列で個別に編成されます。
これは質問するのが少し難しいかもしれないことを理解しています.そして、このコードがどれだけ多くのJava規約を破っているのかを確かに理解しています.しかし、誰かが提供できる助けに感謝します.
編集:この質問と私のコードは非常に巨大なテキストの壁であるため、理解したくない括弧内に複雑な式が多数含まれる行がある場合は、コメントまたは私に尋ねる何かを追加してください。答えようとしますできるだけ早く。
編集 2: ここでの具体的な問題は、このネットワークが XOR に収束しないことです。これを説明するための出力を次に示します。
9995: {1.0, 0.0}: 1 1
9996: {0.0, 1.0}: 1 1
9997: {0.0, 0.0}: 0 1
9998: {0.0, 1.0}: 1 0
9999: {0.0, 1.0}: 1 1
各行は次の形式になっています。ネットワークは各テストでTEST NUMBER: {INPUTS}: EXPECTED ACTUAL呼び出すtrainため、このネットワークは 10000 回逆伝播しています。
誰かがそれを実行したい場合は、次の 2 つの追加クラスがあります。
今はさらに長いです。ダーン。
matlab - バックプロパゲーション エラー: 概念またはプログラミング?
2 入力恒等関数をモデル化するために、次のバックプロパゲーション アルゴリズムを作成しました。
フィードフォワード機能:
コスト関数プロット

今、私は何を台無しにしていますか?
私の通知を逃れたのはプログラム上のエラーですか?または、アルゴリズムを間違って実装していますか?
結果の重みをテストすると、計算されたコストはトレーニング済みですが、結果は完全に間違っています
青 > 予想される出力。赤 > ニューラル ネットワークの出力

また、コスト値が減少する前に上昇することがあるのはなぜですか (図 1 のように)
neural-network - MNIST - トレーニングのスタック
私はニューラル ネットワークとディープ ラーニング(最初の 2 つの章) を読んでおり、それに沿って、MNIST データ セットから数字を分類する独自の ANN を構築しようとしています。
私の実装は、10 エポック後にテスト セット (約 5734/10000) の数字を分類する際に最大 57% の精度でピークに達するため、ここ数日間頭を悩ませてきました (トレーニング セットの精度は 10 エポック以降に停滞し、テスト セットの精度は、おそらくオーバー フィッティングのために低下します)。
本とほぼ同じ構成を使用しています。すべての層が完全に接続された 2 層フィードフォワード ANN (784-30-10)。標準のシグモイド活性化関数; 二次費用関数; 重みは同じ方法で初期化されます (平均 0、標準偏差 1 のガウス分布から取得) 唯一の違いは、バッチ/ミニバッチ トレーニングの代わりにオンライン トレーニングを使用していることと、学習率が 3.0 ではなく 1.0 であることです (私はミニバッチ トレーニング + 学習率 3.0 を試しましたが)
それでも、私の実装は一連のエポックの後に 60% パーセンタイルを通過しません。本のように、ANN は最初のエポックの直後にほとんど同じ構成で%90 を超えます。最初は、逆伝播アルゴリズムの実装を台無しにしましたが、逆伝播を異なる方法で 3 回再実装した後、各再実装でまったく同じ結果になり、困惑しました...
バックプロパゲーション アルゴリズムが生成する結果の例:
上記と同じ構成のより単純なフィードフォワード ネットワーク (オンライン トレーニング + 学習率 1.0): 3 つの入力ニューロン、2 つの隠れニューロン、および 1 つの出力ニューロン。
初期重みは次のように初期化されます。
入力が [0.0, 0.5, 1.0] の場合、出力は 0.78900331 です。同じ入力と 1.0 の目的の出力を逆伝播すると、次の偏導関数が得られます (dw = 重みに関する導関数、db = バイアスに関する導関数)。
これらの偏導関数でネットワークを更新すると、修正された出力値 0.74862305 が得られます。
上記の結果を確認するのに十分親切な人がいるとしたら、問題の原因としてバックプロパゲーションが正しくないことをほぼ除外したので、非常に役立ちます.
MNIST の問題に取り組んでいる人で、この問題に遭遇した人はいますか? 私はここで本当に迷っているので、チェックすべきことの提案も役に立ちます。
neural-network - オンライン逆伝播重み更新に運動量項を追加しますか?
2 層ネットワーク用の ANN を実装しました。重量更新コードを勢いで変更する必要がありますが、更新方法を知る必要があります。以下は、体重更新のみのコードスナップです。以下のコードは、見た各例の重みを更新します。hiddenWights は隠れ層の重みで、outputWeights は出力層の重みです。