Lean Baseball

No Engineering, No Baseball.

「仕事ではじめる機械学習 第2版」を読んで思った「ソフトウェアエンジニアとデータサイエンティスト, ML Ops」のこと

f:id:shinyorke:20210420220337j:plain
このエントリーのテーマです

このエントリーは, 「仕事ではじめる機械学習 第2版」出版お祝いのエントリーとなります.

私自身, 第1版登場の2018年頃*1から「機械学習エンジニア」「企画・提案のフェーズから機械学習プロジェクトを回すマン」など, まさに機械学習を仕事とするロール・立ち位置で働いたり個人開発をしたりしていた身として, 色んな場面で参考にしていた書籍の待望の第2版登場で嬉しいです.

縁あって著者の皆様およびオライリー・ジャパン様のご厚意で一足お先に読ませてもらいました.

ありがとうございました🙇‍♂️

このエントリーでは,

  • 機械学習なプロジェクトに取り組んでいる機械学習エンジニア
  • 機械学習エンジニアじゃないけど, ML Ops / Dev Opsの文脈で「外から」機械学習プロジェクトに関わっているバックエンド・インフラ・SREなエンジニア
  • 将来機械学習エンジニアとしてのキャリアを考えているエンジニア

を対象に, 「仕事ではじめる機械学習 第2版」の読みどころや抑えておきたい関連トピックスを紹介します.

読んでくださった皆様の業務やキャリアに役立てると幸いです.

なお, このエントリーは比較的エンジニア向けトピックス多めです.

データサイエンティストや「機械学習に関わるビジネスパーソン」向けのエントリーは別途このブログもしくはnoteにて書くつもりです.*2

TL;DR

  • 機械学習なプロジェクトを仕事にしてる人は 第1, 4, 6章あたりは抑えて読んで実践しよう.
  • ソフトウェアエンジニアは「データサイエンティスト」「ML Ops」の事を正しく理解し, 受け入れてエンジニアリングしてみよう.

おしながき

「仕事ではじめる機械学習 第2版」の読み方

まずどんな本かという話ですが,

不確実性の高い機械学習プロジェクトについて、「仕事で使う」という観点から整理するコンセプトはそのままに、初版の発行後に登場した概念や課題を取り上げます。「機械学習でいい感じにしてくれ」と突然上司に言われたとき、本書で学んだことが読者の力になるはずです。

※「仕事ではじめる機械学習 第2版」紹介文より引用

オライリー・ジャパンの紹介文の通りの本で,

  • 「機械学習でいい感じにしてくれ」という困った難易度が高いプロジェクトに立ち向かうための考え方・勘所
  • ビジネスとしての機械学習プロジェクトの進め方・プロジェクトの流れ
  • 機械学習エンジニア・データサイエンティストとしてのアルゴリズム選択・学習およびシステム化のポイントやノウハウ

と言ったところを網羅的かつ浅すぎず深すぎずな絶妙なバランスで書かれています.

機械学習プロジェクトをはじめる or 機械学習エンジニアな仕事をしたい・キャリアを考えてる方は,

  • まずは「仕事ではじめる機械学習 第2版」を通しで読んでみる
  • 興味関心ある or 強みにしたいトピックスに関連した書籍を読む
  • 書籍を読んだ内容を仕事や個人開発で実践する

ということを地道にやっていくと良いんじゃないかなと思いました.

ちなみに, 興味関心ある or 強みにしたいトピックスに関連した書籍を読むの部分について, 気になる書籍とかはこの辺のエントリーで見つかるかもしれません(手前味噌で恐縮ですが).

shinyorke.hatenablog.com

なお私の感想としては,

  • 第1章「機械学習プロジェクトのはじめ方」はエンジニアじゃなくてもプロジェクトに関わる人は必読としたい!ぐらい良い. 「機械学習でいい感じにしてくれ」と言う相手に真っ先に渡そうというぐらい, いいこと書いてます*3.
  • エンジニアな視点で確実に悩むかつ難易度が高い, 「ML Ops (機械学習基盤)」について, 「執筆時点の最新トピックス」を踏まえて紹介・案を提示している.
  • その他の章も現在の状況に合わせて適切に加筆・修正されている.

2021年4月時点の情報として, 書籍でここまで新鮮な情報を読めるのは美味しいのでは?というのが正直な感想でした.

我思う「機械学習エンジニアとML Ops」

書籍の感想としてはおおよそ以上なのですが, 個人的には6章「継続的トレーニングをするための機械学習基盤」の章が考える・学ぶ所が多く, 非常に読み応えがありました.

従来のソフトウェアシステムと比較した機械学習システムの課題を明らかにしましょう。具体的には、次の3つが大きな機械学習システム特有の課題だといえます。

  1. データサイエンティスト VS ソフトウェアエンジニア
  2. 同一の予測結果を得る難しさ
  3. 継続的トレーニングとサービングの必要性

※「仕事ではじめる機械学習 第2版」 第6章6.1より引用

初っ端から刺激的な話の切り出し方ですね.

この章自体は, 何回か機械学習プロジェクトを経験してはじめて読める・理解できる内容(意訳・書籍中でも割と難易度高い章)だなと私は思ったのですが敢えて言うと,

機械学習なプロジェクトに関わるエンジニアは(機械学習エンジニアじゃなくても)一度は目を通した方が良い章だ, というぐらいオススメしたいです.

特に面白かった話からピックアップして紹介します.

データサイエンティスト VS ソフトウェアエンジニア

刺激的なタイトルですが, データサイエンティストとソフトウェアエンジニアのスキルセットは似て非なるものと心得て一緒にやってこ!という話です.

機械学習のワークフローでは、データサイエンティストなどと呼ばれる人々とソフトウェアエンジニアなどと呼ばれる人々との間で、共同作業が必要となります。しかし、ここで大きな問題が1つあります。それは、データサイエンティストと呼ばれる人々の多くがアナリストや研究者出身であり、多くの場合、ソフトウェア開発に関する知識や経験は比較的少ないという点です。

※「仕事ではじめる機械学習 第2版」 第6章6.1より引用

書籍の中では,

  • データサイエンティストはPythonやRを好む
  • Gitでのバージョン管理, ユニットテストを書く・動かす的な経験がない人もまあまあいる

と, データサイエンティストの事を紹介していますがこれは私の見聞でも事実かなと思っています.*4

ソフトウェアエンジニアな人から見ると「ええっ」と思うかもしれないですが, そもそも役割やメンタルモデルが違うのでそんなもんだと思います.

以前のエントリーで言語化した「機械学習エンジニアのスキルマップ」で言うと,

f:id:shinyorke:20210421224911p:plain
得意不得意は出身で分かれる説

あくまで私の感想・考えで意見は分かれると思いますが,

データサイエンティストから来た機械学習エンジニアと, ソフトウェアエンジニアから来た機械学習エンジニアで得意不得意は異なる

と思っています, これは機械学習エンジニア以外のエンジニア(SREもアプリもフロントエンドもバックエンドも)知っておいて損は無いです*5.

ML Opsの必要性について

これは6章全般の感想とも言えるのですが,

  • ML Opsがなぜ必要か?
    • データや状況, ソフトウェアの変化に合わせて継続的にトレーニング・サービング必要ですよね(CT)
    • 継続的なトレーニングをシステム上でするために, ソフトウェアを継続的にデプロイする必要ありますよね(CD)
    • 継続的にソフトウェアをデプロイするってことはバージョン管理・テストも継続的にインテグレーションすべきですよね(CI)
  • ML Opsをやるにあたっての設計・思想的観点
    • 試行錯誤のアジリティを高めるための工夫(環境を共通化することにより「作った人以外の環境でも動くやで!」的なやつ)
    • 予測結果を気軽にデプロイして試すのに必要なこと(アドホックな開発じゃなくてサービングしてくれるものを使おう的な)
    • 前処理・学習のワークフロー化(密結合なコードじゃなくて, 分割してワークフローにしようぜ)

この辺をいい感じの濃さ・文量で書いてくれてるのは凄く良かったです.

中にはやった経験が無いと読みにくいところもあるかもですが, 逆に一度でもやったことある(しくじったことある)方であれば涙なしには読めない気がします, 現に私がそうでした.

具体的なクラウドサービスやOSSにも触れていて, 「困った時にひとまず読んで参考にしよう」というときも使いやすい印象を受けました.

これも出版時点(2021/4現在)の情報としては凄く良いんじゃないかなと思ってます.

もっとも, 言い方を変えると「半年後には書籍に書いてるクラウドサービスやOSSも色々変わってるかもしれない」とも捉えることができるので,

  • データサイエンティストが論文をサーベイするように, エンジニアも常に情報を追いかける
  • 特にクラウドサービスまわりは新たなプレーヤーが出たり, 既存サービスの大幅アップデート(もしくは廃止)があったり
  • モノによってはローコード(ノーコード)でできたり?

など変化が激しいところもあるので携わる我々自身の自学自習も重要だったりするなと思いました.

結び

というわけで, 「仕事ではじめる機械学習 第2版」出版お祝いのエントリーでした.

色々と書きましたが要するに,

機械学習エンジニアじゃないエンジニアにも, ななめ読みで構わない(会社に買ってもらって構わない)ので読んでみてほしい

です.

ちょっとした機械学習タスクは機械学習エンジニア専任の仕事ではなくなると自分は思っている(というかそういう風潮は既に来ていると思っています)のでそういう意味でも知って損はないです.

一冊通しで軽く読む分にはGWの課題図書にしてもいいのかなとか.

私自身も, 紙の方が届いたら改めて読み直したいと思っています.

*1:ペーパーバック版の頃から読んでたのでそれぐらいですね.

*2:最初はまとめて書こうと思っていたのですが, 「機械学習プロジェクトをデータサイエンティスト・ビジネスパーソンとして成功させる」文脈と「いい感じに機械学習なシステムを作るためのエンジニアリング」文脈は似て非なる話なのでわけることにしました.

*3:詳しい内容は書籍に譲りますが, 「機械学習をしなくて良い方法を考える」に言及している本はこの本ぐらいだと思いますし, プロジェクト進行上の問題となるところ・難易度をしっかり書いてるのでこの章だけでも一冊分の価値があります.

*4:私の見聞と書籍で異なる点があるとするならば, Gitはかろうじて覚える・使うぐらいはありそうだなぐらいです. ユニットテストを書くの方については概念から説明することが多いので事実かな.

*5:特にテックリードやエンジニアリングマネージャーをやる人は抑えたほうがいいです. データサイエンティストがエンジニア同様Pythonを読み書きできても, データサイエンティストな彼らがエンジニアのようにDjangoでWebアプリを作ったり, pytestでいい感じにテストコードを書けるとは限らないからです(というか実践レベルで出来る人はかなりの希少価値).