オッサンはDesktopが好き

自作PCや機械学習、自転車のことを脈絡無く書きます

ビッグデータでAIは賢くならない,という話

 こんにちは.changです.

 今回は,僕が考えるAIの実際について話そうと思います. ビッグデータを学習させてもディープ・ラーニングは賢くならない,という事についてです.

f:id:changlikesdesktop:20200918132205p:plain:w300

0. ビッグデータ

 ビッグデータとは,「データの収集,取捨選択,管理及び処理に関して,一般的なソフトウェアの能力を超えたサイズのデータ集合」だそうです*1. 10年程前から使われる様になった概念だと思います.

 データが大量になると,データを読み解くことが大変になります. 例えば,世界の全書籍数は1億2986万4880冊だそうです*2. 一生かけても読み切れないですね. 既に400年前に,デカルトが言っています. 素人の意訳で恐縮ですが,「世の中に存在する全ての知識を把握することは到底出来ない.それができるのは神だけだ」と.

 書籍の話をしましたが,ビッグデータを支える最初の技術革命が「紙」であったと言えるでしょう. ヒトの記憶は年月と共に曖昧になったり,消えたりします. 一方,紙に記録された情報は長い年月を不変に残り続けます. このことが,情報量の拡大をもたらしました. 直近の数十年で,「ハードディスク」「インターネット」という技術革命が新たに起きます. これにより,世の中に実在するデータ量は更に膨大になりました.

 ヒトの脳が処理する情報量には限界があります. それを遥かに凌駕する大量の情報がこの世の中には存在します. これが,一種の恐怖を産んでいるのではないでしょうか. 実際,僕も今の時代を生きていて,日々発生する新しい言葉や概念に追従していくことが難しいと感じます. 新聞を読んで,「クラウドってのが在るのか...」程度の浅い情報把握はしますが,深く勉強しようとしなくなりました. 「キリがない」感じがしてしまいます. 単に年だからかも知れないけど... 会社で仕事をしていても,本を読んで勉強するより,スマホとネット検索を使いこなす方が評価されるように思います.

 そんな世の中なので,AIが注目されます. 何かを判断しようとしたとき,関連する情報の全てをヒトが把握してニュートラルな答えを出すことが難しいので,人工知能に助けて貰おうという訳ですね.

1. データセット: 恐竜画像

 ビッグデータの一例として,Googleの画像検索を取り上げます. 個人的に大好きな恐竜を題材に選びました.

 以下のキーワードで検索して,それぞれで500枚の画像を集めました. 収集した画像を使って,恐竜の種類を判定するディープ・ラーニングを作ります.

  • tyrannosaurus
  • triceratops
  • brachiosaurus
  • stegosaurus
  • iguanodon
  • ornithomimus
  • pteranodon

※ 上から,ティラノサウルストリケラトプスブラキオサウルス,ステゴサウルス,イグアノドン,オルニトミムス,プテラノドン

 集めた画像の一部です. 著作権が問題になることを避けるためにボカシてします.

f:id:changlikesdesktop:20200918100129p:plain:w600
恐竜画像:
学者の方が描いたと思われるイラストが多いが,骨格写真やぬいぐるみ,同名のバンドのジャッケット等も混ざり込んでいる

2. 学習

 各種類の恐竜画像について,先ず50枚をテストデータとしてランダムに選出しました. 次に,残りの400枚の中から100枚をランダムに選んで学習画像としました. 学習画像が100×7で700枚,テスト画像が50×7で350枚ということです.

 ネットワーク構造はmnistのサンプルとほとんど変わりません. 画像が多い & カラー画像を使っている所為でデータの読み込みに時間がかかったので,この部分のみをC言語で書きました.

 こんな正解率になりました.

種類 正解率[%]
ティラノサウルス 32.0
トリケラトプス 24.0
ブラキオサウルス 40.0
ステゴサウルス 32.0
イグアノドン 32.0
オルニトミムス 16.0
プテラノドン 10.0

 7種類を平均すると正解率26.7%でした.

 正解率が悪い原因は明らかです. 学習過程を見ると,学習画像については正解率が上がるが,テスト画像については上がらない,典型的な過学習が起こっています.

f:id:changlikesdesktop:20200918100944p:plain:w300
学習過程:
学習データについては正解率が上がるが,テスト画像については上がらない

3. 精度向上トライA: データを増やす

 分類の精度を上げる為に,学習データを増やしてみます. 2.で作った学習データに更に200個を追加しました. 学習画像は300×7=2100枚になります.

 このデータを同じソースで学習させた正解率です.

種類 正解率[%]
ティラノサウルス 48.0
トリケラトプス 28.0
ブラキオサウルス 34.0
ステゴサウルス 42.0
イグアノドン 32.0
オルニトミムス 28.0
プテラノドン 10.0

 正解率は大きく変わらず,31.7%でした.

 学習過程も2.と同様の過学習になっていることがわかります.

f:id:changlikesdesktop:20200918101641p:plain:w400
学習過程:
学習データを増やしても,テスト画像についての正解率は上がらない

 統計学の性質から,ばらつきを含むデータはそのどこを取り出しても同様のばらつきを含みます. 100枚でも300枚でも,含まれるばらつきの大きさは変わりません. つまり,学習データを増やしても,ディープ・ラーニングの精度が向上するとは限らないのです.

f:id:changlikesdesktop:20200918114746p:plain:w300
母集団から一定領域をピックするイメージ
どこを取っても同等のばらつきを含んでいる

4. 精度向上トライB: 画像のばらつきを減らす

 3.の結果から,分類の精度を上げるためには学習データのばらつきを減らす必要があることがわかりました. 何百枚もの画像を一枚一枚見ていくのは大変です. そこで,今回は少し工夫をしてみます.

 Googleの画像検索では,検索の上位に有名で,頻繁に閲覧される画像が見つかります. 検索順に画像を見てみると,上位には精巧なイラストが多く,下位になるほどぬいぐるみ等の粗悪な画像が多くなります. そこで,上位50件をテスト画像に,それに続く300件を学習画像にしてみました. これによって,テスト画像のばらつきを最小限に近づけることが出来ます.

 このデータを使って学習させた結果がこれです.

種類 正解率[%]
ティラノサウルス 38.0
トリケラトプス 34.0
ブラキオサウルス 60.0
ステゴサウルス 68.0
イグアノドン 28.0
オルニトミムス 46.0
プテラノドン 32.0

 正解率は43.7%になりました. 検索画像をそのまま分類させたにしては,優秀だと思います.

 学習過程は相変わらず過学習ですが,若干マシになりました.

f:id:changlikesdesktop:20200918162314p:plain:w300
学習過程
過学習が少し改善される

5. 考察

(1) ビッグデータの性質

 はじめに,今回作ったディープ・ラーニングがかなり乱暴なやり方を採っていることを名言します. 一言に画像と言っても,顔写真,全身写真,集合写真などと色々あります. 撮影されるアングルも様々です. 一般的に,それらを一同に学習させることはしません. 人物の分類が良い例です. 多くの例*3*4で紹介されているように,画像の中から顔部分だけを抜き出し,その後で分類します. 2重にAIを使うという事です. 「恐竜」という括りの画像を一同に学習させた今回のやり方は,学習精度を上げるにはそもそも不適切なのです.

 敢えてこの方法を採ったのは,今回の目的がディープ・ラーニングの精度を追求することでは無いからです. 2.の結果から,ばらついたデータをいくら学習させても,ネットワークが賢くならないことがわかりました. 乱暴な方法ではありますが,ビッグデータというのは得てしてこういうものです. 無作為に集められた大量のデータをAIに丸投げしても何も良いことはありません. これを理解することが,今回の目的です.

 細かい事を言うと,ばらつきにも色々があります. 例えば,Google検索がイラスト,骨格,ぬいぐるみしか見つけないならば,データを増やすことで精度が高くなるでしょう. 実際のGoogle検索では,検索の下位になるほど,CDジャケット,プラモデル,デフォルメされたイラスト,全く関係性の無い画像...と,検索上位とは分類ごと異なる様な粗悪画像が混入します. このことが,データを増やしても学習精度が向上しない原因になっていると考えられます.

 クラウド系のサービスを扱う営業マンが,「ログデータを貯めて,将来的にはディープ・ラーニングしましょう」みたいな事を言うのを聞きます. 信用するべきではありません. 誤解が生まれる原因の一つに,「ビッグデータ」と「AI」がそれぞれ個別にフィーチャーされ,それぞれの都合で性能を追求していることにあると感じます. データとそれを解析するアルゴリズムは,一蓮托生であるべきです. 「このアルゴリズムでこういう結果を導こう」といった明確な目的を伴って収集しない限り,データは無駄になるでしょう. 例え,どんなに大量に集めたとしてもです. そもそも,ディープ・ラーニングはほぼ画像処理にしか使えません. 先刻の営業マンの言葉は,データ-アルゴリズム間の不当な乖離を象徴していると言えます.

 政府がビッグデータやAI関係の事業に補助金を出すと言っています. 裏返せば,補助金でも出ないと利益を見込めない分野なのです. 何年かすると「ビッグデータを学習させても当たり前のことしか分からなかった」事例が山積みになると予想しています. そのとき,本格的にAIビームが終焉するでしょう.

(2) AIを賢くする為のAI→無限ループ

 4.では,Googleの画像検索が有名な画像を上位に割り当てる性質を利用しました. 謂わば,ディープ・ラーニングを高精度化するために,別のAIの力を借りた訳です.

 更に分類精度を上げるには,恐竜以外の背景を白抜きしたり,イラストだけを取り出す様なAIを導入すれば良いでしょう. AIを賢くする為にAIを導入する...この連鎖は無限ループになります. どこかで,ヒトが手作業で画像を振り分けたり,画質を整えることになるでしょう.

 今回,素材を恐竜に選んだことには理由があります. 太古に滅んだ恐竜には,絶対的な正解写真がありません. 年月と共に研究も進み,イラストも変わります. 僕が子供の頃には,ゴジラの様に直立し,尻尾を引きずって歩くティラノサウルスが一般的でした. 昨今では,尻尾を伸ばして上体を水平に保ちながら歩くティラノサウルスが一般的です. また,羽毛をまとった恐竜像も台頭しています. 独自の曖昧さで学習を困難にする「恐竜」という素材が,今回の検証にはピッタリでした.

 ビッグデータに対峙する為に複数のAIを連ねるのは,一つの手段としては有効です. でも,別のアプローチもあるのではないでしょうか.

(3) AIは神にはならない

 データやAIを使う意味が無いと言うつもりはありません. 以前に申し上げたように,ディープ・ラーニングは画像処理のアルゴリズムの一つとしては非常に強力です. この特性を生かした合成画像からの学習が*5,ディープ・ラーニングを活かす方向性だと思っています.

 AI全般に関しては,目的を明確にして,シンプルにデータを使うことが成功につながると考えます. AIは,デカルトの言う「神」にはなれません. 膨大なデータから想像もしなかったアイディアを創出してくれることは有り得ないのです. 実際,Amazonのリコメンド等もやっている事自体はシンプルですよね. (AI運用に限りませんが)やりたいことのイメージの具体的に持つ事が重要だと思います.

6. むすび

 ずっと書きたかった内容に触れられて楽しかったです. 近いうちに,合成画像を学習に用いた恐竜の分類にトライするつもりです.

 今回書いたソースはここです*6.READMEにも書きましたが,学習データを作るのが煩わしければここ*7からダウンロードして下さい.