わたしの機械学習エンジニアキャリア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キャリア記事で繰り返し主張される「データファースト」「非エンジニア職とのコミュニケーションの重要性」「数学力より応用力」は、おそらく機械学習エンジニアとデータサイエンティストにとっての金言と言ってよいものでしょう。

以下の前編にあたる記事本文では、Bourke氏の働きぶりと4項目までの教訓を紹介します。

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

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

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

機械学習とデータサイエンスはどちらも意味の広い用語だ。あるデータサイエンティストがデータサイエンスと思っていることがほかのデータサイエンティストと非常に異なることもあり得る。同じことは機械学習エンジニアにも当てはまる。データサイエンスや機械学習という言葉で共通して了解されていることは、過去(データ)を使って未来を理解あるいは予測すること(モデルの構築)である。

以下に記す文章のコンテクストに置くことで、機械学習エンジニアとしてのわたしの役割が何なのか説明していきたい。

わたしたちは小さな機械学習コンサルティングチームを持っていた。そのチームは、操作すべきデータの収集、モデルの構築、そして考えられ得るすべての産業にそのモデルを実装するサービスのすべてを行っていた。そんなわけで、チームメンバー全員が多くの帽子を被っていた(※註1)。

過去に職場で緊張状態にあったのは、わたし自身の仕事をするために機械学習エンジニアとしての役割から離れたからだ。このあたりの事情について、動画を制作した。

(※註1)「多くの帽子を被る」という表現は、「二足の草鞋(わらじ)を履く」に相当する英語表現「wear two hats」(ふたつの帽子を被る)をさらにひねったもの。昔のヨーロッパでは所属する階級や職業によって被る帽子が異なっていたために、こうした表現が生まれたと言われている。

・・・

わたしの日々はどんなふうに見えるか

午前9時、わたしは職場に到着しておはようと言うと、自分の食べ物を冷蔵庫に入れ、カップにコーヒーを注いで自分の机に歩いて向かう。それから着席し、昨日書いた自分のノートを見て、Slackを開く。Slackのメッセージを読み、チームでシェアしている論文やブログの投稿のリンクを開いて数分も過ごしたら、朝のルーティンはすぐに終わってしまう。

メッセージを一通り読み終えると、論文やブログ記事のいくつかを保存し、貯めていたものを読む。そうした読み物のなかには、たいていはわたしがしていることを助けるかも知れないことがある。読む時間は1時間のこともあれば、時にはもっと長いこともあり、読む時間は記事の内容による。

なぜそんなに読むのか?

何かを読むことは究極的にはメタスキルなのだ。もしわたしがしていることに関してより良い方法があるならば、その方法を学び実行することで時間と労力が節約できるからだ。

さてもう10時だ。

もし締切りが近づいているならば、読むのは早めに切り上げてプロジェクトを進める。プロジェクトに取り組むことが、わたしの1日の過ごし方でもっとも大きな位置を占めている。昨日までの仕事を見直して、次のステップとして考えていたことをメモ帳を見てチェックする。

わたしのメモ帳は、流動的な日誌だ。

「データを正しい形式にするために操作したので、モデルにデータを走らせる必要があるのだが、データを走らせ始めるのに短かいモデルの学習を続けよう。もし学習プロセスが完了したら、次のステップに行こう。」

もし行き詰っていたら、メモ帳はこんな感じになる。

「データにミスマッチが生じた。次に行うことは込み入ったデータマッチを修正して、新しいモデルを試す前にベースラインを取っておこう」

業務時間の大部分は、データがモデルに適合するように整形することだ。

午後4時には仕事に目途をつけ、片付けを始める。片付けにはわたしが書き散らしたソースコードが読みやすくなるようにコメントを付けたり、書き直したりしてきれいにすることが含まれる。片付ける時にはもし誰かが自分のソースコードを読まなくてはならないのなら?と自問してみる。読まなくてはならないのは、たいていはわたし自身だ。一連の思考というものは、驚くべきことにすぐに忘れ去られ得るのだ。

午後5時までにはわたしのソースコードはGitHubに上げられ、メモ帳には次の日のためのことが記される。

以上が理想的な1日なのだが、毎日そうは行かない。時には午後4時37分に素晴らしいアイデアを思いつき、そのアイデアに従うこともあるだろう。

わたしの日々に起こっていることを大雑把にわかってもらったところで、より詳しく見ていこう。

・・・

1.いつもデータについて

もしデータサイエンスのいつくかの初歩的な原則に親しんでいるならば、上に上げた標語は月並みなように見えるだろう(当たり前のことを気に利いた言葉で言っているに過ぎない)。しかし、驚くべきことにこの原則をしばしば忘れてしまうのだ。モデルをその上に構築するデータを改善するより、より良いモデルを構築することに注力することにあまりにも多くの時間をかけてしまうのだ!

より大規模なモデルを構築してより強力な演算能力を使うことは、短期的には興奮する結果をもたらしてくれる。しかし、短期的には十分でも長期的な結果を出すには再びデータに取り組む羽目になる。

はじめにプロジェクトに着手する時には、データに親しめるように異常とも言える時間を費やそう。異常という言葉を使ったのは、データ理解に費やす時間として最初に見積もった時間の3倍はしばしば必要になるからだ。データ理解に時間を費やすことは、長い目で見れば時間を節約することになる。

以上のことは、プロジェクトを小さく始めるべきではないということを意味しているのではない。その真意は、以下だ。

どんな新しいデータセットに対しても、ゴールはデータが主題としていることの専門家になることであるべきだ。データ分布をチェックし、異なる種類の特徴を見つけ、外れ値がどこにあるのか、そしてなぜ外れ値がそこにあるのかを理解するのだ。もしプロジェクトを取り組むあなたが扱っているデータについてのストーリーを語れないのであれば、どのようにしてモデルに期待すればよいというのだ?

データ分析におけるライフサイクルを探求した一例(新しいデータセットに遭遇した時にやること)
より詳しい解説はMedium記事「データ分析の探求に関する優しいイントロダクション

(※註2)データの収集・整備はAIモデル構築に優先するという「データファースト」という姿勢は、AINOW翻訳記事「あなたのAIスキルはあなたが思っているよりも価値がない【前編】」では「データは派手なAIアーキテクチャより重要」と表現され、学習データが豊富な「月並みな」モデルは学習データに乏しい「優秀な」モデルに勝ることを力説している。

また、AINOW翻訳記事「12の機械学習スタートアップと働いてわたしが学んだこと」では「データがはじめ、AIが後」と表現され、「データに投資することはAI製品の価値を首尾よく証明し、データへの投資を組織的に回収することにもつながる」とも語られる。

・・・

2.コミュニケーションの問題は技術的問題よりも難しい

わたしが遭遇したプロジェクトを阻む主要な障壁の大部分は技術的なものではなく、コミュニケーションに関わるものだった。もちろん技術的挑戦は常にあるものだが、技術的挑戦を解決することはまさにエンジニアの役割である。

プロジェクトの内外におけるコミュニケーションの重要性を決して過小評価してはいけない。解決すべき技術的挑戦がそもそも間違ったものである時に、その挑戦を解決することほど悪いことはない。

どのようにしてそんな悪いことが起こるのか?

外部的には、顧客が後になって求めてきたものと、機械学習という技術を使えば提供できることではあるが自分たちが十分に提供することができないことのあいだにあるミスマッチだ。

内部的には、プロジェクトに関わる多くのヒトがたくさんの帽子を被っているために、すべてのヒトが同じゴールに向かって連携することが難しいことだ。

以上のようなコミュニケーション上の挑戦は特別なものではない。機会学習は魔法のように思われることがある。そして、幾ばくかの場合にはまさにそうである。しかし、機会学習が魔法のようにならない時には、うまくいっていないことを知ることが重要である。

以上のうち外部的な問題をどのように解決するのか?

基本に立ち返ること。しかも定期的に。顧客はあなたたちが提供できることを理解しているのか。あなたは顧客が抱える問題を理解しているのか。顧客は機械学習が提供できることと出来ないことを理解しているか。あなたがわかっていることを伝えることができる有益な方法とは何か。

内部的な問題はどうするか。

内部的なコミュニケーションの問題がいかに難しいものであるかは、コミュニケーションの問題を解決しようとしているソフトウェアツールの数にもとづいていることがわかるだろう。そうしたツールにはAsana、Jira、Trello、Slack、Basecamp、Monday、Microsoft Teamsがある。

わたしが見つけたもっとも効率的な解決法のひとつは、1日の終わりに関わっているプロジェクトのコミュニケーション・チャネルに簡単なメッセージをアップデートすることだ。

アップデート内容:

  • 要点は3~4つ
  • 自分が行ったことに関して
  • そして、なぜ行ったか

次にすること:

  • 以上のアップデート内容にもとづいて次に行うこと

情報共有は以上で完璧か。それは違う。しかし、以上でうまく行くだろう。こうした情報共有は自分が行ったこと、そしてプロジェクトに公共の利益を付け加えるには何をすればよいのかについて反省する機会をわたしに与えてくれた。そして、こうした反省は自分の仕事がプロジェクトの本筋から外れているように見える時にそれを自己批判できることを意味していた。

あなたが良いエンジニアであるかどうかに関わらず、新規ビジネスを獲得して維持する能力は自分のスキルが何であり、そのスキルが何をもたらすのかについてコミュニケーションする能力と相関しているのだ。

(※註3)非エンジニア職とのコミュニケーションの重要性は、AINOW翻訳記事「12の機械学習スタートアップと働いてわたしが学んだこと」では「素晴らしいAI製品を作るためのカギ」であると指摘される。そのうえで「AI製品についてビジネス的指標に照らして話し続け、そうしたビジネス的指標をAIのモデリングにおける指標にいかにして翻訳するか」が課題であるとも語られる。

また、AINOW翻訳記事「データサイエンティストという職業における第三の波」ではデータサイエンティストが身につけるべき必須スキルとして「ソフトスキル」を挙げ、同僚とうまく仕事することや顧客企業の意思決定者とのネットワークキングの重要性を説いている。

・・・

3.安定的 > 最先端(一般的に)

機械学習エンジニアというものは、自然言語に関する問題を抱えている。テキストを異なったカテゴリーに分類するといった問題だ。そうした問題のゴールは、一片のテキストをサービスのひとつとしてユーザに送信したり、テキストをひとつかふたつのカテゴリーに自動的に分類することである。そして、もしモデルが予測に関して信頼できないならば、テキストをヒトが行う分類処理に通せばよい。ヒトに送られるテキスト処理のロード量は1日に約1,000~3,000リクエストだ。大規模でもなく小規模でもない。

BERTはここ1年における素晴らしい成果である。しかしGoogleが保有しているスケールの演算能力がなければ、必要なことをやるためにBERTを使ってモデルを訓練するにはあまりにも多くのマッサージを要求する。こうした法外な要求は製品となる前に必要となる。

BERTの代わりにわたしたちはもうひとつの解決手法であるULMFiTを使った。この手法に関する論文は最先端ではないものも、満足すべき結果以上の成果をもたらし、それを使うのもずっと簡単であった。

動作するものを出荷することは、完璧に近づけようとして出荷前で留まっていることより多くの価値をもたらす。

・・・

4.機械学習におけるふたつのギャップ

機械学習を実践するに際しては、ふたつのギャップが存在する。オンライン講座における仕事からプロジェクトにおけるそれに移るまでのギャップと、ノートPCにおけるモデルから製品におけるそれ(モデルの実装)に移行するまでにあるギャップだ。

機械学習に関するオンライン講座をインターネットで検索すると、その結果は過多なほど出てくる。自分自身のAI習得度表を作るために、わたしはそうした検索結果の多くを使ったものだ。

しかし、多くの最良なオンライン講座を修了した後でも、わたしが機械学習エンジニアとしてキャリアをスタートさせた時には、わたしのスキルはオンライン講座が定めた構造化された支柱のうえに築かれていた。現実のプロジェクトにおいては、そんな支柱はなかった。

わたしには機会学習に特有な知識がなかった。それはオンライン講座で教わらなかったものだ。データに対して疑問をもったり、探索と搾取の対立とは何かということも知らなかった。

機会学習に特有な知識:それはオンライン講座では教わらないが学び得るものだ。

以上の問題をどのように解決するか?

幸運なことに、わたしの周りにはオーストラリアにおけるベストな才能がいた。わたしは喜んで彼らから学び、間違いも進んで犯した。もちろん、間違えることはゴールではないが正解にたどり着くためには必要だった。というのも、何が間違いかをわからなければならないからだ。

もしあなたがまさにオンライン講座を通じて機械学習について学んでいるならば、その講座を続けると同時に、講座で学んだことを自分自身のプロジェクトで動かし実践してみることによって、機会学習に特有な知識を自分自身に武装するようにしよう。

モデルの実装についてはどのように解決するか?

この問題については、わたしはいまだに弱い。しかし、わたしはあるひとつの傾向に気づいた。機械学習工学とソフトウェア工学は統合しつつあるのだ(※註4)。SeldonKubeflow、そしてKubernetesのようなサービスを使えば、機械学習はそうしたツールの一部となるだろう。

Jupyter Notebookにモデルを構築することはひとつの仕事ではあるが、それでは数千さらには数百万のヒトビトが使えるモデルをどのように作るのか。この問題についてはクラウド・ネイティブ・イベントにおける最近の信頼できる講演を見ることで解決策を見積もることができるのだが、大企業には属していない多くのヒトは大規模なユーザに対処する方法を知らないでいる。

(※註4)機械学習工学とソフトウェア工学が融合しつつある傾向は、AINOW翻訳記事「ソフトウェア開発者からデータサイエンティストにキャリアチェンジしたいあなたのためのベストなリソース【前編】」においてAI製品開発におけるソフトウェアテストやバージョン管理の重要性という観点から論じられている。こうしたソフトウェア工学由来のスキルは「データサイエンティストとしての仕事を何十倍にもする助けとなる」と語っている。

また、AINOW翻訳記事「データサイエンティストという職業における第三の波」では、データサイエンティストの必須スキルとしてソフトウェアテストやバージョン管理を含む「ソフトウェア工学の職人技」が挙げられている。

後編に続く…


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

著者
Daniel Bourke

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

編集
おざけん

無料メールマガジン登録

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

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

規約に同意する