本稿では、今AIエンジニアに求められるスキルを、様々な視点から整理したいと思います。
なお、本稿におけるAIエンジニアという言葉は何らかの「AIシステムの開発、アルゴリズム開発を行うエンジニア」と想定して記載します。いわゆるデータサイエンティストより狭い意味です。例えば開発を行わないデータアナリストや統計家は含みません。またふつうAIアルゴリズムとは呼ばれないようなシステムの開発者も含まれません。
【AIエンジニア】今求められる4つのスキルとは?
今様々な求人要項などで共通して求められるAIエンジニアのスキルは、大まかに言うと
- 数理知識
- プログラミング知識
- ソフトスキル
- 英語など
の4つに分類できます。
それぞれのスキルの概要を見ていきましょう。
数理科学の知識(機械学習・深層学習・統計学などの知識)
AI開発に携わるには、AIのこなすタスクについてある程度仕組みから理解しておくことが求められます。
AIのタスクとは予測やリコメンド、クラスタリングや最適化などのことで、これらをかなえるアルゴリズムの裏側に様々な数理科学の知識が支えています。
プログラミング知識(Python, R,…+深層学習関連のフレームワーク+クラウドサービス)
AI開発で圧倒的に使われるプログラミング言語はPythonであり、まずはPythonのスキルが求められると言っても間違いではないでしょう。
ついでRやjavaなど、その他の言語の知識も求められます。
データベースを扱うことが多いことからSQLの扱いも求められます。
最近のAIロジックのメインは深層学習であることから、深層学習関連の開発フレームワークであるTensorflow、Keras、Pytorchなどの扱いも求められます。
ソフトスキル(勉強し続けられる向学心と最先端の動向にキャッチアップし続ける好奇心)
コミュニケーション能力やリーダーシップ、ファシリテーションスキルなどのソフトスキルも相当程度求められます。AI分野はあまりにも最先端であるため非エンジニアの業務担当者のほとんどの人が設計の考え方や専門用語に慣れていません。そのため、ディスコミニュケーションが非常に発生しやすいということがこの分野の特徴でもあります。非専門家とも円滑にやりとりができるソフトスキルはエンジニアスキルと同様に重宝されます。
その他(英語・専門領域)
その他、英語の知識は多くの現場で求められます。AIに限りませんが、今技術ドキュメントの多くは英語で書かれているため、最低限英語の読解が求められます。それに加えて、AI技術はあまりにも最先端であるため、技術の詳細は元論文にあたる必要があることが多く、論文はほぼ常に英語で書かれています。さらに、外国人エンジニアとの協同が求められる機会が多いのもこの分野の特徴でしょう。英語のスキルは早々に高めておいたがベターです。
英語以外のその他のスキルとしては、特定分野のドメイン知識があると重宝されます。これは結局のところ、先にのべたようなソフトスキルの多くを支えるのはドメン知識であるからです。また、ゲームAI開発など独自進化をしてきた領域などでは、経験値の差が開発のパフォーマンスに大きく影響します。
【AIエンジニア】4つのスキルのエントリーレベルと強みレベル
上で挙げたスキルを全て習得していなくても全く問題ありません。
ここまでやや大雑把に書いたスキルだけでも、すべてを兼ね揃えている人は非常に稀です。考え方としては、上に挙げた4分野のうち、どこかの分野で「強み」を持てるのならば、他の分野はエントリーレベルで良いと考えましょう。
ここからは、分野ごとの「エントリーレベル」と「強みレベル」の違いを記載していきます。
数理科学スキル
AI開発の理論を支える数理科学のラインナップは下記の通りです。リストのそれぞれの分野に対してエントリーレベルと強みレベルの基準を紹介します。
- 基礎となる高校数学
- 基礎となる大学数学(解析・線形代数・離散数学・確率論)
- 統計学の知識
- 機械学習の知識
- 深層学習の知識
数理科学スキルのエントリーレベル
- 高校数学のしっかりとした理解
- 学部数学(解析と線形代数)のある程度の理解
- 統計検定2級程度の統計用語
- 機械学習や深層学習の様々なモデルに関するカタログ的知識
数理科学のエントリーレベルは、ズバリ機械学習や深層学習の専門書籍を読める程度の基礎知識(機械学習・深層学習分野の多くのテキストが前提としている知識)となります。大凡でいうと、上記3つのラインナップのようにまとめられるでしょう。大学の解析(微積分)や線形代数についてはある程度知っている必要がありますが、マスターしている必要はありません。むしろ機械学習分野の線形代数はある種独特ですので、機械学習のテキストの中で(機械学習文脈で必要な)線形代数をマスターするつもりで学習するのが良いでしょう。
機械学習や深層学習の様々なモデルに関するカタログ的知識としては、まさにそのようなテキスト(手法カタログ的テキスト)をしっかり読んでおくと共に、JDLAのG検定などを取得しておくと良いでしょう。
・G検定(https://www.jdla.org/certificate/general/)
数理科学スキルの強みレベル
- 多くの企業では大学院での専門性が求められる
- 統計学を強みとするなら統計検定1級取得
- 機械学習・深層学習関連の論文を読み込めること
- 数学・コンピュータサイエンスのファンダメンタルな知識があること
数理科学が強みとして認定されるためには、数理科学の各分野について大学院(修士)レベルの知識が求められます。実際に機械学習関連の領域で修士を取得しているのであれば良いですが、それ以外の方であれば、最低限、機械学習・深層学習関連の領域の論文を読めるだけの基礎体力を示す必要があります。ご自身で論文を書いていたり、統計検定1級を取得していたりする必要があります。
・arXiv(https://arxiv.org/)
・統計検定(https://www.toukei-kentei.jp/)
現代のAI技術の理論的バックボーンとして最も注目されているのは、やはり深層学習です。深層学習についての深い知見は、その他の分野の知識よりも(AIエンジニアという文脈では)かなり重宝されます。
プログラミングスキル
プログラミングスキルと書いていますが、プログラミング以外のコンピュータサイエンス領域についてもこのカテゴリに含めることにします。例えば、データベース言語であるSQLの知識やアルゴリズムの計算効率の知識、クラウドサービスの知識などもここに含めます。
- Pythonの基礎知識
- データベースとSQLの基礎知識
- R, java, C/C++などPython以外の言語の知識
- OSの知識(Linux/Windows)
- クラウドサービスの知識(GCP, AWS)
- ビッグデータ処理・分散処理関連の知識(Hadoop,Spark)
- 様々なBIツールの扱い
- 深層学習関連のフレームワーク(Tensorflow、Keras、Pytorch)の扱い
プログラミング知識のエントリーレベル
- とにかくPythonに慣れていること
- scikit-learnなど有名な機械学習ライブラリの知識があること
- Kaggleなどのコンペである程度実績を出せていること
プログラミング知識のエントリーレベルでは、まずは何よりPythonに慣れている状態を目指しましょう。今ではProgateやPyQなどPythonを学ぶためのオンライン教材は非常に充実しています。その分「Pythonを使うきっかけがなかった/学ぶ機会がなかった」などは言い訳にならないため、確実に押さえておきましょう。Pythonとは別にHadoopなどを用いたビッグデータ処理や、AWSのSageMakerなど機械学習関連サービスの利用は「そういう環境」にいなければ(個人としては)なかなか経験値を積むのが難しいです。そのような分野については、無理してトレーニング機会を作る必要はありません(もちろん志望企業の募集要件でそのスキルが必須であれば話は別ですが・・・)。まずはPythonです。また、kaggleでの経験値は機械学習の知識と共に、Python(もしくはR)の知識も担保するのでおすすめです。
Pythonを学ぶためのオンラインサービス
Python関連の資格
・pythonエンジニア認定試験
・MTA 98-381*MicrosoftのPythonプログラミング資格
機械学習のコンペ
プログラミングスキルの強みレベル
- 情報科学の大学院出身
- CSスキルはエンジニアとしての実務経験をえる必要がある
- AtCoderなどコンペを利用しよう
- 非構造化データの扱い
このカテゴリでも情報系大学院出身は相当強みとなります。実際には、コンピュータ・サイエンス関連の修士号が必須要件となっている企業も多いです。(修士が必須要件の場合はどうしようもありませんが、必須でない場合)大学院を出ていなくてもAtCoderなどのコンペで優秀なスコア(例えば水色以上)を出していれば、アルゴリズムについての深い理解を証明することができます。
AIプロダクトは、表形式のテーブルデータだけではなく、画像や動画、音声などの非構造化データを対象とすることが多いです。非構造化データの扱いに長けていること、プロダクト開発の経験があることは強みとなるでしょう。自然言語処理(NLP)に習熟していることも重宝されます。
Tableauなどの可視化BIツールやRedashなどのデータベース関連OSSなど、外部ソフトウェアとの連携が必要となることも多いです。扱ったソフトウェア・ツールは多いほど良いでしょう(もし経験があれば、レジュメには漏らさず記載しましょう。)
「数理科学スキル」の項目でも述べましたが、現代のAI技術の中心はやはり深層学習です。そこで深層学習系のフレームワーク(Tensorflow、Keras、Pytorch)の十分な使用経験があれば、強みとなるでしょう。また、深層学習のスキルについては書面とは別に、GitHubなどを公開して技術レベルを証明する必要がある場合があります。いずれにせよ、現代の文脈では深層学習の高い技術レベルは(他のスキルと比べて相対的に)強みとなりやすいです。
プログラミングスキルについては、データサイエンティスト協会の「スキルチェックリスト ver3.00 エンジニアリング力」も参考にしてみましょう。
・スキルチェックリスト ver3.00
ソフトスキル
数理科学やプログラミングスキルと比べると曖昧で一見捉えどころのないソフトスキルですが、他の全ての職種と同様、ソフトスキルの重要性は非常に高いです。なお、ここではソフトスキルとしてコミュニケーションやファシリテーション、チームビルディングなどの対人関係の技能のほか、ロジカルシンキングやクリティカルシンキングなどの思考法、様々なマインドセットを含むことにします。
ソフトスキルのエントリーレベル
- ビジネス視点が不可欠
- 絶え間なき学習に耐えられる好奇心とタフネス
- 専門用語の翻訳能力
冒頭でも記載しましたが、AI分野はあまりにも最先端であるため非エンジニアの業務担当者のほとんどの人が設計の考え方や専門分野に慣れていません。そこで非エンジニアとの効率的コミュニケーションの観点からも、分かりやすい論理展開や専門用語の翻訳力が求められます。また、関わっているプロダクトをビジネス視点で捉えるための最低限のフレームワークもエントリーレベルとしては求められます。ビジネスモデルのパタンやKPIツリーを使いこなせるようにしましょう。
業務に取り掛かる姿勢として、不断の勉強、情報のキャッチアップが求められるのもAI分野の特徴と言えるでしょう。あっという間に技術スタンダードが変わる速度感の世界で適用できるだけの感度・好奇心・学習欲が見られます。
ソフトスキルの強みレベル
- AIプロダクトのプロマネ経験
- AIエンジニアの育成経験
- GDPRなどデータ関連法規の知識、セキュリティの知識など
AIプロダクトのプロマネ経験や、AIエンジニアの育成経験・リソースマネジメント経験などマネジメント経験があれば大きな強みとなります。マネジメント職ではなくとも、プレイヤーとしてコミュニケーションスキルや必要なマインドセットを強みとしてアピールすることもできます。例えば、AI関連のイベントでプレゼンテーションを行ったり、自らが主宰する、ブログやコードをアップするなど、コミュニティへの貢献があれば、コミュニケーションと向学心、オープンソースへの適用性など様々な面から評価されるでしょう。
その他のスキル
- 英語・専門領域
- ドメイン知識
- ・・・
その他のスキルについてはエントリーレベルも強みレベルも文脈次第ですが、例えば英語は、論文やWEBの文章を読めるレベル(理解するとは別で、言葉として読めれば良い)でエントリーレベル、ビジネスコミュニケーションができれば強みレベルでしょう。日進月歩のAIの世界で情報を得るには英語は不可欠であるからです。特定ビジネス領域の知識、いわゆるドメイン知識が活かせると、ワンランク上の企業を目指せる場合があります。AIプロダクトは、今ではビジネス・モデルの基幹部分にも関わり、実装されているため、ドメイン知識は開発規模が大きくなるほど大切になります。
終わりに
いかがでしたでしょうか。AI技術が日進月歩であり、AIマーケットが日々急成長している限り、そこで求められるスキルもまた日々変化を迫られる性質のものであります。したがってここに記載したスキルについては(良くても)2020年現在の定点観測に過ぎませんが、少しでもお役に立てれば幸いです。
著者:meifelyuki
フリーランスのデータサイエンティストとして、大学や企業などをフラフラしながら様々なデータサイエンス業務に携わっています。データサイエンスを「する/教える/作る」の全てが好きです。レガシーな統計解析も、kaggleな機械学習も、強力だけど時にブラックボックスな深層学習も平等に好きです。お仕事の依頼は編集部まで!