11

パーセプトロン アルゴリズムのパラメーターを調整して、目に見えないデータで比較的うまく機能するようにする方法を見つけようとして、ある種の問題が発生しています。

動作確認済みのパーセプトロン アルゴリズムを実装しました。反復回数とパーセプトロンの学習率を調整する方法を見つけたいと思います。これらは、私が興味を持っている 2 つのパラメーターです。

パーセプトロンの学習率は、アルゴリズムが収束して完了するかどうかに影響しないことを知っています。nの変更方法を把握しようとしています。速すぎると大きく揺れ、低すぎると時間がかかります。

反復回数に関しては、理想的な回数を決定する方法が完全にはわかりません。

いずれにせよ、助けていただければ幸いです。ありがとう。

4

3 に答える 3

13

少数の反復から開始します(実際には、反復ではなく「エポック」をカウントする方が一般的です。「エポック」は、ネットワークのトレーニングに使用されるデータセット全体の反復数を指します)。「小さい」とは、50エポックのようなものを言いましょう。この理由は、追加のトレーニングサイクル(エポック)ごとに合計エラーがどのように変化するかを確認したいためです。うまくいけば、減少します(以下の「合計エラー」の詳細)。

明らかに、次の追加のエポックによって合計エラーがさらに減少しないポイント(エポックの数)に関心があります。したがって、エポックの数を少なくして開始し、エポックを増やしてそのポイントに近づくことができるようにします。

最初の学習率は、細すぎたり粗すぎたりしてはなりません(明らかに主観的ですが、学習率が大きいか小さいかについて大まかな感覚があることを願っています)。

次に、パーセプトロンに数行のテストコードを挿入します。実際には、適切に配置された「print」ステートメントを数行だけ挿入します。反復ごとに、デルタ(トレーニングデータの各データポイントの実際の値から予測値を引いた値)を計算して表示し、トレーニングデータのすべてのポイント(データ行)の個々のデルタ値を合計します(通常、デルタ、または差の二乗の合計の平方根を取ることができます-あまり重要ではありません。その合計値を「合計エラー」と呼びます-明確にするために、これは合計エラー(全体のエラーの合計)ですエポックごとのすべてのノード)。

次に、エポック番号の関数として合計エラーをプロットします(つまり、x軸にエポック番号、y軸に合計エラー)。もちろん、最初は左上隅のデータポイントが右下に向かって傾斜し、傾きが小さくなっているのがわかります。

アルゴリズムにトレーニングデータに対してネットワークをトレーニングさせます。曲線(合計エラー対エポック数)が平坦になるまでエポックを増やします(たとえば、実行ごとに10ずつ) 。つまり、追加の反復によって合計エラーが減少することはありません。

したがって、その曲線の傾きが重要であり、その垂直位置も重要です。つまり、合計エラーの量と、トレーニングサイクル(エポック)が増えるにつれて下降傾向が続くかどうかです。エポックを増やした後、最終的にエラーの増加に気付いた場合は、低い学習率でやり直してください。

学習率(通常は約0.01から0.2の間の割合)は、ネットワークのトレーニング速度に確かに影響します。つまり、ローカル最小値にすばやく移動できます。それはまたあなたがそれを飛び越える原因となる可能性があります。したがって、ネットワークをトレーニングするループをコーディングします。たとえば、毎回固定数のエポック(および同じ開始点)を使用して、学習率をたとえば0.05から0.2に変化させ、学習率を毎回増加させて、5回別々にトレーニングします。 0.05。

ここでもう1つのパラメータが重要です(厳密には必要ではありませんが)、「勢い」。名前が示すように、勢いのある用語を使用すると、適切にトレーニングされたネットワークをより迅速に取得するのに役立ちます。本質的に、運動量は学習率の乗数です。エラー率が減少している限り、運動量の項は進行を加速します。運動量項の背後にある直感は、「目的地に向かって移動している限り、速度を上げてください」です。運動量項の一般的な値は、0.1または0.2です。上記のトレーニングスキームでは、学習率を変えながら勢いを一定に保つ必要があります。

于 2010-05-04T09:11:17.500 に答える
3

パーセプトロンが収束するかどうかに影響を与えない学習率について-それは真実ではありません。学習率が高すぎると、ネットワークが分岐する可能性があります。学習中に学習率を変更し、それが速すぎる(つまり1 / nより強い)場合、収束しないネットワークを取得することもできます(これは、1からinfまでのtにわたるN(t)の合計が有限であるためです。つまり、重みのベクトルは有限量しか変更できません)。

理論的には、 1 / t (tは提示された例の数)に従ってn(学習率)を変更することが適切であることが単純なケースで示されますが、実際には、これを行うための最良の方法は次のとおりです。良い高いn値(学習を分岐させない最高値)と低いn値(これは理解するのが難しいです。実際にはデータと問題に依存します)を見つけて、nを時間の経過とともに高い値から直線的に変化させます。 nから低いn。

于 2010-05-06T16:55:41.127 に答える
1

学習率は、データの典型的な値に依存します。一般的な経験則はありません。特徴スケーリングは、データの独立変数または特徴の範囲を標準化するために使用される方法です。データ処理では、データの正規化とも呼ばれ、通常、データの前処理ステップで実行されます。

データをゼロ平均、単位分散、または 0 ~ 1 またはその他の標準形式に正規化すると、学習率の値を選択するのに役立ちます。doug が述べたように、0.05 から 0.2 の間の学習率は一般的にうまく機能します。

また、これはアルゴリズムの収束を高速化するのにも役立ちます。

出典: Juszczak, P.; DMJ Tax、および RPW Dui (2002)。「サポート ベクター データの説明における特徴のスケーリング」。議事録 8年目。会議 アドバンテージ 学校のコンピューター。イメージング: 95 ~ 10。

于 2013-09-28T14:23:56.227 に答える