少数の反復から開始します(実際には、反復ではなく「エポック」をカウントする方が一般的です。「エポック」は、ネットワークのトレーニングに使用されるデータセット全体の反復数を指します)。「小さい」とは、50エポックのようなものを言いましょう。この理由は、追加のトレーニングサイクル(エポック)ごとに合計エラーがどのように変化するかを確認したいためです。うまくいけば、減少します(以下の「合計エラー」の詳細)。
明らかに、次の追加のエポックによって合計エラーがさらに減少しないポイント(エポックの数)に関心があります。したがって、エポックの数を少なくして開始し、エポックを増やしてそのポイントに近づくことができるようにします。
最初の学習率は、細すぎたり粗すぎたりしてはなりません(明らかに主観的ですが、学習率が大きいか小さいかについて大まかな感覚があることを願っています)。
次に、パーセプトロンに数行のテストコードを挿入します。実際には、適切に配置された「print」ステートメントを数行だけ挿入します。反復ごとに、デルタ(トレーニングデータの各データポイントの実際の値から予測値を引いた値)を計算して表示し、トレーニングデータのすべてのポイント(データ行)の個々のデルタ値を合計します(通常、デルタ、または差の二乗の合計の平方根を取ることができます-あまり重要ではありません。その合計値を「合計エラー」と呼びます-明確にするために、これは合計エラー(全体のエラーの合計)ですエポックごとのすべてのノード)。
次に、エポック番号の関数として合計エラーをプロットします(つまり、x軸にエポック番号、y軸に合計エラー)。もちろん、最初は左上隅のデータポイントが右下に向かって傾斜し、傾きが小さくなっているのがわかります。
アルゴリズムにトレーニングデータに対してネットワークをトレーニングさせます。曲線(合計エラー対エポック数)が平坦になるまでエポックを増やします(たとえば、実行ごとに10ずつ) 。つまり、追加の反復によって合計エラーが減少することはありません。
したがって、その曲線の傾きが重要であり、その垂直位置も重要です。つまり、合計エラーの量と、トレーニングサイクル(エポック)が増えるにつれて下降傾向が続くかどうかです。エポックを増やした後、最終的にエラーの増加に気付いた場合は、低い学習率でやり直してください。
学習率(通常は約0.01から0.2の間の割合)は、ネットワークのトレーニング速度に確かに影響します。つまり、ローカル最小値にすばやく移動できます。それはまたあなたがそれを飛び越える原因となる可能性があります。したがって、ネットワークをトレーニングするループをコーディングします。たとえば、毎回固定数のエポック(および同じ開始点)を使用して、学習率をたとえば0.05から0.2に変化させ、学習率を毎回増加させて、5回別々にトレーニングします。 0.05。
ここでもう1つのパラメータが重要です(厳密には必要ではありませんが)、「勢い」。名前が示すように、勢いのある用語を使用すると、適切にトレーニングされたネットワークをより迅速に取得するのに役立ちます。本質的に、運動量は学習率の乗数です。エラー率が減少している限り、運動量の項は進行を加速します。運動量項の背後にある直感は、「目的地に向かって移動している限り、速度を上げてください」です。運動量項の一般的な値は、0.1または0.2です。上記のトレーニングスキームでは、学習率を変えながら勢いを一定に保つ必要があります。