daruma3940の日記

理解や文章に間違い等あればどんなことでもご指摘お願いします

コンピューター将棋開発者オフ会in梅田に行ってきたのじぇ!

f:id:daruma3940:20160520223745p:plain
今日はコンピューター将棋開発者オフ会に行ってきたのじぇ

f:id:daruma3940:20160520223745p:plain
参加者はSquirrelの開発者であるまりちゃとLabyrinthus+#の開発者の香上さんとCGPの開発者のwainさんだったのじぇ
どんなひとなのかわからない人はここをみて確認すればいいのじぇ。
denou.jp
f:id:daruma3940:20160521003616p:plain
どうだったの焼き肉は?
f:id:daruma3940:20160520223745p:plain
いや~~もうお二方の賢さに圧倒されるだけの焼き肉だったのじぇ。
特にwainさんのコンピューターの根本に関わることに関する知識は半端なかったのじぇ
でも色々役に立つお話を聞くことが出来て大変良かったのじぇ!
f:id:daruma3940:20160520223745p:plain
leaと呼ばれる命令があってその命令を使えば*5,*9も普通の掛け算演算子を使うよりも早く計算できるらしいのじぇ!(11/7修正)


if()でCPUが過去の履歴から予測したのと逆の条件分岐に移るときに10clockぐらいロスになり、最近のプロセッサでは1clockで3命令ぐらい処理できるのでかなりのロスに成ってしまうらしいのじぇ!(11/7修正)

まりちゃの使っているパソコンのcpu:core2duoでの3秒探索は最新のcpuで言うところの0.5秒探索ぐらいらしいのじぇ!

そしてまりちゃのソフトがレッサー改より弱くなり、20キロnpsしか出ていないという話をするとStockFish7式の探索でcore2duoであれば250キロnpsは出るはずであるのでバグを探せと教えて頂いたのじぇ!


f:id:daruma3940:20160520223530p:plain
ゆゆっ!?すごい情報を手に入れたね!

f:id:daruma3940:20160520223745p:plain
そうなのじぇ!これからは頑張ってコードの無駄な部分を探してnpsを増やしていく改良をしていくのじぇ!
めざせ!250knps!!!

応援していただいているのじぇ!


f:id:daruma3940:20160709192554j:plain
いろんな方に応援していただいているよ~うれしいよ~~
f:id:daruma3940:20160520223745p:plain
ゆゆっ!ほんとなのじぇ!
応援していただいていうれしいのじぇ!
頑張って開発しますなのじぇ!

電王トーナメント出場が決まったのじぇ!!

f:id:daruma3940:20160520223745p:plain

電王トーナメント出場が決まったのじぇ!!

denou.jp

 

f:id:daruma3940:20160520223530p:plain

やったね!!

f:id:daruma3940:20160521003616p:plain

やったわね!

f:id:daruma3940:20160709192554j:plain

やったよ!!

 

f:id:daruma3940:20160520223745p:plain

最近なかなかモチベーションが上がらなかったけど

モチベーション回復したのじぇ!!

 

f:id:daruma3940:20160520223745p:plain

大会までもうひと踏ん張りなのじぇ!!

 

 

floodgateの棋譜を技巧風DBに変換するツールなのじぇ。

f:id:daruma3940:20160520223745p:plain

floodgateの棋譜を技巧風の学習用DBに変換するためのツールを作ったのじぇ。

github.com

 

f:id:daruma3940:20160520223745p:plain

技巧が読み込んでいる棋譜ファイルは

1行目: <棋譜番号> <対局開始日> <先手名> <後手名> <勝敗(0:引き分け,1:先手勝ち,2:後手勝ち)> <手数> <棋戦> <戦型>
2行目: <CSA形式の指し手(1手6文字)を一行に並べたもの>

という形式になっているみたいでこれは便利だと思ったのじぇ。

 

ちなみに2015年からFGの棋譜の中に対局者のレートが載るようになったようなので

それを利用してレート2800以下のソフトの棋譜は使わないように設定しているのじぇ。

f:id:daruma3940:20160520223745p:plain

これを用いて2015年のFGの棋譜を変換してレート2800位上のソフトの棋譜14380局が集まったのじぇ!!!

 

f:id:daruma3940:20160521003616p:plain

これでSquirrelお勉強計画が進むわね!!!!

 

f:id:daruma3940:20160709192554j:plain

えっお勉強...??

お勉強は嫌いだよ~~楽して強くなりたいよ~~!

f:id:daruma3940:20160520223745p:plain

楽して強く慣れれば苦労しないのじぇ。

これから強くなるまで一週間でも2週間でもぶっ続けでお勉強させてあげるのじぇ(暗黒微笑)

f:id:daruma3940:20160709192554j:plain

(´;ω;`)

 

f:id:daruma3940:20160520223745p:plain

ただこのツールは自分用にかなり適当に作ったのでバグ等や改善等あればプルリクしていただけると嬉しいのじぇ!!

 

f:id:daruma3940:20160520223745p:plain

このソフトは「なのは(将棋)」の作者さんの作られたfggatherを参考に作ったのじぇ。ありがとうございますなのじぇ。

でもwindows.h関連が理解できなかったからまりちゃが作ったのはwindows.hを用いなかったので、コードとしてはぜんぜん違うのじぇ。

 

 

 

 

 

 

 

 

 

 

 

ADADELTAの論文を読もうじぇ

f:id:daruma3940:20160520223745p:plain

タイトルの通りなのじぇ。

論文はここにあるのじぇ 

http://www.matthewzeiler.com/pubs/googleTR2012/googleTR2012.pdf

f:id:daruma3940:20160520223745p:plain

第3.2章から何言っているのかわからなくなってしまったのじぇ.....

Unitってなんなのじぇ.....

f:id:daruma3940:20160520223745p:plain

まあ備忘録的にここにまとめて残しておくのじぇ。

 


~~ABSTRACT~~~

Adadeltaとは
勾配効果法の為の次元ごとの学習率調整方法
(ここで言う次元とはベクトルの要素数のことだと考えられる。例.(x,y,z):3次元)

(特徴)
ファーストオーダーインフォメーションしか用いない
(ファーストオーダーインフォメーションとは一回微分の結果のことだと考えられる)
何もなしのSGDを超える小さな計算時間
外乱に対する耐性

~~1  INTRODUCTION~~

SGDでは学習率ハイパーパラメータ(η)は手動で与えなければならなかった

(ADADELTA アプローチの利点)
手動で学習率を決める必要が無い
ハイパーパラメータ関係ない
次元ごとに学習率を分ける。
計算量が少ない
外乱に耐性がある
localまたは分散のある環境にも適応できる。(どういうこと?)


~~2  RELATED WORK~~
Newton methodではヘッセ行列の逆行列を使って計算をする。
しかしこれでは時間がかかりすぎるので

一回微分の結果を用いるか2回微分の値を予測するかする改良をする必要がある。


~~2.1  学習率焼きなまし~~

ローカルミニマムでは学習率を下げればよい学習率であるといえる。
極小値の周りで値は振動してしまうのでこれを防ぐために、一つの方法としては、
学習率が下がってくるに従ってパラメータの更新を遅くする方法もある。
しかし、その代わりに何epoch(epochとはなに???)が経過したかによって学習率を焼き鈍す方法が提案されている。


~~2.2 次元毎の一回微分Method~~
次元あたりに異なる学習率を用いる方法を紹介する

~~2.2.1   Momentum~~
Momentum Methodの主な考え方は
勾配が同じ方向を向いて変わらないdimensionには学習を加速させ、勾配の符号が変化し続けているところでは学習率を下げる。
これは前回のパラメーター更新の値を指数関数的に減衰させながら利用する事によって実装されている。
ρは前回のパラメーター更新の値の減衰をコントロールするための定数。

谷底が緩やかに傾いているような谷を想像すれば良い
谷底に沿うような方向には学習率を上げて、谷をまたぐ方向には学習率を下げることで谷をまたぐ方向の振動を和らげる。


~~2.2.3 ADAGRAD~~
この方法は一回微分の結果に頼っているが2回微分の結果と焼きなましの特性も持っている。

分母はこれまでの全次元ごとの学習率の勾配のL2ノルム
ηはすべての次元で共有される学習率

手動で調整しなければならないηは全次元共通ではあるけれども、それぞれの次元は自分の動的学習率を持っている。
学習率は勾配の大きさの逆数に依存するので大きな勾配は小さな学習率小さな勾配は大きな学習率を持つ。
最初の勾配が大きいものであれば残りの学習率も小さいものになってしまう
学習率はどんどん小さくなっていくので偶然0になって学習が停止してしまうことも起こりうる。

~~2.3  2回微分を用いたメゾッド~~

2回微分の情報はとても有益であるが計算に時間がかかるため
ヘッセ行列の対角成分の近似方法が提案された。

~~3 ADADELTA~~

ADAGRADの2つの欠点を改善させるためにADADELTAのアイディアをこの論文に発表する。
ADAGRADの欠点
(1)トレーニング中ずっと学習率が低下していってしまう
(2)学習率を手動調整しなければならない


~~3.1 idea1 蓄積に直近何回まで蓄積するかを設ける~~
ずっと勾配の2乗和を蓄積する代わりに、直近何回蓄積するかの窓を設ける。
これによって分母は無限まで大きくなることはない

ずっと誤差の2乗和を保存しておくのは効果的ではないので指数関数的減衰させていく。


~~3.2 idea2 ヘッセ行列の近似により、Unitを修正する~~


(Unitとは何なのか??)
パラメータの更新を考えるときunitsは調和されなければならない。
パラメータの変化はunitsの変化でもあるはずである


SGDやMomentumと言った方法ではunitsは勾配と結びついていた。
しかし、2回微分を用いる方法ではunitはパラメータの更新と関係がある????

(此処から先はよくわからない.......)

 

 

 

 

 

 

 

 

 

 

 

 

肉じゃが牛丼を食べるのじぇ!

f:id:daruma3940:20160520223745p:plain
某大御所コンピューター将棋開発者がこんなことをつぶやいていたのじぇ。

f:id:daruma3940:20160520223530p:plain
ゆゆっ!?
おいしそうだよ~~!れいみゅも食べてみたいよ!
f:id:daruma3940:20160520223745p:plain
まりちゃもそう思うのじぇ!
早速買ってきて食べてみようじぇ!!!

f:id:daruma3940:20160521003616p:plain
まりちゃ。れいみゅ。あんまりファストフードばかり食べるのは都会派じゃないわ!
お野菜さんを使ったバランスの良いごはんさんもちゃんと食べないと!

f:id:daruma3940:20160520223745p:plain
まりちゃは若いからだいじょうぶなのじぇ~~
じゃあ早速買ってくるのじぇ!!!!


(30分後~~~)

f:id:daruma3940:20160520223745p:plain
ただいま~なのじぇ!買ってきたのじぇ!
f:id:daruma3940:20160716134727j:plain

吉野家豚丼330円
ファミマの肉じゃが 204円

f:id:daruma3940:20160520223530p:plain
ゆゆっ?すき家じゃなくって吉野家の牛丼なの?
f:id:daruma3940:20160520223745p:plain
すき家は家の近くになかったので諦めて吉野家なのじぇ!
f:id:daruma3940:20160521003616p:plain
しかも牛丼じゃなくて豚丼ね...
f:id:daruma3940:20160520223745p:plain
牛丼は豚丼よりも50円高かったのじぇ!
f:id:daruma3940:20160521003616p:plain
50円ぐらいケチらずに払いなさいよ^^;
f:id:daruma3940:20160520223745p:plain
まあたまにはだきょうっ!も必要なのじぇ!
早速料理するのじぇ~~♪
f:id:daruma3940:20160520223530p:plain
肉じゃがを上にかけてレンジでチンするだけだよ!
簡単だね!
f:id:daruma3940:20160716135505j:plain

f:id:daruma3940:20160520223745p:plain
完成なのじぇ!さあ早速食べようじぇ!!!

f:id:daruma3940:20160520223530p:plain
f:id:daruma3940:20160520223745p:plain
むーしゃむーしゃ...

f:id:daruma3940:20160520223745p:plain
・・・・あれ?そんなにおいしくないのじぇ?
f:id:daruma3940:20160520223530p:plain
確かにそんなにおいしくないね.....

f:id:daruma3940:20160520223745p:plain
これ肉じゃがをかけてないほうが美味しいのじぇ.......
吉野家豚丼には肉じゃがは合わなかったみたいなのじぇ....


f:id:daruma3940:20160520223745p:plain
今度はちゃんとすき家の牛丼に肉じゃがかけて食べるのじぇ.....


~~今回のまとめ~~
吉野家豚丼にはファミマの肉じゃがは合わなかった^^;
今度はちゃんとすき家の牛丼にファミマの肉じゃがかけて食べる

ProbCutについてなのじぇ。

f:id:daruma3940:20160520223745p:plain

今回はタイトル通りprobcutについてなのじぇ。

f:id:daruma3940:20160521003616p:plain

probcutなら前にやったわよね

 

daruma3940.hatenablog.com

 
非常に良い手が現局面で存在するとして
その差し手で浅い探索を行ってみて、その探索で帰ってきた評価値が
beta値を200点も上回るような値であればbeta値をはるかに超えていて
探索を深くしてもbeta以下にはならないと考えられるので
ここで枝切りできる

f:id:daruma3940:20160520223745p:plain

まりちゃは大学に「人間に勝つコンピューター将棋の作り方」という本があることを最近知りそれを読んでみたのじぇ。

その本の習甦のところにProbCutのことについてこんなことが書かれていたのじぇ。

浅い探索の結果を用いて深い探索の評価値の確率分布を予測し、一定以上の確率で結果に影響がない指し手を枝切りする手法。

浅い探索と深い探索による評価値との差の標準偏差に比例するmarginを設定して、枝切りの判定条件とする。

2つの評価値の差が正規分布に依存する場合局面によらず枝切りのリスクをほぼ同じにできる。

 

評価値を予測し、その信頼性をmarginにより考慮して探索を省略できるか判定。

評価値の予測方法は残り深さに依存しない。

marginは理論的に決められる。

 

(p.181,182より引用)

f:id:daruma3940:20160521003616p:plain

  あら?AperyのProbcutのmarginってそんなに理論的だったかしら?

f:id:daruma3940:20160520223745p:plain

ここでAperyのProbCut部分のコードを見てみるのじぇ。

 

 

f:id:daruma3940:20160707224542j:plain

f:id:daruma3940:20160520223745p:plain

 

marginは200と設定されているのじぇ。

これそんなに理論的な値とは思えないのじぇ。

まだFutility marginのほうが理論的に導かれている感あるのじぇ。

f:id:daruma3940:20160520223745p:plain

この方法が統計的推定の信頼区間のような方法で導かれているのならもうちょっと値を正確にできても不思議ではないし、

局面によっては正規分布の勾配が急でmarginが小さくていい局面も有れば、

正規分布の勾配が緩やか(つまり分散が大きい)でmarginが大きいところもあるはずなのじぇ。

この200って値はテキトーとしかおもえないのじぇ。

まあ、まりちゃの理解不足なだけかもしれないけど。

 

f:id:daruma3940:20160520223745p:plain

よくわからないのじぇーーー!!