4

私のデータセットにはm機能とnデータポイントがあります。w(推定される)ベクトルとします。確率的更新法で最急降下法を実装しようとしています。私の最小化関数はleast mean squareです。

更新アルゴリズムを以下に示します。

for i = 1 ... n data:
    for t = 1 ... m features:
         w_t = w_t - alpha * (<w>.<x_i> - <y_i>) * x_t

ここで、は特徴<x>の生のベクトル、は真のラベルの列ベクトル、は定数です。m<y>alpha

私の質問:

  • wikiによると、すべてのデータポイントを調べる必要はなく、エラーが十分に小さいときに停止できます。それは本当ですか?

  • ここで停止基準をどうすべきかわかりません。誰かがこれを手伝ってくれるなら、それは素晴らしいことです。

  • 私が使用したこの式で、for loopそれは正しいですか?私(<w>.<x_i> - <y_i>) * x_tは私のと信じてい∆Q(w)ます。

4

1 に答える 1

8

ウィキによると、すべてのデータポイントを調べる必要はなく、エラーが十分に小さいときに停止できます。それは本当ですか?

これは、非常に膨大なトレーニングセットがあり、すべてのデータポイントを調べるのに非常に費用がかかる場合に特に当てはまります。次に、K個の確率的更新後(つまり、K個のトレーニング例を処理した後)に収束基準を確認します。可能ですが、小さなトレーニングセットでこれを行うことはあまり意味がありません。人々が行うもう1つのことは、トレーニング例が処理される順序をランダム化して、「偽の」収束をもたらす可能性のある生の相関例が多すぎることを回避することです。

ここで停止基準をどうすべきかわかりません。誰かがこれを手伝ってくれるなら、それは素晴らしいことです。

いくつかのオプションがあります。それらをできるだけ多く試して、経験的な結果に基づいて決定することをお勧めします。

  1. トレーニングデータの目的関数の差がしきい値よりも小さい。
  2. 差し出されたデータ(別名、開発データ、検証データ)の目的関数の差は、しきい値よりも小さくなります。差し出された例には、トレーニング(つまり、確率的更新)に使用される例を含めたり、評価に使用されるテストセットに例を含めたりしないでください。
  3. パラメータwの絶対差の合計は、しきい値よりも小さくなっています。
  4. 上記の1、2、および3では、しきい値を指定する代わりに、パーセンテージを指定できます。たとえば、妥当な停止基準は、| squared_error(w)--squared_error(previous_w)|のときにトレーニングを停止することです。<0.01 * squared_error(previous_w)$$。
  5. 時々、最適なパラメータがあるかどうかは気にしません。元々持っていたパラメータを改善したいだけです。このような場合、目的関数が実際に収束したかどうかに関係なく、トレーニングデータに対して何度も反復を事前設定し、その後停止するのが妥当です。

forループで使用したこの式で正しいですか?(w.x_i --y_i)* x_tは私の∆Q(w)だと思います。

2 *(w.x_i --y_i)* x_tである必要がありますが、とにかく学習率アルファを掛けていることを考えると、大したことではありません。

于 2013-01-23T04:15:11.680 に答える