問題タブ [recurrent-neural-network]
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.
algorithm - ニューラル ネットワークから孤立したニューロンを削除するアルゴリズム
NEAT (増強トポロジーの神経進化) を実装しようとしています。
「遺伝子」と呼ばれるネットワーク接続のリストがあります。ニューロン 1 とニューロン 2 の間の接続は、gene.from = ニューロン 1、gene.to = ニューロン 2 になります。
私の仕事は、これらの遺伝子からニューラル ネットワークを生成することです (ニューラル ネットワークは単にインデックスからニューロンへのマップであり、gene.from とgene.to はマップ内のニューロンへのキーです)。
入力ノードがnumPossibleInputs
あるので、最初にそれらを追加します (0-numPossibleInputs-1 は入力ニューロンです)。
出力ノードがnumOutputs
あるので、それらも追加します。
次に、「to」接続インデックスに基づいて遺伝子を並べ替えます。
最後に、遺伝子に基づいて隠れ層ニューロンを作成します... ニューラル ネットワークはマップであるため、接続の to または from が既にニューロンであるかどうかを確認し、そうでない場合は新しいニューロンを作成します。このアルゴリズムはネットワークを問題なく作成します。
問題は、進化アルゴリズムが一部の遺伝子を「オフ」にしたときに発生します ( に注意してくださいgene.enabled
)。たとえば、次の遺伝子を考えてみましょう (他にもありますが、無効になっています)。
2->4
4->4
13->4
0->13
1->13
5->13
また、2->5 および 4->13 の無効化された遺伝子もあります。これらは表現されていないため、ネットワークでは使用できません。(これが、世代ごとに新しいネットワークを生成する必要がある理由です。遺伝子を追加、有効化、無効化することができます)。
これは 用numPossibleInputs ==3
なので、0 1 と 2 は入力です (2 はバイアス)。5 > 3 であるため、5 は非表示層ノードですが、10 + 3 = 13 未満です。13 は出力ノードですnumPossibleHidden == 10
。10 + 3 = 13 でした。次のようにイメージできます: [input input input hidden*10 output*1] 3 つの入力、10 の非表示、および 1 つの出力の場合
これは単純に生成されたネットワークの写真です: Simple Network
ご覧のように、削減されたネットワークには 4 または 5 はまったくないはずです。これらはどの出力にも影響を与えないためです (この場合は 1 つの出力、13 のみ)。削減されたニューラル ネットワークは、0->13 および 1->13 になります。
私はこれを解決する方法についていくつかの最初の考えを持っていました:
A. 1. 各接続をループし、gene.from ID をハッシュします。これらは、何か他のものへの入力であるニューロン ID です。ハッシュ)。3. 何も削除されなくなるまで繰り返します
B. 単純なネットワークを生成します...次に、各出力からネットワーク内を逆方向にクロールし、それ以上進むことができなくなります (繰り返しのサイクルに注意してください)。見つけた各ノードをハッシュします。グラフ検索が完了したら、見つかったノードのハッシュを、遺伝子リストで表されたノードの合計と比較します。見つかったノードのハッシュでニューロンを持つ遺伝子のみを使用し、ネットワークを作り直します。
ネットワーク表現に基づいて、これを行うための最良のアルゴリズムについてフィードバックを得たいと思っていました-BはAよりも優れていると思いますが、私が関与しないよりエレガントなソリューションがあることを望んでいましたグラフ トポロジを解析しています。おそらく、接続をソートすることで何か賢いことができるでしょうか(by to、from)?
ありがとう!
neural-network - バックプロパゲーションアルゴリズムを計算する際に、なぜ伝達関数の微分を取るのですか?
導関数を取ることの背後にある概念は何ですか? 興味深いのは、何らかの方法でシステムを教えるために、その重みを調整する必要があるということです。しかし、なぜ伝達関数の導出を使用してこれを行うのでしょうか。私たちを助ける派生物には何がありますか。微分が特定の点での連続関数の勾配であることは知っていますが、問題とは何の関係があるのでしょうか。
gpgpu - TensorFlow でのシーケンスからシーケンスへのモデルの分散 (マルチデバイス) 実装?
TensorFlowでsequence-to-sequence モデルをトレーニングするための非常に優れたチュートリアルです。単一のマシンで一連の GPUを利用してパフォーマンスを向上させる分散バージョンがあるかどうかを知りたいだけですか?
TensorFlow のホワイト ペーパーでは、ニューラル ネットワークを使用したSequence to Sequence Learning で使用されているように、大規模な多層再帰型ニューラル ネットワークをトレーニングできることが言及されています (図 8および「モデルの並列トレーニング」セクションを参照) 。現在のチュートリアルがモデルの並列トレーニングをカバーしているかどうか知っている人はいますか? 「いいえ」の場合、一連の GPU を活用するために元のチュートリアルを改善するにはどうすればよいですか?
image-processing - 畳み込みニューラル ネットワークのトレーニング開始時の高いトレーニング エラー
畳み込みニューラル ネットワークでは、CNN のトレーニングに取り組んでいます。トレーニング プロセス中、特にトレーニングの開始時に非常に高いトレーニング エラーが発生します。その後、このエラーはゆっくりと減少し始めます。約 500 エポック後、トレーニング エラーはゼロに近づきます (例: 0.006604)。次に、最終的に得られたモデルを使用して、テスト データに対する精度を測定しました。約 89.50% でした。それは正常に思えますか?つまり、トレーニング プロセスの最初の段階でトレーニング エラー率が高くなります。もう 1 つ言及したいのは、隠しノードの数を減らすたびに、トレーニングの最後に結果が良くなっていることに気付きました。
私のCNN構造は次のとおりです。
ここに私のハイパーパラメータのいくつかがあります:
この点に関するあなたの助けと提案は非常に高く評価されています, 事前に感謝します.
theano - 時系列データで Theanets LSTM RNN を使用するにはどうすればよいですか?
1 つの列で構成される単純なデータフレームがあります。その列には 10320 個の観測値 (数値) があります。それぞれ 200 観測のウィンドウでデータをプロットに挿入して、時系列データをシミュレートしています。プロットのコードは次のとおりです。
これにより、リアルタイム データの流れをシミュレートし、視覚化します。私が望むのは、theanets RNN LSTM をデータに適用して、教師なしの異常を検出することです。教師なしで行っているため、データをトレーニング セットとテスト セットに分割する必要はないと思います。これまでのところ、意味のあるものはあまり見つけられておらず、約2時間グーグルで検索しています. あなたたちが助けてくれることを願うばかりです。RNN の予測出力もグラフに表示し、エラーが大きすぎる場合に値が異常であると識別されるしきい値を定義したいと考えています。さらに情報が必要な場合は、コメントしてお知らせください。ありがとうございました!
python - リカレントニューラルネットワークにおけるエポックと反復
RNN と LSTM を使用した Keras のテキスト生成の例を見ていますが、 epochとiterationという用語の違いについてまだ混乱しています。
ここに同じことを尋ねる前の質問がありますが、私は答えを理解できません。または、この答えは私が理解している方法とは異なり、次の例での処理方法とも異なります。この回答に基づいて、
1エポック= すべてのトレーニング例の 1 つの順方向パスと 1 つの逆方向パス
反復回数=パス回数、[バッチ サイズ] を使用した各パスのサンプル数。
例: 1000 個のトレーニング サンプルがあり、バッチ サイズが 500 の場合、1 エポックを完了するのに 2 回の反復が必要です。
こう締めくくります(#training examples/batch size) = (#iterations/#epochs)
。
ただし、次の例は、私が理解しているように、前の結論とは異なります。
ここでは、反復が60で、エポック数が1に設定されているため、かなり混乱しました。述べたように、60回の反復for iteration in range(1, 60)
があるようです。そして、反復ごとに、 for ループごとに記述されているように 1 つのエポックが実行されました。model.fit(X, y, batch_size=128, nb_epoch=1)
繰り返しますが、ここにはbatch_size=128
. では、反復とは正確には何を意味するのでしょうか?
この例に基づいて、反復とエポック の違いを誰でも説明できますか?