数理的手法を使いやすくするためのソフトウェア開発

科学技術計算とデータサイエンスについて

機械学習エンジニアになるために学ぶべき5つのスキル(海外記事紹介)

機械学習エンジニアにはどのようなスキルが求められるのでしょうか?

あれこれと調べてみたのですが、どうもわかりづらいです。 というのは、ブームが盛り上がるうちに スキル要件の範囲が広くなり、また、レベルが高くなって、 「そのような人材はユニコーン(現実には存在しない生き物)」 ということが言われるほどになっているからです。 そして、このように求められるスキルが増えるのに呼応して、 学ぶべきとされる事柄と読むべきとされる書籍のリストも非常に長くなりつつあります。 これでは、何から学ぶかを決めるのも一苦労です。

そこで、 スキル要件をもっとコンパクトに書き表している記事^1

5 Skills You Need to Become a Machine Learning Engineer | Udacity

を、機械学習を学ぶときの参考にするべく、以下で紹介します。 この記事の著者、Chakrabortyさんは コンピュータービジョンの研究で学位を取得して、 Udacity^2(米国のオンライン学習サイト)で、 人工知能機械学習のオンラインコースを作っているという専門家です。 そして、 機械学習エンジニアに求められるスキルを整理して、具体的なリストとしてまとめています。

機械学習に関わるプロジェクトとは?

この記事ではスキル要件について説明するために、次のような機械学習プログジェクトを想定しています。

Let’s say you’re working for a grocery chain, and the company wants to start issuing targeted coupons based on things like the past purchase history of customers, with a goal of generating coupons that shoppers will actually use. ... The Machine Learning approach would be to write an automated coupon generation system.

生鮮食料品チェーン店の販売支援プロジェクト

  • 目標)顧客の過去の購入履歴に基づいて、(レジで)クーポンを発行できるようにする。
  • 手段)機械学習アプリを開発して、購入履歴の分析とクーポンの発行を自動的に行なわせる。

But what does it take to write that system, and have it work? You have to understand the whole ecosystem—inventory, catalog, pricing, purchase orders, bill generation, Point of Sale software, CRM software, etc.

Ultimately, the process is less about understanding Machine Learning algorithms—or when and how to apply them—and more about understanding the systemic interrelationships, and writing working software that will successfully integrate and interface. ...

  • 必要な実務スキル)
    • チェーン店のビジネスに対する理解・洞察
      • 商品の在庫、カタログ、値付け、発注、レシート発行、POSシステム(レジ)での会計、顧客情報の管理など
    • 実用的なソフトウェアを開発

必要なスキル構成は担当パートによって異なる

上記のようなプロジェクトでは、メンバーは

というように、異なったタイプの仕事をこなすことになります。 そこで、担当する仕事ごとに、プロジェクトメンバに求められる基盤スキルの構成は、 次の表のように違ってきます。

データ解析 機械学習アルゴリズム 機械学習アプリ 情報システム
統計学 -
モデリング
機械学習アルゴリズム利用
計算機科学
ソフトウェア工学 -

表1 : 仕事のタイプに対して求められるスキルの構成。スキルの相対的な重みを、◎:上級,◯:中級, △:初級,-:入門者レベルのように示しています。(原文での表^3を日本語訳)

3種類の機械学習エンジニア

ちなみに、Chakrabortyさんが書いた表^3では、機械学習エンジニアとして3つのタイプ、core ML enginer、applied ML enginnerと、software engineer - MLが示されています。 しかし、それらのエンジニアの担当については詳しく書かれていなかったので、 私は、core ML enginer が機械学習アルゴリズムの研究開発を担当し、 applied ML enginner がアプリの試作を担当し、 software engineer - MLが情報システム全体へアプリを統合する担当である、 と解釈しています。

データ分析者と機械学習エンジニアの分業

すると、これら3種類の機械学習エンジニアとデータ分析者が 一緒のプロジェクトで仕事をするときには、 担当する仕事がデータの解析から情報システムへの統合へと変わっていくにつれて、 重点的に求められるスキルもまた統計学からソフトウェア工学へとシフトしていきます。

例えば、データ解析を担当するメンバは、 仕事として、顧客情報を統計的に分析してデータモデリングを行いますから、 スキルとしては、統計学モデリングの専門家であることを求められます。 そして、このメンバの仕事ではプログラミングはそれほど重要ではありませんから、 スキルとしてソフトウェア工学はそれほど求められてはいないわけです。 (ただ、データ収集のためのSQL文を書けるくらいのプログラミングスキルは必要でしょうから、要求レベルはゼロではないのでしょうが。) これに対して、機会学習アプリのプロトタイピングを担当するメンバは、 仕事として、機械学習のソフトウェア部品を使ってアプリの試作を繰り返すので、 スキルとしては、機械学習アルゴリズムの使用と計算機科学についての専門家であることを 求められます。 そして、このメンバの仕事では統計的分析はそれほどの重みはありませんので、 スキルとしては、データ分析者のように統計学の専門家であることを求められないのです。

このように、プロジェクトメンバが自分の専門に特化して、 それぞの強みと弱みを補いあうことで ^7 、 プロジェクトの生産性を上げることができるのだと思います。

基盤スキルの内訳

表1に掲げられた5つの基盤スキルの内訳を、Chakrabortyさんは以下のように説明しています。 (ただし、他のスキル要件についての記事 ^4,^5 を参考にして、私が追加したり書きなおした箇所があります。)

  1. 統計学
  2. データモデリングと評価
    • パターン、構造の発見(相関、クラスター、固有ベクトル(主成分解析)、...)
    • 予測(分類、回帰、異常検知などによる)
    • 精度、誤差の解析(log-loss for classification, 最小二乗法の誤差(sum-of-squared-errors for regression), ...)
    • 検証(標本データの分割(トレーニングデータ、テストデータ)、逐次(? = sequential cross-validation)/ ランダム化交差検証(? = randomized cross-validation)、...)
    • 誤差伝搬? (ニューラルネットワークでの逆伝搬計算)
  3. 機械学習アルゴリズム&ライブラリの利用
  4. 計算機科学
    • データ構造、アルゴリズム(検索、ソート、最適化問題(目的関数、制約条件の違いによるクラス分け(連続、離散))、動的計画法、...)
    • 計算量、計算複雑性(P vs NP, NP完全問題, big O-記法, ...)
    • ハードウェア アーキテクチャー(メモリ階層、キャッシュ、バンド幅、並列処理、マルチプロセス、マルチスレッド、ベクトル演算、...)
  5. ソフトウェア工学

まとめ

機械学習・データサイエンスの仕事に就くためのスキル要件について、ふたつの対照的な見解があるようです。

ひとつは、こうした分野で働くためには、あらゆるスキルを身につけて、プロジェクトで必要となるすべてのタイプの仕事をひとりでこなせるようなるべき、という見解です。 もうひとつは、上で紹介した記事のように、仕事のタイプに応じて、異なったスキルに専門化することが求められ、プロジェクトにおいては、メンバが互いに強みと弱みを補い合って分業する、という見解 ^1 ,^6 ,^7 です。

ただ、どちらが現実に近いのかは、まだ機械学習の仕事をしていないので分かりません。 しかし、私が機械学習について学ぼうとするとき、 何を優先して何を後回しにするかという指針になるのは、 後者の見解(Chakrabortyさんの記事)のほうです。


参考

^1:5 Skills You Need to Become a Machine Learning Engineer | Udacity

^2:Udacity - Free Online Classes & Nanodegrees(いわゆる、MOOCs(massive open online courses)のサイト。)

^3:Relative importance of core skills for different Machine Learning job roles

^4:From PhD to Data Scientist: 5 Tips for Making the Transition

^5:「未経験者はどうすればデータサイエンティストになれるか」

^6:データ分析のためのチームビルディング--情シスとマーケの重要スキルセット

^7:Tips for Beginner Machine Learning/Data Scientists Feeling Overwhelmed