gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

人工知能のみぞ知る

2015-06-16 16:39:20 | ブログ
 最近の新聞に、人工知能の最新技術を説明する参考文献が出たという紹介があり、その講評らしいものが載っていた。それによると、ビッグデータとディープラーニング(深層学習)という言葉が並んでいたが、ディープラーニングとは何か、ビッグデータとどうからむのかについて詳しい説明がなかった。新聞の役割は、新刊を紹介することにあり、詳細な説明はその本を入手して読んでみるしかないと納得し、その本を購入して読むことにした。以下は、その本のエッセンスとなる部分について、一読者がどう受け取ったかを記述するものである。

 この本を読んで、人工知能の構築には統計学が重要な役割をしていることを知った。ある統計学の専門家が言う「統計学が最強の学問である」という主張が、本当らしく思えてきた。

 そこで、以下の説明を、統計学の関連する分野の説明から始めることにした。

 多変量解析の分野において、主成分分析という手法がある。これは、互いに相関関係のある複数の変数があり、変数ごとにデータ表が与えられており、データ表全体がもっている特徴を、変数の座標変換により、より少数個の無相関な合成変数に縮約して表現する手法である。

 互いに相関関係のあるn個の変数x1,x2,...,xnがあり、これら変数を1次結合した合成変数、
   f=a1x1+a2x2+...+anxn     (1)
を考える(1,2,...nは下つきの添字で表しているが、このブログでは通常の英数字でしか表せないようだ)。

 そうすると、n次元データ表のi番目のサンプルの合成変数の値は、
   fi=a1xi1+a2xi2+...+anxin   (2)
となり、1つの合成変量として与えられることになる(iも下つきの添字)。

 fを主成分という。fはn個の変数に関する座標軸を線形変換した合成変数に関する主軸の1つを表している。fに直交する主軸の1つもまた主成分であり、上記変数の他の係数で1次結合した合成変数、
   g=b1x1+b2x2+...+bnxn   (3)
で表現できる。n次元データ表のi番目のサンプルの合成変数gの値は、(2)と同様に、
   gi=b1xi1+b2xi2+...+bnxin   (4)
で与えられる。

 元の変数x1,x2,...,xnの値をfやgで表現すると、情報の損失が生じる。そこで最も多くの情報量を保持する主成分(例えばf)を第1主成分と呼び、次いで多くの情報量を保持する主成分(例えばg)を第2主成分と呼ぶ。第2主成分は、第1主成分から漏れた情報の一部を補充することになる。同様にして、第3,第4,...第n主成分も考えられるが、次第に補足する情報量が少なくなっていくので、その価値が下がっていく。

 上記(1)式や(3)式から分かるように、主成分fやgを求めるということは、係数a1,a2,...,an;b1,b2,...,bnの値を求めるということである。これら係数は、線形変換の重みに相当し、変数x1,x2,...,xnに各サンプルの値を入力し、情報量の損失を最小にするように第1主成分の各係数の値を求めて出力することを意味する。第2主成分は、第1主成分の残余から計算することになるが、残った情報量の損失を最小にするようにその係数の値を求めることになる。

 さて、これで準備ができたので、いよいよ人工知能の世界に入る。

 人間の脳は、ニューロン(神経細胞)のネットワークで構成されている。ニューラルネットワークは、その動作をシミュレートするようにつくられる。ニューロンをモデル化したノードは、ほかの複数のノードから各々0から1までの間の値を受け取り、その値に各々何らかの重みをかけて足し合わせる。得られた合計値は、ある非線形関数によって出力値が計算され、その出力値が次のノードに受け渡される。

 ここで重要になるのは、重みづけであり、人間のニューロンが学習によってシナプスの結合強度を変化させるように、機械学習する過程で重みづけを変化させ、最適な値を出力するように調整することで、精度を高めていく。

 参考文献には、ニューラルネットワークで手書き文字を認識する例が紹介されている。

 手書き文字を正しく認識できるようになるための訓練用データとして、0から9までの10個の数字をいろいろな手書き文字で表現した標準的なデータセットがある。一つひとつの手書き文字は、28ピクセル×28ピクセル=784ピクセルの画像となっており、この画像が7万枚もある。

 この画像をピクセル単位に分解して、ニューラルネットワークに読み込ませる。入力層は、784個のノードで構成され、出力層は、0~9まで10個のノードで構成される。入力層と出力層の間にあるのが隠れ層である。

 この標準データセットを使って学習する際は、たとえば「3」の画像を入力し、もし間違って「8」と判定した場合は、「入力層」と「隠れ層」をつなぐ部分の重み、「隠れ層」と「出力層」をつなぐ部分の重みの値を変えて、正しい答えが出るように調整を加える。

 手書き文字を認識する程度の人工知能であれば、上記のようなニューラルネットワークでも可能であるが、「人間の顔」のような標準化されていない画像を認識するのは困難である。

 そこで考え出された手法は、入力層のノードの数と出力層のノードの数を同じとし、入力した画像と同じ画像を出力する場合を正解とするものである。隠れ層は、画像の特徴量を保存するように入力画像を抽象化して表現する層であり、入力/出力層よりも少ないノード数をもつ。特徴量とは、機械学習の入力に使う変数のことで、その値が対象の特徴量を定量的に表す。この方式のニューラルネットは、自己符号化器と呼ばれている。

 手書き文字の例で言えば、ある「手書きの3」の画像を入力して、正解も同じ「手書きの3」の画像として、答え合わせをするものである。

 たとえば、数字の0は単純閉曲線であるし、8は二重の閉曲線、4,6,9は単純閉曲線にひげの付いた文字であるが、そのひげの数と位置が異なるという特徴をもつ。これらの違いあるいは特徴は、特徴量という数値で表されるのであろう。このような特徴量とは、手書き文字のように個人差によって文字が大きくデフォルメされていても、何の文字か判定するための指標となるもので、不変量と言い換えてもよいであろう。

 自己符号化器では、入力した画像と同じ画像の出力を正解とするので、このニューラルネットから実際に出力される画像と正解との間には復元エラーが生じる。そこで、この復元エラーが最小になるように、入力層―隠れ層間の重みと、隠れ層―出力層間の重みとを修正するのである。

 この修正処理は、出力画像が最適になるようにこれらの重みづけを計算する処理となるので、コンピュータが自動的に計算する。これが機械学習であり、入力される多数の類似画像についてこの処理を繰り返せば、結果として、隠れ層と出力層には、ある不変性をもった特徴表現が、最適な重みづけの形で残るだろう。このようなタイプの機械学習は、特徴表現学習と呼ばれている。

 特徴表現学習の代表的な手法が、新しい機械学習の方法、ディープラーニング(深層学習)である。これは、自己符号化器の隠れ層を多階層に構成するものである。

 隠れ層のニューロンの数を一定とすれば、層を重ねるほど重みづけの対象となるノードの数が増えるので、特徴表現の自由度が上がる。また、ノード数の増大とともに、必要なコンピュータの計算量も増大する。

 このような多階層のディープラーニングでは、2段目の隠れ層には、1段目の隠れ層で得られたものをさらに組み合わせたものが出てくるから、もとの入力の画像の次元に戻すと、より抽象化された画像が出てくることになる。さらに、2段目の隠れ層から3段目、・・・、と階層が上がるにつれて一番下から入力した画像の抽象度が増すことになる。

 主成分分析においても、元の複数の変数を実質的により少数個の合成変数に縮約するということは、データ表全体がもっている特徴を抽象化することを意味する。しかし、主成分分析では、第1主成分は線形の関数を用いて計算されるので、情報量の損失を伴い、その抽象度も充分ではない。さらに、第2主成分は第1主成分の残余から計算されるので、その抽象度のレベルはさらに下がることになる。

 多階層のディープラーニングでは、非線形の関数を用い、隠れ層の段数を重ねることによって、段階的に抽象度を上げていくことができる。このことを、参考文献では、多階層のディープラーニングによって、「主成分分析では取り出せないような高次の特徴量を取り出すことができる。」と述べている。画像認識の抽象度を上げることによって、たとえば「3」なら「3」という数字そのものの概念に近くなる。

 さらに、人工知能に「人間の顔」のような複雑な画像を正しく識別させるためには、頑健性(ロバストニス)を獲得することが必要である。頑健性とは、少しぐらいの画像のボケ、変質や変形では揺るがず、画像が何者のものかを正しく識別する能力のことである。

 人工知能に頑健性を備えさせるために、入力信号にわざと「ノイズ」を加える。たとえば、1枚の画像につき数百から数千のノイズを加えるという。ほかにもニューラルネットワークにとって、「過酷な環境」がいろいろ研究されている。そこまでいじめ抜かないと、データの背後に存在する「本質的な特徴量」を獲得できないという。

 このような多階層のディープラーニングを行い、頑健性を備えた人工知能を構築するためには、いわゆるビッグデータを用意するとともに、これを用いて特徴表現学習を行わせるための膨大な計算機パワーを必要とする、ということが理解できる。

 ここで、ディープラーニングの階層を重ねていき、入力画像の抽象度をどんどん上げていくと、得られる抽象画像は入力画像との違いが増大していき、正解となるべき出力画像からどんどん離れていくのではないか、という疑問が生じる。

 しかし、この人工知能の出力画像は入力画像と一致することを目標にしなければならないという規則がある。この規則の下で、各層の各ノードの重みづけの調整が行われ、ニューラルネットには、「本質的な特徴表現」が残るのであろう。人間の目で多数の入力画像を見ても、何が「本質的な特徴量」を備えた本物の画像なのかを認識することは、困難であろう。ディープラーニングによる学習を済ませた人工知能のみが、「本質的な特徴量」の何たるかを知るのである。

 脳科学者が出演するような教育的なテレビ番組を見ていると、一見静止画像に見えるが時間の経過とともにその画像のどこか一部が変化していくような画像が提示されることがある。勘のよい人は、画像の変化を検知できるのであろうが、そうでない人にとっては難しい問題である。人間の視覚機能は、この画像の変化というような客観的事実を見ているのではなく、自分の見たいと思うものを意識的に見ているのである。

 そうは言っても、人は、「人間の顔」の特徴のようなものを、かなり正確に識別できる。人間は、太古の昔から、森の中で獲物となる動物を見つけたり、人の顔を認識する能力を磨いてきた。それは、このような能力が、ヒトの生存にとって必須のものだからである。しかし、このような人間の画像認識能力も、最新の技術を用い、過酷な環境の中で機械学習を済ませた人工知能には到底敵わない、と言えるだろう。

 参考文献:
 松尾豊著「人工知能は人間を超えるか」(角川選書)
 西内啓著「統計学が最強の学問である」(ダイヤモンド社)
 長谷川勝也著「ホントにわかる多変量解析」(共立出版)