コンピューター将棋に限って言うと、高校に入学する程度で十分と言われている。
微分とか出てくる数学が必要なのは 機械学習のせい なんで。機械学習を使わないなら
- (1) 四則演算
- (2) パーセント
- (3) プラスマイナス
- (4) 割った余り
- (5) AND、OR、XOR論理演算
- (6) 乱数
だけ使えれば コンピューター将棋は いける気がする。 書いていて、だんだん増えてきた。まだ出てくるかもしれない。
じゃあ、機械学習は数学なんか持ち込んで何てことをしてくれたんだ、というと
パラメーター調整 のひとことに尽きる。
じゃあ むずかしい数学って何なのかというと
- (A) 微分 ……各駅停車で池袋まで行ける感じ
- (B) 偏微分 ……練馬で乗り換えて池袋まで行ける感じ
- (C) 線形/連立一次方程式/行列演算 ……じゃあ俺練馬まで行くんでお前は池袋まで行ってくれ
- (D) 正規分布 ……野球部の中にサッカー部員がいればそいつの特技はサッカー
- (E) 関連 ……みんなが傘を差していたのは雨が降っていたからに違いない
- (F) 誤差逆伝搬法 ……雨が降っているのに傘を差さなくていいんですか
- (G) 勾配 ……じゃあ、傘を差そうぜ
- (H) 学習 ……雨が降っていたら、傘を差した
うんぬん 全部 パラーメーターを調整 したいだけ。 面白くなってきた。
パラメーター調整したいわけじゃなければ これら全部要らないんじゃないか。
機械学習以前
逆に 機械学習以前のコンピューター将棋は何やっていたんだ、というと
データの容量圧縮、盤面の採点、詰め検索、読み探索、プログラムの自己生成、稲庭などの作戦のプログラム、対稲庭作戦などのプログラム、など パラメーターを調整すること以外にもやってみれることは山ほどある。 ハードウェアが非力、借りれる800台のマシンとかない だった時代背景もあるだろう。
今だと 最高の評価関数があってその通りに指して勝てるのなら パラメーターだけ考えればいいのでは という発想もある。 あと クラスタ。
四則演算
飛車取った1000点、
飛車と王様が近くにいて飛車が取られる危険がある、-100点、
といった具合に 人間が採点を決めていたり、
パーセント
盤面を覚えさせて、ここでは こっちの手を指すことが 30% ぐらい、とか入れておく定跡を用意しておく。
プラスマイナス
自分の点数を 100点 と思っていれば、 相手は -100点 だと思っているはずで、
プラス・マイナスが どっちだっけ、と考えるのはつらいので 手番視点 という考え方がある。
これから指す側から見た点数しか無い、みたいな。 待たされている方には頭に マイナス を付けてやればいい。
割った余り
10を3で割ると、3余り1 なので、割った余りは 1 だ。これをかっこよく言うと 剰余(じょうよ) という。 mod とか % の記号を剰余に当てている。
何に使うのかというと 将棋盤は ヨコ タテ 9×9 の81マスなんだが、
右上のマスを0番として縦書き読みすると、40番目はどこなのか? というとき、
(40÷タテ9) mod タテ9 = 4余り4
4列目の4行……、ここで 0オリジン(=数字が0から始まっている)ので
将棋盤風に言い直すと 5筋の5段目 と出てくる。
AND、OR、XOR論理演算
AND、OR はよく使うから説明省略。
XOR なんか何につかうのか。というと 局面ハッシュ に使う。
盤面を覚えておこうと思うと、81マスに 8種類、成りも含めりゃ15種類の駒があって、持ち駒も手番もあるので データがでかくなる。
これを int型1個で持とうぜ、 という手法がハッシュ。
理屈としては 宝くじの番号を作って渡すんで、めったに被らないからいいだろ という理屈。
XOR を使うとそれができる。ゾブリスト・ハッシュをググってくれ。
//書きかけ