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

Sideswipe

情報工学、計算論的神経科学など、真面目なこと書くブログ。お仕事の話は Twitter: @kazoo04 にお願いします。

運動野のモデル

これは 人工知能アドベントカレンダー の20日目の記事です。

今までは主に感覚器、つまり入力を扱いましたが、今回は出力について扱います。
今もさまざまな生物を模したロボットがあり、人型ロボットも今では珍しくなくなりましたが、どうしても動きを見ていると「ロボットっぽい」と感じてしまいます。これはアクチュエータの問題もありますが、ソフトウェア側の問題もあります。生物とは異なる制御方法をしているので、必然的に生き物のような動きにはならないわけです。

一次運動野のモデル

コラム構造

そもそも、一次運動野のコラムがそれぞれどんなことを担当しているのかについては統一見解がないのですが、他の領野同様に各コラムはある特異的な出力のときにだけ反応することはわかっています。

たとえば、

  • 筋肉をどれくらい伸縮させるかと関節をどれくらいの角度にするかは別々のニューロンが担当している*1
  • ニューロンは一対一でどこかの筋肉を制御しているわけではなく、あるニューロンは特定の複数の筋肉を制御している*2
  • ニューロンの活動の活発さは実際に発揮される力の大きさに比例する*3*4

などはわかっています。特に一次運動野の働きを解明することは、BCI(Brain Computer Interface)開発に非常に重要なため、運動野の活動がどのように運動に反映されるのかは活発に研究されています。

運動制御のモデル

机の上のコップを手に取るような運動を考えます*5。目標(コップ)に手を到達させるためには、目標の座標は(ほぼ)唯一の正解があります*6。しかし、そこまでにどのような軌跡で手を動かせば良いのかは無数の答えがあります。どの筋肉を、どのタイミングで、どれくらいの力で収縮させるかはいくらでもパターンが考えられますが、人は誰でもほとんど同じような軌道で手を動かします。大雑把に言えば、「なめらかに」動きます。そのため、運動制御においてはなんらかの基準があってその基準に従って軌道を決めていると考えられます*7

昔からこの基準(評価方法)には様々なものが提案されていましたが、ここでは特に有名なモデルを紹介します。

躍度最小モデル

躍度はあまり一般的でない言葉ですが、手の位置を時間で3回微分したものです。躍度最小モデル*8は、躍度の2乗を運動の開始から終了まで積分した量が最小になるような軌道を適切とします。この意味は一見よくわかりませんが、「加速度の変化率が小さくなるような軌道」が良い軌道ということで、力の入れ具合の変化があまりないように動かすということになります。このモデルは非常に簡単でシミュレーションも容易ですが、到達運動のかなりの部分を説明することができます。

分散最小モデル

Wolpertの分散最小モデル*9は、躍度最小モデルとはまた違った評価基準で到達運動の軌道を説明します。

人の筋肉も神経も、必ずノイズの影響を受けます。筋肉を動かそうと思っても、誤差が全く無い思った通りの動きをできるわけではなく、少なからず変動があります。神経もたとえば今関節がどれくらい曲がっているかの情報は正確な値が得られるわけではなく、やはりノイズの影響を受けます。このノイズは、概ね大きく、力強く手を動かすとそれに比例して増加すると考えられます。

そこで、このノイズを最小にし、手が到達したときの誤差が最も小さくなるように手を動かすというのが分散最小モデルです。言い換えれば、「ノイズだらけの環境で、なるべくノイズの影響を受けないような動かし方」が良い、という基準です。

躍度最小モデルと違って、最終到達地点の正確さを基準にする点でずいぶん異なるモデルですが、Wolpertの実験ではこの誤差を減らすように運動を続ければ、最終的には非常になめらかかつ自然な動きが得られることが実験的にわかっています*10。分散最小モデルでは、生体に必ず存在する避けては通れないノイズを、むしろ積極的に利用している点で新しい考えです。今では、この分散最小モデルを改良したモデルがいくつか提案されています。

まとめ

運動には小脳の関わりが不可欠のため、これは後日の小脳の項目で改めて触れることにします。
運動野は生理学的知見とモデルの結びつけが不十分な点もあるものの、特に到達運動に関しては様々な研究があり非常に自然な軌道を得ることに成功しています。

今後は運動野と他の領野との関係や、一次運動野のコラム構造がどのように構成されているのか、また躍度最小モデルにしろ、分散最小モデルにしろ、脳のどの領域がどのように連携してこのフィードバック制御を実現しているのかといった点が重要になってくると思います。

*1:Kakei S, Hoffman DS, Strick PL. Muscle and movement representations in the primary motor cortex. Science 285: 2136–2139, 1999.

*2:P D Cheney, E E Fetz, S S Palmer Patterns of facilitation and suppression of antagonist forelimb muscles from motor cortex sites in the awake monkey. J. Neurophysiol.: 1985, 53(3);805-20

*3:E V Evarts. Relation of pyramidal tract activity to force exerted during voluntary movement. J. Neurophysiol.: 1968, 31(1);14-27

*4: P D Cheney, E E Fetz. Functional classes of primate corticomotoneuronal cells and their relation to active force. J. Neurophysiol.: 1980, 44(4);773-91

*5:目で見た情報からどこに手を伸ばせば良いのかを計算する必要がある(逆モデル)が、視覚情報は二次元で実際の世界は三次元のため、これは厳密に解を得ることはできない。これを不良設定(ill-posed)問題 とよぶ

*6:ただし、コップを正しく手に取るためには、適切に手首をひねる必要があり、ほとんど無意識に行う運動ではあるがこのような手首のひねりが適切にできないような障害があり、比較的複雑な処理をしていると考えられている

*7:手を動かしているときに外力が加わると、もともとの軌道に戻ってからまた手を伸ばすような動きが見られることも、「理想の軌道」があってそれに沿って動いているということを支持する

*8:Flash, T., Hogan, N. 1985. The coordination of arm movements: an experimentally confirmed mathematical model. J. Neurosci., 5, 1688-1703.

*9:Harris C.M. and Wolpert, D.M. Signal-dependent noise determines motor planning. Nature, 394, 780-784, 1998.

*10:ただし、このモデルは「ノイズの分散が運動指令の2乗に比例している」ことを仮定しているものの、生理学的妥当性は充分でない

聴覚野のモデル

これは 人工知能アドベントカレンダー の19日目の記事です。

視覚野に続いて、聴覚野のモデルについて考えてみましょう。
ただ、視覚野と比べると聴覚野は不明な点が多く、一次聴覚野(A1)はまだしもA2以降の連合野のことはあまりわかっていません。それでも一次視覚野で得られた知見も参考にしつつモデル化を行う研究があります。

聴覚野のおさらい

アドベントカレンダーでは7日目で扱いました。必要に応じて併せてご覧ください。

t.co

トノトピー

一次視覚野にははっきりとしたレチノトピーマップが観察されます。一次聴覚野もトノトピー*1といって、音の波長(周波数)に応じて相対的な位置関係が対応しており、大雑把に言うと低周波数(だいたい100Hz)に反応するニューロンは一次聴覚野の背側、高周波数(だいたい20kHz=20,000Hz)に反応するニューロンは内側のほうにあり、皮質上をグラデーションのように担当する周波数が異なるニューロンが配置されている、と考えられてきました。

ところが、少なくともマウスの聴覚野を詳細に調べてみると、視覚野ほどは整然と並んでいない、むしろランダムといっていいような配置になっていることがわかりました*2*3

f:id:kazoo04:20151219005119j:plain
マウスの聴覚野のコラムがどの音によく反応するかを2-photon calcium imaging(2光子カルシウムイメージング)によって調査した図。以前から考えられていたような理路整然とした配列は見られないように思える (Bandyopadhyay et al. 2010)より

ここではいくつかの仮説が考えられます。

  • 音の分析に位相マップ(ここではトノトピー)は何らかの理由(おそらく音の物理的な特性)で必要が無い
  • 内側膝状体(medial geniculate nucleus, MGN)や下丘(inferior colliculus,IC)などの一次聴覚野より下位の領域ではトノトピーが重要だが、一次聴覚野ではより高度な情報処理を行っているので、マップが崩れているように見える
  • 一次聴覚野もある特定のルールに従って位相を保持しており、実は整然と並んでいるが、パッと見の印象ではそれが見られない

聴覚野のシミュレーション

ここでは、Terashimaらの研究を紹介します。基本的な考え方自体は簡単で、「一次聴覚野も一次聴覚野も、入力が違うだけでそれぞれの領野では同じ理論に従って動いている」とします。動作原理は同じでも、視覚情報が入ってくるのか、聴覚情報が入ってくるのかで情報の性質は違いますから、それに適応しようとすることで結果的に違った構造が生まれると考えるわけです。

たとえば、視覚情報は、「近くにあるものは似た色・テクスチャをしている」という特徴があります。写真を見たときに、ある部分から1mmだけ離れているところを見たら、多分大体同じ色なことが多く、ガラッと変わるということは少ないでしょう。

逆に、聴覚情報(音)はある周波数にピークがあっても、そこから僅かに違う周波数にもピークがあるとは限らず、むしろ(倍音など)離れた周波数との相関関係があります *4

このような特性の違いが視覚野と聴覚野の違いを生み出すと考えて、TICAを使ってマップを作ると、以下の様な出力が得られます*5

f:id:kazoo04:20151219011358p:plain
TICAによって得られた視覚野のマップ。前回同様、近いコラム(マス目)は似たような刺激に反応する

f:id:kazoo04:20151219011527p:plain
TICAによって得られた聴覚野のマップ。局所的に似たコラムが集まっているところもあるが、ほとんどランダムに見えるところもあり、あまり一定の法則があるようには見えない

ご覧のように、同一のアルゴリズムにも関わらず、視覚野ではレチノトピーが得られ、聴覚野ではランダムに近い出力が得られました。

連合野のモデル

二次聴覚野以降はわかっていないことが多く、少なくともヒトの二次聴覚野ではリズムやメロディの認識に関わっていることはわかっていますが、他にも音源の位置を処理している部分や、純音にはほとんど反応しないが複数の音が組み合わさっている特定の音に反応する部分、一次聴覚野の入力を組み合わせてより複雑な特徴抽出をする部分などは観察されているものの、どの部分がどのような仕組みで何を処理しているのかについては、視覚野ほどはわかっていません。

まとめ

聴覚野は視覚野ほどわかっておらず歯切れの悪い記事になりましたが、今回紹介したTICAを用いたモデルでは、「視覚野と聴覚野は同じ仕組みで情報処理をしているのではないか?」という魅力的な仮説を紹介しました。視覚野が行っているような階層的な処理を聴覚野にも当てはめることで、より妥当なモデルが得られるかもしれません。

また、まったく関係のなさそうな部分が同一のアルゴリズムで動作しているという仮説を支持する証拠が増えれば、「ある部分だけ解明すれば、残りの部分も芋づる式に解明できる」ことになりますから、AGI研究としては非常に魅力的に思えます*6

次回からは感覚野ではなく、運動野にスポットをあてて、動物がいかにして滑らかで無駄のない動きを実現しているかについて見ていきましょう。

*1:単に周波数マップともいう。こちらのほうがわかりやすいかもしれない

*2:Bandyopadhyay et al. Dichotomy of functional organization in the mouse auditory cortex. Nature Neuroscience, 2010; DOI: 10.1038/nn.2490

*3:ただし、どれくらい乱雑なのか、人間ではどうなのかといったところはよくわかっていないことも多く、トノトピーの存在を支持するような研究もあり、より詳細な測定が必要だと思われる

*4:Terashima, H. and Hosoya, H.: Sparse codes of harmonic natural sounds and their modulatory interactions, Network: Computation in Neural Systems, Vol. 20, No. 4, pp. 253–267, 2009

*5:寺島裕貴, 岡田真人, 視覚野・聴覚野地図の同一適応アルゴリズムによる解釈 から引用

*6:もっとも、一次視覚野ひとつとっても非常に複雑な処理をしていることがわかっているし、脳は大脳皮質だけでなく様々な部位から構成されているのだから、「これだけがわかれば完璧」な統一的理論があるとは到底思えない

視覚野のモデル

これは 人工知能アドベントカレンダー の18日目の記事です。

今日からは、脳の代表的な部位に対して、いかにして計算機で再現するかといった部分を見ていきます。

視覚野を再現するには

視覚野の働きを再現するときの主な方針としては、以下のようなものが挙げられることが多いようです。

  • レチノトピーを再現
  • 階層的な特徴抽出
  • スパースネス

言うまでもなく、この3つで視覚野のすべてを説明できるわけではありませんが、概ね悪く無い結果が得られるので方針としては悪くありません。

視覚野のおさらい

まず動物(主に哺乳類)の視覚野をおさらいしましょう。アドベントカレンダーでは7日目で扱いました。必要に応じて併せてご覧ください。

t.co

特に大事なのは、特定の視覚刺激にだけ反応するコラムという構造が集まっていること、隣のコラムは少しだけ違う刺激によく反応する、言い換えると似たような処理をするコラムが集まっているということがまず挙げられます。

f:id:kazoo04:20131217175228j:plain
一次視覚野のコラム構造(再掲)

もう一つは、このようなコラムの集合がさらにひとかたまり(領野)となっていて、各領野は階層的な処理をしているということです。

f:id:kazoo04:20151119013115p:plain
腹側皮質視覚路の図(再掲)

V1(一次視覚野)では単純な線にしか反応せず、あるコラムは水平な線、そのすぐ近くのコラムはたとえば10度傾いた線、遠くにあるコラムは90度傾いた垂直な線に強く反応する、といった具合です(下図)*1。V2ではV1から入力を受けて、線の組み合わせ、つまりL字型の模様(コーナー)とか、もう少し複雑な例だと渦巻きのような形に反応するコラムがあります。

f:id:kazoo04:20131217175325j:plain
特定の刺激にのみ強く反応するニューロンの様子(再掲、Hubel, 1968)

IT野になるとさらに複雑な刺激に反応するコラムが現れ、たとえば手ならどのような角度で見ても、実写でもイラストでもとにかく手であれば反応するものや、顔に反応するものが現れます。このように、視覚野は低次の領野では単純な図形しか処理できませんが、これを繰り返していくことで少しずつ複雑なものが認識できるような階層構造になっています*2

レチノトピーの再現

レチノトピーや方位選択性をもった処理をコンピュータで再現するにはどうしたらいいのでしょうか。実は視覚野はかなり古くから研究されていることもあって、コンピュータで再現する(ことによってなにか有益なことに役立てる)アプローチも活発に研究されてきました。

たとえば、一次視覚野の反応はガボール(Gabor)関数でとてもよく近似できることが1987年には既にわかっていました*3

1982 年にも Kohonen が Self Organizing Map (自己組織化写像、SOM) を提案しました。これは一次視覚野を観察して得られた知識から、大幅な簡略化を加えつつも自己組織的に脳のコラム構造のようなものを生成できます。また、SOMは入力として画像でも音声でも与えることができ、次元数が多くても良いので制限が少なく、かつわかりやすいモデルです。

他にも、Yangqing Jia と Sergey Karayev が提案した Self-Organizing Sparse Codes では、SOMを改良して一次視覚野に似たマップを得ることができています。

f:id:kazoo04:20151217233648p:plain
Self-Organizing Sparse Codes に画像を学習させた結果。エッジに特異的に反応するようなコラム(SOMの場合はノードと呼ぶ)が得られており、かつ物理的に近くにあるノードは似たような画像によく反応するようになっている(Yangqing, 2010)

他の手法としては、Topographic Independent Component Analysis (Topographic ICA, TICA) が挙げられます*4

f:id:kazoo04:20151217234155p:plain
TICAによって得られたマップ。先ほど同様、エッジに特異的に反応するノード(Gaborフィルタで近似できる)が得られており、かつ近くのノードは似た刺激に反応する。

スパースネス

スパースコーディング(sparse coding) と呼ばれる方法が見つかってからは、この考えが非常に重要であることがわかって様々なところで使われるようになりました。神経科学でもそうですし、Deep Learningでも使われているこの概念について簡単に説明します。

スパースとは少数である、疎であるという意味ですが、ここでいうスパースコーディングは、なるべく少ない数の神経細胞の活動によって、なるべくたくさんの信号をなるべく正確に表現できるようにする、ということです。

下の図を見てください。左上は自然画像(写真)です。ここから、今まで見てきたエッジに反応するコラム構造のようなものを得ます(図右上、ここではこれを辞書と呼ぶ)。さて、次に図下段の一番左にある模様を再現したいとします。スパースコーディングでは、なるべく少ない辞書の組み合わせでこれを再現しようとします。ここでは、3つの辞書*5を選んできて足すことで近似できます。

f:id:kazoo04:20151218000240p:plain
スパースコーディング*6

なぜわざわざそんなことをするのでしょうか?たとえば、フーリエ変換やウェーブレット変換と呼ばれる手法でも、画像をたくさんの要素(波)に分解して、それを組み合わせて任意の画像を表現するということは行われます。しかも、こちらのほうがたくさんの基底を組み合わせてなるべく正確に表現しようとします。正確に表現できるならそれに越したことはないように思えますが、なぜスパースコーディングがそんなに重要なのでしょうか。

これにはいくつかの理由があります。ひとつは、脳の神経細胞数は有限なため、なるべく少ない神経細胞で様々な情報を表現できるようにしたほうが得だということです。極稀にしか使わないような専用の神経細胞を大事にとっておくよりは、たとえ少し精度が落ちてもあらゆるシーンで利用可能な反応的な神経細胞を用意しておいたほうが良いというわけです。もうひとつの理由は、どの情報も少数の神経細胞の発火で表現できるのですから、当然省エネになります。これは生存する上で非常に大切です。いくらパワフルな処理が可能でも、エネルギーの供給ができなければ餓死してしまいます。
最後の理由は、複雑な情報をより明確な形で表現できるということです。どのような情報でも少数の神経細胞しか発火しないということは、ある種の情報抽出ができているということですから、一見複雑に見える入力からその本質的な部分を取り出していると考えることができ、そうすると階層的な情報処理にも役立ちます*7 *8

階層的な情報処理

ここまでアドベントカレンダーを見てきた方にとっては、既にDeep Learningで階層的な情報抽出・情報処理がいかに大事かは既におわかりかと思います。

f:id:kazoo04:20151215220703p:plain

段階的に情報を処理することによって、ネットワーク全体の能力をフルに使うことができるのです。実はスパースコーディングはこの段階的な処理に欠かせない概念で、Deep Learningの発展にも大きな役割を果たしました。この辺りの話は、過去のアドベントカレンダーを参照してください。

kazoo04.hatenablog.com

kazoo04.hatenablog.com

また、そもそも少しくらいコラム構造が正確な働きをしていなくても、階層的な構造をしているということ自体が視覚の認識において非常に重要な役割を果たしていることがわかっています*9。つまり、単に性能アップのために多層にする、というわけではなく、情報処理の観点から多層化は必須の存在であるといえそうです。

まとめ

今回は視覚野のモデルについて、現在研究されている部分を広く浅く紹介しました。視覚野、特にV1については完璧には程遠いにしろそれなりに近い結果が得られるモデルができていることや、Deep Learningの成功によって遠回りではありますが実践的な裏付けもされてきています。視覚野で得られた知見を活かすことで他の領野の機能を模倣する、というアプローチも十分ありえます。今後も活発な研究がなされる分野です。

*1:なぜ近くのコラムは似ている入力に反応するのか、という点については、回転や平行移動に対して頑健な処理を行うためだと考えられている。たとえば、V1の超複雑型細胞は、受容野のどの場所に線が提示されても、その線の傾きさえ合っていれば反応する。この超複雑型細胞の働きは、ある特定の場所のコラムの入力を束ねることで実現できる

*2:Quiroga RQ, Reddy L, Kreiman G, Koch C, Fried I. Invariant visual representation by single neurons in the human brain, Nature. 2005 Jun 23;435(7045):1102-7.

*3:Judson P. Jones and Larry A. Palmer, An Evaluation of the Two-Dimensional Gabor Filter Model of Simple Receptive Fields in Cat Striate Cortex, Journal of Neurophysiology, Vol. 58(6), pp. 1233–1258, 1987.

*4:Aapo Hyvärinen, Patrik O. Hoyer, and Mika Inki, Topographic Independent Component Analysis, Neural Computation 13(7):1527-1558, 2001

*5:正確には基底と呼ばれるもの

*6:Yu an Ng. Feature learning for image classification, ECCV10 のスライド

*7:Vinje WE, Gallant JL. Sparse coding and decorrelation in primary visual cortex during natural vision. Science. 2000 Feb 18;287(5456):1273-6.

*8:Olshausen BA, Field DJ. Sparse coding of sensory inputs. Curr Opin Neurobiol. 2004 Aug;14(4):481-7.

*9:A Saxe, PW Koh, Z Chen, M Bhand, B Suresh, AY Ng, On random weights and unsupervised feature learning, ICML2010

遺伝的アルゴリズム

これは 人工知能アドベントカレンダー の17日目の記事です。

Advent Calendar 2015ランキング - Qiita によれば購読者数ランキングで3位になったそうです。最近は内容があまり充実していませんが引き続きよろしくお願いします。

そろそろ機械学習の話も終わりにして、次回からは具体的に脳の機能をいかにして再現するかという点に焦点を絞っていきますが、その前にすこし趣向を変えて、遺伝的アルゴリズムについて説明します。

遺伝的アルゴリズムとは

遺伝的アルゴリズム(genetic algorithm, GA)は、生命の進化を模して計算を行うことで、従来より柔軟な処理ができるのではないかという発想から生まれたものです*1

生命は最初はごく単純な存在でしたが、非常に長い時間をかけて少しずつより環境に適応するよう進化してきました。「進化」という方法によって、最初は海を漂うタンパク質程度でしかなかったものが、泳ぐようになり、光合成するようになり、空を飛んだり、木に登ったり、さらには二足歩行をして月に行ったりすることができるようにまでなったことを考えれば、進化そのものをコンピュータで扱うという発想は自然なものといえます。

そんなわけで、1975年には John Henry Holland によって早くも遺伝的アルゴリズムが誕生しました(タイミング的には、パーセプトロンより後で、バックプロパゲーションよりは前、といったところ)。

初期の遺伝的アルゴリズムは効率の点からもはや使われていませんが、その改良アルゴリズムは今でも現役で使われています。有名な例だと、新幹線のN700系のノーズ形状は遺伝的アルゴリズムで設計されたようです。他の例としては、昔は巡回セールスマン問題*2の近似解法としてかなり盛んに研究されました。

遺伝的アルゴリズムが解けるのは基本的に組合せ最適化と言われる問題で、この世のありとあらゆる問題が解けるわけではありませんが、それでも強力な手法です。

特徴

遺伝的アルゴリズムが優れている点は、メタヒューリスティクスといって、「完璧ではないにしろ、幅広い問題*3に対して汎用的に適用できる」というものが挙げられます。
普通、アルゴリズムといえばある特定の問題を解くための手法であって、並び替えなら並び替えの、データ検索ならデータ検索の専用アルゴリズムがあるわけですが、遺伝的アルゴリズムは比較的どの問題を解かせてもそこそこ良い解を求めることができます。誤解を恐れずに言えば、万能というわけです*4

そのため、「一体どうすれば解けるのか解法がわからないので、完璧な解は諦めて、遺伝的アルゴリズムでそこそこ良い解を求めよう」といったことができるのです。

アルゴリズム

進化を模倣するなんてさぞ複雑なアルゴリズムなのだろうと思われますが、実際のところその概念は非常にシンプルです。
ここではわかりやすく  x^2-6x+9=0 のときの x の値を求めましょう。
まず、解の候補をいくつか生成します。初期のビットストリング型GAと呼ばれる、値を2進数で扱うものにして、とりあえず4bitで表現することにします。ランダムに4つくらい解の候補を生成しましょう。カッコ内はわかりやすさのための10進数表記です。

  • 0000 (0)
  • 0101 (5)
  • 1100 (12)
  • 1101 (13)

この解の候補を個体(individual)と呼びます。つまり、ひとつひとつが生命(遺伝子)だと考えるわけです。この個体を進化させて正しい解を求めるのが遺伝的アルゴリズムの目的です。この後の操作は

  • 選択(淘汰)
  • 交叉
  • 突然変異

の3つを繰り返すだけです。

選択

選択(selection)は、今の個体がどれくらい良いかを見ます。現実世界で例えるなら、環境に適応していない個体は厳しい自然界を生き残れず死ぬ可能性が高く、環境にうまく適応できる個体は生きて子孫を残す可能性が高くなるわけです。その適応度を測定します。ここでは、さきほどの  x^2-6x+9=0 の x に値を実際に当てはめてみましょう。

  • 0000 (0) → 9
  • 0101 (5) → 4
  • 1100 (12) → 81
  • 1101 (13) → 100

この世界では値が0に近い個体ほど優れた生命体なので、どうやら 1100 と 1101 の個体はイマイチのようです。逆に0101の個体はかなり適応度が高い(0に近い)ことがわかります。

交叉

交叉(crossover)はふたつの個体から新しい個体(子供)を誕生させる操作です。さきほどの結果を見ると、 0000 の個体と 0101 の個体が良さそうなので、この2つを選んで子供を作りましょう。交叉の仕方は様々ですが、今回は一点交叉という方法をとりましょう。

適当なところで遺伝子を二つに分割して

  • 0000 → 00 | 00
  • 0101 → 01 | 01

入れ替えます

  • 0000 → 0001 (1)
  • 0101 → 0100 (4)

これが新しい子供です。たいてい2つの個体から2つの子孫ができます。このままだと個体が無限に増えていってしまうので、適応度の低い 1100 と 1101 の個体には死んでもらいましょう。結果として、以下の4つの個体が生き残ります。

  • 0000 (0) ←親
  • 0101 (5) ←親
  • 0001 (1) ←子
  • 0100 (4) ←子

突然変異

突然変異(mutation)は文字通りある個体の遺伝子に突然変異を起こします。ここではどれかひとつの個体を選んで、遺伝子を1つ書き換えてしまいましょう。

  • 0000 (0) → 0010 (2) に書き換え
  • 0101 (5)
  • 0001 (1)
  • 0100 (4)

突然変異は大抵あまり良くない個体が生まれるので一見デメリットしかないように思えますが、個体の多様性が維持でき、後々良い解が出やすくなるというメリットがあるので基本的に必須の操作です*5

これで1ステップ完了です。あとは解が得られるまで、つまり 0011 (3) の個体が誕生するまで計算を繰り返します*6

より複雑な例

先の例は簡単すぎましたが、実際にはどのように設計すればよいのかわからないようなものであっても、「どれくらい良いか」の基準だけがあれば遺伝的アルゴリズムで解を探索できるので、以下の動画のように適当な身体と間接を与えてうまく移動できるような仮想生命体を作ったりすることができます。

www.youtube.com

www.youtube.com

まとめ

実際の生物も、どのような性質があればこの世界で上手く生き残っていけるかという正解がわからない環境でうまく適応していく必要があります。このようなときに、効率は悪いものの前提知識を必要とせずに適応していける遺伝子情報を子供に伝えて進化していくという方法はかなり強力です。

人間は脳の発達によって、後天的に獲得できる能力が非常に多いものの、たとえば反射や快・不快の基準、もっとミクロに言えばどのような神経細胞がどのような場所に配置されどう繋がるのかといったものは当然先天的なものであって、長年自然界に適応していった結果です。

人工知能、汎用人工知能を作る上でも、必ず本能に近い部分を作る必要は出てくると思われますから、このような特別な仮定をおかずに汎用的に最適解を探索できるようなアルゴリズムは少なくとも部分的には確実に必要になるでしょう。

*1:他にも遺伝的プログラミングや人工免疫システムなど色々な手法があり、総称としては進化的アルゴリズム(evolutionary algorithm, EA)や進化的計算(evolutionary computation)と呼ばれるが、ここでは遺伝的アルゴリズムだけに絞って説明する

*2:ある地点から出発して、特定の地点を1回ずつ訪問して、またスタート地点に戻ってくるようなときの最短経路を求める問題。具体的には郵便局員がすべての訪問先を回ってまた郵便局に帰ってくるような問題

*3:とはいっても主に組合せ最適化が対象になる

*4:ノーフリーランチ定理(no free lunch theorem)といって、どんな問題も完璧にできるアルゴリズムは存在せず、汎用的なアルゴリズムは幅広い問題が解ける一方で、特定の問題だけを見ればそれ専用のアルゴリズムには勝てない。万能ナイフはいろいろな状況で使えるが専用器具に比べるとどの機能も中途半端なのと似ている

*5:局所解に陥らないように探索範囲を広げる効果がある

*6:大抵はもっと複雑な問題を扱うため、どんなに繰り返し計算してもピッタリの解が得られない、またはそもそも最適解がわからないことが多いので、十分な数繰り返したら適当なところで計算を打ち切ったり、似たような個体しか生まれなくなったところで打ち切ったりする

ディープラーニング

これは 人工知能アドベントカレンダー の16日目の記事です。

最近もっとも注目を集めている Deep Learning について見ていきましょう。なお、ニューラルネットワークとディープラーニング、人工知能との関係については、以下のエントリも併せてご覧ください。

kazoo04.hatenablog.com

前回までのおさらい

前回はパーセプトロンとバックプロパゲーション(BP)について説明しました。

パーセプトロンは次のような構造をとっています。

f:id:kazoo04:20151007200055p:plain

これだけでもある種の学習は可能でしたが、一方で原理的に学習が不可能な問題があることがわかりました*1

そこでバックプロパゲーションが登場します。これは結果だけ見れば簡単な話で、パーセプトロンをもうひとつくっつけて3層構造にしたというものです。

f:id:kazoo04:20151007200113p:plain

これで非線形な問題も扱えるようになりました。原理的には中間層(真ん中の層)のニューロンの数を増やすことでより難しい問題も扱えるようになります(モデルの表現能力が高くなる、というような言い方をする)*2

さらに、ある種の問題では、中間層のニューロン数をそのまま増やすのではなく、もうひとつ中間層をつけて4層構造にする、またはさらに層を追加して5層、6層構造にすると、よりすくないニューロン数でもモデルの表現能力が上がることがわかっていました。

f:id:kazoo04:20151007200341p:plain

直感的にも、形式ニューロンを組み合わせることでパーセプトロンができ、パーセプトロンを組み合わせることでバックプロパゲーションができたのですから、そのバックプロパゲーションをさらに組み合わせることでなにかあたらしいことができそうに思えます。

ところがこのアプローチはまったくうまくいかないために、結局バックプロパゲーションは3層のまま扱い、中間層のニューロン数を増やすか、パラメータを工夫するなどの方法でしか対応できませんでした*3

なぜうまくいかないのか

4層以上のバックプロパゲーションニューラルネットワーク)は、潜在的な能力は高そうだという期待はありつつも、どうしてもうまく学習することができませんでした。このためにニューラルネットワークは冬の時代を迎え、その後はSVMベイジアンネットワーク的な手法、Random ForestやBoostingなどなど様々な優れた手法が登場したこともあり、パーセプトロンバックプロパゲーションは完全に日陰者となっていました*4

ライン作業で例える

わかりやすく説明するために、ここではニューラルネットワークを工場のライン作業に見立ててみましょう。
ここでは、素材(入力)が送られてくるので、最初の工程(ネットワークの1層目)で簡単な加工をし、次の工程(2層目)に送ります。2層目は前の工程から送られてきた製品をまた加工して次の工程に送ります。これを繰り返していくと、なにかしらの商品が完成して、出力として出てくる(出荷)というわけです。

パーセプトロンの場合は、最初は各工程の作業者はランダムに動くので、メチャクチャな製品が出力されてきます。

f:id:kazoo04:20151215214506p:plain

この商品を見て、「本当に欲しい物はこういうものなんだ」というお手本を見せると、各作業員が「なるほど、これは自分が作ってるものとずいぶん違うぞ。もっと似たものを作れるようにしよう」と動きを改めます。これをどんどん繰り返していくと、次第にどの工程でも適切な作業をしてくれるようになり、望む製品が出荷されてくる、というわけです。

f:id:kazoo04:20151215214512p:plain

多層にするということは、工程の数を増やすということです。なぜ工程を増やすとうまくいかないのでしょうか。

f:id:kazoo04:20151215214536p:plain

出力されたきたものと、実際に作りたいものを比べて、どれくらい工程を修正すればいいのかは、工程が少ないときはとても簡単にできます。自分しか作業する人間がいなければ、可能な限り自分だけでなんとかすればいいので、その工程の限界まで似せるように働けばよいだけです。

ところが、複数工程からなっていると、それぞれの役割分担という今までにないタスクが増えます。理想的には、各工程が適切に作業内容を分割・分担して、どの工程でもそこそこに働き、後の工程は前の工程の内容をうまく組み合わせることでより良い製品ができるようになるべきです。ニューラルネットワークはとても表現能力が高いので、一番最後にある層だけが頑張って活動して、入力に近い層は「どれくらい違うか」の情報が上がってこないので相変わらずランダムに作業しているといったパターンに陥りやすくなります。

f:id:kazoo04:20151215214543p:plain

最終工程が半端に優秀なために、ネットワーク全体が最終工程(最後の層)だけで学習を進めていってしまって、多層にした意味が薄れてしまうのです。これを Vanishing Gradient Problem といいます。

ここをなんとかして、「どの層もきちんと学習して、各層はもちろんネットワーク全体のパフォーマンスを上げる」ようにできればよいのですが、その方法は長らく謎でした。もちろんどの層でどれくらい学習すればいいのかを人間が決めてあげればそれなりに動くこともあるのですが、人間が一々ルールを決めなくても良いようにするのが機械学習なのに、それを人間が教えなければいけないのは本末転倒です。適切な役割分担を自動的に学習させなければなりません。

f:id:kazoo04:20151215214727p:plain

Deep Learning

この解決策はわかってしまえばとても簡単で、まず1層だけで学習し、学習が終わったら2層目を追加して2層目だけを学習し、それが終わったら3層目だけを学習し…というように1層ずつ学習させて、それが全て終わったらすべての層をつなげて、改めてひとつのネットワークとして学習させればよかったのです*5

さて、Deep Learningによってなにがそんなに良くなったのでしょうか。Deep Learningでは層を多段構成にすることで、意味のある階層構造を自動的に獲得できるようになったというメリットがあります。

f:id:kazoo04:20151215220703p:plain
Deep Learning (CNN) による特徴抽出の様子。最下段は1層目のニューロンが反応する刺激(画像)。まずどの画像でも単純な線が抽出され、それらが組み合わさって目やタイヤや脚などのより複雑な部分が抽出され、最後にそれらが組み合わさって顔や車を表現できるようになっている*6

従来、このような特徴抽出は問題ごとに人間が考えていたのですが、DeepLearningによってこの部分はすべて自動的に獲得できるようになり、かつそのほうが人間が長年にわたって試行錯誤を繰り返してきたものより優れていたのです。

また、このような構造は脳の視覚野の働きと非常に似ている部分があり*7、一次視覚野では簡単なエッジ(線)に反応するニューロンがあり、二次視覚野では複数の線を組み合わせたもう少し複雑なパターンに反応するニューロンがあり、さらにIT野までいくと、顔だけに反応するニューロンがあったりします。これはまさしく上記の画像と同じような構造です。

Deep Learningの細かい理論や数学的なモデルについてはここでは細かく触れませんが、前回と今回とで「ニューラルネットワークとはなにか?」「なぜ多層化するのか?」「なぜ今まで多層化できなかったのか?」「Deep Learningはなにが優れているのか?」などといったところはお分かりいただけたかと思います。

*1:非線形な問題は学習できない

*2:モデルの表現能力が高くなればより難しい問題も解けるのなら、どの問題に対しても十分に多いニューロンでBPをすればいい、と思えるかもしれない。ところがモデルの表現能力が必要以上に高くなると、「与えられた学習データはうまく分類できるが、そうでないデータはまったく対応できない」状態に陥りやすくなる。過去問は完璧に解けるが試験本番ではまったく結果を出せない学生と似た状態である。これを過学習とよぶ。また、無駄に多いニューロンは、より多くの計算資源、より多くの学習データを使う

*3:ただし、局所的に結合するようなネットワークだとうまく学習できることは早い段階でわかっていた。これをConvolutional Neural Network (CNN) と呼ぶが、当時はマシンスペックが足りないとか、学習データが十分にないなどの理由で注目はされなかった。これは2010年台になってからDeep Learningとして一躍注目を集めることとなる

*4:あまり注目されないがパーセプトロンバックプロパゲーション(他にはRBFネットワークなど)には他と比べた優れた点があった。SVMやBoostingが主に「分類」、つまり顔かどうかとか、イヌかネコかといった問題に着目していたのに比べ、ニューラルネットワークでは任意の関数を近似する能力がある、という比較的珍しい能力があった

*5:これはかなり簡単に書いてあって、実際はスパースネスを導入したり、次元圧縮をしたりして、より適切な表現ができるようにしなければならないし、学習方法についても活性化関数を旧来のSigmoidからReLUに変えるなど、全体的なアーキテクチャ変更とともに、細かいテクニックも多数導入することによって達成された。特にスパースネスの導入はDeep Learningに限らず極めて重要だが、もう一日アドベントカレンダーが必要になるのでここでは適当にぼかしながら説明している

*6:www.cs.stanford.edu/people/ang//slides/DeepLearning-Mar2013.pptx

*7:というよりは、CNNは人間の視覚野の一部を参考にしつつ設計されているので、似ているのは当然ともいえる

ニューラルネットワークとパーセプトロン

これは 人工知能アドベントカレンダー の15日目の記事です。

今回はニューラルネットワークについて扱います。ニューラルネットワークはかなり歴史が古く、流行ったり廃れたりを繰り返しながら少しずつ進歩を遂げてきました。今日では、Deep Learningによって幅広い層にその存在を知られるようになり、一躍最新のアルゴリズムへと進化しました。ここではそんなニューラルネットワークについて見ていきましょう。

なお、この内容は 人工知能は Deep Learning によって成されるのか? - Sideswipe でも触れているので、かなり重複していますが興味があれば併せて御覧ください。

形式ニューロン

脳が神経細胞のネットワークによって成り立っていることから、これを模倣することで高度な情報処理ができるのではないかと予想するのは自然な流れといえます。マッカロック(McCulloch)とピッツ(Pitts)は、1943年に以下のような形式ニューロン(formal neuron)を提案しました*1*2

f:id:kazoo04:20151007195948p:plain

この図の見方は簡単で、ここでは入力が3つあり、それぞれの入力に対して重みが掛け算されて、その値が閾値を超えていれば出力は1、そうでなければ出力は0となります。
たとえば、入力が1,2,3、重みが0.5, 0.7, 0.9だとすると、1*0.5 + 2*0.7 + 3*0.9 = 4.6 を計算して、閾値と比較するわけです。やっていることは掛けて足して比較するというだけの簡単なモデルです*3

実際の神経細胞は以下のようになっています。

f:id:kazoo04:20151117001007p:plain

いくつかの樹状突起(入力)が細胞体に入っていき、細胞体から1本の軸索(出力)があるという意味では両者はよく似ているといえますが、言うまでもなく神経細胞をかなり簡略化したもので、生理学的な根拠は大幅に削られています。ちなみに出力はコンピュータに扱いやすい0か1かのどちらかです。

f:id:kazoo04:20151117001033p:plain

実際の神経細胞は ニューロンの概要とそのモデル でも触れたように、もっと複雑な挙動をしますが、発火するかしないか(全か無か)の2パターンの振る舞いをするという意味ではやはり似ています。

パーセプトロン

f:id:kazoo04:20151007200055p:plain

こんな足し算と掛け算しかできないものがなんの役に立つのかと思われるかもしれませんが、形式ニューロンは非常に優れており、1958年に Rosenblatt が提案したパーセプトロンは形式ニューロンをいくつか並列に組み合わせてから出力ニューロンで束ねるという2層の構造をとることで、入力と出力のペアを学習することを示しました。

たとえば、2つの入力と1つの出力があるとします。パーセプトロンに対して、入力として1と2を、出力として両者を足した3を与えて、これを満たすように重みを変更します。次に、入力にまた適当な数、たとえば3と5、出力に両者を足した8を与えて学習させます。これを色々な数で学習させたあとに、学習に使わなかった数、たとえば1と5を入力すると、6を出力するようになるのです。つまり、「足し算」を学習したことになります。もちろん掛け算もできるし、平方根を計算することもできます。出力も2つにして、一方は足し算の結果が、もう片方は引き算の結果が出てくるような学習だってできます*4。これはまさに教師あり学習のことです。

パーセプトロンの終焉と復活

パーセプトロンはいかにも「なんでも学習できる」という万能感がありそうな感じで、ものすごく優れた方法に思えます。実際にパーセプトロンはとても流行したのですが、すぐにパーセプトロンでは理論的に学習できない問題が存在することがわかり、しかも悪いことに世の中の解きたい問題は大抵パーセプトロンでは解けないタイプの問題であることもわかりました。具体的には、教師あり学習の項で触れた、「線形分離可能な問題」しか解けなかったのです。そんなわけで期待していたほどの活躍ができないパーセプトロンの研究はすっかり廃れてしまいました。

f:id:kazoo04:20151007200113p:plain

約30年後の1986年、今度はラメルハート(Rumelhart)によってパーセプトロンを改良したバックプロパゲーション(Backpropagation, BP)が発表されました*5。これは上図のように、2つのパーセプトロンを合体したような形になっており、新しく出来た真ん中の層を隠れ層(hidden layer)と呼びます。

実はこれだけで先ほどの「線形分離可能な問題しか解けない」という制限を突破して、非線形分離可能なモデルになります。パーセプトロンは重みを調整しなければならないところが1層だけなので簡単にどれくらい調整すればよいかが求まるのですが、この場合は2層あるのでそれぞれの層でどれくらい値を調整すればいいのか決めるのが難しという問題がありました。BPはこの問題に対して誤差逆伝搬と呼ばれる方法を使ってうまく良い重み調整方法を手に入れたため、3層構造でも学習可能になったのです*6

さらなる進化

形式ニューロンを組み合わせることでパーセプトロンが登場し、ある種の問題が学習可能になりました。
パーセプトロンではできなかった問題については、パーセプトロンを組み合わせて3層構造にしたBPでパーセプトロンの制限を超えて様々な問題が学習可能になりました*7

それでは、そのBPをさらに組み合わせて多層にしたら、もっともっと複雑な問題が解けるようになるのではないでしょうか*8

f:id:kazoo04:20151007200341p:plain

ところがこのような複雑なネットワークはうまく学習するのがとても難しいことがわかり*9、理論的に優れた性能が発揮できるということはわかっていても、そもそも学習ができないのでした。

この問題は、Deep Learningの登場まで解決できないまま、ニューラルネットワーク自体が次第に忘れ去られていきます*10

*1:Warren S. McCulloch; Walter Pitts (December 1943). "A logical calculus of the ideas immanent in nervous activity". The bulletin of mathematical biophysics (Kluwer Academic Publishers) 5 (4): 115–133.

*2:マッカロックは神経生理学者、ピッツは数学者であり、異業種のコラボによって生まれたのが形式ニューロンである

*3:形式ニューロンの場合、普通は入力も0,1で、出力も0, 1、出力と閾値は実数であるが、以後紹介するニューラルネットワークでは入出力も実数であることが多いのでそのように紹介した。形式ニューロンの入出力を0と1に固定した理由は、ニューロンの発火モデル(発火するかしないかのどちらかの振る舞いしかしない)を導入したかったためであろう

*4:ここでは任意の自然数を与えているかのように書いているが、実際はパーセプトロンの場合0以上1以下の値しか与えられないので、適当に正規化する必要がある

*5:実はパーセプトロンは完全に廃れたわけではなく、今でもパーセプトロンに似たアルゴリズムが現役で活躍している。というのも、ある種のデータは線形分類器でも十分な精度が出ることがわかったり、線形分類器は過学習しにくいことや、学習が早く簡単なこと、カーネルトリックによって非線形分離可能にすることができるなど色々な応用例が出てきたためである

*6:この説明は簡略化した要約で、かなり正確さが犠牲になっている。バックプロパゲーションアルゴリズムについては様々な解説があるので、興味のある方はぜひ調べてみていただきたい

*7:色々な条件があるが、ざっくり言うと任意の連続な関数が任意の精度で近似可能になった。もっと簡単にいえば、世の中の大抵の問題が学習可能になった

*8:理論的には、3層構造のネットワークでも、中間層が十分な数だけあれば問題がない。ただし、ある種の問題に関しては、層を増やすことでより少ないニューロンで同じ問題を学習できる、言い換えるとより小さいネットワークで複雑な問題が解けることはわかっていました

*9:いろいろな理由があるが、主な壁はVanishing Gradient Problem という、重みを調整したくても適切な重み調整量がネットワーク中に拡散してしまって重みがほとんど変わらなくなってしまう問題があった

*10:とはいっても、SVMニューラルネットワークで表現できるし、Passive Aggressive や AROW, SCW のような、パーセプトロンを改良した(が、もはやニューラルネットワークとはみなされない)アルゴリズムが誕生し、それらは今でも用いられているので、正確には多層のBPを上手く学習するというアプローチが諦められていた、と言ったほうがいいかもしれない

強化学習

これは 人工知能アドベントカレンダー の14日目の記事です。

人工知能アドベントカレンダーも半分以上終わりました。今回は筆者の体調が最近思わしくないため、短めでいきます(後日加筆修正があるとおもいます)。

強化学習(reinforcement learning)は、教師ありでも教師なし学習でもない第3の機械学習アルゴリズムです*1

強化学習とは

強化学習は、

  • エージェント
  • 環境
  • 行動
  • 報酬

が与えられた時に、報酬を最大化するように学習していく(これを方策という)方法です。

f:id:kazoo04:20151214011440p:plain
強化学習の模式図。エージェントは環境を観測して行動を選択する。行動すると環境から報酬が得られたり、罰が得られたり、なにも起きなかったりする。このフェーズを繰り返して、報酬が最大化されるような方策を得ることが目的になる。

昔テレビかなにかで見たイタズラで、「右足を上げるとテレビがつく」ようにして何も知らない人がテレビの前を通ったときにイタズラをしかけるというものがありました。
最初、被験者はテレビが付いたり消えたりするのを不思議そうに見ますが、じっと見てると(両足が地面についてるので)テレビは消えてしまいます。色々試行錯誤したのち、右足を上げて片足立ちすることでテレビが見られることに気づく、というわけです。これは簡単そうで意外と難しい問題で、その時に可能な行動は無数にあるのに、ごく少ない試行回数で「右足を上げておく」というベストな解に到達できるわけです。このときは、「環境」はそのまま実験環境を指し、「行動」は身体を動かすこと、「報酬」は「テレビがつく」ということにあたります。このときの最適な方策は、「右足を上げ続ける」です。「エージェント」はもちろん被験者自身のことです。

動物行動学や心理学などでは、ネズミやネコやサルやもちろんヒトを使って様々な実験がされるわけですが、「ある行動をする(レバーを引くなど)をすると、ご褒美(ジュースや餌やお金)がもらえたり、罰(電流が流れる、お金を取られる)が与えられたりする」タイプの実験が多く見受けられます*2。このような実験を動物に行うと、最初はどうすれば良いことが起きるかわからないので適当に行動し、ある報酬が貰えると「どうすればもらえるのか?」ということを試行錯誤して、最終的にルールに気づきます*3

f:id:kazoo04:20151214011609p:plain
強化学習の具体例。環境は様々な要因からなり、なにをすればどうなるのかはエージェント(ラット)はなにもわからない。何度か経験を繰り返していくと、効率よく報酬のジュースを得ることができるようになる。最適な方策は最初わからないので、とにかく適当に動くしか無い。この場合だと、「ランプが付いている状態でスピーカーから音が出たときにだけレバーを引くとジュースがもらえるが、それ以外のときにレバーを引くと床に電流が流れる」、とかかもしれない。可能な行動は無数にあり、環境も無数の可能性のもとに成り立っているが、動物はこのような不確定要素が多い環境でも素早く最適な方策を得ることができる。

このような学習は、哺乳類はもちろん、脊椎動物全般に見られ、イカやタコなどの無脊椎動物でも見られる*4ことから、進化の初期段階で得られた原始的かつ重要な学習方法だと考えられています。

学習方法

では、このような学習をどのようにコンピュータで実現すればよいでしょうか?強化学習には様々な手法がありますが、ほとんどのアルゴリズムは以下の様な流れになります。

  • 最初はなにをしたらいいかわからないので、とにかくランダムに動いてみる
  • 報酬が与えられたら、「どのような状態のとき」「何をしたか」について、「このときこうしたら良いことがあった」と記憶しておく*5
  • 次からはランダムさは残しつつ、先ほどの記憶を頼りに良くなりそうな行動もしてみる
  • 良くなりそうな行動をしてみて、予想通り報酬が受け取れたら、また「どのような状態のとき」「なにをしたか」を覚える(あるいは強化する)

このようにたくさん経験を積むことで「こういうときに、こうすれば、良いことが起きる」という環境と行動のペアが得られます。これを元に、報酬が最大化されるような方策を得るというのが基本的な考えです。

ここでは、特に有名かつ現在もよく用いられている代表的なふたつの手法、Q学習とActor-Criticを紹介します。

Q学習

Q学習はもっとも一般的に用いられているアルゴリズムで、考え方も簡単です。状態sと行動aと「状態sのときに行動aをしたときにどれくらい良さそうか」Q(s, a)の3つを考えます。

最初は、どのようなQ(s,a)も同じ値かランダムな値にしておきますが、ある条件のときに報酬が得られたらQ(s, a)を更新します。先ほどの図の例で言えば、「ブザーが鳴ったときにレバーを引いたらジュースがもらえた」とすると、Q(ブザーが鳴っている, レバーを引く)の値を大きくします。その後も、「ランダムに動くけど、Q値が高い状態と行動の組み合わせが可能なら、そっちを優先する」ような行動を続けると、Q値がどんどん更新されていき、最終的には良い方策が得られるというわけです。

Actor-Critic

Actor-Criticは他の様々なアルゴリズムとはちょっと性質が違って、行動を決めるActorと、今の状態がどれくらい良さそうか*6を決めるCriticという2つが組み合わさっています。

この方法が非常に優れている点は、行動が連続値を取る場合でも自然に計算が可能、という点です。どういうことかというと、Q学習はチェスのように「このコマをここに動かす」のような離散的で有限個しかない行動は簡単に扱えるのですが*7、身体の向きを◯度回転させる、のような行動の場合だと実数値になってしまうので無数の行動がとれることになってしまいます。

Q学習だと無限個の行動を管理しなければならず計算できない*8という欠点を、Actor-Criticでは正規乱数を使って、Actorは行動をランダムに選択することで回避します。Criticは正規乱数の平均や標準偏差を調整して、Actorがとる行動を変化させていきます。

おわりに

非常にざっくりとした説明で終わってしまいましたが、強化学習がなにか、という点についてはお分かりいただけたかと思います。こうしてみると生き物の行動はかなり強化学習で説明できる感じがしますよね。ロボットに強化学習の機能をもたせるだけでずいぶん知的に動いてくれる感じがします。もちろん実際はそんなに簡単な話ではないのですが…。

動物の脳では本当に強化学習をしているのでしょうか?また、しているとしたらどのようなアルゴリズムを採用しているのでしょうか?Q学習やActor-Criticが使われているのでしょうか?これらの点に関しては、また後日見ていきましょう。

*1:教師あり学習と教師なし学習の中間の方法、と言うこともあるが、これは半教師あり学習というアルゴリズムがあるので、あまり適切な表現とはいえない

*2:良いことが起きることで行動が強化されるのを「正の強化」、嫌なことがなくなるのを「負の強化」、悪いことが起きるのを「罰」と呼ぶ。実際にはもっと細かく「正の弱化」や「負の罰」などもあるが、ここではそこまで細かくは触れない。強化学習の文脈では、「報酬」しか存在せず、良いか悪いかは報酬の値の正負で決める。ただわかりやすく「罰」と呼ぶこともあり、厳密には決まっていない

*3:行動心理学的には、オペラント条件づけと呼ばれる

*4:ここでいう学習はオペラント条件付けであって、古典的条件付けではないことに注意

*5:負の報酬(良くないこと)が起きることもあるので、そのときも同様に「悪いことがあった」ことを記憶する

*6:具体的にはTD誤差を計算するのだが、疲れているのでここでは詳しく説明しない

*7:実際は離散的であってもチェスの場合はものすごく状態数が多いので結局扱いきれない。このようなときには別途回避策をとる

*8:たとえば行動の空間を圧縮したり離散化したりして扱いやすくしてからQ学習する方法もある。というかそれが一般的