機械学習エンジニア1年目の自分へのおすすめ書籍
はじめに
本記事はBrainPadアドベントカレンダー2021に寄稿しています。
私は現在、株式会社BrainPadで新卒3年目の機械学習エンジニアとして働いています。BrainPadでは福利厚生の一環として、外部の研修や書籍の購入、各種資格の取得に利用できるスキルアップエイドという制度が用意されています。
私はこの制度を主に技術書やビジネス書の購入のために利用しており、機械学習エンジニアとしての能力向上を図っています。本記事では私がこれまでに購入した書籍の中から、機械学習エンジニアとして働く上で参考になったと感じた書籍を振り返っていきます。
機械学習エンジニアの能力とは
現在は多くの企業で、データサイエンティスト、機械学習エンジニア、MLOpsエンジニアといったポジションが作られていると感じます。これらの職種に必要とされる能力は、データの性質や業務への関わり方によって変わると考えられ、一概に「これができればOK」といったスキルセットを定義するのは難しいでしょう。
個人的には機械学習エンジニアとして働く上では、機械学習をサービスやシステムの中で「使う」ことに責任を持てるようになりたいと考えています。そのためには、もちろん機械学習のアルゴリズムの知識や、モデルの実装のためのプログラミングスキルも重要ですが、予測結果を提供するためのWeb APIの知識や、モデルを載せるためのインフラ・クラウドの知識なども重要と感じます。
一方でこれらの領域を1人で完璧にカバーするのは現実的には非常に大変だと思います。本記事は読者の皆様の役割や指向性も併せて参考にしていただけると幸いです。
筆者の前提知識
おすすめ書籍を紹介する前に、私が機械学習エンジニアとして入社する前のバックグラウンドに触れておきます。私は学部4年から修士2年にかけて、統計や機械学習を扱う研究室に所属しており、研究活動を通じてPythonによるプログラミングや確率・統計、深層学習、Gitの扱いなどについても少し触れていました。
一方でコンピュータサイエンス分野に関しては、体系的な勉強はできていなかったと感じています。同時に、Webやクラウドなどといった業務レベルでの開発経験もありませんでした。
これらを踏まえて、後述するおすすめリストでは機械学習のアルゴリズム周りの書籍はやや中級者向け、その他のエンジニアリング系の書籍は入門向けのものが多い傾向にあります。また、個人レベルの業務内容の都合上、数理最適化や効果検証、データベースなどの重要なテーマについても勉強できていない部分が多々あります。参考の際にはご留意いただけると幸いです。
おすすめ書籍リスト
数学・確率統計
機械学習エンジニアはどのくらい数学を勉強しておくべきか、という問いは答えるのが難しいですが、基本的には大学の授業で触れるレベルの線形代数、微積分、確率・統計あたりが理解できていれば良いのではないかと思います。
理解度の基準を1つ挙げるとすれば、業務(または趣味)で触れる論文や書籍を読むにあたり大きな支障がなければ、機械学習エンジニアとして必要な数学の力はひとまず身についていると判断して良いと思います。
上記に挙げた線形代数や微積分などについては書籍や一般公開されている講義資料など、様々なリソースがあるため、ここでは詳細に扱いません。ご参考までに、ブレインパッドの分析部署の新卒メンバーは以下の書籍などを輪読して、ベースとなる数理知識を習得しています。
一方で個人的なおすすめとして以下を紹介します。
これならわかる応用数学教室 - 最小二乗法からウェーブレットまで
本書はベクトルの内積やノルムなどといった話から、フーリエ変換、ウェーブレット変換などを説明が丁寧に展開されています。
これらのトピックは信号処理の基本ですが、目標の関数を既知の扱いやすい関数で近似するという観点はパターン認識・機械学習にも深く通じると思います。こうした基礎を抑える事で、機械学習のアルゴリズムの理解の助けになると感じています。
プログラミング
リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック
言わずと知れたコーディングのお作法に関する有名な書籍です。いいコードは他の人(数ヶ月後の自分も含む)が見てわかりやすいコード、というモチベーションでコーディング時の注意点や心構えを紹介しています。分量も多くないので、一度読んでおくといいと思います。
データ分析
Kaggleで勝つデータ分析の技術
世界規模のデータ分析コンペティションであるKaggleに取り組む際の技術や知見が集約された書籍です。この本以降にもKaggle関連の書籍はいくつか出版されていますが、それらと比べてもなお有用な知見が詰まっていると感じます。
Kaggleの取り組み方と業務としての機械学習開発は重複する部分、しない部分両方あると思いますが、個人的には適切なバリデーション(評価)の設計や、データリークに対する注意など、業務上でも重要かつすぐに意識できる観点が数多くあると思います。本書はこのような現実的な分析で必要となるテクニックや観点を豊富に紹介しており、業務的な立場から見ても一読の価値があると感じます。
仕事ではじめる機械学習 第2版
こちらの本は具体的なアルゴリズムの前に、業務としての機械学習プロジェクトをどのように始め、進めるべきかなど、タイトル通り「仕事ではじめる」ことを意識した内容となっています。
さらに2021年に内容がアップデートされ、MLOps(DevOpsのアイデアをMLシステム開発に応用する取り組み)の関連技術や機械学習モデルの解釈などといった内容が追加されています。総じて、機械学習エンジニアとして機械学習を「使う」ことを目標とする際には、知っておきたい知識が詰め込まれていると感じます。
当然ながら、データにはテーブルデータの他に、画像や音声など様々な型式があります。また効果的に分析に取り組む際には、データの収集方法や背後の構造などに関するドメイン知識が非常に重要と言えます。本記事ではこれらの要素それぞれに対して書籍をあげる事はしません(というかそこまで自分がカバーできていません)が、必要に応じてキャッチアップする必要があるでしょう。
深層学習
ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装
本書はPythonで広く用いられている数値計算ライブラリであるNumpyをベースとして、ほとんどスクラッチからニューラルネットワークの各種計算処理を理解していく書籍です。
近年ではPyTorchやKerasなどといった深層学習ライブラリが普及しているため、細かい処理の仕組みを知らなくても、簡単に深層学習モデルを構築できると感じます。一方でモデルの不具合を調査したり、新しく提案された深層学習モデルなどをより具体的に理解する上では、どのように各種の計算が組み合わされているのかを理解する必要があります。
本書を読み進めコードに触れることで、様々な深層学習モデルを理解するための基礎が得られると思います。
本書は深層学習の入門的な内容でしたが、続編として自然言語処理やフレームワーク編が出版されており、今後強化学習編も出版予定だそうです。
前述したように、実際の深層学習モデル構築ではKerasやPyTorchなどのライブラリを用いることで、公式ドキュメントや公開実装などの先人の知恵を利用できます。これらのライブラリの公式ドキュメントには実装例が豊富に掲載されているため、画像や強化学習など興味がある分野に合わせて写経してみるのもいいと思います。
ウェブ開発
かんたんにウェブ開発と書いてしまいましたが、私が機械学習エンジニアとして勉強するべきと感じたのは、機械学習モデルをWeb APIとして提供するための技術です。
業務的な観点では、機械学習モデルは予測結果を提供してはじめてビジネスに貢献すると言えます。予測結果の提供方法はいろいろありますが、Web API形式は非常に汎用で多くの場面に適用できると言えます。
Web API: The Good Parts
本書では、Web APIを開発する際のお作法やプラクティスをコンパクトながら幅広く紹介しています。TwitterやFacebookなどにおけるAPIの設計例も併せて紹介されておりわかりやすいと思いました。また簡易的ながらAPIのセキュリティについても触れられています。総じてWeb APIの入門として読んで良かったと感じました。
FastAPIドキュメント
FastAPIはPythonベースの軽量なWebフレームワークであり、簡単かつ直感的にWeb APIを定義できます。同じくPythonのWebフレームワークであるDjangoやFlaskに比べて後発であるため、書籍などはあまり出版されていないのですが、公式ドキュメントが非常に分かりやすく、順番に追っていくことで基本的なWeb APIの実装方法が理解できると思います。
Docker
Dockerはコンテナ仮想化によってアプリケーションをビルド、提供、実行するためのプラットフォームです。コンテナベース開発の有用性は広く認知されているといってよく、機械学習アプリケーションを効率的に開発、提供する上でも必須の知識であると思います。
たった1日で基本が身につく!Docker/Kubernetes超入門
本書ではDockerの基本的なコマンドから、レジストリへのプッシュ、Docker ComposeやKubernetes、Jenkinsを用いた簡単なDevOpsの方法までを解説しています。
250ページほどで比較的コンパクトながら、基礎として必要十分な内容がまとまっており、手を動かしながら読み進めることでコンテナベース開発のメリットが感じられました(ちなみに手を動かしながらだと1日では読み終わらないと思います)。
Kubernetesなどの高度なツールに関しては限定的な内容までしかカバーしていませんが、入門としては適した内容と分量だと思います。
クラウド
クラウドサービスを利用すると、サーバーやネットワークなどといったインフラを必要なタイミングで利用することができます。例えば前述のWeb APIをコンテナアプリケーションとして開発、クラウド上に配置すれば、個人でも簡単にサービスを世界中に公開できます。
有名なクラウドサービスとしては、Google Cloud、Amazon Web Service、Microsoft Azureが挙げられます。これらはそれぞれ単純なインフラに留まらない豊富な機能を提供しており、アップデートも多いため、網羅的に勉強するのは難しいと感じています。
その上で個人的におすすめな勉強法としては、やはり実際に公開されているサンプルなどに触れて動かしてみるのが良いかと思います。特に、やりたいことが決まっている場合は、それに対応したサービスに触れてみるのがモチベーション的にも取り組みやすいと思います。大して、ある程度体系的に理解したい場合は、Courseraのコースなどを通じて各種ベンダーの認定資格などを目指してみるのもいいかもしれません。
MLOps
MLOpsは、ソフトウェアを効率的に開発・運用する取り組みであるDevOpsを機械学習に応用した考えのことです。機械学習ソフトウェアを開発、運用するためには、モデル開発以外にも様々な技術要素、検討事項などがあるとされており、近年では様々な企業が実用例やプラクティスを公開しています。機械学習エンジニアとしても避けては通れない領域と思われます。
私自身まだまだ勉強不足、知識不足な点が多いですが、MLOpsへの理解を深めるにあたって有用と感じた書籍を紹介します。
AIエンジニアのための機械学習システムデザインパターン
本書では、機械学習システムを構築する上でのデザインパターン(モデルのリリース、推論など)を具体的に紹介しています。それぞれのパターンに応じてメリットやデメリットなどが整理されており多くの場面で参考になると思います。
サンプル実装も公開されており、自分で動かしたり修正してみることもできます。サンプルは前述のFastAPIやDocker、Kubernetesなどが用いられているため、これらの要素を勉強した後に読むと、各技術要素がどのような役割を果たすのかよく理解できると思います。
入門監視 モダンなモニタリングのためのデザインパターン
本書ではシステムの振る舞いを監視(モニタリング)する際の基本的な考え方やアンチパターン、サーバーやネットワークなど具体的な要素での監視要素などをコンパクトかつ初心者向けにまとめています。
本書の内容は機械学習を直接意識したものではありません。一方でシステムの監視はMLOpsにおいても必ず必要となる要素であり、その基礎に触れておくには優れた書籍だと思いました。
他にGoogle Cloudのドキュメントとして公開されている以下の資料も非常に参考になります。MLOpsを成熟度別に紹介しており、どのようにMLOpsの取り組みを成長できるかに具体的に触れています。
番外編
ここまでは特に機械学習エンジニアリングに関する技術的な内容の書籍について紹介しました。一方で個人的なキャリアとしては、ソフトウェアエンジニアやビジネスパーソンとしても基本的な知識、考え方は把握しておきたいと感じています。本章ではこうした領域でためになった書籍を、番外編として紹介します。
コンピュータサイエンス
私の場合は、GoogleなどのTech Giantに入社された方の記事などを拝見して、「こういう知識も必要なんだなあ」と思い勉強をすることが多いです。コンピュータサイエンスの世界は奥が深いですが、その分飽きずに長く勉強できるとも思います。
世界で戦うプログラミング力を鍛える本 - コーディング面接189問とその解法
グローバルなIT企業のコーディング面接を想定して、Googleで実際に採用に携わった方が執筆された著書です。基本的なデータ構造やアルゴリズム、コーディングの例題の他に、面接の進み方や心構えなどにも触れられています。
コーティング例題の解説には多くのページ数を割いて解説されている上、GitHub上では有志の方も含めて多くの言語での解答例が公開されており、楽しんで取り組めると思います。
問題解決力を鍛える!アルゴリズムとデータ構造
本書は競技プログラミングの問題を例として、アルゴリズムやデータ構造、その適用方法などを紹介した書籍です。計算量の考え方から、動的計画法、ソート、グラフなど様々なトピックについて、丁寧に解説がされています。
掲載されている問題は簡単なものから難しいものまであり、モチベーションに合わせて取り組むことができます。競技プログラミングの経験にかかわらず、アルゴリズムやデータ構造の面白さに触れることができる良書だと思います。
ネットワークはなぜつながるのか 知っておきたいTCP/IP、LAN、光ファイバの基礎知識
本書では、インターネットを通じてどのように情報がやり取りされているのかを分かりやすく紹介しています。普段何気なく使っているインターネットですが、様々な技術の上に成り立っていることを感じます。
TCP/IPに関しては他にマスタリングTCP/IPなども有名ですが、「ネットワークは〜」の方は比較的分量が少なめで挿絵なども多く、入門向きと感じました。本書の後に「マスタリングTCP/IP」を読むのも良いと思います。
コンピュータシステムの理論と実装 - モダンなコンピュータの作り方
ハードウェア(論理ゲートやブール演算)、アーキテクチャ(ALU・CPUの設計や機械語など)から始まり、OS(メモリ管理、IOドライバなど)、コンパイラ(字句解析、構文解析など)、ソフトウェア(モジュール化、インターフェイス)など、コンピュターシステムを構成する要素を一気通貫で学ぶことができます。
各ステップではエミュレータを用いて実際に要素を組み立てることができ、最終的に簡単なアプリケーションを動作できるようになります。広範な内容なので時間をかけて理解する必要がありましたが、こうした内容をまとめて勉強できる書籍は貴重であり、読んで良かったと感じます。
ビジネス
ビジネス書に関しても、マネジメントや思考フレームワークなどさまざまなトピックがありますが、非技術書として記憶に残っているものを紹介します。
採用基準
番外編として掲載していますが、本書は私の一押しの書籍の1つです。内容としてはマッキンゼーの採用マネージャーの方が執筆されており、同社がどのような基準・指針で人材を評価しているのかについて紹介されています。
書籍内ではリーダーシップこそ優れた成果を出すために重要だとされており、リーダーシップとはどのような概念なのか、リーダーは何をすべきなのかが具体的かつ分かりやすく紹介されています。タイトルこそ「採用基準」ですが、組織内での役割にかかわらず多くの人にためになる内容だと思います。
Google流資料作成術
スライドプレゼンテーションで、データや主張をどのように掲載すべきかという内容を紹介しています。一貫した洞察として「認知的負荷」という概念に触れており、おおくのプレゼンテーションシーンですぐに想定できる内容で一読の価値があると思います。
Lean Analytics - スタートアップのためのデータ解析と活用法
ECビジネスやSaaS、モバイルアプリなど6つのビジネスモデルや、ビジネスが成長していく際のステージの変化を説明しています。その上で、各ビジネスモデルが各成長ステージでどのような指標を機にするべきなのかを紹介しています。
顧客ライフサイクルやサービス間の比較など、多くの情報が豊富なチャートや図解を用いて具体的にまとまっています。ページ以上に濃密な内容ですが、自分の関心のあるビジネスモデルにフォーカスして読むだけでも面白いと思います。
まとめ
これまで機械学習エンジニアとして読んだ書籍+αの中で、印象に残ったものを紹介しました。機械学習エンジニアという職業の役割自体曖昧なため、やや散逸的なリストになってしまいましたが、同じような立場の方の参考になれば幸いです。
他に勉強できていないと感じている領域としては、データエンジニアリング領域があると感じています。機械学習を利用する以上、入力となるデータをどのように収集、整備しておくかは重要な問題であり、一定の知識が必要だと感じています。
他にも知っておいた方がであろうトピックはいろいろありますが、あまり焦りすぎず自分のペースで引き続き勉強できればと思います。
書籍リスト
- 数学・確率統計
- プログラミング
- データ分析
- 深層学習
- ウェブ開発
- Docker
- MLOps
- コンピュータサイエンス
- ビジネス
Discussion