読者です 読者をやめる 読者になる 読者になる

"機械学習","信号解析","ディープラーニング"の勉強

"機械学習","信号解析","ディープラーニング"について、それぞれ勉強しながらブログにまとめていきます。テーマは気分によってバラバラかもしれません。

現在の人工知能開発

人工知能 人工知能-ディープラーニング

人工知能の歴史の全体像を簡単に概観した以下の記事が多くの人に見られるようになりました(大変うれしいことです)。

 

s0sem0y.hatenablog.com

 

これを見て非常に多くの人が人工知能に関心を寄せていることを再確認いたしましたので、人工知能開発における別の視点での研究を紹介します。

 

深層学習

人工知能開発とは我々人間のような汎用的情報処理を行うことのできるもの(知能)を人工的に創りだすことを目的としています。目的の達成方法を探りに探って、現在、深層学習という形で研究が爆発的に進んでいます。

一方で、深層学習のプログラムを動かしたことがある人ならばご存知の通り、普通に家で買うパソコンでは深層学習の力は十分に発揮できません。

 

なぜなら深層学習の表現力の源は莫大なパラメータにあるためです

 

その莫大なパラメータの調整にはかなりの計算を要するため、それに耐えうる性能を計算機が備えていなければならないというわけです。ここでパラメータの調整のことを普通は「学習」と言います。

更に学習を行うために人間が設定しておくべきパラメータも存在し、それらのことをハイパーパラメータと呼びます。通常1回学習しただけではそれが良いのか悪いのか分からないので、ハイパーパラメータを変えて再度学習するということを何度も繰り返します。すると自ずと計算機の性能はますます重要になるということです。

 

ニューラルネットワークとAND回路

まずは簡単なモデルを見ましょう。

 

a=0.3x_1 +0.2x_2 - 0.4

 

y = f(a)

 

関数f(・)は引数が0以上であれば1を、負であれば0を返すとしましょう。

x_1,x_2がいずれも0,1の二値しか取らない場合は、上記のモデルは一体何を表しているでしょうか。すべての入力パターンを確認しましょう。

 

x_1=x_2=0 ⇛ a = -0.4 ⇛ y=f(-0.4)=0

 

x_1=0 x_2=1 ⇛ a=-0.2 ⇛ y=f(-0.2)=0

 

x_1=1 x_2=0 ⇛ a=-0.1 ⇛ y=f(-0.1)=0

 

x_1=x_2=1 ⇛ a=0.1 ⇛ y=f(0.1)=1

 

これを見るところによると、x_1=x_2=1y=1となり、それ以外ではy=0となっていますから、このモデルはAND回路を表していると見なすことができます。

天下り的に数値が与えられて入るものの簡単なニューラルネットワークがAND回路を構成できることがわかりました。

 

ニューラルネットと学習

今、「ある計算の方法が定められている時、それがどのような出力をしているのか」を見ました。実際の学習とはこれの真逆で、「ある出力をするためには、どのような計算の方法を与えるべきか」を考えます。

仮に

 

a=w_1x_1 +w_2x_2 - b

 

y = f(a)

 

というモデルで、入力に対する係数を調整できるならばもっと別の(例えばOR回路)も表現できそうです。これを適当に当てずっぽうのw_1,w_2,bを選んで作ることも難しくはないはずですね。これを自動的にやらせてしまおうというのがニューラルネットの学習です。

 

OR回路を達成するためには、どのような入力を与えたらどのような出力をすべきかということはわかっています。わからないのは、それを導く入力に対する計算の方法です。

 

単純には、入力を与えて間違えたならw_1,w_2,bを少し変えてもう一度試すという方法が良さそうです。そして実際にそのような方法が取られます。

ちなみにこのニューラルネットを図にすると以下のようなとてつもなく単純なものになります。

 

f:id:s0sem0y:20161206235317p:plain

 

 

ニューラルネットの表現力

上記のモデルを色々試してみれば、作ることのできる出力には限りがあることがわかります。ご存知の通り線形分離しか上記のモデルは表現できません。

これを解決するためのニューラルネットが表現力を得るストーリーをまとめると

 

1.中間層が導入される

この段階では、入力層から中間層への係数は適当に決めてしまい、中間層から出力層への係数を学習することだけを考えました。

 

2.入力層から中間層、中間層から出力層へのすべてのパラメータを学習

微分可能な活性化関数と、誤差逆伝搬法によりすべてのパラメータを学習することが可能になります。ニューラルネットが自身で調節できるパラメータが増えたわけです。

 

f:id:s0sem0y:20160521233549p:plain

 

 

 

3.さらなる多層化

実は前の段階(中間層1つの時点)で、中間層に任意の数のユニットがあれば任意の関数を近似できることが知られています。つまり、最初の簡単な例のように特定のものしか表現できないということではなく、原理上なんでも表せる状態になったのです。

しかし、得たい出力に対して、その任意のユニット数がいくつかは分かりませんし、ユニットの設定が正しかったとしても正しくパラメータを学習できるかも分かりません。保証されているのは存在だけです。

 

一方でパラメータを増やし、表現力を増すには多層化をする(中間層を増やす)という手段もあります。この場合、活性化関数を何度も通るので、非線形変換による表現力の獲得も可能になります。当初は誤差逆伝搬法が上手く動作しませんでしたが、これを解決することで深層学習へ発展しました。

f:id:s0sem0y:20160922111746p:plain

【機械学習】ディープラーニング フレームワークChainerを試しながら解説してみる。 - Qiita

 

 

多層化をした上で、いかにして学習を上手く行うかについてはここでは触れません。

とにかく、ニューラルネットの表現力というのは莫大なパラメータによってもたらされているということです。これは、今から表現したいと思っている出力に対して明らかに冗長なニューラルネットを準備しておき、パラメータの取捨選択、調整を学習自体に任せてしまおうという作戦なのです。

 

計算力が必要

深層学習が膨大なパラメータに支えられているため、このパラメータを調整するためにはやはり計算能力が高くなければなりません。

当然、うまいこと学習が早く進むようなアルゴリズムの研究もなされています(Adamなどがそれ)が、どちらにしても何万とあるパラメータの計算にはパワーがあるに越したことはありません。

 

そこで、下記のようなゲーマーなどには必需品のGPUが深層学習でも当たり前のように使われるようになりました。

 

NVIDIA Pascal GPUアーキテクチャー採用グラフィックカード TITAN X

NVIDIA Pascal GPUアーキテクチャー採用グラフィックカード TITAN X

 

 

しかし、これは少し調べれば分かるように、安いと言えるものではありません。そして排熱量や電力も馬鹿にならないのです。

 

 

ハードウェアの発展

深層学習のアルゴリズム自体が非常に強力であることは十分に理解されるようになりました。だからこそこれを更に高速に動作させることの重要性が際立ってきます。

 

GPGPU

これを解決する1つ目の手法が先述したGPGPU(General-purpose computing on graphics processing units)です。これは画像処理のためのユニットであるGPUをもっと一般的な計算に応用する技術のことで、まさしく深層学習のような計算をGPUに行わせるようなことを指します。

 

現在最も応用されている深層学習の高速化手法であり、性能の良いGPUを開発、獲得し、さらに如何にして学習を並列化させるのかということが主題になってきます。

 

量子コンピュータ

量子的な振る舞いを使った計算機で、従来のコンピュータよりも遥かに高性能になると予想されています。

アカデミックでは量子ゲート方式(重ね合わせ、あるいはパラレルワールドを利用)が盛んに研究されていました。アルゴリズムの開発もある一定の処理までしか及んでおらず、またハードウェアの方は、量子状態が非常に繊細であるがために、実用に耐えうるほどに制御をすることが現状難しいという状態です。

 

そんな中、D-wave社が量子アニーリング方式(トンネル効果、ポテンシャルをすり抜けることを利用)で量子コンピュータを実用化しました。しかし、これは我々が想像するコンピュータというよりは、解きたい最適化問題を実際の物理的状態で再現し、そして物理的状態を遷移させることでたどり着いた定常状態を再び最適化問題での表現に戻し解とする、言わば「シミュレータ」のようなものです。

 

それでも深層学習など工学応用では非常に有用で期待が持てると私は感じています(ただGPUなんて比じゃないくらい高いですけど)。日本でもレーザーネットワーク方式と呼ばれる量子コンピュータの研究が進んでいます。

 

当面は量子コンピュータは実験装置、あるいは解析装置としての発展が目指されるのではないでしょうか。

 

 

ニューロコンピュータ・ニューロチップ

学習(最適化問題)のアルゴリズムを並列・高速化しようというのがGPGPUで、学習(最適化問題)を物理的状態で表現して解の探索をさせるのが量子アニーリング式コンピュータです。

 

そしてニューロコンピュータは、ニューラルネットワークの動作自体を直接行うハードを構築しようというものです。

 

これは言わば従来の計算機にアルゴリズムを与えてソフト的に人工知能を再現するのではなく、脳の活動を直接ハードウェアで再現しようという試みです。もちろん実際には物質的な面で脳とは全く異なりますが、深層学習が脳神経のような計算を一部再現することで高い性能を発揮するところを見れば、その計算手順をハード的に実行することで高度な情報処理が可能なことが期待できます。

 

GPGPUや量子コンピュータは、人工知能開発に応用できるという代物ですが、ニューロコンピュータは人工知能開発そのものでもあります。

 

個人的にはかなり期待を寄せている研究分野です。

IBMは数年前からこの分野での研究を続けており、今年、かなりの発展を遂げていることが発表されました。

www.ibm.com

 

 

日本でもDensoと東芝がタッグを組むことが今年の秋に発表されています。

東芝も数年前からニューロチップの開発を行っているはずですし、自動運転技術の開発を急ぐDensoも深層学習に対しては強い関心を持っているはずです。

ascii.jp

 

また大阪大学では以下のような研究会が開催されます(平成28年12月16日)。

脳型コンピューティングの最前 線 - 生物、ニューロモルフィックから人工知能まで -

http://www-up.prec.eng.osaka-u.ac.jp/pre/program_70.pdf