最近は、AI(人工知能)やDeep Learning(深層学習)という言葉を、ニュースや記事などで見聞きする機会も多いかと思います。でも、それらの言葉が意味する所を何となく分かったつもりでいるけれど、本当の所は良く分かってなかったりしないでしょうか?私自身、イギリスでAIに関連する話をクラスの友人からされたときに、単語を知らないとか以前に根本的に良く分かってないなと感じました。なので、どこかで一度基本を押さえようと思っていたのですが(課題にも追われ中々着手できておりませんでした・・・)、ついに家籠り期間に勉強を開始しました。
この記事は、UCLのTechnology Entrepreneushipという講義で学んだAIの基礎と、Udemyの【4日間でチャレンジ】Python 3・ PyTorch によるディープラーニング・AIアプリ開発入門というコース、ヤフーCSOである安宅さんの書籍「シン・ニホン」、その他ネットの記事やYouTubeで学んだ内容を個人的に纏めたものです。専門家ではないので理解が間違った所もあるかもしれまんが、備忘録の位置付けなのでご容赦下さい。(むしろ、間違いに気付いた方は教えて頂けると大変有難いです。)本当は1回で完結させるつもりだったのですが、書いてる途中で長くなったので、(前編)AIや機械学習について、(後編)プログラミングやAIのこれからについてまとめています。
シン・ニホン AI×データ時代における日本の再生と人材育成 (NewsPicksパブリッシング) 新品価格 |
【目次】
(前編)AIや機械学習
1.AI
1.1 AIとは?
1.2 AIの歴史
1.3 AIのまとめ
2.機械学習 / ディープ・ラーニング
2.1 機械学習
2.2 ディープ・ラーニング
2.3 ディープ・ラーニングの種類
(後編)プログラミングやAIのこれから
3.プログラミング
3.1 開発環境
3.2 具体例
4.AIのこれから(世界動向と日本の立ち位置)
1.AI
この章では、AIの概念について確認していくことになるのですが、まずはAIという言葉の意味(定義)をざっくりと確認します。しかしこれだけでは良く分からないと思います。その上で、更に理解を深めるためにAIの歴史についてもポイントとなる点を確認します。最後に、今迄見た情報をまとめることでAIってこうゆうことなんだと理解に繋がれば幸いです。(この説明の流れは、実際に私が自習する中で上手く腹落ちした整理の仕方です。)
1.1 AIとは?
まずは、そもそもAI(人工知能、Artificial Intelligence)とは何かという所から確認していきます。
(私は知らなかったのですが・・・)実はAIには種類があるというのはご存知でしょうか?大別すると強いAI(Strong AI)と弱いAI(Weak AI)の2種類に分けられるそうです。強い、弱いってどういうこと?と思われるかもしれませんが、AIのスペックの良し悪しみたいなものです。一般的に、強いAIとは人間の様に(状況や目的の)変化に対応することができる汎用性の高いものです。(映画のターミネーターに出てくるロボットに搭載されているようなイメージ。)他方で、弱いAIとは、特定用途向けのAI(e.g.囲碁で有名なDeep MindのAlphaGo)を指して使われます。現時点で強いAIは作られていない為、AIという言葉の大半は後者の弱いAIを指して使われていると思って差し支えなさそうです。
現時点で、AIという言葉が特定用途向けで使われるという前提が分かった所で、もう少し意味を噛み砕いていきましょう。何となく、AIという言葉に、AI=機械学習=ディープ・ラーニングみたいなイメージをお持ちではないでしょうか?(私はそんなイメージを持ってました。)これは、様々な場面でこれらの用語がしばしば同時に用いられる為、そんなイメージを持ってしまっているのかなと思います。勉強して分かったのは、=(イコール)ではなく、AI>機械学習>ディープ・ラーニングの様に包含関係にあるということです。つまり、機械学習などはAIを説明する上での構成要素ということです。
では、AIとはいったい何なのでしょうか?どのように定義されるのでしょうか?国内のAI分野で有名な東京大学の松尾豊先生がNEDOで行った勉強会の資料の冒頭に記載されていますが、AIという言葉は使う人によってその定義は様々あるようです。(中には明確に定義出来ないという方もいる様です。)しかし、何かを拠り所にしないと、以降の話が進みません。冒頭ご紹介した「シン・ニホン」の著者である安宅さんは、著書の中で「では現代(2010年代末)において、「正しいAIの理解とは何か」といえば、速い計算環境、もしくは計算機(コンピュータ)に、情報を処理したりパターン学習したりするための情報科学技術(アルゴリズム群)を実装し、最終目的に即した膨大な訓練を与えたものだ。」と説明されています。当該記事では、この定義を今後のAIの説明に使えればと思います。しかし、「どうゆうこと?」と思った方もいると思います。私も最初はこの定義にいまいちぴんと来ませんでした。この定義を更に掘り下げることで理解を図れればと思うのですが、その前の準備としてAIの歴史についてまず確認します。
1.2 AIの歴史
AIの歴史というのは1950年代に興り、現在に至るまでに大きく3つのパートに分けられるそうです。それぞれの時代でキーとなるテーマがあり、それらを順を追って見ていきましょう。
①第1次AIブーム(1956~1960年代):探索・推論の時代
1956年に開催されたダートマス会議と呼ばれる研究者の会合で、初めてAIという言葉が用いられたことに端を発し、今日までに広く浸透することになったそうです。(世界で最初のコンピュータが作られてから10年後の出来事。)この会議では、AI(人工的な人間の知能の様なもの)を作ることが出来ないかというブレーンストーミングが行われたそうです。これがきっかけとなり、AIを作るための基礎となる研究が行われることになります。そして、取っ掛かりとして人間の探索と推論という行為が機械で代替出来ないかということが取り組まれました。
探索とは、解法をパターン分けして、目的となる条件(答え)を見つける過程を指します。例えば、迷路などスタートから途中いくつものパスがあり、そこから最適な経路(適した解法)を選択し続けることでゴール(答え)にたどり着く過程が探索にあたります。一方、推論とは既知の情報から未知の事柄を推測するという過程を指します。例えば、先程の迷路でスタートからゴールまで基本的に1本道だが途中で左右2択の分岐路があるという極端なケースを考えてみます。とりあえず、右を選択した所、行き止まりとなりました。この場合、前述の2択で左を選択するのが正解だということが推測出来ます。
これらの行為を機械にやらせるという取り組みが盛んに行われ、迷路だけでなく人間が遊ぶゲーム(チェスなど)も題材として扱われました。コンピュータは先程の探索(パターン分け)が得意で、人間よりもとても素早く色々な経路を試すことができ、難しい迷路でもすぐにゴールに辿り着くことができました。つまり、確りとルールが決められた問題であれば、コンピュータは探索・推論を駆使して人間よりも上手く処理出来るということです。
しかしながら、ゲームと違って現実に人間が直面する問題の多くは様々な要素が絡み合い、探索・推論の問題としてルールを上手く記述することが出来ません(あるいは大変困難)でした。加えて、たとえゲームだとしても取り得るパスが多ければ多い程、探索・推論の処理に係る負荷も大きくなります。チェスに関しては10120通り、将棋は10220通り、囲碁で10360通り以上の手が考えられるそうです。よって、チェスは1997年(カスパロフvs.Deep Blue)、将棋が2012年(米長vs.Bonkras)、囲碁(イ・セドルvs.AlphaGo)に関しては2016年になって、やっとソフトウェアが当時の世界チャンピオンや名人と呼ばれる人物に勝利を収めました。これはコンピュータの演算速度の向上と探索・推論の手法の進化に伴うことだそうです。よって、第1次AIブームの頃にはゲームですら、ルールが複雑なものは機械が人間に勝つことは難しかったそうです。
これらの事実に直面することで、当時の研究者のAI熱は冷め、冬の時代に突入することとなります。
②第2次AIブーム(1980年代):知識の時代
一度下火になったAIブームですが、1980年代に再び人気を取り戻します。この時代は、人間の知識をコンピュータに取り込むということが盛んに行われたそうです。例えば、医療に関する知識を取り込むことで、機械に医師の代わりが出来ないか、あるいは法律の知識を入れることで弁護士の代わりが務まらないかといった着想が背景にありました。インプットした前提条件に基づき、人間に質問し返ってきた回答に基づき、別の質問をするという行為を繰り返すことで(正に探索と推論)、診断を行うというものです。
しかしながら、この取り組みもインプットする知識が膨大になるにつれて、ルール同士の矛盾が起きたり、上手くルールを分類することが出来ないという問題に直面します。また、想定される人間の回答もYes/Noの2者択一ではなく、「なんだかだるい」、「少し気分が悪い」など、その表現は様々です。一切の例外を無くすように全ての情報を取り込もうとすると、分類が無数に発生してしまいます。更に、概念を枝分かれに分類(体系化)してパターン分けした場合(オントロジーと呼ばれる手法)、推論が単純にはいかないといったことにも気付きます。オントロジーでは、is a(上位・下位)、part of(全体・部分)のような関係に概念を整理していきます。(以前、プロダクト開発で扱ったUse Caseと一緒の考え方だと思います。)例えば、三鷹市 part of 東京都、東京都 part of 日本という関係があったとき、この2つの関係から三鷹市 part of 日本という関係が推測出来ますし、事実正しいです。では、右手 part of 山田太郎、山田太郎 part of 取締役会という関係があったとします。一つ一つの関係は正しいかもしれませんが、そこから推論される右手 part of 取締役会という関係は何だか変ですね。これは、前者は日本を地理的な特徴として捉え、全体・部分の関係に分類し、また三鷹市も当該概念の中に属しているから上手く行きましたが、後者は取締役という概念の中に、山田太郎という人物を身体の部位として捉えた特徴が混ざっている為におかしなことになっています。また、単一の概念が複数の意味(特徴)を持っていることもあります。
知識をインプットすることで、AIは以前よりも賢くはなりましたが、上記の壁に直面することで(知識を書きだし特徴によって分類することが容易ではない)、再び冬の時代に入ります。
③第3次AIブーム(2013年~現在):機械学習 / ディープ・ラーニングの時代
今まさにその最中にいる第3次AIブームですが、当該ブームについて知る上で機械学習についてまず確認します。機械学習自体は第3次AIブームになって登場したものではなく、第1次AIブームのころからある概念です。これは、人間が自然に行っている学習能力と同様の機能をコンピュータでも実現しようとする技術・手法です。人間は日々生きる中で様々な知識を獲得して、問題に対処する術を学んでいきます。前述の通り、AIも探索・推論を駆使して、人間と同じ様に問題に対処することが出来ますが、その為には前提条件(グループ分けされた情報)が必要でした。ここで、AIにおける学習とは、情報を自動で分けることが出来るかということが根幹であると考えてください。(機械学習については、別の章で詳しく見ていきます。)
思い起こせば、この分類ということが上手く出来ずに、AIは2回目の冬を経験していました。結局のところ、今迄のAIは人間が現実世界の対象物を観察し、「どこに注目」するかを見ぬいて( 特徴量を取り出して)、モデルの構築を行いました。良いモデルが出来れば、それによって後の処理を自動で行うことができましたが、人間が上手く特徴量を見出して分類できなければ、モデルもできないため、モデルの構築には人間が大きく介在していました。つまり、人間に依らずAIが自ら特徴量を見出して分類できる様になること(機械学習出来る様になることが)大きな課題だと考えられてきました。
これをブレークスルーするきっかけ(つまり人間の力を借りずに特徴量を自動で抽出できる方法)となったのがDeep Learning(深層学習)の登場です。(Deep Learningの詳しい説明も機械学習と同様に後述します。)機械自身が自ら学び特徴量を抽出できるようになったことで、今迄は人間がその特徴を見出せずに上手くグループ分けが出来なかったようなものも見い出せる様になり、画像認識・翻訳・自動運転といった分野での精度が飛躍的に向上します。実は、Deep Learningと類似のコンセプトは昔からあったそうです。(福島邦彦によって提唱されたネオコグニトロン(Neocognitoron)など。)しかし、そのコンセプトを実現するには膨大な演算処理をこなす必要があり、それに耐えうるスペックのコンピュータ、また演算処理の負担を減らす手法が開発されることで実用化、日の目を見ることとなります。
1.3 AIのまとめ
今迄の話をブレッドポイントにまとめます。
- AIには強いAI(汎用的)と弱いAI(特定用途向け)の大きく2種類が存在
- 1956年にAIという言葉が初めて使われた当初、人間は(恐らく)強いAIを作ることを最終目標にしていたが、現時点では弱いAIしか実現していない
- AIの定義は様々だが、現時点では大抵、弱いAI(特定用途向け)を指す
- AIは以下の3つを駆使して特定の問題を処理しようとする
- ①探索(解法をパターン分けして、目的となる条件を見つける)
- ②推論(既知の情報から未知の事柄を推測する)
- ③機械学習 (インプットされたデータから探索のパターン分けを行う上での特徴量を抽出する)
- データをグループ分けする上での基準となる特徴量は人間が見つける必要があり、また一見単純な事柄でも膨大なデータを処理しなければならず、コンピュータの性能などの要因から、余り大したことは出来なかった
- 技術の進歩によってコンピュータの演算処理が向上したこと、ディープ・ラーニングという特徴量を自動で抽出する機械学習の手法が台頭したことで、AIが出来ることの幅や精度が飛躍的に向上している
ここで、最初にご紹介した安宅さんのAIに関する定義を再度見てみましょう。
「速い計算環境、もしくは計算機(コンピュータ)に、情報を処理したりパターン学習したりするための情報科学技術(アルゴリズム群)を実装し、最終目的に即した膨大な訓練を与えたもの」
どうでしょう?以前よりはすっと意味が腹落ちしたでしょうか?アルゴリズム群が探索・推論や機械学習を行う上での手法などを組み合わせた集合体を指し、最終目的に即した膨大な訓練というのが、データから最適な特徴量を導出し、インプットに対して適切なアウトプットを求めることだということが分かりますね。
これで、AIに関する基本的な確認が終了です。次は、機械学習 / ディープ・ラーニングについて、もう少し詳しく見ていきます。
2.機械学習 / ディープ・ラーニング
この章では、機械学習(Machine Learning)とその中で近年AIの能力を格段に進歩させたディープ・ラーニング(Deep Learning)という手法について詳しく見ていきます。
2.1 機械学習
機械学習は1章でも軽く触れましたが、人間が自然に行っている学習能力と同様の機能をコンピュータでも実現しようとする技術・手法でした。そして、AIにおける学習とは、情報を自動で分けることが出来るかということが根幹であるということでした。情報を自動で分ける様になるには、情報同士を仕分けするための何等かの線引き(特徴量)が必要となります。以下に代表的な学習の種類とそれを実行する為の手法について簡記します。
①教師あり学習(Supervised Learning)
教師あり学習とは、ラベルがあるデータ(入力のデータとそれに対応する出力のデータ(正解)が紐づいた状態の情報)をAIに与える学習方法です。そこから、AIがグループ分けするためのルールや特徴を学びます。そして、新たに入力された(出力と紐づいていない)データを認識し、それに対応する出力データを予測します。例えば、画像認識などに活用されます。最もシンプルな機械学習の手法ですが、ラベル付けされた情報をたくさん用意する必要があり、またラベル付けも正しく行われていることが前提(正解が存在している)となります。よって、データを準備するコストが相応に発生することがデメリットとして良く挙げられます。
代表的な学習手法:線形回帰、サポートベクターマシーン(SVM)など
②教師なし学習(Unsupervised Learning)
一方で、教師なし学習はラベルのないデータ(入力のデータのみが与えられ、それに対応する出力のデータは与えられない)しか与えられません。AIが与えられた出力のデータを基に、自らデータの中に内在するグループ分けするためのパターン(特徴・ラベル)を導出します。例えば、年齢や性別消費傾向といったユーザーの購買データから、購買行動が似ているユーザーをグループ分けしたりすることが出来ます。(正解が存在する訳ではないものの分析に活用される。)教師あり学習よりもデータを準備するコストが抑えられたり、人間では見いだせないような特徴を見出し分類する可能性があります。反面、分類が使えない(人間が意味を見出せない)結果になる可能性もあります。
代表的な学習手法:クラスター分析、主成分分析など
③半教師あり学習(Semi-supervised Learning)
これは読んで字の通り、教師ありと教師なし学習を併用した学習方法です。但し、半分という訳ではなく、最初に少量のラベル付きデータを用いることで、その後のラベルなしデータによる学習をより効率的に行うことが出来るというものです。但し、教師あり学習で指摘されたラベル付けが正しく行われていないリスクや、インプットしたラベルありデータが偏っている場合には、上手く学習出来ないなどのデメリットもあります。
代表的な学習手法:ブートストラップ法など
④強化学習(Reinforcement Learning)
AIはある環境の中で、自らの行動結果に応じて設定されたスコア(報酬)を最大化することが目的として設定され、そのための最適な行動を学習する方法です。例えば、ロボットが歩行する距離に応じて報酬が設定された場合(e.g.長い距離ほど大きな報酬が与えられるなど)、報酬を最大化しようと自らさまざまな歩行の方法を試して、歩行距離を最大化する方法を学ぶ、といったイメージです。例えば、自動運転の制御やAlphaGoの様なゲームに利用されています。但し、適切な環境を設定しないと最適な行動を見出せない(状態が収束しない)といった制限もあります。
代表的な学習手法:クラスター分析、主成分分析など
これらの分類は代表的なものですが、だぶりなく分かれているものではありません。(例えば、教師なし強化学習などもあります。)また、代表的な学習法をお示ししましたが、各分類の中に細かく学習方法が存在します。この後に紹介するディープ・ラーニングもそんな学習方法の一つです。
2.2 ディープ・ラーニング
それでは、いよいよディープ・ラーニングとは何なのかについて見ていきましょう。繰り返しになりますが、ディープ・ラーニングは機械学習の1種で、この学習法によって、AIは人間の力を借りずに特徴量を自動で抽出できるようになるということでした。でも、何がディープ(深い)なのでしょうか?実はこのディープという言葉、この学習法を理解する上で重要となってきます。
ディープ・ラーニングは人間の神経細胞(ニューロン)の仕組みを機械に実装出来ないかと、それらを模したことが起源となります。(神経細胞のイメージを下図に示します。)左側の緑色の丸が神経細胞の核、その周囲にあるアメーバの様なものが樹状突起と呼ばれます。他方、真ん中の黄色の線が軸索と呼ばれ、軸索の右端から飛び出ているものの先端がシナプスと呼ばれるものです。
人間の神経細胞は、細胞同士が結び付き、電気信号を流しながら通信を行っています。もう少し詳しく説明すると、ある神経細胞の樹状突起は他の神経細胞のシナプスと結合し、そこから様々な電気信号を受け取り1つの軸索を通って(入口は複数、出口は一つ)、シナプスで結合した他の神経細胞に電気信号を流しています。但し、常に信号を伝達している訳ではなく、入力があるバー(閾値)を超えたら、シナプスを通じて別の神経細胞に電気信号を出力するそうです。この動作の連なりにより、脳は細胞間での信号の伝達を行います。つまり、流れる電気の強弱によって物事を記憶したり、認識したりしているそうです。(この仕組みをニューラルネットワークと呼びます。)
1943年に外科医のマカロックと数学者のピッツという二人が、非常にシンプルな数理モデルで、前述の機能を備える人工のニューロンを考えました。これはある入力Xに対して、一定の閾値θを超えた場合に出力f(Y)を1とし、閾値θ以下であれば出力f(Y)を0とする非常にシンプルなものです。(式で表すと以下の様なものです。)なお、wは重み(Weight)と言いますが、これは細胞間の繋がりの強弱を表現したものです。先程、神経細胞同士は樹状突起とシナプスで繋がっているとお伝えしましたが、実際はこの繋がりの強度にはバラツキがあり、情報伝搬のしやすさ(電気の流れ易さ)にも違いが現れます。これを重みで表現しようとしています。しかし、この時点では一つの入力に対して一つの出力があるというようなモデルでした。
なお、入力Xによって計算されたYを受け取り、0か1の最終的な出力を表示するf(Y)を活性化関数(Activation Function)と呼びます。そして、初期の頃にはステップ関数と呼ばれるものが活性化関数として用いられました。しかし、これだとステップが上昇する所で不連続になってしまい扱い難いため(微分が出来なく、後述する誤差逆伝播法等が使えない)、連続的かつ急激に0から1に遷移するような形状の関数が使われる様になりました。その代表的なものがシグモイド関数と呼ばれるものです。この様に活性化関数は様々ありますが、現在の主流は、ReLU(max(x, 0))という関数で、後述のCNN(畳み込みニューラルネットワーク)などに用いられているようです。(エクセルでステップ関数とシグモイド関数を図示すると以下の通りです。)
次いで、ローゼンプラットという心理学者が1957年に(単純 / 単層)パーセプトロン(Perceptron)というものを考案します。これは、先のマカロックとピッツの人工ニューロンの概念に入力Xを複数設定するというものでした。(イメージは以下の様なものです。)これは、一つの神経細胞が入力複数、出力が一つということを表したものです。
単層パーセプトロンによって、ある程度複雑な意思決定が扱える様になりました。(OR、AND、NANDなどの論理値を扱える様になりました。)しかし、実数や非線形の問題(排他的論理和(XOR))を扱うことが出来ませんでした。なんだそれと思ったかもしれませんが、これは部屋の電気を点けるスイッチをイメージ下さい。階段の電気などは階段を登る所(1F)と登った所(2F)にスイッチがありませんか?どちらもオフの状態だとして、1Fのスイッチをオンにすると電気が付き、階段を上った所で2Fのスイッチをオンにすると電気が消えます。今度、2Fのスイッチをオフにすると電気が付き、階段を下りた所で1Fのスイッチをオフにすると電気が消えます。これが排他的論理和です。
例:階段の電気のスイッチ
1→スイッチオン
0→スイッチオフ
と2進数で表記した場合、以下の様な関係がある。
(1, 1)(0, 0)→電気がオフ
(1, 0)(0, 1)→電気がオン
この排他的論理和の問題を解消し、実数も扱え、より複雑な意思決定を可能にするために、入力Xと出力f(Y)の間に中間層(Hidden Layer)を持たせる概念が生み出されます。これを多層パーセプトロンと呼びます。
まず、入力Xiに対して任意の重みw1iを掛けて、全て足し合わせたものを活性化関数に入れて値hiを得ます。そして、その値に再度重みw2iを掛けて、全て足し合わせたものを活性化関数に入れるということを繰り返し、最終的な出力Y1が得られるといった格好です。では、どうやって正しい重みwを求めるのでしょうか?ここで、計算結果の出力Yと得られることが期待される出力結果Eを比べ、その誤差を計算します。((E-Y)2という形で表します。)そして、この誤差が最小になるようなwを計算によって求め、モデルの重みを修正していきます。この学習方法を誤差逆伝播法(Backpropagation)と呼びます。以下で、この点をもう少し詳しく見てみます。
議論を簡素化する為に、3層で入力も一つだけの場合を考えてみます。この際に、誤差をC(Cost)、人工ニューロンをz、活性化関数をaと表記します。
(※上付き文字で1や2とノードの位置づけを表記しており、累乗と混同し易いことご注意下さい。)
誤差C(損失関数, Loss Functionとも呼びます)は、
C=(a2-E)2
活性化関数a2は人工ニューロンzとシグモイド関数σを使うことで、
a2=σ(z2)
z2=w2a1+b2
※b2は人工ニューロンを前層の活性化関数と重みで表現したときのバイアス
と表せます。そして、誤差Cの値が小さくなる様なパラメーターの値を決めるには、パラメーターが変化することで誤差Cがどれだけ変化するかをまず確認する必要があります。ここで、誤差Cと他の値の関係性を図示すると下記の様なイメージです。
ここで、誤差Cに関係する数値の中で、期待値Eはベンチマークなので一定です。よって、誤差Cを最小化するには、z2、ひいてはそれを構成するw2とb2の値がどの様にCに影響するかを考えれば良いということが分かります。ここで、Cの重みw2に対する変化を考えてみます。(これは数学的には偏微分で表されます。)
と表せるので、上記の関係性を表した図から、
誤差Cの重みw2に対する変化=
人工ニューロンz2のw2に対する変化
×活性化関数a2の z2に対する変化
×誤差Cのa2に対する変化
として表せることが分かります。(微分のChain Ruleに対応しています。)
(同様に、バイアスbについても、誤差Cとの変化率が導出出来ます。)
変化率が出せた所で、誤差Cを最小化する方向性(重みwの変化でプラス・マイナスにどの程度誤差Cが変化するのか)が分かるので、Cが最小化する様なwが計算出来ます。(一つのノードに着目して局所的な最適化(誤差の最小化)を図ります。)そして、重みを修正した後、前段のノードに対しても誤差を最小化する様に同様に重みwの調整を行います。(同一ノード内に複数の人工ニューロンが存在する場合、ノードとの結合が強いものが誤差に最も影響していると考え、そのニューロンに着目して修正します。)これを繰り返して、局所最適から全体最適となる重みやバイアスを求めるのが誤差逆伝播法です。その名の通り、誤差の修正が出力層から一つ前の層(下流から上流へと)に順に伝播していくイメージです。面白いなと思った例えとしては、「部下のミスの大きさと、その部下への関与の度合いに応じて、上司も怒られていく」といった表現がありました。(なんとなくイメージし易いですね。)
ここら辺の計算の所はYouTubeで見つけた以下の動画が非常に分かりやすかったです。(この内容が無料というのはやっぱりYouTube凄いです。)
しかし、便利な方法に思えた誤差逆伝播法も、層を重ねていくと(4層以上になると)問題に直面します。誤差を伝播するにつれて上流で誤差が消失してしまい、結果として、上流が殆ど学習されず、一方で下流での過学習が起きてしまいます。(正に現場での局所最適ばかりが進んでしまい、組織としての全体最適化が行われない状況。)ここで、先に述べたAIの2回目の冬に入り、研究は下火となってしまいます。
しかし、トロント大学のジェフリー・ヒントン率いるチームが、オートエンコーダ(自己符号化器、詳細後述)によって多層にネットワークを重ねる手法を提唱し、画像認識で従来の手法よりも大幅な精度の向上を見せ、ブレークスルーを図りました。そして、この中間層の数を増やし、理論上より複雑な処理を行うことを可能にしたもの(4層以上の多層パーセプトロン)をディープ・ニューラルネットワーク、その機械学習法をディープ・ラーニング(深層学習)と呼びます。
2.3 ディープ・ラーニングの種類
ディープ・ラーニングには、近年目覚ましい進歩を遂げ、目的に応じた様々な学習方法が開発されます。実際は、これらの学習方法を複数組み合わせて利用されているそうです。ここで、代表的な学習方法について簡単にご紹介します。
①CNN(Convolutional Neural Network,畳み込みニューラルネットワーク)
人間の視覚野を参考に作られた学習方法です。ですので、画像認識、物体検出、領域推定などの画像分野で活用されています。(e.g.Facebookの写真のタグ付け機能などに用いられている。)CNNでは、入力層と出力層の間に大きく、畳み込み層、プーリング層、全結合層と呼ばれる3種類の層が存在し、また各層も複数層を持つ構造になっています。
まず、畳み込み層は元の画像(入力データ)をフィルタにかけ特徴となる点を凝縮する処理です。例として正方形の枠線を考えてみます。線があるピクセル(黒塗り)を1、何も描かれていない所(白塗り)を-1と表記すると、9×9のピクセル内に以下の様に表示できます。そして、3×3マスで示される特徴(赤枠など)と元画像を3×3マスに区切ったデータを掛け合わせて、9マス内での一致(=1)・不一致(=-1)の平均値を7×7マスの特徴マップにプロットするという作業を行います。ここで、特徴となる赤枠などはこちらで用意していますが、実際にはAIが自分で学習するので、任意の特徴で始めた後に学習状況に応じて徐々に変化していきます。特徴マップに表示された1~-1の数値は一致度を表しています。(1に近い程一致している。)
次に、プーリング層では、特徴として重要な情報を残しながら元の画像を縮小する処理を行います。畳み込みによって導出された特徴マップの左上から順番に4ピクセルずつ抽出して、4つのピクセルの最大値を代表として選び1ピクセルとして画像にプロットします。左上から4マスずつ抽出するので特徴マップが奇数だと最後が少し重なりますが、プーリングされた画像を見るときちんと元画像の特徴を持ちながら、4分の1に縮小されています。このプーリングされた画像が、次の畳み込み層の入力画像になって、前の層とは別の新たなフィルタ群と比較されます。 プーリング層によって、人間の目と同様に物体の位置が変動しても(画像が回転や縮小・拡大しても)同一の物体であるとみなしてくれます。(移動不変性の獲得)
そして、これら次元を減らしたデータを全結合層で全結合することで計算処理を大幅に減らすことが出来ます。
②RNN(Recurrent Neural Network, 再起型ニューラルネットワーク)
時系列のデータ処理に適した学習方法です。概念としては、3層のパーセプトロンである時点の出力を計算します。その際の隠れ層の活性化関数の値を、次の時点の出力として扱い、これを繰り返していくといったものです。RNN、長時間前のデータを利用しようとすると、誤差が消滅したり演算量が爆発するなどの問題があり、短時間のデータしか処理できませんでした。しかし、LSTM(Long Short-Term Memory)という手法が開発され、この欠点が解消され、長期の時系列データを扱える様になりました。自然言語処理(翻訳)などの分野で活用されています。
③オートエンコーダ(自己符号化器)
端的に言うと、複雑な情報を単純化して処理をし易くする(データの圧縮)手法です。重要度の高い情報を洗い出し、それ以外の部分を削ぎ落します。画像のノイズ除去や異常検知に活用される学習法です。
④GAN(Generative Adversarial Network, 敵対的生成ネットワーク)
GANはゲーム理論を活用した比較的新しい手法です。これは、生成器(ジェネレータ)と識別器(ディスクリミネータ)という2種類のネットワークで構成される手法です。生成器は識別器が間違える様な画像データを生成し、一方で識別器は間違えない様に識別するということを学習します。競争相手を作って、互いに切磋琢磨されるイメージです。画像分野だけではなく、活字認識や自然言語処理の分野など幅広くその活用が期待されている手法です。例えば、オバマ大統領を使った動画で話題になったDeepfake(ディープ・フェイク)もGANの活用例の一つです。(生成器と識別器で画像の生成と真偽の識別を繰り返し、識別器が偽物と見破れなくなった画像を使っている。)
最後にディープ・ニューラルネットワークを実際に体験出来るサイトがあったのでご紹介します。自分でノードや各ノードにおける人工ニューロンの数、インプットするデータの種類を変えることが出来ます。目標とするオレンジ(負の値)と青(正の値)の分類が出来るか色々試して視覚的に確認が出来ます。色の濃淡でどれだけ予測に自信があるかを表しているそうです。ノード間でどの人工ニューロンがより強い重みで結合しているのかも視覚的に分かり面白いです。このプログラムはTensorflowのライブラリを使っています。(この点は後編でご紹介します。)
◆Playground-Tensorflow
本当は1回で書き終えるつもりだったのですが、2回に分けます。前半に興味を持って頂いた方は、後半も是非読んでみて下さい。次回は、プログラミングでディープ・ラーニングを実際に体験する方法や、AI開発の世界動向についてご紹介できればと思います。
コメントを残す