Bishop Learning に関するメモ

・ 「技巧ミニ」by 出村氏 2012 に採用されている評価関数パラメータ学習アルゴリズム
・ 棋譜・自己対戦が不要で大規模な評価関数(200万パラメータ)学習に成功
・ 基本的には現局面の評価値を先読みにより得られた評価値に近づけるアルゴリズム
これは1960年台のサミュエルの学習アルゴリズムと基本的には同一
・ 評価値を 1(勝ち)or 0(負け)とし、f = sigmoid(a * Σv・w) とする
・ ある局面セットに関して、目標評価値との差の総自乗誤差を0に近づけるようパラメータを修正
・ 拘束条件として、各駒(単独)の値の合計を一定値とする

while (収束するまで) { 
 PosiPon samples[NUM_SAMPLES]; float weight[NUM_FEATURES]; 
 generateSamples(samples); // 局面集合Pを作成 
 for (i = 0; i < NUM_SAMPLES; i++) { 
  teacher = search(samples[i], weight); // 探索で教師値を得る 
  score = evaluate(samples[i], weight); // 評価関数による評価 
  for (j = 0; j < NUM_FEATURES; j++)  
   gradient[j] += teacher - score; // 勾配の更新 
 } 
 for (i = 0; i < NUM_FEATURES; i++) 
  weight[i] += h * sgn(gradient[i]); // 特徴ベクトルの更新 
} 

疑問:
・ a の値は?
・ teacher, score は 0/1 ?
・ h の値は?
・ 評価値を -1/0/1 にし、引き分けにも対応可?

新規性は、[1] 局面ごとにパラメータを更新せず、パラメータセットについて行なう。
[2] (学習のための?)評価値を 0/1 とする。の2点?
これによりパラメータの収束時間が短縮された?