bohemia日記

おうちハックとか画像処理、DeepLearningなど

AIの一生を擬人化するとこうなる

こんにちは。ぼへみあです。

巷では、AIに話せば色々してくれる、AIがデータを分析して売り上げを伸ばしてくれる、AIが仕事を奪う、AIが運転してくれるなど、AIを擬人化しすぎていると感じています。擬人化のおかげで人はAIに親しみを持ち「気軽に導入してみるか」というポジティブな面もありますが、擬人化しすぎて誤解している部分がかなり多いかと思います。

そこで、AIをエンジニアが生み出して運用するまでの過程を、徹底的に擬人化したらどうなるのかを書いてみました。 機械学習では学習モデルをエンジニア生み出し学習させることから、親=エンジニア、子=AI、という想定です。

本当に子供が必要なのか?

まずはAIにする子供を作ります、と言いたいところですが、本当に子供が必要なのかよく考えます。 後述しますが、子供を作るととても大変です。育てるのも時間とお金がたくさんかかります。親もハイスペックでないと賢く育てるのは難しいです。成長して社会に出た後もAIはほとんど自立せず、親がずっと面倒をみてあげる必要があります。 ですので、子供が将来何ができるようになるのかを見極め、コストとパフォーマンスをシビアに考えて判断します。

f:id:bohemian916:20181005233905p:plain

また一から育てずに、人材派遣会社のGoogleやAmazon,Microsoftなどに人材を派遣してもらうことも考慮にいれます。派遣された人材はそこそこ仕事ができますし、面倒は親会社がみてくれます。しかしその派遣社員は画一的な仕事しかできず、あなたの仕事にマッチしないかもしれません。その場合は、自分で育てるしかありません。 f:id:bohemian916:20181005233944p:plain

子供の遺伝子を設計する

子供を作るとなったらまず、どんな子供に育って欲しいのかをよく考え、遺伝子を考えます。 この遺伝子を作る時点で、子供ができることはほとんど決まってしまいます。画像解析がしたいならCNNという遺伝子を、時系列データの解析がしたいならLSTMなどなど、過去に実績のある遺伝子構造を採用します。ですので親は最先端の遺伝子研究の情報をキャッチアップしている必要があります。これらの遺伝子構造の情報はなんとarxivというところに無料公開されています。 f:id:bohemian916:20181005234018p:plain

この情報を元に遺伝子を構築します。気前の良い研究者は、そのまま使える遺伝情報を公開してますので、それを使えば楽にいくでしょう。

親が教育者としてエキスパートになる

子供が無事生まれたら、学習をさせます。子供を賢く育てるには、とてつもない親の労力が必要です。 まず、どうしたら頭良く育つのか、学習理論を抑えていなければいけません。どんなスピードで学ばせればいいか、問題を正解したときのご褒美をどうすればいいか、どんな教材を使って学ばせればいいか、親が知っているべきことは多岐に渡ります。それもそのはず、子供を学校に行かせずに自分で全部育てなくてはいけないからです。

https://2.bp.blogspot.com/-T-LXol1s_Nw/VwdGSnCU6FI/AAAAAAAA5mI/bcFq8DBJB8MShatp7Yh8kY9thrRiRJiUg/s450/teacher_english_man.png

基本的には、授業は一切行わず、子供には問題集をひたすら解いてもらって、自学自習してもらいます。しかし教えたい内容は親によって異なります。とても一般的なことは、研究者の人たちが教材を用意してくれていることもありますが、ほとんどの場合既存の教材がないので、問題集を親が全部作る必要があります。 f:id:bohemian916:20181005234036p:plain

問題集を作るのはとても大変な作業です。まずは基礎となるデータをたくさん集めた後、正解不正解を一つ一つ決めていきます。 問題集の正解はできるだけ正確に作る必要があります。ですので、まず親がその分野のエキスパートになる必要があります。 問題集は厚ければ厚いほど子供は賢くなる可能性が高く、少なくとも数千問、数万問は欲しいです。 この問題数が少ないと、テストでは良い点を取るけど、現実ではダメダメな応用が効かない子になってしまいます。

https://1.bp.blogspot.com/-jLPHDDdP30k/WGnPMy90jKI/AAAAAAABA08/1HNIbDjYgbomosI5N1aq9nCv_tWENcAxACLcB/s400/book_law.png

また実力を確認するのに、実力テストも用意し、定期的に受験させます。

https://4.bp.blogspot.com/-gc_pG0Lr7GE/VJ6XKoPXnZI/AAAAAAAAqGo/1Hp3nOZo9CM/s400/test_print_mondaiyoushi.png

クローンを作りひたすら学習

0から学習させると効率が悪いので、他の子供の記憶を植えつけてから学習させることが多いです。 集中して効率よく学習させるためには、学習装置が必要です。1時間100円くらいから借りられたりします。買うと10万〜数億円します。高い学習装置があれば、たくさん問題を解かせたり、採点することができます。

https://images-na.ssl-images-amazon.com/images/I/51XBJjeImOL.jpg
学習装置のイメージ

数時間〜数週間かけてひたすら問題を解かせ続けると、徐々に実力テストの点数が上がってきます。「この子、全然成績がよくならないねー」と不安に思っていても、ある日急にテストの点が急上昇することがあります。辛抱強く待ちましょう。

https://4.bp.blogspot.com/-ptA4gzGuSAU/WSa86ImNL1I/AAAAAAABEiY/wa_AQvHQObkpL5AnLqlzybxTn45C9_ASACLcB/s500/whiteboard_up_woman2.png

それでもしかし、そのうちテストの点数に頭打ちがきます。その子の遺伝子と学習環境の限界です。 これ以上問題集を解かせ続けてももうダメなので終わりにし、別の子に望みを託します。

この世界ではなぜかクローン技術が発達しており、同じ遺伝子を持った子供を一瞬で作ることができます。 学習前の子供をクローン技術で増やし、前の子と学習環境を変えてまた学習させます。例えば正解したときのご褒美の与え方や、学習のペースなど、色々変えて試します。 クローンでいくらでも子供は増やせるので、どういった学習方法なら成績がよくなるのか、ひたすら非人道的に検証します。

f:id:bohemian916:20181005235040p:plain

学習環境を色々変えても求めるレベルの成績の子が出てこない場合は、遺伝子のほうを変えて試行錯誤します。 こうして数多の子供の屍の上に、もっとも成績のよかった一人が残ります。
f:id:bohemian916:20181005235118p:plain

社会人になっても自立できない

残った一人が社会に出て、AIとして色々お手伝いをします。これで社会に出て一人前、と思いきや、まだ親が面倒をみてあげなければいけません。社会の状況や周りの環境が変わると、そのAIは徐々に対応できなくなっていきます。勝手に学習していく、みたいなことはほとんどできず、親がたまに顔を見て、うまくやっているかを定期的に確認してあげないといけません。

https://1.bp.blogspot.com/-nQychRK9Sy8/VkxLofuCUNI/AAAAAAAA0ok/CKof6EV7aU0/s400/family_kyouiku_kahogo.png

うまくやっていけてない場合、その子の人生は終わりです。親は変化した状況に応じて、新しい問題集を作り、その子の記憶を元にクローンを作成、再学習をさせて新しい子を作ります。

親と離れ離れになると・・・

様々な理由で、親が子供と離れなくてはいけないことがあります。すると子供の成長をよく知る人がいなくなり、大変です。子供がうまくやっていけてないときに、他の人がそれに気づいてもどう対処すればいいかはとても難しいです。どうやってその子を育てたのか、という情報が必要です。しかしその子は自分がどう育ったのかは知りません。詳細な育児メモが残っていれば良いのですが、なければ最悪0から育てなおす羽目になります。

https://1.bp.blogspot.com/-R8njG9eV5qs/WzC-oXS9XpI/AAAAAAABNDo/YdYnRp5zI1M4XVKbq9IfSu5ylwwFc88CwCLcBGAs/s400/mukiryoku_man.png

まとめ

AIは皆さんの目に触れるまで過酷な人生を歩んでいます。有能だと騒がれるのはごく一部の勝ち組だけで、実は死屍累々です。 そして子供の面倒を見る親の苦労は相当です。こんな苦労が広まれば、少子化待った無しだと思うのです。
誰か漫画にしてくれないかなぁ・・・

一応解説

時代はAIだーと騒いでいますが、本当にAIが必要なのかよく考えましょう。機械学習技術の導入には、学習と運用に予想以上にコストがかかります。どの程度の精度があれば実務で使えるのか、学習に使うデータが十分にあるのか、ちゃんと考えましょう。
自分達で機械学習モデルを学習せずとも、GoogleやAmazonのクラウドサービスでできるかもしれません。汎用的な画像認識や音声認識、自然言語処理などが使えます。しかしビジネスに直接フィットしない場合が多いです。その場合は頑張って学習させるしかありません。

遺伝子とは機械学習のモデルのことです。学習する以前にどのように機械に学習させるか、ネットワークを作る必要があります。 画像認識、音声認識、自然言語処理、会話、ゲーム、自動運転などはそれぞれ異なるモデルで学習されています。自分が作りたいAIに似たモデルを採用しましょう。機械学習界隈は、arxivという論文投稿サービスに最先端の論文が無料で掲載されているので、自分のやりたいことに近いものが見つけられるでしょう。

機械学習でモデルを学習させるためには、基本的な深層学習の理論を抑えていなければいけません。どんなモデルを使い、学習率やドロップアウト、損失関数をどうするかなどの知識が必要です。 また大量の学習データが必要になってきます。汎用的な学習データセットは公開されている場合がありますが、ほとんどの場合自分で用意する必要があります。自社データやスクレイピングなどでデータを集め、それらのデータにタグ付け、正解不正解などを人手で行う必要があり、膨大な作業となります。学習データセットは多ければ多いほど良いです。 データ数が少ないと、過学習と呼ばれる現象になりやすいです。学習データ内のパターンに特化して学習してしまい、多様なデータで溢れる現実で使えない状態になります。

またタグ付けなどをするために、その分野の十分な知識が必要となる場合が多いです。実際には、大量のタグ付けをしている過程で詳しくなってしまいます。 学習用のデータセットとは別に、精度の検証用のデータも用意しておきます。学習用・検証用の2種類が必要です。

学習を効率よく精度よく学習させるために様々な手法があります。別の学習済みモデルのパラメータを初期値にして学習させる手法をファインチューニングと言います。 学習には高性能なGPUがほぼ必須です。クラウドGPUを使うか、nVIDIAの高いGPUを買いましょう。 学習を始めると、モデルにもよりますが数時間〜数日かけて精度が上がっていきます。もう精度の限界かなーと思っていると、突然精度が向上することがあります。

モデルの精度を上げるために、学習に関わる様々なパラメータを変えてみて、どのように精度が変化するのかを観察します。 これをハイパーパラメータチューニングと言います。 ここでの検証に時間がかかるため、高性能なGPUが何台もあると捗ります。 モデルによってどんなパラメータが良いのか全然異なるので、実験あるのみです。 ここまでやって思うような成果が得られない場合、ネットワークの変更したり、学習データセットを増やしたりします。 このような作業を繰り返して、一つの最良のモデルが完成し、世の中で使われるようになります。

しかし機械学習では学習データセットの環境にしか適応しておらず、外部環境が変化した場合にはうまく機能しなくなります。例えば使う言葉が変化したり、見たこともない車が発売されると、それに対応した自然言語処理なり自動運転が難しくなります。定期的に外部環境の変化を観察し、機械学習モデルの精度が落ちていないかを確認し、必要に応じて新しい学習データセットを作り、再学習させる必要があります。

ここで開発に携わったエンジニアがそのままいれば問題ないのですが、いなくなってしまった場合、とても困難を極めます。どんなパラメータで学習させたのか、どういう傾向があったのか、実験結果を引き継いでいない場合、最初からやり直す羽目になります。