Progress in 第九学期
Abstract(Conclusion)
- 計画を作る
- 時間割drivenな生活を取り戻す
- 人に話す
- 脈絡なく会話する時間をとる
- 1人でできるレベルのことは客観的にカスである
Introduction
どうも、うっかり留年おじさんをやっております。3月時点では「終わらなかった卒論を書くだけだし余裕だろ、残り時間で何をするかが問題だな」とか思っていたはずなのですが6月現在卒論は火の車状態であり、講義も取らずに何をやっていたのかというのを自戒と共に振り返ります。
Results
仕事1
何もなかったはずの2月にわしは何やってたんだとい思ったら、毎年恒例の受験産業界の書き入れ時だった。現在もだらだらと某予備校で軽い仕事を続けている。計算上は週8時間。正直責任のある立場でもないし老害感が出てきているので、やめ時なのではと思いながら居座っている。後輩とおしゃべりするのだけが楽しみ(まじで老害っぽい)。基本待機任務なので任意の進捗を持ち込んで良いことになっているが、効率は悪い。給与額は無視できる程度に小さい。(そんなことはなくて、残高に興味がないだけ)
仕事2
3月にRAもどきをうっかり始めてしまった。お試しなので雇われてはいないらしい。お題は機械学習の応用で、演習3のような雰囲気の活動をした。少しガウス過程の勉強が進んだ。5月末までやっていたが、先生と会合してる時間以外はほぼ進まなかった。時間が緩く、進捗に厳しくないのが幸福だったと感じている。額面には敢えて言及しないことにする。そういえば本1冊借りパクしたままだな…
勉強
4月時点では余裕があるつもりだったので、物理の勉強に手を出そうとした。5月までは量子力学の講義を聞いていたが、研究の進捗が悪化してきたので投げている。あんまり計算に興味がないので程々に飛ばして見てきたが、何か分かったと明言できることは少ない。あと、一緒に勉強する人がいなくて面白くない。
他に、約1年前に生えてからなんだかんだ続いている強化学習の自主ゼミがある。速くはないけど最もコンスタントに進捗を生やしている気がする。時間を決めるのは大事、だと思う。今のところ趣味感覚でやっているが、研究に繋がるといいですね。
研究
(愚痴タイム)去年から先行研究が動かないの舞を半年近く踊っている。中身を知りたい→動かす→動かない→中身を勉強する→よく分からないので動かしたい、みたいなループをゆっくり1回転したかな。一応研究内容なので伏せるが、あんまり理論的じゃない先行研究Xの拡張について考え始めて、4月後半から5月にかけて理論にハマって、6月にXに戻ってきたけど、もう拡張する時間なくね?という状態になってしまった。半年もあれば多少なんかできるかと思ってたのだがなあ…ついでに言うとXの再現性が全く取れてない。
反省点としては、そもそも半年じゃなくて実働3ヶ月くらいしかなかったこと、人とあまり議論しなかったこと、だろうか。ラボの研究範囲が広すぎてあんまり話が合わないという感覚がある。それ以上に人と会った回数が少ないというのも問題だが。
げーむ
コンスタントに進捗を取られている。続けさせるのがうまいですね。イベントがあると毎日2時間くらいなくなると思われるが、イベントがなくても2時間くらいつぃたーかようつべ見てそう。進捗が止まったらスマホ開くのをやめろ。
Discussion
総じて思うのは、何もかも人と話してる時しか進んでないのではないかということである。研究は人に相談してないときにはほぼ進んでないし、逆にゼミは確定させた会合の存在によって進んでいる。
これは1年前にも自分で言及していたことだった(何も成長していない…?)のだが、何もしないと誰とも喋らない環境になってしまったという問題を再び痛感している。週2日を除いてはラボに来ても無人だし、議論を吹っかける知り合いもいないし、人と話すと聴く側が時間を浪費してるような気もするし。(ここで、人に相談するのが迷惑だと思うなら人の相談に乗るべき、だとすると単に合計の時間が足りてないということになる。)
作業する時間より考える時間、特に人と議論する時間を取らないといけないんだなあという気持ちになった。これは学年が上がるほど強まる傾向だし、社会人になったらもっと強まるような気がする。1人分の時間・労力で考えられることは少ないし、少なくてよい。個人のパワーだけが正義ではない。(どうして個人主義の世界になった?)
もっと日常的なことを言うと、計画を有用なものにしないといけない。1人でいるといつ何をやるか全く決まらない。1人で何かを計画しても、それを守る理由がない。正確に人を動かすのは、人との約束である(最近それすら怪しいのだが…)。もっとお茶をしなさい。できれば朝に。多少なりとも、何かを人に求められている感覚を持たないと立ち直れない気がする。
Future Works
もっと雑談をしろ!という感覚でややアホな提案をいくつか挙げておく。でも本気だ。
Note「競争的隠れ層による教師なし学習」
序
Unsupervised learning by competing hidden units
Krotov and Hopfield, 2019
いい感じに暇になったので、先生から「楽しそう」って投げられたやつを読んだ。
興が乗ったので、大雑把な内容を書き留めてみよう。
モチベ
機械学習を考えるにあたって、どうすれば有用な特徴量を与えられるかは常に問題である。近年の成果として、(多層)ニューラルネットでの誤差逆伝播によって低次の層に(勝手に)有用な特徴検出が生えてきそうだということが分かった。その一方で、いわゆる普通のニューラルネットの手法は"biologically implausible"である…すなわち、生物の脳はそんな処理してなくない?という疑念が残る。
脳が人口ニューラルネットと大きく異なる点として、更新の局所性(逆伝播のように遠くの情報を使わない)と教師なしという特性(生物の発達過程ではただ刺激が流れてくるだけで、教師信号があるわけではない?)が挙げられる。そのような特性を持ったアルゴリズムでもニューラルネットと同程度に有用な特徴検出ができるか?というのが問い。
そういうわけで、提案手法はヘブ則に始まる神経科学もろもろの見識を見習いつつ以下のことに気を遣ってみる。
- シナプス結合強度の変化は、①その直前のニューロンからの出力と、②直後のニューロンの活動値、だけで決まる。①②が正の相関を持てば増え、負の相関を持つと減る。(ヘブ則respect)
- 多様性維持のため、同じ層のニューロン同士の出力が競合する(同じ入力にいくつものニューロンが反応すべきでない)という効力を投入する。(これは教師なし学習でやられがちな手法らしい)
- 結合の強さの生理学的限界を表現するため、あるニューロンに入る結合たちの強さを並べたベクトルのノルムが一定になるような系を組む。
めそっど
入力v→重みWの結合→隠れ層h→重みSの結合→出力cだけからなる、2層ニューラルネットを作る。Wを教師なし学習で構成し、それを固定してデータから良い感じのhを獲得したのちにSを最適化(教師あり学習)して既存のデータセットに適用して評価する。教師ありフェイズは既知手法を突っ込んであるだけで、著者的には教師なしフェイズが本編。
モチベを満たすように、こんな感じで力学系?を作って教師なし学習をやる。まず式を見て、それから言語を見ると早いかもしれない。
- v:データセットからランダムに流れてくる。
- W_ij:行き先からのフィードバックg_jと入力値v_iの積に応じて増える(負なら減る)。また、1個のh_jに入るW_ijを並べたベクトル(行ベクトル)のLpノルムが1に収束するような力をかける。pはハイパラ
- h:Wvの値に向かおうとするが、各成分は大きくなると他の増大を阻害する(結果、ワンホット的になる方向へ進む)。阻害する度合いw_inhはハイパラ
- g_j:hからWへのフィードバックで、h_jが負ならば0,弱い正の値だと-Δ,強いと1になる。Δ~0.4はハイパラ
力学系のごとく書いてあるが、系全体の時間発展をシミュレートする気はあまりないらしい。hの変化はWよりはるかに速いという前提(これは何?)に基づき、実際に起きることは(1)ランダムデータvをとる(2)現在のWに基づきhが収束するまで待つ(3)hから得たgとvによりWを更新、の繰り返しとなる。
しかし、(2)の収束待ちが面倒すぎるので大胆な近似を投入(結局力学系使ってないやんけ〜)、すなわちWvを順位づけして1位のところはg=1,k位のところはg=-Δ,残りはg=0にしてしまう。kはハイパラで大きいほど順位づけ作業が面倒になる。
じっけん
MNIST(手書き数字認識)とCIFAR10(10種の物体認識inカラー写真)を全結合ネットでやらせる。両者とも隠れ層2000、出力10として構成した。提案手法が完全教師ありの(同サイズの)ニューラルネットに近い結果を出してくれて良い気分になった。何故か、教師なしフェイズと教師ありフェイズで活性化関数を変えている。ハイパラ調整は主にp,k,Δに対して行われた結果が図示されているが、なんか良かったりなんか悪かったりしてよく分からない。train errorが減ってtest errorが増えたりしている(それは過学習というのでは?)。
それより面白いのがWの可視化である。 これはMNISTをやらせたときのWの適当な行を拾ってきたもので、入力とこれとの内積が隠れ層の特徴量ということになる(左が教師なし提案手法、右が教師あり既存手法)。 教師なしでそれっぽい特徴量が生えてきた!教師なし学習最高!(???)という気分になれる。ただの数字だけではなく、いくつかの数字に共通の特徴とか重ね合わせらしきものも生えている(分散表現がありそう)。入力自体は0以上なのに負の値が出てくるのはg=-Δによるもので、Δ→0とすると負の値が消滅して性能が悪くなったりするらしい。
でぃすかっしょん
神経に着想を得た方法で特徴量を取ろうという試みは歴史上多々あった。しかし、完全教師ありニューラルネットが2014年に成功を収めて以来は特徴量の取得も完全に教師あり学習に任せてしまえという方向へ行っている(2019現在?)。脳と神経を見習って教師なしで良い性能を出すことで抗っていきたい(意訳)。
2層めを教師あり学習で作ったが、1層分しかフィードバックをしていないので生物学的制約としての局所性には違反していない。1層全結合しかやっていないが、同じ手法で層を増やしたりCNN化したりして教師なし学習をやるとどうなるかは今後の課題である。
最後に、end-to-end学習が生物学的におかしいという主張はしていない。誤差逆伝播によるend-to-end学習の生物学的に妥当なバージョンを生やした研究は多々ある。提案手法は何もタスクを与えずに有用な特徴量が生えてくるといいな〜という話であって、むしろタスクを解く時にどうすれば良いのかは放棄している。
感想
手法で腑に落ちないところが若干ある。一番気になるのは、教師なし学習フェイズと教師あり学習フェイズで活性化関数が変わっているどころか重みが変わっているように見えるところ。活性化関数はmax(x,0)からxnへと変化しているように見えるし、教師なし学習フェイズを観察していると重みはWというよりWp-1に見える。p=3が最適だったらしいが、そのときの重みは事前学習時から変わっていることになるのだろうか。次いで、hとgの計算を簡略化しすぎなのではないかというのも気になる。活動値2位〜k-1位のニューロンに対してg=0であるということは、真面目にやった場合よりg=0が多くなっていそうだが、更新箇所が少ないと単に遅いのではないかという点で微妙に見える。hに関する系は線形(max(0,x)を含むが、負のところは解が自明に負なので除外できそうだ)で結構簡単なので固定点を方程式で出せそうだが、それも遅いのか?なんか上手くやると疎行列とかになりそうな気がするし、もしかしたら線形時間で解けるかもしれない。あるいは解がh*より大きいかどうかだけ判定する仕掛けを作れないか?
まあこういうのは比較的本質に関係ない可能性もある。もっと大雑把な話をすると、提案手法はリザバー計算めいていて、教師なしフェイズはリザバーを構築する行為に相当しているように見える。こういった事前学習(?)はかなり広範に使えそうな雰囲気がするので、そのへんにあるタスクに手当たり次第に突っ込んでみたくなる。
しかし、有用な特徴量を得るという目標を立てる時点で着地点に難があるように思える。観察して特徴を見つけるという行為自体はタスクが与えられずともできるという指摘は的を射ている反面、それが有用であると言うにはタスクの定義が必要である。まるで研究業界の闇を見ているかのようだ。(????)
もっと根本的な話として、教師ありなし云々の議論をしていると
脳は教師付き学習ができると信じられているが、教師信号はどこにあるのか?
という問いが浮上する。ヘブ則に従って結合の強さが云々というのは内部の話だが、外からのフィードバックがどこかにあるはずである。脳の出力側に特殊なフィードバック機構が付いているわけでは(多分)ない(そもそも出力側という言葉が不適に見える:脳は一方向でもないしリザバー計算のモデルで書けるかすら怪しい)。
フィードバックという言葉に囚われず、脳からすれば教師信号も入力の一種でしかないと考えるのが自然ではないか?脳の出力が運動であるとすれば、その結果や評価は視聴覚その他から入力に戻ってくるはずで、そのような方法でしか情報は取得できない。
ところで、ヘブ則も局所的に学習をしているように捉えることはできる。行き先のニューロンからのフィードバックが教師のように見えるからだ。そこで仮説としては、教師信号も入力として入ってきて、入力と合流するところで教師付き学習のような成果を生み出すと主張できないかと思う。教師信号Aと入力信号BがニューロンXで合流するとすれば、Aを入れた時にXが活動し、Xの活動によってB→Xの繋がりが強まり、最終的にAなしでもBからXが発火すれば、XはラベルAを識別したことになる。これで、最適化という概念を完全破壊した「物理法則に従った結果学習しているように見える物体」の模型が出来上がったりしないだろうか?(ヘブ則は物理法則であると信じる。)
補足.人間がトレーニングをしているときを想像するとどうしても意識という上位存在を仮定したくなるが、意識なるモジュールが存在して視聴覚に直結しない入力(???)を提供していると考えられる、かもしれない。
そういうわけでこの論文を読んだ結果だいぶ妄想が膨らんだ。こんな感じで妄想をやっていると研究や実験がしたい気分になってくる(有意義なものになる保証は微塵もなし)わけだが、まあ多分いろんなことが既にやられているので、被引用でも探してみようかなあというお気持ちなのであった。完。
追記.教師なし学習フェイズのコードがあるらしいのでいじりたい人はいじればいいんじゃないかな(見てない)
にっき「自由ゆえの怠惰」
ああ、学期が終わってゆく。モチベも終わってゆく。
相変わらず睡眠時間が悪く、今朝は8時起床から完璧に二度寝を決め込んでいった。ついでに例によってゴミ出しを逃した。数週間前からずっとゴミが蓄積していて良くない。流石に邪魔になってきてるぞ。
意識を取り戻したのは15時。ふらふらと出かけていったラーメン屋は見事に空いていてよかった。まあ、食事時間をずらすなら手前側の方が良さそうな気がするが。
んでもってだらだらと復習や課題に手をつけていくが、まあモチベがよろしくない。焦燥感と面白くなさが交互に襲ってくるようだ。7割くらい理解しているのが一番良くなくて、だいたいわかってるからええやんみたいな怠惰さと分かってないところへの油断が多い。
ともかくも、ちまちまと期限を過ぎたレポートを書いていく。単位のため、卒業のためと思うと気が重いから、まあ惰性で回していくのが良さそうだ。たまーに、面白いかもしれないという気持ちになる。
授業がないとなると、自分が勉強していないことが露呈するのでむしろ自習は進みやすい。問題はその進みが遅いということで、加速するために授業があるはずなのになぁという悩みは常々ある。だから課題と期限と資料だけ用意してあればいいのかもしれないという思考が浮かぶ。それはそれでつまんないだろうが。
生活も進捗もよろしくないが、前に進む気があるだけマシということにしよう。出来るだけ早寝早起きに戻して、朝は散歩とかして、人間に戻りたい。おわり。
にっき「復活への一歩」
今日1日でかなり人間性が戻ってきた気がする。
酷い夜更かし(4時回った?)をしてしまったが、気合いで9時起床。やはり人との約束があるとなんとか起きられるものだろうか。
今回の強化学習ゼミはそんなにたくさんやらない予定だったのだが、UCBスコアの妥当性に関する議論が沼に嵌ってしまい、1時間以上溶けた。結論としてはこうだろうか「UCBスコアの探索係数をいくつにしても何らかの損失の上界が保証されるが、その保証を最小化する係数の選択についてはよく分からず、また評価が荒いとまるで意味のない保証(笑)になってしまう」。それでだいぶ疲れて、ぼーっとして勾配法の議論はよく分からずとなった。
午後は出勤してお仕事と言いながらおおよそぼけっと座っていた。時給XX円というと安く見えるが、1時間に1回質問に答えてXX円だとするとすごく見えてくるな。(XXの値は伏せておく)ひろゆきDaiGoの質問っていくらぐらいなんだっけ。まあそれはどうでもいいか。
帰って少し通話。眠すぎる上にモチベが0で、しばらくは生きる気力を失った人の顔をしていた。そこから少しだけお勉強をして楽しくなった。やっぱり、諸々の責任感を全部忘れて勉強するのは幸せなんだよな。
ああ、そう、そうだった。全部忘れて勉強するのが一番いい。単位なぞ知らん。課題なぞ知らん。だがこの話は面白いから聞くんだと。明日もそうやって元気に生きていたい。おわり。
にっき「生きる屍」
また日が空いてしまった。日記を書く気力が出なくなってきている。ここ数日何があったかをどんどん忘れていて、なら尚更書かないとなあ。
7月になってから出力の低下ぶりがひどい。夏バテなのだろうか、それとも何かが尽きたのだろうか。
月曜からすでに調子が悪かった。講義の切り捨てを視野に入れ始めるのもよろしくない。そして必修の進捗も悪い。例の実験の最終回はそんなに難しくないらしいと聞いたが、月曜は夕食後に倒れ込むように寝てしまって進捗が少なかった。
火曜、何故か知らん人(1年生)とおしゃべりをする機会を得た。2〜3年前に戻りたいような、戻りたくないような気分になる。何がしたいのか分からなくなってきた。
水曜、機械学習の講義が終焉を迎える。一応、今学期で一番真面目に聞いていた講義だと思う。しかし、何が分かったのか、どこまでできるようになったのか、よく分からない。そんな事を考え込んでいる暇はなく、研究ごっこに追われる。
木曜、進捗もどきを研究室に持っていって、最高にgdgdしながら怒られ続けた。うーん、適当にサンプルケースをいじりながら思いついたコードを書いたのだが、効果も何も分からない。発表も適当すぎた。なんかこう、綺麗に纏まらない思念を投げつけるとその整理を手伝ってくれる先生もいるそうなのだが、「もうちょっと整理してから持ってこんかーい」と言われると心が止まる。まあ、進捗報告ではなくて研究発表だとするならそれはそうか。
そんな調子で色々と酷い生活を送っている。今朝は起きたら11時だった。来週同じことをすると留年らしい。
何が駄目なんだろう。何も分からないし何も思い出せない。この症状は、去年に似ている気がする。対策は、なんだろう。自由に行動するとか、運動するとかだったっけ。本当か?まあ、とにかく明日の朝は家を出よう。人間のふりをすれば人間に戻れるかもしれないし。
にっき「休息?」
うおー。進捗がない。しかし、ないからといって日記をやめてはいけない。こうなるために書こうと思ってるんだからな。
いちおう8時起床したんだっけ。午前は大いにだらだらごろごろしながら強化学習ゼミを聞いていた。主な議題は、変化する環境に合わせるために過去の経験に重みをつけて学習しようというお話だったか。まあ人間昔のことは直ちに忘れるわけで、もはや覚えている方が不自然である。そういう感じの、状態機械としてのプレイヤーを考えると思うと少し面白い。あとは、パラメタ調節が難しすぎると人々が嘆いていた。相変わらずそこが問題なんだよなあ。
午後は出勤して僅かに仕事をして、ほんの少し後輩の物理の勉強のお手伝いをした。なんかの管を流れる流体の速さは電流みたいに書くことができて、管の両端の圧力差=電圧,粘性=抵抗率,などと解釈が利くらしい。ただし流速は壁付近では遅く、中央にいくと速くなるので、ある意味抵抗率が半径の2乗に反比例する。まあ原理は大層違うわけなのだが、なんだか同型っぽいものを見ると気分が良くなるよね。
あと、ちょっぴりEMアルゴリズムの考察をしようとした。今まで何度か目にしたワードなわけだが、パラメタ推定問題で何かしら隠れ変数が有ればEMアルゴリズムの射程内だなあと思うと、これはとんでもなく広い。今講義で訳わからんになりかかっているEMアルゴリズムと今まで見たEMアルゴリズムを比べてみると、どうも推定したい隠れ変数が離散的か連続的かという違いがある。連続的関数の変分が難しいというかちょっと気持ち悪いわけだが、離散的な関数の変分ってもうただの多変数最適化なんだよなあ。なるほどなるほど?
うーん、残りの時間は全部ゲームに溶けた。そろそろ動かないとやばそうな予感がするなあ。現実に戻りて、計画、行動、取捨選択…!ぐええ。おわり。
にっき「エネルギー切れ」
また2日空いてしまった。なんというか、出力が持たない。
6/30は月末レポート群と激しい殴り合いを繰り広げた末、3勝1敗という結果になった。1敗が期限後提出取り返せるのかは不明である。そこでモチベが完全に某Fで始まるソシャゲに行ってしまい、おおよそ2日溶けたといったところか。
一つだけあった進捗は、最後の出願(のオンラインで済む部分)をやったことか。結構色々と郵送物が必要なの、面倒だなあ。運営的には全部オンラインな方が怖いんだろうけども。
あとは研究室に行って、ちょっと叱られて帰ってきた。「研究に時間を使えてないというのはよろしくなくて、もう他の科目とかあんまりないと思うんですが…」そうなんだよなあ。再履修は再履修だから仕方ないのだが、色々な方面に手を出して全く地に足がつかない行動をしている。半分アウトローみたいな立場になってしまうのかと思うとこれは面白くない。事情を言えば許される話でもないしね。
あっという間に週末になってしまったが、とりあえず出願はちゃんとやり切って、例の実験に追いついて、もろもろの復習をする。1日1歩、前に進まなくては。おわり。