テレビの取材を受けた

昨日地元のテレビ局RSKの取材を受けた。

コンピュータ将棋のチャンピオンとしてだそうな。

まぁ,優勝したのは一昨年ってのはおいておいて。

 

体調も良くなかったのもあって結構対応に疲れたんだが,冷静に考えてみると私の対応が悪かったのでメモしておく。

 

アポ

取材前日に電話があった。こちらの予定を伝えたがまた予定変更になって結局電話の翌日来られた。特に何の準備もする時間がない。

 

絵作り

時期的に卒論生が忙しい時期だったので別室を用意していたのだが,専門書など雑多な本棚などを背景にしたいという要求に押されて散らかった部屋で取材を受けることになった。学生にも迷惑だったので今後は違う対応をしようと思う。

部屋は普段から片づけておくべき。

 

一般向けの講演資料を広げようとしたのだがアレは40分講演仕様なのでテレビ向きじゃなかった。2,3分で何かが伝わったような雰囲気があればよかったんだな。

ワンフレーズ政治とかいう言葉があったがアレはテレビメディアを利用した最適解ということが分かる。

 

質疑

テレビ局はシナリオを持って来る。簡単に言うと言って欲しいセリフが準備されている。

テ「名人に勝ったソフトにも勝ったんですよね?」

私「電王トーナメントの件ですね。直接対決は予選でしかないのですが,それは負けました。決勝は別の山でしたので直接当たってませんが最終順位は私の方が上でした。」

テレビ的には「順位は私の方が上でした。」だけでよかったんですよね。

他に「ディープラーニング」というバズワードを言わせたかったようだ。意味はあまり理解されていない感じだった。

 

質疑2

簡単な予習はされてきたように思う。頓珍漢な質疑が多かったが,考えてみると素人なりに色々と自分の頭で考えられて質問をされるのでこちらも説明の方法や表現を変えて非常に多くの情報を伝えようとした。他の勉強会ではここまで熱心に質問される方はいなかったのである意味新鮮であったし私が説明手順を改善する機会もあまりなかった。自分のアルゴリズムなども見方切り方によって素人向けに分かりやすい説明も可能なのだなぁと私も学びが多かったと思う。

 

整合性

他の専門家にも取材をされて来ていたようで,○○先生は××と言われてましたが・・・と言う話も幾つかあったが私とは相当意見が違うと感じた。ワンフレーズ的な話なので,予算取りなどが上手な先生はそういうキャッチーな言葉を残すのだろう。私も嘘や不誠実にならない範囲でそういったインパクトのあるフレーズを用意しておいた方がいいのだろうか。未来予測的なものであれば実害が少ない。

 

まぁ久しぶりのテレビ取材だったのだが以前受けた取材よりはずっと良い印象である。以前受けた全国ネット局の方が酷かったがあれは時期なのか局なのか人なのか分からない。

オンエアも私の部分は2,3分程度と聞いているのでわざわざ見るまでも無いかもしれない。

 

AobaZeroで遊ぼう8(sfen対応)

  

あけましておめでとうございます。

とりあえず,お年玉代わりに現時点で公開しておきます。

 

 

github.com

 

不具合等あれば御連絡下さい。

あんまりソース管理適当過ぎてsfen対応部だけを本家にプルリクするのは後日。

 

ーーー

追記:

 

基本的にはAobaZeroユーザ向けの改造版です。既に使っている人が機能不足を感じている部分を補強したものです。実行ファイルおよびバッチファイルの扱いは本家と同じで,オプションが追加されている感じです。

 

具体的な変更点

sfen対応:

主にShogiGUIでの任意局面検討の対応です。

副作用として駒落ち戦も一応動作するようになりました。

致命的欠点としてはAobaZeroはAlphaZeroと同じアルゴリズムを実装しているので局面評価に過去(たぶん)8局面を利用していますが,本実装では現局面だけになります。全くダメという感じではないのでそこそこ動いていると思っています。

 

時間制御:

こちらもShogiGUIでの棋譜解析(固定秒数)対応のつもりでした。ついでに通常対局でも256手上限として残り時間の60分の1を使う時間制御のルーチンを追加してあります。(現在floodgate投入中)

 

探索深さ:

個人的な好みで表示値を変更しました。もとは探索ノード数のlogを取った指標でしたが,読み筋の長さを基準に変えてみました。

読み筋が伸びていくのが数字で見えます。また,読み筋が変わったときに探索深さが一気に浅くなるのも明瞭に分かります。

 

他にも弄ったところがあったかもしれませんが,今日はこんなところです。

 

---

1/4追記 

持ち歩10枚以上のときの不具合がある実装であることに気づいてますが,ほぼ出番がないと思いますので

気が向いたらそのうち修正します。

--

1/23改題

内容的にAobaZeroで遊ぼうシリーズ続編ですよね 

将棋の難しいところ

風邪気味で外出する気が起こらないので古いネタを起こしながら書く。

思い出したきっかけはコレ。

 

  

将棋教室は多く子供向けである。これは次世代を担う人材育成の点から仕方ない。

おっさんは観る将になるか主催するかすればいい。

子どもの頃は牧歌的な地域性もあったのか公園でおっさん同士が将棋を指しているのを覗き込んだもんだ。

 

初級者のハードル

 

1.駒の認識

実際成桂の字体とか子供には難しい。思えば取った後成香と気づいたこともある。

親戚の子供と遊ぶことが多い年末年始は子供が慣れた駒を使うのが良い。

子供向けのシンボル(漢字に限らない)があってもよいと思う。

2.駒の動かし方

これは最近は図示された駒もあるので比較的問題認識もされているし対応されている。

3.王手見逃し,自殺手の件

初級者だと王手が見えないことも多い。子供がよく泣くやつである。

4.上記を踏まえた悪質な反則

モラルの問題でもあるのだが,初級者同士だと盤面の駒を全て見えていないこともよくある。いつのまにか駒台に移動していたり,角の筋が移動していたりである。

まぁ,子供将棋大会は大変だと聞いたこともある。

 

上記の問題解決に電子的に制約を付けるのは比較的簡単である。

ただ,それが実際の問題解決になっているかどうか,つまり初級者脱却の手助けになっているかどうかは怪しい気がする。すぐに不要になる機能であるが,「○○の理由で反則です」と警告を出す程度に留めるのが適当であろう。

 

中級者以降のハードル

 

1.手が見えない

駒が多すぎて,移動できる手が多すぎて何をしてよいか分からない。

初級者あるあるなのだが,これは幅広く上級者でもあるのでここに入れておく。

実際将棋で最も困難なのがここだと思う。

多くのボードゲームが3~6択程度の選択肢の組み合わせで進行するのに対し自由度が大きすぎる。また,その理由付けが難しい。

さらに細かく言語化すると,戦況の把握,自陣敵陣の弱点把握,速度差など色々あるが個々の要素は詰みに絡むもの以外は絶対的ではない。

2.読めない

「3手の読み」という考え方がある。自分の手,相手の手,自分の手と考えて良い選択肢を選ぼうとするものである。実はこれが相当難しい。特に相手の手が見えない。

そうである。上記の1番に起因する。

まぁ,もうひとつは脳内に盤を想定して駒を動かすことが出来ないってのもあるがこれはトレーニング次第である。

詰将棋次の一手問題などの繰り返しなどが良いのであろう。

 

で,どうすればいいか。

1の見えるか見えないかって言うのは直感に頼ることが多い。

棋書では理由付けがされており論理的な筋道で得られるように書かれているがそれでは対局では間に合わない。詳しくは下記の本を参照。

  

で,これをトレーニングするのはどうしたらいいか。

実際私が将棋のAIを開発していた時期に気づいたことであるが,コンピュータ同士の高速対戦を見ているだけでいいのである。もちろん,脳内では局面を真剣に考えている必要がある。1手5秒や10秒程度で多数の局を行う方が良いようである。

これだけでいつの間にか棋風と言うかなんとなくAIが指しそうな手がだんだん見えてくるようになるのだ。

 

実際開発中の私が将棋の懸賞問題を解くに辺り相当の棋力向上をしている。継ぎ盤とメモ用紙があれば高段者向けの問題も難なく対応できた。

興味あれば是非試して頂ければと思う。

 

具体的に教材作りを考えた時期もあるが,残念ながら支援いただけなかったので断念した。

2019年度「破壊的な挑戦部門」一次選考結果発表 | 異能(Inno)vation

 

  

そういえばプロ棋士で天才と言われる人も見える人と読める人とが居ますね。 

 

アレをGo言語でどこまでやれるか

以前Go言語で囲碁実装をした話を書いた。

 

bleu48.hatenablog.com

 

ちょっと思い立って改造してみることにした。

普通に強くするには機械学習ドメイン知識の導入が早い。個人的にはGo言語で実装した所以みたいなところで,王道を行かずパワープレイでってことを考えて多スレッド化することにした。

簡単にはMCTSの並行処理化というところだ。

この辺の再検証のツール(の布石)になるのかもしれない。

モンテカルロ法の精度の話 - 48's diary

 

元ネタがシングルスレッド実装な上,多くの変数がグローバル定義されている。

これをスレッド毎に実装し直し,同期をとるタイミングでスレッド間処理をおこなう。

そんなに難しいことではないが探索木構造など共有する部分があって更新には気をつかう。

簡単にはロックしてしまえばいいんだが,雑にやるとパフォーマンスに影響があるので可能な限りエレガントにやりたい。

 

ということで勝ち数などのインクリメントにはsync/atomicを使うことにした。

・・・

int32とint64しかあらへんやん。

黙ってたらintにするくせに

ということで,変数の型を変えることに。

Go言語はこれらの型を自動変換してくれないので全て宣言しなくてはならない。

ちょいしんどい。

今後最初から組むことがあればカウンタの類は全部int64にしようと誓う。

 

ところで,goroutineを使うときには-raceオプションを一度は試すべきとの話がある。

あー,当然のように木構造の更新でお祭り状態ですわ。

競合じゃなく皆で木構造を拡大していくんで仕方ないですね。

 

で,極稀に飛びます。

このまま放置できないのでデバッグ沼に・・・

 

その後,探索数と勝ち数と勝率の更新は同時でないとダメなことに気付いてatomicが全部無駄になるなど

Go言語でも実装難易度がさほど下がってない気がした。

岡山のITコミュニティと私

この記事は大都会岡山アドベントカレンダーの8日目として書かれております。

adventar.org

 

先月末に合同勉強会 in 大都会岡山 2019 Winterが開催されました。

gbdaitokai.connpass.com

もちろん,知っている人は知っている忘年会議の日です。

当日は中四国のコミュニティ代表者が集まって岡山で交流するのが恒例となっております。

 

当日,私は以下のようなお話をしました。

私が岡山に来てからどのように岡山のコミュニティと関わってきたかという歴史について振り返りました。若い方にはウケなかったかもしれませんが,古株には懐かしい話かと思います。まだまだ加えようとした内容はあるのですが20分で納めるのはこれくらいでした。

なお当日比で若干の加筆修正などが入っております。

speakerdeck.com

 

この話のきっかけは今年のオープンセミナーでした。

当日県外から来られる方が多く,ここ数年は「なぜ岡山ってこんなににぎわってるの?」と聞かれることが頻発しておりました。

冗談っぽく「私のお陰です。」と流していたのですが,詳細を聞かれるとまぁ,上記の発表のような話をしたわけです。

そういう話は古参が撤退する前に一度やっておく義務がある旨言われましたのでどこかでお話ししようかと考えていたわけです。

 

okayama.open-seminar.org

 

思えば10年以上,地域コミュニティと関わってきました。

最初のきっかけをくれたのは香川・高松のコミュニティでした。偶然うちの職場近くに引っ越してきた大垣さんとの縁も大きいでしょう。しかしながら,やり始めると多くの手助けをして下さる方が集まったのは運や縁だけでもない気がします。

当初はジャンルの差が大きくて双方のネタが滑りつつもほとんどのジャンルにほとんどの人間が話を聞くスタイルは地方都市ならではの学習スタイルかと思います。

オープンセミナーもマルチトラック化を考えた時期もありましたが,やはりシングルトラックで全員が同じ話を聞くのが懇親会への流れを生むと思っております。

とにかく面白いネタを持ってそうな人を探して登壇まで運ぶ,その下準備に動く多くのスタッフに支えられて多くのイベントが開催されました。私もいくつかの飛び道具を使いましたが,なるべく一参加者,一裏方のポジションを忘れず,主役は参加者との姿勢で運営できてきたと思います。

今では個々の技術やカテゴリーで多くの細分化された勉強会・コミュニティが岡山でも育っております。発表中にヤジる文化はもしかしたら私のせいかもしれませんが,わいわいやれているのは何よりすばらしいことです。

 

と,こんなことを書いていると引退する気かと言われそうなのでこの辺にしておきます。

自作AIの会やオープンCAE勉強会の次回はまだかとか言われますが,私の自分自身のスケジュールが組みやすくなったら開催したいと思います。

 

今年も多くの方にお世話になりました。皆さん良いお年を!

 

 

ちょいとレビュー

福井大学大学院の研究報告だそうな。

http://www2.eng.u-fukui.ac.jp/wp-content/uploads/vol68_1-12.pdf

 

藤井聡太をネタにするのは個人的にどうでもいいのだがざっと目を通して気になった点があったのでメモしておく。

 

1.前置きの話

Webネタを引いて書かれているが元ネタは論文があるのでそちらを引用した方が大学の研究報告として適切に思う。

 

2.一致率計測はあまり意味がない

手が広い場面では7,8手が似たような評価値を取るケースも多いし,戦型によれば一直線な場合もある。一致率はあまり意味がなく,評価値の差をとる「平均悪手」で評価するのが適切であろう。

ShogiGUIで手動集計された旨記載されているので尚残念に思う。

 

http://www.yss-aya.com/20171013yama.pdf

引用するなら,将棋名人のレーティングと棋譜分析,ゲームプログラミングワークショップ2014論文集 (2014), 9-16, 2014-10-31

 

3.Hashが少ない

棋譜解析させるならせめて20GBは欲しいと以前から言っているところ,本件は60秒で1GBである。大半の探索が無駄になっている気がする。10秒で4GBの方が随分マシに思う。まぁ,人間の手を評価するには微差かもしれないが

 

4.リリース時期

恐らく一番致命的なことだが,各ソフトウェアは任意に入手可能であるし,プロ棋士が参考にしていることが知られているし近頃の棋譜解説はその話が無い日が無いと言っていいレベルである。また,Bonanzaおよび技巧についてはプロ棋士棋譜をベースに機械学習が行われている。ということで相互影響が強くあるため時系列の関係が重要になる。可能なら間に2017年版のelmoを加えて欲しいくらいである。

要するに,各ソフトウェアとプロ棋士との相互影響を無視し独立的に取り扱った本件は非常に残念である。

 

違和感のあるところだけざっとリストにしただけなので特に否定的なつもりもない。最後の点など改善されると(恐らく学生さんの論文が)面白いことになるのではないかと思っている。

 

GPW-2019

今年もゲームプログラミングワークショップに参加しました。

https://www.logos.ic.i.u-tokyo.ac.jp/~tsuruoka/sig-gi/gpw/

 

初日の最初の枠でしたので,遅刻しないように気を配ったのだが事故渋滞などで多数の遅刻者が出たため初っ端からセッション開始時刻を遅らせてのスタートとなった。

発表内容はMulti Ponderで未検証部分の確認とそれを踏まえた実践振り返りで有効性の実証について。予稿にはないが,最後にYorkieはやはり定跡や時間制御に関して何か特殊な対応をしていたんじゃないかという憶測を加えて発表を終えた。

 

他の方の発表は昨年よりやや囲碁,麻雀,カードゲームの類が増えていた感じで若者の傾向かなぁと思った。知らない用語も多いので今年も学びが多い。勉強の材料が今年もどっと増えた。

 

この集まりはアカデミックな研究発表ももちろんだが,夜の部での対戦が面白い。

昨年はコンピュータ将棋の対戦に参加し優勝したのだが,今年は開催されないとの情報を得てから囲碁の準備をした。

Go言語の囲碁実装ということでGoGoと安易な命名

さすがに3日程度の準備ではひとつも勝てない。

   

github.com

 

01から09までが参考勉強会のほぼ移植。

Go言語の文化に合わせてちょっとだけキャメルケースにした名称とかがあるくらい。

09でMCTSの基本までが完成。

09aがGTPプロトコルを吐くように突貫工事をしたもので,一応反則することなく対戦出来た。

 

 

結果は上にも書いた通り全敗である。といってもZenとAyaが相手なので相当に強化していかないと結果は同じになりそうである。一番の収穫は色々と情報を得られたこと。

過去のソフト開発の経緯や改善点,同時期のライバルなどと現状からの改善策や争点などなどである。モチベーションが上がりますなぁ。

 

 で,3人参加の全敗にも関わらず3位として表彰頂き副賞まで頂けた。次回は実のある勝負をしたいものである。

 

 ---

追記:

対戦相手ですがZenとAyaであってDeepZenでも夏風でもないのです。ノートパソコンでシングルスレッド縛りの対戦でしたので恐らく深層学習ではないモデルでしょう。