序章
私は、人工知能、機械学習、およびニューラル ネットワークに非常に慣れていません。
この種のシステムの機能をテストするために、FANN (Fast Artificial Neural Network)ライブラリ (C++) を使用してコーディングを試みました。
プログラミング
教師あり学習を処理するための学習ファイルを生成する小さなコードを作成しました。私はすでにいくつかのテストを行っていますが、これは、同じ問題を解決するために、隠れ層の組織と AI 機能との関係を理解するのに役立ちました。
私の観察を説明するために、表記法ABC-[...]-Xを使用して、 A入力ニューロン、最初の隠れ層のBニューロン、2 番目の隠れ層のCニューロン、...、およびX出力ニューロンの構成を描写します。
これらのテストでは、学習データは、機能するNOT 関数 (f(0)=1 ; f(1)=0) (多くの言語で「!」に相当)の 2k のランダムな結果でした。エポックは、すべての学習データに対する 1 つのトレーニング テストを表すことにも注意してください。「AI」は訓練された ANN を表します。
学習データに誤りはありません。
ソース コード全体は、私の GitHub Repo にあります。
多いほど良くない
まず、1-1-1 システムは、1-[5 ニューロンの 50 層]-1 が 20k エポックよりも 37 エポックの方が強力であることに気付きました (0.25 に対して 0.0001 エラー率)。
私の最初の意見は、最小限に抑えるにはより多くのコストがかかるため、2 番目の AI にはより多くのトレーニングが必要であるということでしたが、これが唯一の理由かどうかはわかりません.
これにより、同じ総数のニューロンでいくつかのテストを試すようになりました。
等しいは等しくない
1-2-2-1 構成は 1-4-1 構成よりも効率的と思われる
実際、これら 2 つの異なる構成でテストを実行すると、これらの出力が得られました (独自にコード化されたテスト プログラム)。これらは 2 つの異なるテストです。"9**" はテストの現在のインデックスです。
テストは、AI に 0 と 1 の間のランダムな int を与え、出力を出力することで構成されます。各テストは個別に実行されています。
// 1-2-2-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 1.000000, output : 0.009162
[938]Number : 0.000000, output : 1.000000
[939]Number : 0.000000, output : 1.000000
[940]Number : 1.000000, output : 0.009162
[941]Number : 0.000000, output : 1.000000
[942]Number : 0.000000, output : 1.000000
// 1-4-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 0.000000, output : 1.000000
[938]Number : 1.000000, output : 0.024513
[939]Number : 0.000000, output : 1.000000
[940]Number : 0.000000, output : 1.000000
[941]Number : 1.000000, output : 0.024513
[942]Number : 1.000000, output : 0.024513
最初の構成では、2 番目の構成よりも 0 に近い結果が得られることがわかります。( 0.024513に対して0.009162 )。これは IEEE エンコーディングの問題ではなく、別のテストを実行してもこれら 2 つの値は変わりません。
その理由は何ですか?それを理解しようとしましょう。
- 最初の構成にはいくつの「シナプス」がありますか?
最初
first[0]->second[0]
first[0]->second[1]
それから
second[0]->third[0]
second[0]->third[1]
second[1]->third[0]
second[1]->third[1]
最後の
third[0]->first[0]
third[1]->first[0]
したがって、合計で2 + 4 + 2 = 8 個のシナプスが得られます。(したがって、8 つの異なる重みの可能性)。
- 2番目の構成はどうですか?
最初
first[0]->second[0]
first[0]->second[1]
first[0]->second[2]
first[0]->second[3]
最後の
second[0]->third[0]
second[1]->third[0]
second[2]->third[0]
second[3]->third[0]
したがって、合計4 + 4 = 8 個のシナプスが得られます。(まだ 8 つの異なる重みの可能性)。
また、両方のシステムに4 つの活性化関数があります(各ニューロンに 1 つ)。