倍速学習のススメ

どこかの懇親会で話題になったのがきっかけだと思うが,個人的に学習ペースが異常であるように言われる。まぁ,常人離れした能力の持ち主は知人にも多数いるので私が特別と言った意識は特になかった。考えてみるとモノを教える側にたって久しいが以下の二つくらいが肝な気がする。

 

1.自主性

私は幼少期に運動制限をつけられていたせいもあって図書館などにこもることが多かった。とくに意識するわけでもなく自主的に多くの分野の本を読む癖がついていた。個人的には出張時なども先々の大きな書店・図書館を巡ることが多い。良くも悪くも癖になってしまっている。

長編小説などは苦手であったが海外出張が続いた時期にいつのまにか読めるようになっていた。こういうのは一度癖をつけないと無理らしくどうしても眠くなってしまう人や耐えられない人がいるらしい。

自主的に新しい分野の知識を入れる人とそうでない人は何倍とか言ったレベルではなく差がつくのだろう。

 

2.倍速

気分を害する人が多いようなのであまりネタにしていないのだが,私立の進学校の出身である。といっても中学校時代は公立で暴力事件などが多いところで育ったので高校入学時のギャップがすごかった。入学時は最低レベルの学力+品行が悪いということで親は担任から個別に強く注意されたらしい。経緯も色々あるが中高一貫校への編入ということで授業が倍速で行われた。(他は知らないが中高一貫進学校では結果的に前倒しで授業を行って入試対策に時間を取る体制になっていた。)

英語は1年次に二年分教科書が通り過ぎたし数学も同様,日本史なども半年くらいで終わった気がする。クラス内ではペースが追い付かず学力的に崩壊するものが多く出て保護者会が紛糾したらしいが,私は元々劣等生であったためクラスの中の下であればギリギリ落ちこぼれてないという扱いになっていた。10代で負けて当然の開き直りができたのは有り難い。10点台のテストでは少々堪えたが。

概ねの一般的なカリキュラムが終わり2年後期からの受験対策の段階には復習(それも念入りな)という段階に入る。一応一通りは教わったもので自分に抜けている部分だけを押さえるのは比較的楽だ。それも数回行うチャンスがある。更に有り難いことに優秀な同級生に質問をするとほぼ完ぺきな回答が得られる。この作業は周りと比較して得意だったのかもしれない。卒業前には教える側になることが多くなった。

 

記憶に残っている話として担任の言葉である。「君たちは通学路を年200回ほど通る。3年で600回だ。この間に無意識にでも途中の店や建物の順序が自然と頭に入る。しかし同じ時間をまとめて与えて覚えろと言われてもそれはまず不可能だ。一度で無理なことも何回も繰り返すことによって無意識でも少しずつ積み上げていつの間にかしっかりした記憶になるのだ。」

まぁ,一回で完璧ってのは無理なので失敗して修正することを前提に何度もトライするのが成功への秘訣ってやつかな。運動でもなんでもだけど失敗を恐れない小さい子の方が習得が早いことは多い。

 

また,倍速で行うと言えばギターやピアノなど楽器類も倍速演奏という練習法があるらしく何度か繰り返すと普通の一倍速のときに余裕が生まれるんだそうである。これも程度を間違えると変な癖になることもあるらしいので自分に合った適当な速度に収めるのが良いだろう。

ネット動画で学習するのが今の流行りだそうだが倍速で二回見た方が良いこともあるだろう。閲覧時間が短いことに訝しんでいる教員もいるようだが結果がよければ手段は人それぞれで良いように思う。

 

個人的には数学系Youtuberを等倍でみてる。

---

注)

倍速学習は自主的にやるものなので強制された場合モチベーション自体が崩壊するリスクがあることをお忘れなく。

PCの世界とHPCの世界

PC:パーソナルコンピュータ,言わずと知れたパソコンです

HPC:ハイパフォーマンスコンピューティング,スパコンの世界です

 

もう随分になるけどPCクラスタというのが一時期流行りました。

低コストなPCを複数集めて特殊なソフトで連携計算させることで1台では不可能な計算処理をさせる技術です。貧者のスパコンと呼ばれたこともあります。

私も予算がない割にそれなりのシミュレーションをしたいとの欲求で独自に試作を繰り返して一時利用クラスタってものを使うノウハウを確立させたことがあります。(オフィスのPC群を土日だけ使うような利用法を想定しています)

 

HPC界隈も古くは専用OS,専用アーキテクチャでありましたが,PCクラスタブームの流れで主流もPCクラスタ構成のものが一気に増えました。CPUがインテルの64ビットでOSがLinuxというのがTop500の大半を占めた時期もあります。

また,これはクラウドブームのはじまりでもありました。画一されたハードウェアを大量に用意しネットワーク越しで必要とされた人に必要とされた分量だけ貸すシステムですね。

これを利用すればPCクラスタ的なことができることはGoogleの岩尾さんが円周率計算でも示しています。

「自分の好きなことを自信を持って追いかけて」グーグルの技術者・岩尾エマはるかさん 円周率のギネス世界記録を更新! | junglecity.com

 

ところで,よく言われるスパコンって要るの問題です。PCクラスタで足りるなら十分な気がしますが,現在はさらに高度なアーキテクチャを用いたスパコン開発が進められています。何に使うのでしょう。

 

1.無いとできない

よく例に挙げるのが気象予測です。昭和の人間は台風の進路が予測できなかったことを知っていますが今の方は予想通り進む台風を見たことしかないようで有難みが分かりづらいかもしれませんが降雨についても同様です。高精度化した理由は計測ももちろんありますが,気象予測数値シミュレーションの効果は大きいです。

明日の天気を予測するのに24時間かけて計算するわけにいかないので,基本的に早く終わる程度の計算で妥協して予測しているのが長く続く現状です。30年前に同じレベルのコンピュータ(と使いこなす技術)があれば同じ精度の計算ができたことでしょう。

同様のことは多くの他の分野にも言えますね。

 

2.日々積み重ね

スパコンレベルのシステムは設計できる人,制作できる人が限られています。それも日々進化の過程にあります。国会で突然予算が承認されたからと言って突然研究開発が進んだり突然完成品が生まれたりはしません。常日頃から研究開発を進めておいてこそ最先端の技術が花開くのです。目立たない活動が多くの科学技術の支えとなっていることは言うまでもありません。

 

では,クラウドのサーバ群とHPCでは何が違うのでしょう。

クラウドのサーバ群は高可用クラスタと分類されます。現在使われている仕組みだと基本的には小さな処理を多く分散して行います。そのなかで不具合・故障などがおこったものを他のものが肩代わりして全体としてトラブルがないように作られた仕組みです。

比べてHPCは全体でひとつの大きな作業を行います。部分的には不具合補償の仕組みがありますが基本的には小さなトラブルで全体が止まります。しかしながら大きな計算を行うには他に方法がありません。

 

以上のようにHPCは特殊な要素を秘めています。

ソフトウェア開発においても同様でHPC用のソフトウェア開発は専門家の仕事です。PCレベルのものと共用できるものも無いわけではありませんが概ね特殊な技術です。

 

ぼちぼちオチですが,昨今PCが多コア化してきています。特に高級スリッパと言われるAMD Threadripper 3990Xは64コア128スレッドと個人で保有する最高数になっています。このレベルのソフトウェア開発となるとHPCに近くなっているのです。実のところ多くのソフトウェアが十分な対応ができずにこのハードウェアを生かし切っていないというのが現状です。面白いですね。

 

個人的には一台手元に欲しいかなと思っていますのでよろしければカンパ下さい。

kampa.me

二番絞りシリーズについて

叡王戦途中で寝落ちて深夜に目覚めてしまったので日記更新してます。

夕休前に豊島竜王優勢でしたが,そのまま押し切ったようです。

 

ところで,今回の電竜戦予行でやはり個人的目玉は二番絞りです。

  

主旨はfloodgate上の以下の比較でしょう。

Player Statistics

Player Statistics

 

あまり計画的に命名していないので酷いですが,2nd_pressは連続対戦テストでした。V100×4のうち3つを使って,前回の二番絞りモデル(選手権用に作った教師データを絞ったもの)で探索しています。まぁ普通なのですが連続対戦時にトラブル等で落ちてません。(確認大事)

nibanshiboriは電竜戦の後,そのまま接続サーバだけ変えて戦ってますので電竜戦と同じでV100×4で今回AobaZero教師で学習したモデルです。電竜戦予行では対戦相手都合(?)で落ちてしまいました。

 

ええ,V100のひとつで昨日(電竜戦予行3当日)の昼まで学習しておりました。

テスト数局ですが割と強くなったなぁと思ってます。

特に強敵相手に負ける場合でも序中盤でこちら優位くらいの局面まで誘導できている感じはあるので結構満足しています。

 

元ネタは二番絞りのコンセプトのままですが,今回の進展は遊びといいつつそれなりに構想はありました。

 

1.深層学習の強化学習は計算機コストがとんでもない(個人では辛い)

2.3年前はfloodgateデータ(十数万対局)ややね師匠配布データ(100億局面)などで試行

3.3年前GTX1060から今はRTX2080TiやV100で,全体の学習速度と一度に扱えるミニバッチサイズが劇的に増えている

4.AobaZeroデータ(1470万対局,約200億局面)の公開

 

1は言うまでもないですが,ガチでやってる山岡さんとか囲碁やってる山口さんとか計算能力に飢えてる感じですよね。GPUを個人資産で10枚以上持ってますよね。私には無理と思ってます。

2は言語化しづらいのですが結構色々試してます。2017年から始めたものですが自分の中にノウハウが構築されている感じです。それなりに勘が効くレベルになってきた感じですが客観的データで裏付けしなくてはならないなぁと思うこの頃です。

3については1の裏返しですね。初期に始めたときはGPUメモリが6GBだったのがV100で32GB使えるのが大きいです。半精度浮動小数点数で更に倍って感じです。お借りできたのがミソでしょうか。

4はもちろん現行最強と言っていいデータだと思います。やねうら王系でも教師データを作りますがfloodgateの実戦レベルで1000万対局はリソースが足りません。学習手順含め公開頂けているので感謝です。

 

と条件が揃ってこその二番絞りです。自己強化ができなくても絞りだけ試みてみるのも一興と言ったところでしょうか。

データ構造が違いますがそれに合わせた学習部を作成するのも楽しいものですよ。

---

追記:

教師データの質についてはこちらが詳しい。

tokumini.hatenablog.com

電竜戦の予行3

電竜戦の予行演習3が先ほど終わりました。昨晩8時から12時間以上の対局でした。

総当たり33回戦という前例のない耐久レース,参加者観戦者皆さまお疲れ様でした。

 

golan.sakura.ne.jp

 

結果は見ていただければ分かるのですが,うちからエントリーしたのは3つです。

 

shotgun_zero

電王トーナメントでデビューした疎結合クラスタの最新形になっております。クラスタのノードは手持ちのPC群でXeonやi9です。予行ということやどうせ3990Xには敵いませんのでAWSは使いませんでした。

未確認ですが全着手ノータイムでサーバのテストをする設定になっています。12時間以上に渡り再接続なしで無事通信を終えました。

 

二番絞りプレミアム

予行2で登場した二番絞りが意外に強かったので更に教師データを追加しました。今回はAobaZeroの教師データを投入しました。ギリギリまで学習させていたので強さのほどは未計測です。対戦には借り物ですがV100が4枚刺さったものを投入。

dlshogiを叩き台としたPV-MCTSアルゴリズムですが,6万npsくらい出ていたはずです。名人コブラに勝利したのがまぐれかどうかわからないので,floodgateに突っ込んでおきます。

 

地ビール

Go言語の習作として作成したフルスクラッチの将棋ソフト。現状はshotgunクラスタもGo言語で書き直して完全に非同期で独立して動くクラスタになっています。ほぼ副産物なのですが,ちょっとした実験でPythonだとやってられないなって案件でも利用しています。

今回は前回に加えて宣言勝ちルーチンが追加されてました。相手の宣言勝ちも読むので宣言勝ち阻止も上手なはずなのですがAobaZeroにほぼ全駒されて469手宣言勝ちされてしまいました。また,今回奇跡的にカツ丼将棋に勝っています。

 

次回の電竜戦は来月予行4があって,11月に本戦です。

 

Kampa!はじめました。

以前からIT系のコミュニティで流行ってまして私も贈り側には何度もなっているのですが,Kampa!の募集側をはじめました。

 

kampa.me

 

ターゲットはRyzen Threadripper 3990Xです。

もちろんこれだけで機能するものでもないのでマザーボードやメモリは当然必要になります。

 

コンピュータ将棋を2017年にはじめてデビュー戦電王トーナメントで準優勝,翌年の選手権で優勝,以後準優勝などと雑に流しますが,前例のないレベルの戦果を挙げています。

しかしながら,現状資金に困っております。電王トーナメントと選手権の賞金を合わせて170万円+私の財布が本プロジェクトの全資産です。意外に思われるかもしれませんが科研費や異能vationプロジェクトなど公的機関への補助金申請は不思議なくらいに採択されていません。また,私の給与レベルですとボーナスはクラウド利用などであっというまになくなってしまいます。

 

また,選手権や電竜戦では用いる計算機は自分で用意するという甘く雑で厳しいルールですので最高の性能を持つものを用いるのが優勝候補の最低限のたしなみと思うのですが,現状これはクラウド上になく上記のRyzenになります。つまり10万円程度で二日借りるといったようなことができません。

これが無い場合大会エントリーする際に優勝候補とすら言えなくなってしまいますので本Kampa!ご支援頂ければと思います。

 

多ルートで支援をお願いして回ったのですが無形物にお金を出してもらうのはなかなか難しいものですね。

PyConで話してきました

pycon.jp

 

依頼を受けたのは随分前だったので,上京する予定でした。

某ウイルスのためオンライン化した際に再度打診を受けてオンラインでもやってくれるかとの確認があって,ややモチベーションが下がったのですがせっかくなので受けました。

上記リンクを見れば分かるのですが同時通訳付きの二日間のカンファレンスで冒頭キーノートです。

公開されてはじめて知ったのですが5トラックのひとつで良いよぉって思いました。

 

準備していた資料は十分1時間分のつもりだったのですが,何のリアクションもない中ずっと話続けていると間を取ることを忘れてやや早くなったので反省しております。

機材的な話だとヘッドセットよりスタンドマイクの方を用意すべきでした。音声いかがでしたでしょうか?

 

お話したのは2018年に広島で話した内容に若干の追加アレンジを加えたものです。Python+Jupyterでこそ小さな実験を多数できたってのがPyConらしい肝ですが,なにより気楽にコーディングして人の目に晒すってのがもっと大きな姿勢と言うか文化でしょうか。

興味が出てきた方は何からでもとにかく自分で動かすってのをやってみて頂ければと思います。

 

また,最後になりましたが多数の素晴らしい質問を頂きましたことこの場ですが感謝申し上げます。

運営の皆様も貴重な場をありがとうございました。

---

追記:

電竜戦(予行だけでも)参加してみたいなぁと思った方はとりあえずこの辺の記事を参考にエンジンを作ってみて下さい。

bleu48.hatenablog.com

---

追記2:

後になって気づきましたが普段の発表だと会場のリアクションなどを見ながら補足説明などを加えたりしているんですよね。今回そういったことを全く入れていなかったので事前知識のない方などには伝わりにくいものだったかもしれません。

---

追記3:

Slackのどこに質疑系のチャンネルがあったのか(開催中に)見つけられませんでした。質問等あればここでもTwitterでも遠慮なく御連絡下さい。 

AobaZeroで遊ぼう16(続・入玉宣言編)

前回が入玉宣言編でした。

bleu48.hatenablog.com

 

floodgate上ではなかなか入玉宣言できなかったのが残念です。

ちょっと思い立って手数偽装を施しました。(移植しただけ)

 

ここで言う手数偽装とはAobaZeroが本来512手制限で自己対局を行い強化学習をしており,NNの入力値がこれに近くなってから宣言勝ちの準備をするように結果的に学習されているため,手数制限256手のfloodgateにおいては手数を増した偽装をしてNNに入力をしようとするものである。

 

結論から言うと以下のような感じです。

Player Statistics

 

元々p200 t4で回していたものを置き換えました。p200が消えたのはその場で探索時間を変更するルーチンを有効にしたためで結局使っている時間は平均的には少し短くなったくらいです。フィッシャールールのため溜まった時間が使えるので部分的には長くなったところもあります。

AobaZeroのCPU版は以前も言及しましたが並のPCで秒5手くらいしか読みません。4スレッドで秒20手,これをだいたい10秒考えさせていたのがp200 t4でした。

直接レーティング比較してはいけませんが100近く向上しているようです。

人間的に見ると宣言勝ちが多い異常な将棋ですね。