自分はバリバリコードを書いて大規模チームでも働いてきた類のプログラマにしては、 かなり難しい数学を勉強している方だと思う。 その事について自分の思う事とか雑感を。

XXはプログラマに必要か?というと、大抵の事は無くてもやれる仕事はたくさんある。 一方で大抵のXXは、それが無いと出来ない仕事もあるにはある。ただ、自分の回りにあるとは限らない。

ほとんどの自分の回りの仕事は、XXが無くても出来るものだ。 だから、XXはいるのか?と言われたら、短期の答えはだいたいいつも「要らない」が答えになると思う。

一方で、長期的にはこうした物の積み重ねは「自分の回りにある仕事」を変えていく。 だから問題になるのは、それがプログラマとして飯を食っていくのに要るか? というよりは、自分の将来の回りにある仕事を、どういう物にしていきたいか、 という事に思う。 それは自分の将来のキャリアをデザインしている事だと思う。

だからXXを勉強しなきゃいけないのか?とう問いの一般的な答えは、 そういうのが必要になりそうな仕事を自分の回りに配置したいなら要る、 そうでなければ 要らない、という事になると思う。 以上はXXに依存しない一般的な話。

さて、そうは言っても個々のXXには程度の差がある。 学ぶ難しさと使い出の広さ、みたいな。 出来たらなるべく学ぶのは簡単で、なるべくいろんな事に使えるとか、大きく戦況を変えるような凄い力を発揮するとか、 そういう費用対効果の良い物を学んでいきたい、というのはあると思う。

例えばGAN周辺の数学はちょっとつらすぎるので、数学の所はさぼって出来る範囲の事をやっていく、というのは一つ選択としてはありうると思う。 別に数学が分からなくてもGANのモデルはトレーニング出来るし、それで実現出来るサービスもたくさんあるだろう。 GAN以外で実現出来るサービスだってたくさんある。

ただ、GANの流行りが一時的であっても、その理論的な所をちゃんと学んでおくのは、たぶん元は取れる気がする。

比較のために、一昔前にSVMの時代が来る!と思ってひたすら関数解析を勉強したとする。今やSVMはそんなに重要じゃないので過去論文との比較の時とかに基本がわかれば十分とは思う。 では、だから一昔前にガチでSVMをやってたのは無駄になるか?というと、たぶんそんな事は無い。 関数解析回りをしっかりやってあれば、昨今の確率分布のmetricを学ぶ時には大きなアドバンテージになっているだろう。 それくらいなら、今の先端の話題もリーズナブルなキャッチアップ量でついていけるに違いない。

たぶん今のGANとかも一緒で、難しい話題を頑張って克服しておくと、次の世代の難しい話題に最初からついていける場所から始められる、というのがメリットとしてあると思う。 一方で難しい部分は今回はやらないでおくと、たぶん次の難しい奴をやる時に、さらに手強くなった敵として自分の前にふたたび姿を現す事になる(事が多い)。

それらを全部捨てる、ってのは一つの戦略としてありえると思う。 だが、短期的にはそこまでやる必要が無く見えるものでも、その後の事も考えてみると見え方が違う事はあると思うので、短期的な事ばかりで判断すると、最善な判断になってない場合はある。

GANの距離なんて話題のブームはそう長続きはしないかもしれない。 だが関数解析はたぶん次の時代も使うし、多様体も位相空間論も使うだろう。 測度論や確率論を使うのは言うまでも無い。 そしてそうした事は、実際に分かりやすい応用例が目の前にある時に学ぶ方が、ずっと学びやすい。

そういう訳で、一時代のブームの為に割に合わない物も、その後ずっとついていく為の税金と思えば、そう悪くない投資な事は結構ある気がする。 むしろ、投資としてはやっておく方が得だけどサボってしまう事の方が多い、というのが自分のこれまでの印象。


さて、過去に学んだ物を振りかえってみよう。

例えば確率微分方程式、いわゆる伊藤積分などは、一度も実務で使った事は無い。 半分以上は金融の方で興味があったので学んだ事だが、 残り半分は実務でも必須になる、と思ったから学んだので、 今の所その読みはハズれている。 だから伊藤積分学んでる暇があったら、位相空間論や多様体を学ぶべきだった、とは言える気がする。

一方で、役に立ってないか?というと、そういう訳でも無い。 やはり「ここが重要になる」と思って選んで学んでいる以上、その選択自体が外れるにせよ、そのそばの何かしらは自分にとって重要になる物だ。 具体的には確率過程や期待値計算をちゃんとやっておくと、サンプリングとかには詳しくなるし、生成モデルとかを理解する時には確率微分方程式の修行期間は結構役に立っている。 また、その過程で理解を深めた測度論は、凄く役に立っているので、 確率微分方程式を学ぶ過程でやった事は凄く役に立っている。

数学は、結局応用的な事をやる時は、いつもその一つ下の数学の訓練になっている、 という部分がある。 確率微分方程式が測度論の訓練になっていたのは明らかだし、期待値計算の訓練にもなっていたし、 今やっている確率分布のmetric spaceも測度論の訓練になっているのは間違いない。

数学の分野の読みは当たる方が無駄は無いが、ハズれても、プログラムの要素技術の読みを外す程には、無駄にはならない気がする。


トレンド的な事を考えると、機械学習に関しては理論的な方面の必要性は、長期的には一貫して増大してきた、と思う。 だから前に学んだ事が援用出来るだけじゃなくて、前より広い範囲で使えるようになる傾向が続いていると思う。 短期的に後退する事はあるが。

だから、こんにち「ここから先はやらなくていいか」と思った範囲は、 次の時代にはより大きくなっている可能性は高い。 分からない範囲が雪だるま式に増えていく。

もちろん投機的に要るかどうか分からない事をやるよりは、 必要になってから頑張る方が確実ではあるから、 増やした後にやるのは悪い戦略では無い。 ただ、今の時点では要らなさそうに見える大変な割にちっぽけな範囲は、 しばらくの間はその範囲が時間と共に増えていきそうだ、 というトレンドは考慮に入れておいて、捨てるかどうかの判断をしても良い気がする。今なら倒せるが次の時代は無理かも、とか。
どこまで難しくなっていくのかは良く分からないし、 どこかにはプログラマがついていける限界がある気がするし、 それよりも前に自分がついていける限界は来るけれど。


話変わって。
機械学習をやるならそんなに難しい数学やらないと行けないのか!無理だ!機械学習をやるのはやめよう! という人が居たとする。 そういう人に「別に難しい数学を避けてもやれる事はある」と言うべきだろうか?

たぶんそれは事実だとは思うし、実際、実務でやってて全然分かってない人もたくさん居るのだけど、いまいちその辺の実感は自分には無い。

少なくとも自分は結構多くの事を毎回要求されているし、 実際のサービスとして成立するか、結構ギリギリの所を歩いている。 毎回「この問題はちょっと解けないレベルに難しいのかもしれない」という考えに、 一度はとらわれれるし、本当に解けなかったとしても驚きはあまり無い。

でもやっぱりプロジェクトとして失敗しちゃうなら、「無くても大丈夫」とは言えないんじゃないか。

自分は三ヶ月とか五ヶ月とかしか働かないので毎回そういう崖っぷちな感じになるのかもしれない。 だが、そういう仕事しか機械学習ではやった事無いので、普通に働いている場合の感じは良く分からない。

あと、論文書く時には、やっぱり結構な数学能力は求められている気がする。 論文書く、というのが必要か?というのは良く分からない所。 自分はフリーランスだし、自分がやった事という点では論文になっている方が使い出は良いが…

自分にとっては機械学習のサービス開発の楽しさは、論文書く楽しさも含まれている。 だから、論文を書かなくて済むか?というのはいまいち共感出来ない問いというか、 論文書きたくないならなんで機械学習やるの?みたいに感じる。 ただ実際は論文書かない機械学習屋も結構いるので、その辺のモチベーションは人それぞれなのだろうなぁ。

自分は論文書いたり学会発表するの結構好きなので、 そういう点では自分には結構要求される数学の水準は高い、という印象がある。 だからXXは必要か?というのは、だいたい全部必要、という話になりがち。