Obey Your MATHEMATICS.

機械学習関連の純粋数学や実験など

数学しか知らなかった機械学習エンジニアの生存戦略

§1. はじめに

こんにちは

こんばんは


久しぶりの投稿です。


タイトルはスーパーマン松本さんのアレから拝借しました:

codezine.jp



今日はポエムを書きます。
なにか技術記事を期待してた方、もしいましたらすみません。また次回。


完全に僕の観測範囲での主観に基づいていますので、燃えるかもしれません。
この文書は you should do ではなく what I didがメインです

§2. 背景


数学しか知らなかった僕がGunosyに入社して、約7ヶ月ほど経ちました。

数学しか知らなかった、と書いたものの「数学は知っていたのか」と言われるNOです。
3ミリぐらいしか知りません。


僕が機械学習エンジニアになった経緯は↓の2つの記事にだいたい書いてあります:

mathetake.hatenablog.com

gunosiru.gunosy.co.jp





7ヶ月がむしゃらに仕事をしてきて

  • どう生き延びてきたのか *1
  • なにを感じてきたか

をとりあえず書き残したい衝動に駆られたので書きます。

ビールを飲んだ勢いなので全く整理されていませんがご了承ください。


以下で述べるそれぞれの項目は互いに素ではなく、共通部分が非常に大きいです。

§3. 無知であることをとことん悔しがる

入社した当時の僕のスキルは

  • 一通り基本的な(ディープ某を含め)機械学習アルゴリズムは理論のレベルで理解
  • Python機械学習モデルのプロトタイプ
  • 最新の論文を実装しろと言われれば出来る
  • 簡単なSQLでデータ取得から機械学習ライブラリに食わせるまでの簡単な整形

こんなもんでした。全部雰囲気でした。少しだけ胸を張れたのは一番上ぐらいでした。


ただ、実務で上記のようなスキルが必要なのは(SQLを除き)ごく一部です。本当にごく一部。

あの人もこんな事言ってました:


残りはなにをするか。目的に合わせて機械学習を使ったシステムを設計/実装/検証するんです。

  • 他のエンジニアと相談して仕様設計
  • サーバーを立てる
  • dbの設計をする
  • コーディングをする
  • 結果の分析

等々。*2


「俺にはPythonとJupyterだけで十分なんや。他のことは誰かやってくれ」


などと感じた人、さようなら。たぶん僕とは仕事出来ません。


まあとにかく知らないことだらけ。数学しか知らないのだから。


そして何も出来ない。悔しい。本当に悔しい。



なので、常に

「お給料を貰ってるのもはずかしい。」

「僕は会社に貢献してない」

と必要以上に自分を追い詰めました。

そして、寝食忘れて勉強する。*3



この時の感覚は、純粋数学に打ち込んでいたときの感覚そのものでした。

図書館で手に取った数学書を開いてイントロを読んで興奮し、いざ本題に突入すると知らないことだらけで何も理解できない。
悔しい。悔しい。
だからとにかく必要なことをがむしゃらに勉強する。その繰り返し。


たぶん知らず知らずのうちにこういう状況への耐性が付いていたのだと思います。



まあそんなこんなで7ヶ月経ちましたが今となっちゃ

  • Pythonでバッチサーバの実装
  • Golangで某サービス上でクリティカルなAPIサーバーの実装
  • ScalaでSparkアプリケーションを書いて分散処理サーバーの実装

等々は一人でやるようになりました。もちろん全部今弊社のサービスのプロダクションサーバーです。


人間やるときゃやりますね。

§4. 限界まで人に教えを請わない

§3.で言ったように、知らないことだらけだったわけですが *4

こんな優秀な人ばかりが集まるワンフロアの会社なので、数歩先にその道のプロがいるわけです。


その人達に教えを請えば良いって話ですが、僕は

限界まで自分で考えて解決すること

を徹底しました。*5

これ、意識的にやっていたわけではないですが、数学してたときのくせでしょうか。(+ しょうもないプライド)

自分が納得するまで考えて答えを出すくせがついているみたいです。


おかげで、身に付けたスキルの確かさに自信を持てましたし、

「僕はやれば出来る」

と言う小並感なモチベーションにも繋がりました。こういうの大事。



ただ、チームとしては15分ルールみたいなものを意識したほうが当然良いわけです。

tkybpp.hatenablog.com


今では反省して上述のように意固地になることはほとんどやめました。


チームの皆さん足を引っ張ってごめんなさい。この場を借りてお詫びします。

§5. 常に最先端にアンテナを張る

先日こんなツイートをしました


僕は機械学習が好きで、数学が好きで今この仕事をやっているので、平日休日問わず論文を読むのが当たり前な日々を送っています。

そして、そこで触れる世界中の秀才天才達が発表するアイデアと仕事が結びつく瞬間が多々あります。(ふわっとした言い方ですみません。知りたい人は是非一緒に働きましょう。)


§3で機械学習そのものの仕事はごく一部、とは言ったものの、そこがクリティカルになることは往々にしてありますし
システムそのものに機械学習のアイデアが応用出来ることもあります。

「仕事だからやっている」人間には到底出来る事ではないし、僕(を含め周りの強い皆さん)は自然にこのような働き方をしているように思います。


「僕は機械学習や数学が好きなんだけど、その延長にたまたま機械学習エンジニアがあった」


ぐらいのバランスを常に保っています。


そういえばこの前寄稿した雑誌にそんな事を書いたような書かなかったような:

§6. おわりに


色々書いてみたものの、

結局、僕は運が良かった

と心底感じています。

例の「誰か雇ってくれ」ツイートのあと、こんなド素人当然の僕に声を掛けてくれた会社の皆様、

そして、イキって扱い辛い僕をチームとして迎えてくれ、見守ってくれる弊社のメンバーに出会えたこと、幸運以外のなにものでもありません。

あと、人工知能ブーム、本当にありがとう。



なんか退職エントリっぽいですね。ば◯くしかな? *6




今後もまあこんな調子で、機械学習そのものに精通した人間になることはもちろんの事、

機械学習システムに関わるものは全て理解&実装出来るようになる

ぐらいのモチベーションでやっていきたいと思います。









あ、そう言えば来年春ぐらいに出版予定の機械学習関連の技術書を絶賛執筆中です。皆買ってね。



日本語下手ですみませんでした。お粗末さまでした。

*1:Gunosyがそんな戦場のような場所というつもりは一切なく、「どう周りの信頼を得てのびのびと仕事が出来る環境を作るか」と言う意味合いです

*2:実際はこんなもんじゃないですよ

*3:念のため: 周りから言われて勉強させられた事も、プレッシャーをかけられた事も一度もありませんでした。

*4:今でも毎日勉強してますよ

*5:もちろん、そこまで馬鹿じゃないので考えるべき問題とそうでない問題は区別してました。

*6:僕は退職しません