現在、駆け出しのAI/機械学習エンジニアをやっていまして。
「AI/機械学習エンジニア」って定義があいまいだったりするので、私の把握している範囲でどのような職種でどのようなスキルが求められるのか細く説明したいと思います。
よく「AI/機械学習エンジニア=データサイエンティスト」と勘違いされている方もいるので、併せてAI機械学習領域の他の職種についても今回ご紹介していきます。
AI/機械学習領域の職種
AI/機械学習領域の職種については以下の3つが挙げられます。
- AI/機械学習エンジニア
- データサイエンティスト
- 研究職(R&Dなど)
では解説していきますね。
AI/機械学習エンジニアの場合
まずは機械学習エンジニアを見てみましょう。
機械学習エンジニアはMLサイクルを回す為に以下のタスクを実行します。
- データの準備(機械学習を行いやすいようにデータを整形します。)
- モデルの生成(機械学習をしてモデルを作ります。)
- モデルの検証(作成したモデルの精度を確認します。)
おそらく一番単純でシンプルなケースが上記のような三つのタスクを行うのが機械学習エンジニアとする会社さんが多いかと思います。
ちなみに私の所属している会社の場合上記に加えて他に
- 機械学習を前提としたログ基盤の構築
- モデル作成を考慮したバッチジョブなどの検討と実装
- モデルのバージョン管理運用の検討
など少し幅を広げて活躍が求められたりします。
(こちらはあくまで私の職場のケースです。機械学習エンジニアの定義は他の会社の場合より広かったり、より狭かったりするのでその点ご認識ください。)
最近だと「機械学習ってなんでもできるんでしょ?」って思われる依頼者が多かったりするので、認識齟齬を埋める為に「どのような学習データがあり、何ができて何ができないのか」を説明し、要件を詳細化していくような議論がよく発生します。
そういったことも機械学習エンジニアとしてやっていたりします。
データサイエンティストの場合
さて次はデータサイエンティストです。
データサイエンティストは用意された情報を統計学的に整理し、そこから導き出される統計的見解をシステム、そして最終的にビジネスへ反映することが求められる職種です。
タスクとしては以下のような形になります。
- 問題定義
- データ収集・整理
- データ分析
- 問題解決・提言
私がデータサイエンティストの方とは、超上流工程でご一緒させていただくことが多かったですね。
「課題の原因」を突き止めそれが機械学習やその他のシステム実装で解決できそうであれば、それを提言するような形ですね。
なので、データサイエンティストの方は開発は基本しない認識です。
コーディングなどやるとしたら、RやPythonなどの分析ができる言語で作業する感じですね。
研究職の場合
さて次は研究職ですね。
研究者は言わなくてもなんとなくイメージできますよね?
世の中の課題に対し新規の手法で解決を提案、時に論文を書いて学会などで発表します。
普通AI・機械学習の職種って「AI・機械学習エンジニア」と「データサイエンティスト」だけだと思うんです。
「研究者」って上記二つと比べて職種のレイヤーというか粒度が異なるものだと思うので書いておいて恐縮なんですが、実はこれあえて「研究者」を書いたのには理由があります。
求められるスキルが「機械学習エンジニア」とは大きく異なるからです。こちらについては後ほど説明したいと思います。
AI/機械学習領域で働くためのスキル
AI/機械学習エンジニア
機械学習エンジニアとして働きたい場合以下のようなのスキルがあれば良いかと思います。
- Infrastructure as Codeの考え方を理解していて実行に移せる(Terraformを利用してAWSやGCPなどのクラウド環境を構築できる)
- 前処理を踏まえたモニタリング基盤の構築能力・モデル作成環境の構築能力
- モデルをアプリに組み込む実装能力
- 既存の機械学習ライブラリを活用する能力
- データアナリティクスに関する基礎知識
他にも必要なスキルあったりしますが、最低限はこのぐらいですかね。
上記を踏まえて例を出すとこんな感じです。
- Pythonの基本文法や汎用ライブラリ(基本構文、データ型、NumPy,Pandas)を理解し実装することが可能である。
- Keras、Tensorflowといった機械学習ライブラリの使用を理解して実装することができる。(数値、画像、文字列、音声それぞれの学習データから最適な機械学習ライブラリを選択することができる。)
- CRISP-DM(基礎分析)を理解している。
- MLOpsの考え方を理解している。
- Terraformを利用してAWSやGCPなどのクラウド環境を構築できる
ここまでできていて、kaggleの実績、あるいはアプリケーションなどのポートフォリオを見せれば未経験でも雇ってくれる会社は見つかると思います。
ちなみに上記では書いていませんが、さらにAIの領域は、画像処理、自然言語処理、音声処理で専門が分かれていたりすることもありますが、最初は意識することなく必要となったらそれぞれの領域について学んでいけば良いです。
データサイエンティストの場合
データサイエンティストの場合、実装というよりもいかにビックデータから正しく傾向を分析し、価値ある情報を導き出すかが鍵となります。
その為求められるスキルとしては、
- 数学の基礎知識
- 統計学の基礎知識
- python/R/エクセルなどを使用した統計分析能力とデータの可視化能力
- 専門的な業界知識
です。ちょっとざっくりし過ぎなのでもう少し詳細にしますと。
数学の基礎知識
集合、平均、分散、標準偏差、確率分布、指数関数、対数関数
統計学の基礎知識
記述統計学、推測統計学、確率、確率分布、正規分布、統計的仮説検定、最尤推定、尤度関数
python/R/エクセルなどを使用した統計分析能力とデータの可視化能力
時系列データの分析(自己回帰、移動平均、自己回帰和分移動平均)、データ可視化ライブラリの活用
専門的な業界知識
正直いってデータサイエンティストのスキルの中で一番重要でそして難しいスキルかと思います。
よく集まったデータ分析して、その数字だけをみて解釈をして提案を持ってくるデータサイエンティストがいたりするのですが、このケースの提案はお客様に全く信用されません。
その数字が出た背景にどのような要因が考えられるのかを業界の状況や、業務の運用など、前提となる情報を理解している上で考察する必要があり、専門的な業界、あるいは業務の知識が必要になります。
正直、私は未経験でデータサイエンティストになることは非常に難しいのではないかと、個人的に思っています。
研究者の場合
こちらはどのような研究をするかにもよるかと思いますが、機械学習エンジニアと決定的に異なる点があります。それは、
- 要件に最適な機械学習モデルを0から作成することができる
通常、多くの機械学習エンジニアはkerasなどのライブラリを使用してすでに学習アルゴリズムがテンプレされたような状態でモデルを作成することがあります。
研究の中で、現状の機械学習ライブラリでは満足なモデルを作れないと判断した場合、モデルをほんとに0から作らなければいけません。
そうなると自ずと既存の機械学習アルゴリズムである、ランダムフォレスト、ニューラルネットワーク、K近傍方、アンサンブル学習、XGBoostなどこれらを理論から数学的な部分まで正確に理解しあたらしいアルゴリズムを考える必要が出てくるかもしれません。
これは非常に難しく、未経験の方が挑戦するとしたら相当な時間を要するかと思っています。
まとめ
さて今回は職種と求められるスキルということでまとめてみました。
結論私が思うに、未経験の方で挑戦しやすいのは機械学習エンジニアかと思います。こちらについては私も未経験から機械学習エンジニアになったので、自信持って言えますね。
データサイエンティストや研究者は結構数学に強いバックボーンを持っていないと未経験には辛そうです。。。
データサイエンティストまたはAI研究者の方へ
私自身は機械学習エンジニアで、データサイエンティストや研究者の方とは一緒にお仕事をするぐらいなので、もし上記の記載内容の中で「ここまで学ばなくても挑戦できるよ!」とか、「これもやっておいた方がいい!」といった内容のものがあれば教えていただけると嬉しいです。