わたしの機械学習エンジニアキャリア1年目で学んだ12のこと【後編】

オーストラリア在住のDaniel Bourke氏はフィットネスコーチやUberドライバーとして働いた後に機械学習エンジニアに転身し、現在はAI技術に関するYouTubeチャンネルも運営しています。AINOW翻訳記事「機械学習の独学について考えてみる?覚えておくべき6つのこと」でAIエンジニアになるための勉強法をシェアした同氏は、今度は自身の機械学習エンジニアのキャリア1年目で学んだことをMediumに投稿して公開しました。
同氏が機械学習エンジニアのキャリア1年目で学んだ教訓は、以下の12項目にまとめることができます。
  1. データ理解が重要かつ最優先
  2. コミュニケーションの問題のほうが技術的問題より難しい
  3. 使い古された手法は最先端のそれに勝る
  4. オンライン講座で学んだことと実務で必要なことのあいだにはギャップがある
  5. 業務時間の20%は最新技術の学習に費やすべし
  6. 読むべき論文は一握りで、使えるものはもっと少ない
  7. 自分自身に対する懐疑主義者であれ
  8. トイプログレムは役立つこともある
  9. 行き詰ったら誰かに話せ
  10. 白紙の状態からモデルを構築することはもはや少ない
  11. 数学は大事だが、基本的原理を問題解決に使う応用力がもっと大事
  12. 去年の仕事は今年には時代遅れ

以上の12項目は、AINOW翻訳記事で紹介してきたほかのAIキャリア記事でもしばしば言及されている内容を含んでいます。ほかのAIキャリア記事との関連性は、訳注において適宜解説します。
本記事をはじめとした一連のAIキャリア記事で繰り返し主張される「データファースト」「非エンジニア職とのコミュニケーションの重要性」「数学力より応用力」は、おそらく機械学習エンジニアとデータサイエンティストにとっての金言と言ってよいものでしょう。

以下の後編にあたる記事本文では、5~12項目の教訓を紹介します。

なお、以下の記事本文はDaniel Bourke氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。

自分自身の最大の懐疑主義者であること、うまく行かないかもしれないことに挑戦することの意味、そしてコミュニケーションの問題が技術的なそれより困難なことについて

自宅のオフィス件アートスタジオにあるワークステーション。著者自身が撮影

5.20%タイム

わたしたちにはあるひとつのルールがあった。20%タイムだ。それは業務時間のうちの20%は何かを学ぶことに費やせるというものだ。20%タイムは定義がゆるい用語であるが、機械学習の世界では有意義である。その定義は実に多様だ。

20%タイムの意義は一度ならず素晴らしいものであると証明されてきた。ULMFiTの使用がBERTを超えたのも、20%タイムの結果のおかげだ。

20%タイムは、業務時間の80%はコアプロジェクトに費やされることを意味している。

  • 80%はコア製品(機械学習の専門的サービス)
  • 20%はコア製品に関連する新しいこと

いつも以上のように割り当てられるわけではないが、目標を持つことはよいことだ。

もしあなたのビジネス上の優位性が現在行っているベストなことにあるとするならば、未来のビジネスは、今行っているベストなことを続けられるかにかかっている。このことは、継続的な学びが必要なことを意味している。

・・・

6.読まれる論文は10にひとつで、使えるものはもっと少ない

以上はおおまかな指標だ。しかし、データベースや現象を調べていけば、重要なものの分布は集中する傾向にあることが至るところで起こっているのがすぐに分かるだろう。このことはジップの法則(※註1)あるいはプライスの法則でもあり、わたしにはどちらの法則も互いに似ているように思われる。プライスの法則は出版物の半数はすべての著者数の平方根に等しい数の著者に由来すると述べている。

以上のことを別の言葉で言えば、毎年数千本もの論文が提出されているが、そのうち10本が革新的な論文であるかも知れないとなる。そして、その革新的な10本の論文のうち、5本は同じ研究所あるいは人物に由来するものなのだ。

以上から何が言えるか?

すべての新しいブレイクスルーを追いかけることができる方法など存在しない。ブレイクスルーを追いかけるより基本的な原理から構成された堅固な基礎を身につけ、それを応用するほうがよい。そうした基礎は時の試練に耐えてきたものなのだ。新しいブレイクスルーはそのブレイクスルーの起源となったオリジナルのブレイクスルーを参照するものだ。

しかしながら、ここでも探索と搾取の問題が現れる。

(※註1)ジップの法則とはあるデータ群に対する特定のデータの出現頻度は、出現頻度1位のデータに対して1/k(kは出現頻度の順位)となるというもの。例えば、英語の小説『ユリシーズ』に登場する英単語は1位が「the」の10%、2位は「of」の5%であり、2位は1位の1/2の頻度である。
ジップの法則は言語だけではなく、ウェブページのアクセス数、都市の人口など多くの現象で観察できる。この法則は、直観的に言えば一極集中のデータ分布が認められる現象に当てはめることができる。なお、法則名は発見者であるアメリカの言語学者ジョージ・キングズリー・ジップに由来する。

・・・

7.自分自身に対する最大の懐疑主義者であれ

自分自身に対する最大の懐疑主義者となることによって、探索と搾取の問題に対処できる。

探索と搾取の問題とは、新規なことを試みることとすでにうまく行っていることを再適用することのあいだにあるジレンマである。

搾取

すでに使われているモデルを駆動して高い精度を得て、そうした精度をチームに新しいベンチマークとして報告するのは簡単である。しかし、もしそうして良い結果を得たならば、その結果は何度もチェックされており、ほかのチームメンバーも同様のことを行っていたことを思い出して欲しい。あなたは然るべき理由があるからこそ、エンジニア兼サイエンティストなのだ。

探索

20%タイムは探索を助けてくれる。しかし、70/20/10の割合のほうがよりうまく行くだろう。もしかしたらあなたは70%をコア製品に費やし、20%をコア製品のうえに何かを構築し、10%をうまく行かないかも知れない(そして、十中八九うまく行かない)ムーンショットに取り組んでいるかも知れない。

わたしは自分の役割のなかで70/20/10を実践することは決してないが、そうしたいと思わせるものがある。

・・・

8.トイプログレムは最初はうまく行く

トイプログレムとはうまく行くものだ。とりわけ新しい概念を理解するのを助けてくれる。まずは小さいものを構築しよう。そうしたものはあなたが持っているデータセットの小さいサブセットあるいは無関係なものである得る。

小さいチームであると、そのチームの企てがすぐにうまく行き、それからうまく行ったことを素早く繰り返すことができる。

・・・

9.ゴムのアヒル

ロンがこのことを教えてくれた。もしあなたがある問題で行き詰っていたら、座ってコードをにらんでも解決するかも知れないが、解決しないかも知れない。そうする代わりに、チームメイトに問題を話して言語化しよう。チームメイトがゴムのアヒルだと思うのだ(※註2)。

「ロン、この配列を使ってループを試していて、ほかの配列をループさせ配列の状態を追跡している最中に問題の配列も追跡しているのだが、このふたつの配列の状態を順序組のリストにして組み合わせたいんだ」

「ループのなかにループ?どうしてベクトルを使わない?」

「それってできたっけ?」

「やり方を探してみなよ」

(※註2)「チームメイトがゴムのアヒルだと思う」という表現は、ラバーダッグ・デバッギングと言われる問題解決法に由来する。この解決法はプログラマーが行き詰った時はゴム製のアヒルに自分が書いたソースコードを説明するようにしてデバッグすればよい、という言い伝えである。
この問題解決法の有効性は抱えている問題に関する前提知識がないヒトに問題を解説することで自ずと解決策が導き出されること、また説明する相手がゴム製のアヒルなのでプログラマー自身だけで実行できることから古くから認められていた。

・・・

10.モデルを白紙から構築することは少なくなっている(あるいは少なくともモデル構築を白紙から始める必要はない)

この論点は、機械学習工学はソフトウェア工学と融合しつつあるという論点に立ち返らせてくれる。

あなたのデータ上の問題が極めて特殊でない限り、多くの主要なデータ上の問題は類似、分類、回帰、時系列の予測、レコメンデーションといったところなのだ。

Google、MicrosoftのAutoML、そしてそのほかの似たようなサービスにおいてはデータセットをアップロードして設定対象となる変数をピックアップすればすべてのユーザが使えるように、ワールドクラスの機械学習システムが作られている。こうした機械学習システムはまだ黎明期にあるが、早くも普及する推進力を得ている。

以上のことを開発者サイドから見ると、開発者は数行のソースコードで最先端のモデルが利用できるようになっているfast.aiのようなライブラリー、そしてPyTorch hubのような(プレビルドされたモデルのコレクションがある)様々なモデル動物園、さらにはPyTorch hubと同様なものを提供しているTensorFlow hubを入手できるのだ。

以上の事態は何を意味しているか?

データサイエンスと機械学習の基礎的な原理を知っていることはいまだに求められている。しかし、そうした原理を問題に応用する方法を知っていることのほうがより価値があるのだ。

もちろん、あなたの技術上のベースラインが最先端技術に近いものでなかったら、最先端に近づけるべきではない理由などひとつもない。

・・・

11.数学かコードか

わたしが取り組んでいる顧客の問題に対して、わたしを含めた機械学習エンジニアはすべてコードファーストだ。すべての機械学習とデータサイエンスのコードはPythonだ。論文を読むのに数学をいじくりその内容を試してみるような時間はわたしにもあるにはあるが、わたしの業務時間の99.9%の時間はエキサイティングなフレームワークが数学上の問題をカバーしてくれる。

以上のように述べたからといって数学が不要だというわけではないが、結局のところ、機械学習とディープラーニングは両方とも応用数学の一形式なのだ。

機械学習とデータサイエンスの実践者になるには最低限の行列の操作方法、線形代数や微分積分、とりわけ連鎖律を知っていれば十分である。

機械学習エンジニアとしてのわたしのゴールは新しい機械学習のアルゴリズムを発明することではないことを思い出してほしい。わたしのゴールは機械学習が潜在的にビジネスの役に立つ(あるいは役に立たない)ことを顧客に分からせることにあるのだ。

補記:ちょうどこの記事の公開と同じという素晴らしいタイミングで、fast.aiは新しい講座をリリースした。それは数学を振り返りディープラーニングのコードに白紙の状態から取り組む「基礎からのディープラーニング」だ。この講座はわたしのようなディープラーニングと機械学習を使うことには親しんでいるが数学的なブックグラウンドに乏しいヒトビトのために設けられた。数学的バックボーンが不足しているというわたしの問題を解決するためにこの講座を受講し、受講後には速やかにお気に入りの機械学習とデータサイエンスのリソースリストに加えたいと思う。堅固な基礎があれば、過去のモデル構築を繰り返すのではなく最先端技術を習得することもできるようになるだろう。

(※註3)機械学習の新技法を発明する数学力より既存の技法を問題解決に活用する応用力が重要という論点については、AINOW翻訳記事「12の機械学習スタートアップと働いてわたしが学んだこと」でも論じられている。この記事には「ディープラーニングに関する研究はGoogleの連中に任せよう。そして、ビジネス的問題だけに焦点を合わせるべきと覚えておこう」という表現がある。

・・・

12.去年の仕事はおそらく次の年には無意味になる

この論点はもはや当たり前である。そして、ソフトウェア工学と機械学習工学が融合しつつあるおかげで、ますますその傾向が強くなっている。

しかし、あなたが参入した世界はそんな変化が激しいところなのだ。

そんな世界では何が同じであり続けるのか?

フレームワークは変わる、ライブラリーも変わる、しかし基礎的な統計学、確率論、数学といったものには有効期限の満了日はない(数学を扱うfast.aiの新しい講座はじつに良いタイミングで登場した)。

もっとも大きな挑戦もまだ残されている:数学をどのように応用するか、というものだ。

・・・

わたしが機械学習エンジニアのキャリア1年目で学んだことはもっとあるが、12項目で十分だろう。

Max Kelsenで働いたことは、わたしの就労経験でもっともよかったことだ。そこでは問題が生じても面白く、ヒトビトはもっとよかった。そこでわたしは多くを学んだ。

Max Kelsenを去るという選択は簡単なものではなかったが、わたしは自分が学んだことを自身で定めた試練に使うことを決意した。わたしのこれからの活動では健康、技術、そしてアートのクロスオーバーが見れるだろう。わたしの活動の模様はYouTubeのチャンネルで公開している。

もし何か質問があれば、わたしの公開しているTwitterのDMわたしの取り組みをアップデートしているニュースレターにユーザ登録して問い合わせてください。


原文
『12 Things I Learned During My First Year as a Machine Learning Engineer』

著者
Daniel Bourke

翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)

編集
おざけん

無料メールマガジン登録

週1回、注目のAIニュースやイベント情報を
編集部がピックアップしてお届けしています。

こちらの規約にご同意のうえチェックしてください。

規約に同意する