前回AI(人工知能)ってどんなものかっていう取っ掛かりになるような記事を書きました。
あと気になるのはAIの開発はどんな流れで、そのときAIエンジニアって従来型のSEと違ってどんなことするのかってことだと思うので今回もこの本(ディープラーニング やさしく知りたい先端科学シリーズ2)参考にわかりやすく概要レベル(取っ掛かりレベル)で書いてみたいと思います。
AI技術活用の3要素とクラウドML
機械学習を実際に利用する場合には情報科学(アルゴリズム)、計算環境、ビッグデータの3要素が必須です。
このうちビッグデータは自前で用意するしかありませんがアルゴリズムと計算環境はIBM Watson、Microsoft AzureML、AWS、Googleなどがクラウドサービス(クラウドML)として公開していて利用できるようになっています。
こういうのが登場する前はアルゴリズムを検討し、自前でそのコードを書き、実行環境も揃えて、という必要がありましたがクラウドMLの登場でこれらをする必要が減り大分手軽に作れるようになりました。
自前でアルゴリズムをコーディングするのは大変ですからこういうクラウドサービスを利用するというのは現実的な選択肢でしょう。
AI開発の流れ
AI開発の流れは従来のシステム開発とは違うわけですがどういう流れなんでしょうか。
以下に流れを記載します。
(1)対象データ(学習データ)の収集
ビジネス課題を解決するために(目的を達成するために)必要なデータを準備。
例えば来客数予測ならこれまでの来客実数、天気、広告実績などのデータ。
このパラメータとなるデータを説明変数、予測したいデータ(この場合来客数)を目的変数といいます。
何が予測に影響を与えるのかわからないので様々なデータを準備します。
(2)データの整形
クラウドMLで扱えるフォーマット(CSVファイルなど)に変換する。
と、ここで皆さんも覚えがあるかもしれませんが、実際のデータというのは異常値だったり入ってるべき項目が空だったりとかちょっとおかしいデータというのが結構あります。
これもこの工程でデータの中に異常値や抜けを見つけてきれいなデータにしてやります。
実はこれがAIの開発工程の中で一番大変らしいです。
(3)アルゴリズムの選定
アルゴリズムによって出力結果は大きく変わります。しかしどういう課題にはどのアルゴリズムが最適というのはまだ確率されていません。
ですので最も良い出力結果が得られるのはどれかを見つけるため色々試行錯誤する必要があります。
クラウドMLによって用意されているアルゴリズムの種類が違うためできるだけ多いところを選びたいところです。
(4)実験
選択したアルゴリズムとデータを使って実験(実際に学習させる)を行います。
データ量にもよりますがクラウドMLなら数分から数十分程度で終わるらしく繰り返し実験が可能です。
(4)実験結果の評価
出力結果がCSVファイルなどで出力されるのでその精度を評価します。
例えば用意した教師データのうち7割は学習用に使い、残りの3割で答え合わせすれば精度が判定できますね。
精度の評価は正解率や真陽性率、偽陽性率など様々な指標を使ってやっていくようです。
(5)パラメータ調整
期待する結果は中々簡単に得られませんのでデータを調整したり、アルゴリズムを変更したりとか色々地味に試行錯誤していきます。
最悪満足な結果が得られないことも有りえますしね。簡単に試せるとはいえ時間も有限ですし。
AIというと華やかなイメージがありますが裏ではデータ整形したり、試行錯誤したりと結構地味な作業が必要なんですね・・・。
AIエンジニアは何をする?
クラウドMLの登場で機械学習が専門家でなくても利用できるようになりました。
でもAIエンジニアの人材は不足しているといいます。AIエンジニアは具体的にどんなスキルがあって何ができればいいんでしょうか。
従来型ITエンジニアとの違い
こうしてAIのことを調べてきましたが従来型の開発と違ってクラウドMLやAPIを利用すればプログラミングをそこまでする必要がなさそうです。
もちろんこういうの使わないで自前で作るなら別ですがかなり高度なスキルが必要になりとても人材不足に対応できないでしょう。コストもかかるし。
AIエンジニアはこれまでの従来型と違いプログラミングスキルよりも各アルゴリズムの特徴を踏まえて適切なアルゴリズムを選択できたり、出力結果に対してどのデータの影響が大きいかを見出したりとかそういうデータ分析のスキルが必要になってくるんじゃないでしょうか。
(アルゴリズムの難しい数式の理論まで知っておく必要があるのはアルゴリズムの提供側(クラウドML、API)になる場合の話で利用する側はそこまで知らなくて大丈夫でしょう。)
つまりプログラマーっていうよりデータサイエンティストという側面が強くて
プログラミングが楽しいって人だとつまらないかもしれないですね。