会員登録すると
このコラムを保存して、いつでも見返せます
世界有数の研究者やITエンジニアが集うAI企業Preferred Networks(PFN)。秋葉拓哉さんは、同社で機械学習基盤の執行役員を務めている。前職は国立情報学研究所の特任助教で、世界最高峰の国際会議で多数の論文が採択される研究者だった。さらに競技プログラミングのコンテスト「TopCoder」では、世界で数十人しかいない「ターゲット」というレベルに達し、データ分析コンペティション「Kaggle」では、世界で200人ほどの「Kaggle Grandmaster」の称号を得ている。
競技プログラミングとKaggleでその道を究めた秋葉さんは、習得したスキルや知識をどのように業務に生かしているのか。挫折を味わいながらも、それを乗り越えてきた秋葉さんのキャリアをひもとく。【松本香織、羽田顕人、斎藤公也】
1. 「得意なこと」と「やったことのないこと」を組み合わせたキャリア形成
2. 深層学習が台頭、「技術主導で世の中が変わるかもしれない」
3. アルゴリズム設計、定量的な検証……。競プロとKaggleが実務に生かされる
4. 一つのことに狙いを定め、攻略するまで集中できる強み
「得意なこと」と「やったことのないこと」を組み合わせたキャリア形成
――秋葉さんは学生時代、競技プログラミングで世界のトップに立っていますよね。やはりそれがご自身の基礎となっているのでしょうか。
秋葉:完全にそうです。僕は競プロを通じて「アルゴリズム」の重要性に気付きました。プログラミング言語は、コンピューターと人間が対話するための言語です。しかし、良いプログラムを書こうとすると、それだけでは十分とは言えません。コンピューターに何をどう頼むかという考え方――「アルゴリズム」によって、できることや効率の良さが変わってくるのです。
――競プロが発端となり、最初のキャリアにつながったと。
秋葉:僕は「得意なこと」と「やったことのないこと」を組み合わせてキャリアを考えるのが好きです。競プロでは、世界の上位トップ10に何度もランクインして、自分でもある程度極めた実感がありました。そこから研究の道に進もうとすると、非常に高い能力が求められるし、他の人がやっていないことをやる必要が出てきます。
そこで、競プロで身に付けたアルゴリズムの能力を生かし、アルゴリズムの研究者になりました。次に、機械学習を学ぶためにKaggleを頑張りました。ここで生きたのが競プロ経験です。プログラミングが速いと、そのぶん実験を多く実施できて有利です。今はそのKaggle経験を軸にしながら、PFNで機械学習の仕事を多数経験しています。
深層学習が台頭、「技術主導で世の中が変わるかもしれない」
――秋葉さんは現在、PFNで機械学習基盤を担当していますが、転職を決めた2016年当時は、機械学習の経験が一切なかったそうですね。
秋葉:僕は当時、国立情報学研究所で研究者をしていました。研究テーマは、グラフ理論です。グラフ理論とは、関係のネットワークを抽象化するモデルであるグラフに関する数学の理論です。点とそれらを結ぶ線がグラフで、グラフが持つさまざまな性質を探究するのがグラフ理論です。道路や交通ネットワーク、ソーシャルネットワーク、ウェブページなどもグラフ理論を使って、分析が可能です。その分析をするために、アルゴリズムの開発が必要になってきます。
人間はどのように関係しているか、関係はどのように形成されるかといったことに加えて、どのようにすればネットワークから、有用な情報を引き出せるか、というテーマにも関心がありました。
研究そのものは非常に楽しかったです。しかし、専門領域ではない分野に挑戦してみたいという思いもありました。
その頃、世の中にはディープラーニング(深層学習)が台頭し始めていました。当時は良くも悪くも得体が知れない技術でしたが、世界中がワクワクしていました。もしかすると、技術主導で世の中が変わるかもしれない――。次に何をしようかと考えていた僕にとって、それが魅力的に映りました。PFNに入社したのは、そのような思いが強かったからです。かなり勇気は必要でしたが、あの時に決断して本当に良かったです。
――機械学習のスキルは、データ分析コンペ「Kaggle」に参加して身に付けたそうですね。
秋葉:転職を決め、有給休暇消化期間中に始めました。僕は教科書をしっかり読むのが苦手で、手を動かさないと身に付かないタイプです。これは、かつて競技プログラミングに取り組んでいたときに気付いた自分の特徴でした。
ですので、機械学習を習得するときも、実際にデータを触ってみるKaggleのようなプラットフォームを利用するのが一番の近道だろうと考えました。実際にそれはうまくいき、初めて参加したコンテストで運良く1,438組の参加者のうち9位になって、ゴールドメダルを獲得しました。これが大きな自信につながりましたし、参加する過程で得た知識も実務で役立って、仕事でも良いスタートが切れたと思っています。
PFNでは、研究者時代に身に付けた基礎能力も生きていますね。入社当時は、ディープラーニングに関する情報の見極めが非常に重要でした。大量の論文が出ていて、いろんな人たちがいろんなことを言っている。それを効率良く読み、信用できるもの、できないものの目利きをしました。
論文は、1本読むだけでは得られるものがそれほど大きくありません。たくさんの論文を読み、読んだ知識を体系化することが重要になってきます。そこから自分なりの判断をし、研究や開発の方向性を決めるわけです。入社当時はこの能力を、かなりうまく生かせたと感じています。
アルゴリズム設計、定量的な検証……。競プロとKaggleが実務に生かされる
――お話を聞き、秋葉さんにとって競プロとKaggleが実務の基礎になっていると理解できました。具体的には、実務でどのような部分が役立つのでしょうか。
秋葉:まず競プロからお話ししますね。実務で書く大規模なプログラム全体で考えると、競プロ的な難しいアルゴリズム設計が役に立つのは、1年に1回くらい、しかもかなり小さな部分です。
しかし、プログラムに一つでも遅い箇所があれば、全体のスピードが遅くなる。競プロの能力を生かして、うまく実装すれば、全体の質がまったく違ってきます。仕事上これは大きくプラスになりますね。
また、Kaggleで身に付くことはたくさんありますが、最も重要なのは、定量的な検証ができるようになることです。機械学習では、与えられたデータを分割し、一方を学習用データに使って予測モデルを作り、もう一方のデータでそれがどれくらいの予測性能かというスコアを出します。これを「バリデーション」と言います。教科書ではさらっと説明されておしまいなのですが、これがかなり難しい。しかもKaggle経験のない人は、かなりの割合でミスをし、恐ろしいことにその事実に気付きません。
バリデーションで重要なのは、データ分割の仕方です。客観的な評価となるようにしないと、意味がありません。これができていないと、予測モデルの精度がかなり高いと勘違いしてしまいます。
――もう少し詳しく教えていただけますか。
秋葉:Kaggleのコンペでは、参加者が随時、自分でバリデーションをした上で、予測結果を提出できます。すると、オンラインの順位表に現時点での自分の順位と予測性能のスコアが表示されます。このスコアは、Kaggle側による客観的な評価で正しい。これが、自分自身が手元で算出したバリデーションのスコアと大きく違うことがあります。
「予測性能が90%、すごいモデルができた」と思い、Kaggleに提出すると、Kaggle上では50%と表示される。実はこのストーリーは、昔の僕が経験した状況です。Kaggleを経験したことのある人は、これを体験しています。一方、実務では、客観的な評価方法が他人によって用意されていないことが多く、自分のバリデーションによる「すごいモデルができた」という誤解を持ったまま進んでしまう非常に危険な状態に陥りがちです。実務上も非常に大事なトピックですが、教科書を読むだけでは身に付きません。
――では、競プロやKaggleと、実務で違う部分はあるのでしょうか。
秋葉:一つ大きな違いがあるのは、競プロやKaggleでは、解くべき問題が与えられていることです。実務では、そもそも自分が何を解くべきか、あるいは、今自分やチームが取り組んでいる課題は本当に正しいのかまで見ないといけない。必要なのはコンテストで出題する側の視点で、視座を一段高くする必要があります。
競プロでは、シンプルで面白い部分だけが取り出されて問題になっています。しかし実務のプログラムは規模が大きく、全体を考えて書いていかないといけません。
Kaggleでは、あらかじめデータが与えられており、データの分類の精度を上げれば勝ちで、精度の測り方も決まっています。しかし実務では、データの効果的な収集方法や良いデータかどうかという部分に疑問を持ち、分類の精度を上げれば本当に売上は上がるのか、顧客満足度は上がるのかを考える必要が生じます。
一つのことに狙いを定め、攻略するまで集中できる強み
――それにしても、かなり順調なキャリアですよね。これまでの人生で挫折を感じたことはありますか。
秋葉:人生最大の挫折は、高校生向けのプログラミングコンテスト「国際情報オリンピック」で数学の天才に敗北したことです。当時高校3年生だった僕は「井の中の蛙」でした。僕が一番コンピューターを好きに決まっている。だからプログラミングでも一番だし、コンテストでも活躍できる――。そう思って出場したにもかかわらず、成績は散々でした。
しかも、その時に僕に勝った彼は、コンピューターをそれほど理解していませんでした。プログラムも僕から見れば汚くてめちゃくちゃです。それでも、僕のプログラムよりはるかに速く動く。信じられませんでした。
彼は国際数学オリンピックで金メダルを取っている天才でした。数学に強い人は、アルゴリズムの能力が高い。僕がアルゴリズムの力を思い知り、自分にはその能力が足りないと気付きました。これは、かなり大きな挫折体験でした。
――どのようにその思いを乗り越えたのですか。
秋葉:最終的には、プログラミングコンテストで彼よりも良い成績を残して乗り越えました。そのためにどうしたかというと、結局は日々の積み重ねです。
僕はプログラミング以外のものを全部捨て、覚悟を決めてやりました。その結果、勝てないと思っていた天才を、部分的にとはいえ、越えることができた。これは自分にとって大きな自信になっています。ちなみに彼は、今はPFNで一緒に働く同僚です。
――秋葉さんは一つのことに狙いを定めたら、それを攻略するまで集中するタイプのように見えます。
秋葉:それが自分の強みです。例えばKaggleでも、誰かが全てを捨てて取り組んでいたら、自分もそうしなければ絶対に勝てません。泥臭いですが、他の人よりも質と量で上回らなければなりません。研究をしていたときも、もう何年も日本人の論文が審査を通っていない国際学会でどうしても論文を通したくて、研究室にも行かず、家にこもってひたすら作業する日々を過ごしました。最終的にはその学会に論文が通り、研究の世界で認めてもらえました。
――では、やってみて、うまくいきそうにないときはどうしますか。
秋葉:僕の考え方は「勝てないものは勝たなくていい」というオール・オア・ナッシングです。全てに勝とうとすると、全てが中途半端になってしまいます。だから「まずは一つ勝つ、それ以外のものは負けてもいい」と。少し試してみて「勝てない」と思ったら捨てる判断をしますし、それは仕事でも非常に重要だと思っています。
特に研究では、負けたとしても実はそれほどダメージがない場面も多いです。それよりも勝ちを獲得する方が何倍も価値が高い。ですので、自分たちはどこなら勝てるか、どこで戦うかを見極めます。そして実際に少しやってみて、勝てそうだったら頑張るし、難しそうだったら諦めて、勝てそうな場所を他で見つける。そう考えて動くことが多いですね。
――これからエンジニアを目指す人にアドバイスがあればお願いします。
秋葉:自分が夢中になれるものを見つけ、時間をかけて、確固たる強みを作ることが大切だと思います。そうすると、自信も付きます。自信は大事です。先ほども言ったように「自分だったら勝てる」と思って取り組まないとうまくいきません。
基礎をしっかり押さえることも非常に重要です。技術は日々変わり、追い続けるのが大変です。しかし、基礎的なコンピューターサイエンスの知識は風化しません。数学やアルゴリズム、情報理論の他、特に知ってほしいのはコンピューターやプログラミング言語処理系やオペレーティングシステムの仕組みです。
プログラムが実際にどこで動くかというと、コンピューターのCPUやメモリの上です。自分の書いたプログラムがCPUにどう解釈され、どう動くのかをイメージできれば、速くて優れたプログラムが書けるようになります。プログラミング言語から見て抽象的な側のアルゴリズムと、もっと泥臭い側のコンピューターの仕組みの両方を理解できると、より良いプログラムが書けるエンジニアになれると思います。
そして、物事に取り組むときは深く掘り下げ、人に説明できるくらいまで調べてアウトプットしてみるといいと思います。当社には優秀な技術者がたくさんいて、入社後、本当に多くのことを教わりました。みんないろいろなことを、資料などを見ないで説明できます。それくらい深く理解している。これはすごいと思ったし、自分もそうなりたいと思い勉強しました。こうした努力を続ければ、確実に自分の血肉となって仕事に生かせると思います。
会員登録すると
このコラムを保存して
いつでも見返せます
マッキンゼー ゴールドマン 三菱商事
P&G アクセンチュア
内定攻略 会員限定公開
トップ企業内定者が利用する外資就活ドットコム
この記事を友達に教える