祭囃子は遠く、

祭囃子は遠く、

無職のハッピーエヴリディを書いていきます。

生活

日記

昨日からひょんなことで生活リズムが崩壊してしまったので、せめて沢山運動しようとおもって運動したら体調が悪くなりました。
明日は多分四足歩行でしょう。

おわりに

明日から徐々にキャプチャのプログラム書いていこうかな。openCVは物体認識で少し触ったんですが、そんなに自信ないですね・・・。
上手くいったら形にするところもやってみたい。

今日のおすすめ

kawaii future rockというジャンルらしいです。調べた感じ作曲者がデータサイエンス系の人・・・?
www.youtube.com

考えるって難しいね

雑記

考えるって何でしょう。何か創作しているのか創作の準備をしているのか、すごく抽象的なものに思えてきます。現在、今まであんまり触れなかったような問題を問いているんですが、思考時間が作業時間をはるかに上回っています。

ふと、今まで自分はどういうプロセスで”理解”してきたのだろうと考えました。小学校では九九を覚えるために、ひたすら暗唱をする時間があった気がします。
詳しくは記憶にありませんが、おそらくきっと9+9+…+9=81という演習問題をやってから「くくはちじゅういち」という答えを暗唱していたのだと思います。
答えを覚えるというのは、ある意味一番強力だと思っていて、それは思考なしに答えが出るようになるからです。
フルマラソンを走った後であろうと、40度の熱が出ていようと、たいていの人は9*9=81という答えを導き出すことができます。理由は先ほど述べた通り思考がいらないからです。

結局学習に何が大事なのかって色々あると思うんですが、本質的には”記憶”にあるような気がします。
じゃあ教科書一字一句全部覚えたやつが一番賢いのかというとそんなことはなくて、それは記憶の仕方が(おそらく)よくなさそうです。
メモリに例えると、教科書の記憶がメモリ空間上の適当(悪い意味)な場所にあって、アクセスにも時間かかるし、体系的に想起することもできないような状況になっていそうです。
体系的に学ぶということは、関連するものを隣接したアドレスに書き込んでいくようなイメージでしょうか。
おそらく脳みそはもっと高次元なつながり方をしているので、そんな単純にマップできるかわからないですし、ちゃんと調べていってるわけではないですが大きく外れてるという気もしません。
”理解している”と”知っている”の違いはこの辺にあるのかなぁと思っています。結局考えている状況は関連していそうな記憶を”思い出して”いる状況なのかもしれません。それが遠いのか近いのかはその人次第です。

話がそれましたが、いま僕はおそらく九九に立ち向かっている状況です。確かめれば本当にそうなっていそうなのはわかるけど、答えを覚えることも大事な時期、ということです。
まだいろんな知識がぷかぷかと浮いているような感覚で、それらを繋げてくれるような背景も僕にはありません。今までさほど頑張らなかったので。
でも、今はとにかく考えて何か使える知識はないかと思い出したり、昨日やったことを結び付けて覚えていく作業をしたりしています。
思い出す作業はもちろん具体的なモノが仕上がっていく過程ではないので、すごく焦ります。しかも、この作業は自分が今までさぼったツケを払った後にやっと本質的な難しさに触れることができるので、余計につらいです。
しかし、学習は最初のつらい期間を抜ければ一気に世界が広がっていく感覚を得られる、ということもまた理解しているので今はとにかくやるしかないのです。

三日坊主

あぶねえ・・・三日坊主になるところだった・・・。

日記

今日はジムに行ってきました。母親がジムジムうるさいので一緒に入会しました。
でもちょうど体力はつけたかったので、最高のタイミングです。

去年度は体力がなさ過ぎておぼれかけて死にそうになったり、帰りのバスに遅れかけて雪山に置き去りにされかけたりしました。
しかし、ジムに通うことで無限に泳げるようになり、スノーボードも上手になるでしょう。

おわりに

今週は珍しくほとんど予定が無い週で、早くもニートとしての素質が試されています。
今週は主にアルゴリズム体操してるんですが、統計の勉強もちょくちょく進めてます。
11月にある統計検定1級合格を目指してるんですが、どうなることやら。

今日のおすすめアーカイブ「アイドル部学力テスト」

これは・・・”番組”だ

www.youtube.com

日記

今日は宮崎えびの市のぷよ大会にいってました。福岡から宮崎までブゥーーーーンしたんですが割と遠い。
田舎は交通費がめちゃかかるから結構金かかるんですよね。

大会自体は今回も楽しかったんですが、失得点差で敗退したので結構悔しかった・・・。
でも九州の大会はそこそこ勝てるから好きです。(関西では大体1回戦で負けるので)
あっ!レートでよく当たる人だ!みたいな人にも実際会えてわりと感動しました。

f:id:ta_ichi:20190406230336j:plain
中華料理”チャイナ”

おわりに

本日初顔出しぷよ実況をやらせてもらったんですが、難しいですね。
ぷよぷよが下手なのでよくわからないですし。

明日もウンカツ!(運転手活動)

運転手

日記

今日は家のデスク周りの環境を整えようと思って、外に出かけていました。
実家には勉強机がもうないので普通のテーブルを改造する必要があります。
なにせ普通の机なので高さもなく、厚めの椅子に座ることすらできません。しかし、椅子に座らないとおしりがとても痛くなってしまうので買いに行くことを決意しました、車で。
買いそろえた結果が以下になります。

f:id:ta_ichi:20190405205635j:plain
tehu法でAtcoderのページを見せたいとかそういうわけではないです

おわりに

といいつつ競プロには触れますが、ぼちぼち再開することにしました。というのも弊社はわりとこういうのに力を入れてそうだからです。
あまりにしょぼいとマウントを取られかねないので、入社までに緑を抜けるくらいにはなりたいですね。

あとぷよらーkaggle部が発足したので早速なにかのコンペに出ようと思います。
今はこれに出ようと考えています。
www.kaggle.com
ざっと読んだ感じ株価予想かな?

明日はこれ行きます、楽しみ
puyo-camp.jp

無職

お友達が日記をつけ始めたこともあって、僕もぼちぼち更新しようかなと思いました。

近状

4/1から晴れて無職になった僕なんですが、今のところ毎日がたのしいですね。
なんで無職なのかって話もありますが、そんなことはどうでもいいんです。今まで生きてきて基本的に学生でなかった時間はなかったんですが、こうして解放されてみると思ってたより不安がないというか、若い純粋な時間を使えるというドキドキ感の方が勝ってます。
ドキドキ感だけでは仕方ないもんで”上手く”使う必要があるわけなんですが、これがまだわからない。一応グダグダ一日を過ごす、ということはないんですが・・・。

日記

今日は朝起きてPCの環境を整えたり、過去のプログラムを整形したりしていました。案外人に見せることが大事、ということに気づいてきたので。
あと夜に寿司が食いたくなってきたので寿司を食べにいきました。くら寿司に行ったんですが、今回もまたびっくらポンをoffにしてしまいました、悲しい。

ところで、今度伊藤ライフ先生が策がしたVtuberにじさんじからデビューしますね、チェックしていますか?僕は追ってるVtuberをリストで管理しているんですが、さっそく追加しておきました。

f:id:ta_ichi:20190404231048j:plain
実家で飼っている"強そうな猫"です。

おわり

あんまり長く書いたり面白くしようとすると一瞬でモチベなくなるんでこのくらいの無味さを保ってぼちぼち更新していきたいと思います。
最後におすすめのアーカイブでも貼っておきますね


エモくて百合と噂の「ライフ イズ ストレンジ / Life is Strange」を実況プレイ #1

卯月コウお得意の推察も面白いんですが、ゲームが良い。ただ最近長めのゲームをやる元気もなくなってしまいました、悲しいね。(だからこそ配信にはまっているのかもしれませんね)

ぷよぷよと連想記憶【準備編】

こんばんは、すしくんです。

今回は前回の
scitaku.hatenablog.com
この記事の最後の方で、pottsモデルにぷよのフィールドを連想記憶として埋め込みたいということを言っていたので、今回はそれをやってみました。

連想記憶については前々回の
scitaku.hatenablog.com
これを読むとなんとなくわかると思います。

目次

はじめに

前回言っていた通り、イジングモデルの逆推定問題(連想記憶)を拡張し、pottsモデルのパラメータをデータから逆推定するプログラムを書きました。
学習方程式は、イジングの場合とほとんど変わらなかったので、以下では結果を天下り的に書きます。
また、今回はデータを大量に準備する気力が湧かなかったので予備実験までの結果を載せて終わります。(誰かデータ作ってくれ)
一応学習方程式導出の詳細をアップしておきます。
・計算ノート
プログラムもgitにあげたいと一瞬思ったんですが、あまりに汚いのでやめました()

モデルと学習方程式

まずpottsモデルとはイジングモデルのように0か1だけでなく、0、1、2、…qー1の状態を取れるように拡張したモデルです。
難しく考えなくても、ぷよぷよのように赤ぷよ、青ぷよ、黄ぷよ…と状態を変化させられると考えると良いです。

f:id:ta_ichi:20181123010309p:plain

このモデルは上のように、様々な「色ぷよ」状態をとりつつ他の「ぷよ」と相互作用するようなモデルです。
実際のぷよぷよもある点に様々な色のぷよが存在していることからも、このモデルがぷよぷよをよく表現してくれそうという期待が持てます。
また、このモデルでは色ぷよの配置によってエネルギーを定義でき、今回は以下のように設定しました。\delta(v_i-v_j)はあるぷよviとvjが同じ色ならば1、違うならば0となるように定義しています。

U=\sum_{(i,j)}J_{ij}\delta(v_i-v_j)+\sum_{i}^{N}\sum_{\mu}^{q-1}b_i^{\mu}\delta(v_i-\mu)

J_{ij}は相互作用の強さで、負符号だと相互作用しているぷよと同じ色ぷよになりたがり、正だと違う色になりたがります。b_i^{\mu}はバイアス項(物理ではゼーマン項と呼ばれます)で、負符号の場合はあるぷよについてある値\muに対応した色ぷよにさせようとします。逆に正だと違う色にさせようとする効果があります。


以上を踏まえた上で、このモデルでぷよぷよのフィールドを再現する、というのは例えば階段連鎖を考えてみます。(一部切り抜いたフィールドと思ってください)
J>0として、簡単のため線で繋がれたぷよ同士に相互作用が働くことにしています。そうすると階段連鎖は、マイナス符号がついている組には同じ色ぷよがきて、正符号の相互作用が働くところには違う色が来て欲しくて…となっていることがわかると思います。(J,-Jは一部しか書いていませんが他のところも同様に考えられます)

f:id:ta_ichi:20181210214701p:plain

更に遠くのぷよと相互作用する組を考えると、例えばタブーの形にはならないようにパラメータを調整していけることがわかると思います。

このことからわかるように、pottsモデルにおいて「あるフィールドのデータから相互作用の強さと符号を推定し、連鎖において何が大事なのかを推定することが可能ではないか」と思って今回の遊びをはじめました。

また、詳しい人は疑問に思ったかもしれませんが、一般的なボルツマンマシンでは表からは見えない「隠れ変数」というものを導入します。これはeffectiveに3、4、5…体の相互作用を取り入れることができ、非常に強力です。しかし、今回はまずシンプルなモデルから出発したいのと、結果の解釈が難しくなることから採用していません。しかし、多体の効果は連結に対して効率よく損得を考えることができそうなので、いずれやってみたいですね。

さて、本題に戻ります。

pottsモデルの隠れ変数なしの一般的な学習方程式を天下り的に与えると

<\delta(v_i-\mu)>_{model} = <\delta(v_i-\mu)>_{data}
<\delta(v_i-v_j)>_{model} = <\delta(v_i-v_j)>_{data}

このようになります、上の式については\mu=0,1,..q-1についてそれぞれ別々に考えます。<\delta(v_i-v_j)>_{model}はモデルから\delta(v_i-v_j)という(物理)量を計算し、その平均値で近似することができます。<\delta(v_i-v_j)>_{data}は簡単で、入力したい(学習したい)データ全てに渡り平均をとればすぐに計算ができます。
要するにこの学習方程式は、データのある色がどのくらいあるかの平均(を1ぷよあたりに直したもの)と、モデルから計算される平均値を同じになるようにしなさい、ということです。二つ目は、データとモデルの間のあらゆるぷよ2つの組みの色関係を揃えなさいと言っています。
イメージとしては色ぷよの数だけイジングボルツマンマシンを並べて、それを二つ目の式で繋いでいるといった感じでしょうか?個人的には\delta(...)が結局イジングになるだけなので本質的には何も変わらないと思っています。(そっちの方が既存の手法が適用できて楽)

しかし、ぷよぷよの計算に以上の方程式を適用する場合、若干の不便さがあります。それは連鎖において「色そのもの」というのはなんの意味もないからです。
実際のフィールドを考えてみると

f:id:ta_ichi:20181211190039p:plainf:id:ta_ichi:20181211190037p:plain
この左右のフィールドでは何も本質的に違いはないです。左ではGTRの部分が青ですが右は赤、L字は…となっていますが色の位置関係さえ同じならば等価です。つまり、例えば「赤、緑、青、黄」に「1、2、3、4」と番号をつけて連鎖を記述した時、数字はそのままで色を1つ押し出すイメージで入れ替えて「黄、赤、緑、青」とみなした時の連鎖、「青、黄、赤、緑」、「緑、青、黄、赤」とした時は全て同じになります。
最初の色の並びを"回した"配列は変換の前後でフィールドを等価にします。
この対称性を考慮した上で今回の学習方程式は

<\delta(v_i-0)>_{model} = <\delta(v_i-0)>_{data}
<\delta(v_i-1)+\delta(v_i-2)+\delta(v_i-3)+\delta(v_i-4)>_{model} = <\delta(v_i-1)+\delta(v_i-2)+\delta(v_i-3)+\delta(v_i-4)>_{data}
<\delta(v_i-v_j)>_{model} = <\delta(v_i-v_j)>_{data}

今回は何もない空間にも状態を与えているため、0を対応させています。この学習方程式では、ぷよがない空間以外はバイアスが同じ値になり、色ぷよの変換に対する対称性を反映させることができます。

計算

では、具体的に学習方程式から学習がどのように進むかみていきましょう。
コードをあげない代わりにプログラムの流れだけ書いておきます。

  1. 学習データから<\delta(v_i-v_j)>_{data},<\delta(v_i-\mu)>_{data}を計算する
  2. フィールドに適当にぷよを配置する(ぷよが置かれない場合も今回は考慮しています)
  3. 温度アニーリングを用いながらMCMCの一種であるメトロポリスヘイスティングス法でフィールドを低温まで冷やす(その時のパラメータにおけるエネルギーが最小のぷよ配置を求める)
  4. \delta(v_i-v_j)などの(物理)量をサンプリングし、平均値を期待値と近似する。
  5. パラメータを勾配法を用いて更新する。(\etaは学習率)
    • _{new}b_i^{0} = _{old}b_i^{0} + \eta(<\delta(v_i-0)>_{model}-<\delta(v_i-0)>_{data})
    • _{new}b_i^{\neq0} = _{old}b_i^{\neq0} + \eta(<\delta(v_i-1)+\delta(v_i-2)+\delta(v_i-3)+\delta(v_i-4)>_{model}-<\delta(v_i-1)+\delta(v_i-2)+\delta(v_i-3)+\delta(v_i-4)>_{data})
    • _{new}J_{ij} = _{old}J_{ij} + \eta(<\delta(v_i-v_j)>_{model}-<\delta(v_i-v_j)>_{data})
  6. 更新した後3に戻り訓練回数分繰り返す

今回準備編であるため参考程度ですが、予備実験に用いたハイパーパラメータは(学習率、緩和に用いたMCステップ数、MCサンプリングの回数、最高温度、最低温度、温度点の数、訓練回数)
\eta=0.01,N_{mcmc}=100,N_{mcsmpl}=500,T_{max}=1.05,T_{min}=0.05,N_T=10,N_{train}=2000
このようにしました、パラメータの初期値は正規分布で適当に決めています。
温度についてですが、特徴的な温度スケールはせいぜい1オーダーなのと、Jijがランダムに入り混じった系は転移温度が低いため、多分1で十分高温だと思います。

さて、予備実験の結果をみてみましょう。今回はフィールドを2枚だけ記憶させました。(ちなみに左は僕が適当に作ったもので、右はももけんさんのGTRです)

f:id:ta_ichi:20181211190037p:plainf:id:ta_ichi:20181211195416p:plain

学習回数とパラメータの変化をみてみましょう、本当は全部確認すべき(というかlossとか尤度とかD_KLとか計算したいけどあまりわかってない)なんですが、適当に2つだけ抜き出してます。

f:id:ta_ichi:20181211203236p:plainf:id:ta_ichi:20181211203239p:plain

まぁある程度は収束してるから大丈夫かな・・・。

こうして学習が終了した後のパラメータで、MCMCで更新していくと2つの形のうちのどちらかが想起されます。
例えば左のような初期条件から学習済みパラメータで、低温まで冷やしていくと(エネルギーが最小のぷよの配置を求める)最終的には右のような、学習したGTRのうちの一つが出現します。

f:id:ta_ichi:20181211203753p:plainf:id:ta_ichi:20181211203755p:plain

これだけみててもよくわからないので、パラメータについて見ていきましょう。

これは、あるぷよに対して他のぷよがどういう値で相互作用しているかの図です。赤は正符号での相互作用(違う色になりたがる)、青は負符号で(同じ色になりたがる)の相互作用で、濃さはその強さを表します。1つのぷよと他のぷよの関係を表しているため、全部載せると78枚になってしまうので適当に2つ持ってきました。(自分自身のところは0としています)
左図は(1,1)のぷよに対する相関でGTRの一番底です。期待としてはGTRの形が青で浮かび上がってくると思ったんですが、そうはなってませんね。おそらくデータが圧倒的に少ないため、他のパラメータで調整しているのだと思います。
右図は(2,11)のデータで、1つ目の学習データでぷよがなかったところです。ここも他に対して全て違う状態になる傾向が少し見えると思いましたが、見えませんでした。

f:id:ta_ichi:20181212010618p:plainf:id:ta_ichi:20181212010634p:plain

次にバイアスを見て見ましょう、これは_{new}b_i^{\neq0}_{new}b_i^{0}で分けています。1枚目の学習結果を強く反映しているのがわかります。

f:id:ta_ichi:20181212011414p:plainf:id:ta_ichi:20181212011429p:plain

今回の軽い計算結果はここまでとします。

次回

今回はデータを集める気力がなかったので、まずは小さなデータで最低限期待されることが実現しているかなどをチェックする形になりました。期待通りのものもそうでなかったものもありますが、どのみちデータが足りないに尽きていると思われます。
次回は大量にデータを用意して学習した結果を報告できたらなぁと思います。
上手くいったら、いいなあ。