誰に向けての記事か
近年、Deep Learningの実用化や、人工知能という概念、キーワードの盛り上がりによって、機械学習をシステムに組み込んだり、個人がAIを開発したりすることが一般的になりつつあります。
そうした中で、いわゆるモデル(機械学習の手法の構築)が行える人材の確保が重要となります。
国内の大手企業では、GAFAを筆頭とする海外企業との人材確保競争に負けじとばかりに、優秀な人材を確保するために新入社員に年収1000万円を提示するところまで出てきています。
つまり、世界的に「AI人材」に対して重きが置かれるようになっていて、注目されているわけです。
(ご参考:AI人材の採用は、日本を飛び出して世界規模で争奪戦が繰り広げられている(NHK「ナビゲーション」からーノリスケBLOG))
当然、このように高額な年収が与えられる職業は人気が出ます。
数年前までは「プログラミングスクール」といえば、
- Webアプリケーションコース
- 組み込みシステムコース
- デザインコース
上記、もしくは近いものが対象としてプランされていましたが、今では、
- データサイエンティストコース
- 機械学習エンジニアコース
なんていうものまで登場しています。
実際に、まだまだ駆け出しの弊社にも多くの方から「機械学習エンジニア」のポジションにご応募を頂きます。
ちなみに、「データサイエンティスト」と「機械学習エンジニア」の違いについては、以前私が書いた記事を参考にされてください。 blog.n2i.jp
機械学習エンジニア志望の方にお会いして、「こういう事がしたい」「この領域に興味がある」など、色々とお話を伺う中で、未熟ながらも業務をこなしている自分故に感じたことがあります。
今回は、これをまとめてみたいと思います。これから機械学習エンジニアあるいはデータサイエンティストを目指す人にぜひ知っておいていただきたいと思います。
業務はデータ分析だけではない
まず、機械学習エンジニアやデータサイエンティストをどちらかといえば「研究者」として捉えている人が多いように思います。
もちろん、企業の規模によっては、そのようなポジションで人材を迎えている所もあるでしょうが、研究所を持ち合わせていない弊社のような企業でのデータサイエンティスト、機械学習エンジニアというポジションは、必ずしも研究者を意味しません。
業務として、エンジニアリングの一貫として、データを扱う立場にある、ということに留意していただければと思います。
私の研究者に対する偏見もあるかもしれませんが、ひとつのテーマに挑み続ける研究者と実際の業務はかけ離れています。
実際の業務は、データ分析の他にも多岐に渡ります。
よく「とにかくデータ分析をやりたいんです」とデータ分析への愛を伝えてくださる方がいます。「業務はデータ分析以外にも多くをお願いすることになりますが、大丈夫ですか?」と質問をすると、何ともいえないリアクションが返ってきます。
大事なことなので繰り返します。業務は必ずしもデータ分析だけではありません。
Pythonが使えることは基本
「Pythonが得意です」という売り込みもよくありますが、そもそも「Pythonが得意」とは、どこに得意の領域があるのか掴みづらいです。この職業を志すのであれば、Pythonは書けて当然だと見なされます。
「機械学習エンジニアになるためには何の勉強をすればいいですか?」
という質問もWebでよくみかけます。しかし、それに対する回答は100%と言っていいぐらい「Pythonを勉強しましょう」で完結しています。自分は、これは半分正解で半分間違いだと思います。
先に書いたように、書けて当たり前であり、勉強の対象というよりは、業務で使用する道具のひとつであるということです。
その上で、
- シンプルな記述がされている
- 無駄な処理が含まれていない
- メモリを過多に使用していない
- データ構造に無駄がない
など、使い方が上手であればそれでいいし、強みにできます。
なので、「Pythonが得意」と言われても、正直なところ困ってしまいます。
どのように得意なのかを伝えてほしいし、そもそも使えることは基本です。
コードを書くだけじゃない
これは機械学習エンジニアやデータサイエンティストだけではなく、エンジニアという職業全般に言えることだと思いますが、 実務をコードを書くだけの業務だと思わない方がよいです。
実際には、
- クライアント様とのやり取り
- 要件定義の書き出し
- 仕様書の作成
- 設計の書き出し
など、コードだけではなく、テキストを書く時間もかなり多いです。テキストやmarkdownを1週間書き続ける、なんていう週もあるぐらいです。
エンジニアにはこの作業を嫌う人が多いように思いますが、機械学習エンジニアやデータサイエンティストである以上、試した内容やモデル検証の報告書や実績をまとめる必要があるため、Webエンジニア以上にテキストを書いたり、まとめる作業が多いかもしれません。
「数学を勉強しています」は広すぎる
機械学習の様々な手法やアルゴリズムの深い理解に数学は欠かせません。
機械学習エンジニアを志望する方はよく、
- 線形代数
- 微分積分
を勉強しているとおっしゃいます。
確かに数学は必要ですが、広く数学を勉強をしている人に限って、機械学習に必要な分野をご存知ない方がいます。
線形代数といっても、標準的な機械学習(実務で使用するレベル)で登場する線形代数の分野は一部であり全てではありません。微分積分についても同様です。
線形代数の勉強をする中で、一見関係があるようで関係のない部分まで勉強していることになってしまいます。一刻も早く機械学習エンジニアになりたいという場合、これはもったいないことです。
数学をベースに考えるのではなく、機械学習の本を読んだ上で、分からなかったところだけを調べて学習するのはどうでしょうか。
インフラやクラウド、Gitの理解
数学に強い人、プログラムはめっちゃ書けるという人は多いです。しかし、環境構築ができなかったり、GCPやAWSなどのクラウドサービスを触ったことがない人も多いです。今であればDockerが使えないのも痛手かもしれません。
業務で機械学習モデルを作成する以上、データを分析してモデルを作って終わり、報告書を書いて終わり、ということはまずないです。
- 実際に作成したモデルで、API経由で予測を実行できる環境を提供する
- データが自動で貯まるシステムを構築する
- 学習が再度行える
上記のような運用に必要なフェーズの作成は必ず発生します。
現在、様々なクラウドサービスが登場してこの部分のコストはかなり低くなっているものの、クラウドに環境を構築する場合に最低限必要な知識であるため、ある程度知っておくことがオススメです。
あと、チーム開発は当たり前なので、Gitも使えた方がよいです。
何をすればいいのか分からない
きついようですが、論外です。人に任せている時点で向いていないかもしれません。
Googleで調べれば、膨大な情報に出会えます。Pythonをインストールして、簡単なモデルを作ってみたらどうでしょう。優しい内容の適当な本を1冊購入してマネするもよし。
この時点で手が動かなくなっているのはもったいないので、とにかく何かをやってみることがオススメです。
全てを理解する必要はないので、必要になった時にその分野の知識を学習する、というスタイルがよいのではないでしょうか。
書いてみた感想
今まで思ったことを改めて文字にしてみると、かなりの文字数になってしまって驚いています。
データサイエンティスト、機械学習エンジニアという職業は登場してまだ日も浅く、正確な情報が出回っていないと感じます。
実際の企業によって温度感は違えど、上記に挙げたことが当てはまることが多いのではないでしょうか。
業務で機械学習を使うということは、本当に難しいです。
今回、皆さんに一番伝えたかったのは、「作って終わり」ではないということ。
作ったモデルで問題解決が行えるフェーズまでを開発するのが機械学習エンジニア、データサイエンティストの業務になります。