MITの博士課程を辞めてメルカリにジョイン

里洋平氏(以下、里):みなさんこんにちは。里洋平です。今回は株式会社メルカリで機械学習エンジニアをされている(※動画収録当時)玲音さんにお話を聞いていきたいと思います。玲音さん本日はよろしくお願いします。

松岡玲音氏(以下、松岡):よろしくお願いします。

:では玲音さん、さっそくですが、まずは自己紹介がてら、これまでどんなことをしていたのかであったり、趣味の話であったりをお話していただいてもよろしいでしょうか?

松岡:じゃあキャリアからいこうかな。今は機械学習エンジニアとしてメルカリに勤めています。(※動画収録当時)メルカリにジョインしたのは2019年1月で、その前に3ヶ月ほどインターンをさせてもらって入ったという感じですね。なので学生を卒業してそのまま……。学生を卒業したというか辞めたんですよね。

:そうなんですね(笑)。

松岡:MITに博士課程で通っていて、1年ぐらいで辞めて帰ってきて、メルカリのインターンに入ってそのままメルカリに就職した感じでした。最初は日本側のメルカリ、みなさんがたぶん使っているメルカリの機械学習チームにジョインして、そこで1年ぐらい活動したあとにメルカリのUS側のプロダクトのチームに移りました。2020年ぐらいからそこでも機械学習エンジニアとして仕事をしています。

機械学習エンジニアといっても、けっこうメルカリはプロダクト思考がすごく強いので、モデリングもするし、GoやPHPなどでサービスのプロダクションコードを書いたりもするし、データベースをいろいろ整備したり、わりとなんでもやっている感じですね。仕事はざっとそんな感じです。最近の仕事的な興味はElasticsearchで、触り始めました。仕事にも導入していくために準備をしているところです。

個人としての話をちょっとするとワインが趣味です。ワインを飲むほうですね。副業で最近ワインの仕事を始めたりしました。

(一同笑)

:すごいですね。

松岡:2020年10月に無事にワインエキスパート試験に合格して。

:おぉ(笑)。

松岡:たぶんみなさんレストランで見たことがあるんじゃないかなというバッチを私も入手しました。

:なるほど。副業もそれ関係なんですか?

松岡:そうです。

:すごいですね(笑)。

松岡:友人のつながりで偶然縁があったところで働かせてもらって。サービスをするとかではなく、新しいワインの販売に関するサービスを作るプロダクトのコンサルをしています。

実はコンピューターサイエンスとは無縁の薬学部出身

:さっそくいろいろ聞いていきたいと思います。まずは機械学習エンジニアになったきっかけを教えていただきたいなと思います。もともと学生の頃から学部でやっていたのか、それともそうでもない感じなのかが気になっています。

松岡:日本の大学を出ているんですが、機械学習どころかコンピューターサイエンスすらぜんぜん関係がない薬学部だったんですよ。

:そうなんですか!?

『宇宙兄弟』を読んでMITに進学

松岡:そのあと渡米して、そこから航空宇宙工学という飛行機やロケットのエンジニアリングをする学科に修士号で入ったんです。

:だいぶ変わりましたね。

松岡:漫画の『宇宙兄弟』を読んで宇宙をやりたくなったので。

:なるほど。それで行くってすごいですね(笑)。

松岡:「宇宙をやるならやっぱりアメリカかな」みたいな。わりと私の人生は「漫画ドリブン」なので(笑)。

:すごい(笑)。「漫画ドリブン」は良い言葉ですね。

松岡:行った先がエンジニアリングなのでさすがにプログラミングもしなきゃいけないから、イチから覚えました。今はもう絶対に使うことはないだろうMATLABとかを書いていましたね。

:へー!

松岡:当時は数値最適化。いわゆるリニアプログラミングであったり、勾配降下法みたいなものだったりをひととおり勉強していました。授業で機械学習に触れることはあまりなかったんですよね。ただ当時はもう話題にはなっていました。私がちょうどアメリカにいた頃で2015年、2016年、日本では機械学習がだいぶブームになっていました。

時代的にいうとちょうどResNet(Residual Neural Networks)が出てきた時です。深層学習がついに人間のプロセクションを超えたという話がいろいろ出てきた時にアメリカにいたので、そのへんの話をTwitterとかで見て興味が出ました。調べてみると、機械学習ができるツールキットみたいなものがMATLABに入っていたので、軽く遊んでみようかなと思って使い始めました。

自分で本をいろいろ買って独学で勉強をしました。あとは授業のプロジェクトみたいなものがけっこうあるんですよね。自分でテーマを決めて、ちょっと実験してそれを結果をまとめてプレゼンするところで機械学習をちょっと使ったりして、けっこうそれが楽しかったです。

それで興味が出て「機械学習といったらKaggle」みたいなものをQiitaの記事かなにかで見つけて、それでほぼ独学で機械学習を勉強しました。そうしたら意外と自分にしっくり来たというのが。データを扱ってバリューを出すというところと、ソフトウェアエンジニアリングをそこそこするというところがわりと自分にハマったのかなと(思います)。

やってみると意外に親和性が高くて、たぶんこの方向でキャリアを進めたほうが楽しいかなと大学院時代に気づいて、辞めて帰ってきたという感じですね。

:すごいです。やはり行動力がぜんぜん違いますね(笑)。

(一同笑)

:普通は卒業まではいるんじゃないかなという気がします。

松岡:論文を書くのが辛かったから。

:なるほど(笑)。

松岡:ツールを書いているほうが楽しかった感じですね。

:なるほど。わかりました。でも完全独学はやはりすごいですね。

松岡:そうですね。やはり日本がすばらしいのはけっこうそういう良い教材が大量に揃っていること。私が始めた頃にもすでに揃っていたので。はじパタ(※『はじめてのパターン認識』)とかあったじゃないですか。ああいうのとか。

:ああいうのも全部1人でやられていたんですか?

松岡:そうですね。全部自分で。もともと大学院の授業で数理最適化の基礎は勉強していたので。機械学習は要は最適化だからそんなに苦労しませんでした。

:なるほど。じゃあ学んでいたことが活かせた感じなんですね。

松岡:そうですね。偶然つながった感じでした。

:でもいいですね。プログラミングをぜんぜんやっていなかったというのにけっこうビックリしていますけど(笑)。

松岡:大学時代は本当に何も書いていなかったから。

:そうですよね。学科が違いますもんね。そこから『宇宙兄弟』を見てプログラミングをやって(笑)。

松岡:MATLABから入って、みたいな。

:すごいですね。

ビットコインの自動トレードシステムを作りたくてプログラミングを猛勉強

松岡:2017年当時ビットコインも流行っていたじゃないですか。ビットコインの自動トレードシステムみたいなやつを作ろうと思って、プログラミングをやりたいなと思いました。お金がかかると人間はすごくて、ソフトウェアエンジニアリングをメチャクチャ勉強するんですよ。取引所とAPI通信をしたり、ステートを自分で持ってDBに格納して管理したり、いろいろやらないといけないので。お金がかかっていると勉強するモチベーションが違うというか。

:なるほど(笑)。

松岡:それでプログラミングを勉強した感じ(笑)。

:なるほど。実際に儲けたんですか?

松岡:ちょっと儲かったんですよ。どれぐらい儲かったんだっけ? 元手が2万円ぐらいだったところから、1回儲かって10万円ぐらい増えたのかな。「いけるじゃん」と思ったけれど、ソフトウェアエンジニアとしてその頃はぜんぜん貧弱だったので、頻発するエラーを毎回直していくうちにコードが大変汚くなっていって、「あぁ、もういいや!」となって投げ捨てた感じですね。

:なるほど。

(一同笑)

:確かにだんだん汚くなってくるんですよね。

松岡:そうなんですよ。

:テストとか、最初にいろいろ設計とかをしていないとキツイですよね。

松岡:特にエラーハンドリングが辛すぎましたね。botでトレードする人たちがすごくて通信が詰まって取引所が頻繁に動かなくなるので、それで自分のステートと本来のステートが一致しない状態になると大損するんですよね。

:だいぶ死活問題ですよね。クリティカルですよね(笑)。

(一同笑)

:なるほど。その時にやっていたエラーハンドリングやテストの大事さは今にも活きているんですか?

松岡:活きています。あの頃はパフォーマンスを良くするために非同期でプログラミングをしていましたし。おもしろいのが、APIで通信して注文を入れるよりもSeleniumでブラウザを立てて、そこで「買う」ボタンを押したほうが20倍ぐらい速く注文できるみたいなことがあって。

:えー!? 不思議ですね。APIのほうが遅い?

松岡:そうなんですよ。Seleniumでブラウザを立てていると1時間ごとに自動的にタイムアウトしてログアウトをしちゃうので、自動的にポーリングするために非同期でそういうプログラムを書かなきゃいけなかったんです。Seleniumはスレッドセーフなプログラムじゃないので、今流行りのasyncioとかでそういうことをするプログラムを書くとか、いろいろなハックがありましたね。

:なるほど。

(一同笑)

:思ったより踏み込んだことをやっていますね。

松岡:そうそう(笑)。

:「ちょっとやってみた」とかじゃないですね(笑)。

松岡:ちゃんとやっていました。

:本格的にやっていたんですね(笑)。わかりました。ちょっといろいろ脱線しちゃいましたけど。

松岡:すみません(笑)。

:おもしろかったです(笑)。

(一同笑)