0

私はフィードフォワード、バックプロパゲーション、多層ニューラル ネットワークを使用しており、シグモイド関数を -1 から 1 の範囲の活性化関数として使用しています。しかし、最小誤差は 5.8 を下回っていません。 100000回の反復後。 NN の反復に対するエラーのグラフ

これは、出力範囲が 1 を超えており、シグモイド関数の範囲が -1 から 1 にすぎないためだと思います。目的の出力範囲が 0 から 2.5 であるため、この問題を克服する方法を誰かに教えてもらえますか。この範囲に最適なアクティベーション関数を教えてください。

4

2 に答える 2

2

出力エラーを減らしたい場合は、ノードのアクティベーション関数を微調整する前に確認すべき点がいくつかあります。

まず、バイアスノードはありますか? バイアス ノードにはいくつかの意味がありますが、この議論に最も関連するのは、ネットワーク出力を目的の出力範囲に変換できるようにすることです。この参考文献には次のように記載されています。

ニューラル ネットワークでバイアスを使用すると、個々のクラスを分離する超平面をオフセットして優れたポジショニングを実現できるため、問題を解決するネットワークの能力が向上します。

この投稿は非常に良い議論を提供します: Roles of Bias in Neural Networks。これも良いです:なぜ ANN で BIAS が必要なのですか? レイヤーごとに個別の BIAS を使用する必要がありますか?

2 番目の方法: 多くの場合、入力と出力を正規化するのに役立ちます。お気づきのように、シグモイドは +/- 1 の範囲を提供します。0 から 1000 の範囲を持つ関数を学習しようとすると、この小さな範囲が問題になる可能性があります (たとえば)。学習を支援するために、ノード アクティベーション関数に対応するために入力をスケーリングおよび変換するのが一般的です。この例では、範囲を 500 で割り、0 から 2 の範囲を生成し、この範囲から 1 を引きます。このようにして、入力は -1 から 1 の範囲に正規化され、活性化関数によりよく適合します。ネットワーク出力は非正規化する必要があることに注意してください。まず、出力に +1 を加算し、次に 500 を掛けます。

あなたの場合、入力を 0.8 でスケーリングしてから、結果から 1 を引くことを検討してください。次に、ネットワーク出力に 1 を追加し、1.25 を掛けて目的の範囲を回復します。この方法は、バイアスの追加のようにネットワーク トポロジを直接変更しないため、最も簡単に実行できることに注意してください。

最後に、隠しノードの数を変更して実験しましたか? 最初の 2 つのオプションは、パフォーマンスを改善するためのより良い候補であると思いますが、これを試してみてください。(参考までに、活性化関数の形状を変更することで、オプション 1 および 2 よりもネットワーク応答が改善された例を思い出すことはできません。)

隠れ層/ノード構成に関するいくつかの良い議論があります: 多層パーセプトロン (MLP) アーキテクチャ: 隠れ層の数と隠れ層のサイズを選択するための基準? ニューラルネットワークの隠れ層とノードの数を選択するには?

24 の入力により、問題は高次元のものになります。トレーニング データセットが入力状態空間を適切にカバーしていることを確認し、テスト データであり、トレーニング データが同様に代表的な母集団から抽出されていることを確認します。(ニューラル ネットワークをトレーニングするときは、「交差検証」の説明を参照してください)。

于 2014-03-06T19:23:18.163 に答える
2

バニラのシグモイド関数は次のとおりです。

def sigmoid(x):
    return 1/(1+math.e**-x)

それを次のように変換できます。

def mySigmoid(x):
    return 2.5/(1+math.e**-x)

望む変身をするために

于 2014-03-06T16:44:55.587 に答える