ソフトウェアエンジニアの為の道具としての深層学習紹介
本記事の目的
本記事は FUN Advent Calendar 2020 - Adventar の18日目の記事です。
昨日の記事はみょいさんの「ニューロンの振る舞いを理解する - HackMD」でした。
シナプス電位やニューロンのモデルのコードと結果が私的に見どころでした、お疲れ様です。彼が私から遠い場所に行ってしまう感覚に戦々恐々としましたが、世の中そんなものだと思うので私の記事を書いていこうと思います。
本記事はソフトウェアエンジニアの為の道具としての深層学習紹介という事で詳しいことは他に丸投げしつつ紹介だけしていきたいと思います。
自己紹介
私は自然言語処理の深層学習モデルを主に追っている学部4年生です。なので本記事は正確なものでない可能性が大いにありますので、お気を付けてお読みください。
ソフトウェアエンジニアはいつAIの利用を検討するのか
基本的に複雑なデータを入力として分類や予測などのタスクの中で複雑なものを自動で行ってくれるシステムを開発したい時に検討します。ここでの複雑なデータとは変動するデータ(画像や言語や音など)の事を指しており、複雑なタスクとはそれらの変動を加味した上での出力の決定を主に指します。具体的な例として、チャットボットや顔認識、監視カメラの人モノ検出等です。
深層学習とは
機械学習のWikipediaによると経験からの学習により自動で改善するコンピュータアルゴリズムの事を指します。これらは入力とされるデータの背景を分析し出力を作成します。基本的には入力のデータと共に出力のデータ例も学習には必要です。
深層学習はその機械学習の中に位置付けられていて、多数のニューラルネットワークを用いた手法を主に指します。詳しい説明はディープラーニング(深層学習)とは|基本知識・仕組み・活用事例・機械学習との違い | Ledge.ai等を参照してください。
深層学習の使いどころ
深層学習はパラメータが多い等の性質上複雑な背景を持つデータの分析が得意です。よって明示的に記述するのが難しい状況下で用いられます。有名なのは画像分類で、比較的簡単にデータの下で良い結果を出す事ができます。
データの重要性
これまでで言った通りデータが無いと深層学習は活用できません。また画像の様なデータ単体でも難しく、ラベルというものも用意しなければいけません。その為企業はデータに対してラベル付けをする仕事を他所に委託している場合があります。また学習に使うデータを作成する専門の企業も出ています。それほどまでにデータは深層学習の生死を分けます。
深層学習の種類
深層学習にはさまざまな種類のタスクとモデルがあります。多くの際ビジネスで持ち上がるタスクとしては画像や言語です。また実際に深層学習が可能なタスクについてはBrowse the State-of-the-Art in Machine Learning | Papers With Codeを参考にして下さい。
画像系のタスクを行う場合用いやすいモデルとしてはVGGと呼ばれるCNN系列のモデルです。また言語系のタスクを行う場合用いやすいモデルはAttention系列のTransformerまたはRNN系列のSeq2Seqです。詳しいモデル説明は割愛します。
深層学習のツール
資金があまりない場合
自身でコードを書く必要性が出てきます。その場合深層学習ライブラリとしてtensorflowかpytorchの2点が挙げられます(機械学習ならsklearn)。個人的なおすすめはtensorflowの中にあるkerasというライブラリーでとても簡単にモデルを作成する事ができます。またtensorflowは多くの言語に対応しており、pythonで学習させたモデルを他の言語のサーバーサイドの関数として搭載する事も可能です。(Home - Keras Documentation)を行うと良いと思います。
また運用に関してはMLOpsの様な機械学習の運用を調べたら良いと思います。
資金が潤沢にある場合
AutoML等の簡単にモデルを運用できるサービスを利用するまたは外注するのが最善だと思われます。なぜなら深層学習の運用は昨今の研究やフレームワークの開発で多少マシにはなってきているものの今だ泥沼の様な戦いが予想されます。特に似たような前例が無い事をする場合は注意した方が良いと思います。