昨年の年末くらいから、結構数学を学んでいる。 数学以外の事もちょこちょこ混ぜてるけれど、それらを除いてもそろそろ半年くらい数学やってる気がする。

まず今やっている数学を一通り理解している機械学習屋は、たぶんかなり少数だと思う。 自分よりずっと数学が強い機械学習屋はそれなりに居ると思うのだけど、 大抵の場合そういう人も自身の専門を持っていて、そこ以外の数学にはそんなに詳しくない。 なんでも知ってる類の人も居るけれど、それが結果を出している人の主流という訳では無いと思う。 自分は実解析を結構詳しくやった割には幾何学が基礎くらいは分かる、という人間で、 それはまぁまぁ珍しい気がする。

例えば実解析や関数解析に詳しい人は、Deep Learningなどを実解析や関数解析の立場から考える。 一方で幾何学に強い人は幾何学の立場から考える。 片方だけでも、すごい詳しければ十分な結果が出るし、だいたい論文を読んでいても著者がどちらに詳しいかは伝わってくる。 さらに言えば、数学そのものにそんな詳しくない人も居るし、それでも結果は出る。

一方で、どのくらい知ってないといけないか、というのは、いまいち分からない。 多分みんな根拠なんて無くて「自分はこのくらい知っていればいいかな」という線を引いて、その線からはみ出ない範囲でできる事をやっていく。 たまに結果が満足できない時に、 この線引きを見直したりして「現在の自分はここまでやる」という判断をしていってると思う。

ここまで学んだ印象だと、昨今のDeep Learning(以下DL)では、幾何学よりも解析の方が基礎的に思う。 基礎的というのは実際に現場でやっている事に近い、というか。 具体的な研究との結びつきも強いし、それらを理解するためにも、さらに進める為にも解析の方が役に立つと思う。 幾何学よりも実解析や関数解析が強い方が今のDL界隈では活躍しやすいんじゃないか。

一方で幾何学は、もっと野心的な話になりがちに思う。 DLの学習を理解する、とか、そういうの。 DL界隈で普段やっている所からは少し遠くて、より抽象的な所での議論となる。 研究としてもより本質的な、大研究みたいなのになってしまう。 大研究ができれば良いのだけど、All or nothingでだいたいnothing、となってしまうと辛い。 特に自分がnothingだと辛い。

この辺のどちらが今ホットな分野に近いか、というのは、時代とともに移り変わるもので、 今たまたま解析が重要度が高いに過ぎないと思う。 生成モデルは解析周りの議論が現在はホットトピックだ、という事だよなぁ。 なので解析が好きな人はラッキーだが、 幾何学が好きな人がついてないってほどでも無いかもしれない。分からないけど。

必要な数学の高度化は波があるけれど、大きなトレンドとしては年々高度になっている気がする。 モデルが発展していくとそういう数学が要らなくなる、というのは、 良く言われる事だけれどあんまり事実には思えない。 ただこのまま難しくなっていくのか、というと、どうなんだろう? 情報理工系の人と話していると、現状でも全くついていけてない人が大半に見える。

DLの実務と言うと、自分は少なくとも論文を理解して実装する必要はあると思っている。 だが論文を理解して実装するのは、最近だと結構難しい。 関連論文を一通り押さえる事によって、その論文単体では書いていない行間を埋めたりするのは、 研究者的スキルを要求されるタスクに思える。

PRMLもGoodfellow本も、これまでの「技術書を原書ですらすら読めます、数学もそこそこ分かります」くらいの人では読みこなせる本には見えない。 こういう関連論文とか関連教科書とかにバンバン飛ばないと理解できない類のものを理解していくというのは、 これまでのプログラマに要求された技術とはだいぶ違っていて、研究者が得意な領分に思う。 研究スキルは要らない気もするが、なんというか、例えば輪講とかゼミとかで読んでいく、みたいなスキルだよなぁ。 こういうのを理解しないでやれる事ってのもあるのかもしれないが、 自分らの感覚の「一人分働く」というレベルには到達できない気がする。 この辺を理解せずにやれる事を議論するよりは、理解できる前提で話をしたい気がする。

研究的なレベルで物事を理解できる、という事は前提とした上で。 数学ってのはどのくらい必要なもんだろうか? 例えばDudleyをちゃんと読んでおく必要はあるだろうか? きっとそんな事を知らなくても書ける論文はあると思うし、 トップカンファレンスに通る物もあるだろう。 一方で自分は現在トップカンファレンスに通せる論文は書けない。

ただどうやったら通せるのかは、人それぞれな気もする。 数学すごい強い人がトップカンファレンスに論文通す事ももちろんある。 強ければいいという物では無いけれど、強いのがだめって訳でも無いし、 強い人にとっては強い事が自分の武器なのも間違いない。

自分の武器は何で、自分はどうやってトップカンファレンスに通すのか、という話だと思う。 それは良く分からない。 結局「トップカンファレンスに通す」という所は固定しておいて、 それ以外の所をどう選ぶのか、という話だと思うとすると、 基本的には自分は何をやりたいのか、何に興味を持っているのか、という話ではなかろうか。 他のやり方があるのは間違い無いが、それが自分にできる事なのか、自分のやりたい事なのか、 という問題なのかもしれない。

自分はプログラマの割には、数学は結構好きなんだろう。 「プログラマの割には」という限定をつけないと全く価値が無い程度ではあるけれど、 うまい事この限定が必要な戦場を設定したいものだ。

多様体や実解析は、必須では無いかもしれないが、学ぶ意義はある気がしている。 まず集合論でいろいろな事を再構成する練習になっている。 どんな数学であれ、結局何か古典的な事を集合論で再構成して、その先に進むのだ。 だから集合論の再構成自体に慣れておくのは、Advancedな数学が必要な時にとても有用なスキルとなる。

実際に研究の最先端で出てくる物は、多様体や実解析の基礎よりも、もっとずっと難しい何かなのだけど、 大抵の場合はそのへんはよそから持ってくる事が多い。 持ってくる人は、そこまで完璧に理解している必要も無い。 だが、ある程度は理解している必要はある。

で、ある程度というのがどこまでか、というのは、持ってくる物にも依存する話に思う。 これはどこまでも難しい問題は存在する。 だから必要なすべての「ある程度の理解」を得るというのは非現実的だろう。 キリがない。 逆に、その時の自分の理解できる範囲でやれそうな事を探す必要がある。

集合論による世界の再構成は、ちょうど現在DLの実務で必要になるあたりのホットな話題で、 ちょうど必要になる位の難易度に思う。 という事で今の時代にあったくらいの「ある程度の理解」の範囲なんじゃないか。

どの位数学知ってないといけないかは本当に人による。 やれそうな範囲が広くてもやれそうな事を見つけられない人も居るし、やれそうな範囲が狭くても見つけられる人も居る。 だからいつだって、そんな数学をやらんでも自分よりすごい結果を出す人は居る。

だが一番大切なのは「自分に」やる事を見つけられる事だ。 自分以外の誰かは狭い範囲で探せるとしても、自分が探せなければやっぱりその範囲では十分じゃない、という事になる。 探せる範囲を広くしておくと、見つけやすくはなると期待している。 少なくとも他人が線を引いた先まで知っていれば、その人がやってない何かを見つけやすくはなるはず。 この辺は自分のこれまでやってきた経験とかをもとに考えていくしかなかろう。

最終的には自分は研究者である必要は無いかもしれない。 今はとりあえず研究者スキルをあげようと思っているが。 DLのブームは終わるかもしれないし、ブームよりも前に自分の興味は移るかもしれない。

だが、次にやりたい事もまた高度な数学が必要な可能性はある。 自分はそういうの結構好きな気がするし。 その時、集合論による再構成はたぶんまた必要だと思うし、 解析と幾何の両方の基礎を知っていれば、次に必要な何かだってその基礎はこの2つのどちらかな可能性は高い。数学が必要な事の大抵の基礎はこの2つだ。 高校生の数学だって微分積分と代数幾何だし、学部一年の数学が解析の基礎と線形代数なのもそれを反映しての事だろう。

数学をなるべくやらずに必要な事だけで済ます、というスタンスもあれば、 あえて直接は要らなさそうな周辺までやる、というスタンスもあるだろう。 いろんなスタンスのいろんな人がいて、それぞれ違う得意な所で戦っていく、そういうもんだよな。

自分は普通のプログラマよりはだいぶ真面目に数学やる、くらいの所で戦っていきたい気が今はしている。