Network)かなり前に「コンボリューショナル・ニューラルネットワークの誤差逆伝播法」をアップしたが、数式ばかりで意味が分かりにくい向きもあるかと思い、図解で分かりやすく説明することにした。逆伝播を説明するには順方向の伝播をきちんと理解する必要があるので、その説明から始める。図1は順方向のコンボリューション(畳み込み)処理を表している。\(p-1\)番目のニューラルネットワーク層は、出力\(X_{i,j}^{p-1}\)の2次元配列\((i,j)\)のユニットで構成されている。この層にサイズ\(m*m\)、結合荷重\(W_{abk}\)のカーネルによるコンボリューション処理の計算値\(Y_{i,j,k}^p\)(図1の中に計算式が表示されている)が\(p\)番目のニューラルネットワーク層のユニットへの入力値となることを示している。ここで、kはp層を構成するチャネル(特徴マップ)の番号を表しており、ある一つのコンボルーション層に着目した図であることを意味している。\(p-1\)層の位置\((i,j)\)にある出力\(X_{i,j}^{p-1}\)は、コンボリューションの開始位置が\((i-m+1,j-m+1)\)と\((i,j)\)を左上と右下の角とする正方形にある場合にコンボリューション処理に取り込まれる。コンボリューションの開始位置が\((i-m+1,j-m+1)\)の場合の計算値\(Y_{i-m+1,j-m+1,k}^p\)はp層の位置\((i-m+1,j-m+1)\)に入力され、コンボリューションの開始位置が\((i,j)\)の場合の計算値\(Y_{i,j,k}^p\)はp層の位置\((i,j)\)に入力される。上記正方形以外の位置を開始位置とするコンボリューション処理には\(X_{i,j}^{p-1}\)は関係しない。この様子を分かりやすく表したのが図2である。図2.順方向のコンボリューション処理2p-1層の\(X_{i,j}^{p-1}\)を含むコンボリューションは図2のp-1層の中に記した橙色の正方形内にコンボリューションカーネルが存在する場合であり、この時の計算値はp層の位置\((i-m+1,j-m+1)\)と\((i,j)\)を左上と右下の角とする正方形に入力される。この正方形が図2のp層内に薄緑色で塗られた領域である。p-1層の位置\((i,j)\)にある\(X_{i,j}^{p-1}\)はコンボリューション処理によりp層の位置\((i-m+1,j-m+1)\)と\((i,j)\)を角とする正方形の領域に寄与しているのである。この図式を念頭において、逆伝播を考えてみよう(「コンボリューショナル・ニューラルネットワークの誤差逆伝播法」の式9以下で示した数式がこの部分に相当する)。逆伝播ではp層からp-1層へ誤差を伝播させるが、p-1層の位置\((i,j)\)に影響を与えるp層の範囲は位置\((i-m+1,j-m+1)\)と\((i,j)\)を角とする正方形の領域のみである。この様子が図3に示されており、図3のp層の薄緑色の領域にカーネルサイズ\(m*m\)、結合荷重\(W_{abk}\)のコンボリューション処理をし、その結果をp-1層の位置\((i,j)\)に代入すれば得られる。これは次式で表される。順方向のコンボリューション処理を表す式(1)と逆方向のコンボリューション処理を表す式(2)の違いはコンボリューション処理を掛ける層の下付き添え字が\((i+a,j+b)\)となるか、\((i-a,j-b)\)となるかの違いであり、これはコンボリューション処理を掛ける層のユニット位置が+方向に進むか-方向に進むかの違いを表している(-方向に進む場合、コンボリューションカーネルの要素を上下左右に反転させた\(rot180°\)カーネルを用いると、+方向の通常のコンボリューション処理として表現できる)。言い換えると、順方向の信号伝播も逆方向の信号伝播もともにコンボリューション処理で表せるが、コンボリューション処理を進めるユニット位置の進行方向が逆になる、ということである。この点に留意すれば、両方向への信号伝播が単純なコンボリューション処理で済ませられる。-迷路脱出プログラム-強化学習が世間の注目を集めるようになったのは、2016年3月に人工知能のアルファ―碁が囲碁の世界チャンピオンを破ってからであろう。囲碁はチェスや将棋などに比べて碁盤のマス目が多く、差し手の選択肢の広がりが膨大で、当分は人間に勝てないだろう、と言われていた。この予想をくつがえし、強化学習にディープラーニングを適用したアルファ碁は人間の世界チャンピオンを破った。その後もさらに進化し、2016年の年末には世界のトッププロを相手に60戦無敗という圧倒的な強さを示した。人工知能はここまで到達したのだ。強化学習を知らずして人工知能を語ることはできない。迷路脱出プログラム(強化学習)http://math.course.jp/wp-content/uploads/2017/02/labyrinth20170204.mp4さて、機械学習は大きく分けると、教師あり学習、教師なし学習、強化学習に分類される。この詳細については以前の投稿を参考にして頂きたいが、強化学習はその時点での正解は分からないが、最終的な正解や狙いは分かっている場合に適用される機械学習法である。囲碁の場合も対局の途中では本当の正解の布石はほとんど分からないが、最終的な正解は明確で相手より広い陣地(石で囲んだ範囲)を取ることだ。この最終的な目的を達成するために、強化学習ではある環境の中にいるエージェント(対象物)を想定する。環境はある「状態」にあり、そこでエージェントはある方策(Policy)に基づいて「行動」をとる。その行動により「状態」は変化し、その結果エージェントは「報酬」を受け取る。その報酬の大小によりエージェントは目的を達成する「行動」を強化していく、というプロセスをとる。強化学習の代表的な手法としてQ学習法がある。これは以下の手順で学習する。環境の状態を\(s\)、エージェントの行動を\(a\)、行動価値関数を\(Q(s,a)\)(初期値0)、状態の集合を\(S\)、行動の集合を\(A\)とする。a=A\)と表される。エージェントは環境の状態\(s_t\)の中にいる。})\)の行動を選択する。選択した行動\(a_t\)を実行する。行動\(a_t\)により状態は\(s_{t+1}\)に遷移し、報酬\(r\)を受け取る。学習率\(\alpha\)と割引率\(\gamma\)を用いてQ値を以下のように更新する。(2)\end{eqnarray*}\]時間ステップ\(t\)を\(t+1\)に進め、手順2から繰り返す。手順3では、確率\(ε\)でランダムに行動を選択し、確率\(1-ε\)で行動価値関数を最大にする行動を選択している。この方策は\(ε\)-greedy方策と呼ばれており、学習回数の増加とともに\(ε\rightarrow0\)となるようにスケジューリングすれば、行動選択は最適方策に近づいてゆく。強化学習は応用範囲が非常に広い機械学習法で、囲碁や将棋のみならず、インベーダーゲームや対戦ゲームの操作方法、あるいは自転車の乗り方や二足歩行のバランスの取り方など、様々な分野に応用できる。今後ますます利用が広がりそうなテーマなので、是非とも理解しておきたい項目である。そこで今回はその手始めとなる迷路脱出のプログラムを上記の手順に基づいて作成した(C++)。それが冒頭のビデオである。学習率\(\alpha=0.5\)、割引率\(\gamma=0.99\)、確率\(ε=0.5\)、学習回数200回(エピソード)、1エピソードでの最大ステップ数は1000とし、そこでスタートに戻り次のエピソードを開始させた。報酬はゴールに入れば10000ポイント、スタートに入れば-100ポイント、その外は全て-1ポイントとした。溝に落ちた場合は落ちる前の位置に戻すだけで、報酬は-1ポイントのままにした。溝に落ちることを防ぐと早くゴールにたどり着くので、そのペナルティはあえて科していない。確率\(ε\)の初期値は0.5としたが、1エピソード毎に0.9を乗じて手順3におけるランダムな行動を徐々に減らし、行動価値関数を最大にする行動を採用するようにした。従って、最初は溝に落ちまくっているが、学習回数が増えるに従い、溝に落ちなくなり、ゴールに早く到達するようになる。ビデオの上端に表示した「EPISODE」は学習回数を表示している。0は初回で、40回の学習毎にビデオ表示するようにした。○○」ではなく「Labyrinth」と表示されるが、これは学習200回を終えた後、テスト走行させた時の様子を示している。迷路の構造は簡単に変えられるように、下のような配列を用いた。数値4が通路で、数値0は溝、スタート(s)は1、ゴール(G)は3とした。どのような迷路の形を作成しても、着実に学習して全てゴールに辿り着いた。スタート点とゴール点が近いと早くゴールに辿り着く。ゴールに到達した時の報酬の値は10000ポイントとしたが、これは10や100、1000にしてもほとんど変わりはなかった。この迷路脱出のプログラムの動作を見て、私は努力の大切さを思い知らされたような気がした。人間であれば溝に落ち続けてゴールにたどり着けない場合、あきらめて止めてしまうが、コンピュータは延々と脱出口を求めて学習し続けることができる(当たり前だが)。この無限に近い学習過程を取ることが出来る点において、強化学習は秀逸である。Propagation)について解説する。コンボリューショナルニューラルネットワークの構造を解説した投稿の図2を念頭に置きながら、以下の式の意味を理解して頂きたい。j}^{p-1}\)のコンボリューション層であり、\(p\)番目の層はチャネル数を表すk座標にe枚の特徴マップを持つ層とする。コンボリューションのカーネルサイズをm×m、カーネルの2次元座標を\((a,b)\)、結合荷重を\(w_{abk}\)とすると、\(p\)番目の層への入力\({Y}_{ijk}^{p}\)と出力\({X}_{ijk}^{p}\)は式(1)、(2)で表される。ここで\(k\)は特徴マップの枚数のインデックスであるので\(0~e-1\)の値をとる。fは非線形活性化関数を表している。\(p-1\)番目の層がd枚の特徴マップで構成される場合は、式(1)は次式のようになる。}\qquad(3)\]ここで\(c\)は\(p-1\)番目の層の特徴マップのインデックスを表す。式(3)は式(1)と同様の形をしているので、以下では簡単のために\(d=1\)の場合である式(1)を例として話を進める。{w}_{abk}\)は学習率\(\eta\)を用いて次式のように設定される。コンボリューションを行う層のユニット数がN×Nで構成されているとすると、コンボリューションのカーネルが移動できるユニット数は(N-m+1)×(N-m+1)となる。rule(連鎖法則)により次のように変形される。\qquad(9)\end{eqnarray*}\]ここでは式(1)を偏微分して得られる次式(10)を用いた。式(1)にあるサメーションが外れているのは、特定の\(a,b\)を持つ\({w}_{abk}\)で微分しているので、それ例外の\(a,b\)を持つ項の微分がゼロとなるからである。\right)\)は微分した活性化関数に入力値を代入すれば得られる値で、共に既知である。{X}_{ijk}^{p}\)は、出力層の出力と教師画像との二乗誤差の微分値を最初の値とし、それを前の層に順番に逆伝播して利用するものである。これを前の層に順番に逆伝播させることで順次取得できる。}\)と記載すると、式(4)は次式となり、荷重結合の微小更新量を得ることができる。\qquad(11)\]ここで注意したい点がある。}\))を逆伝播する方法である。わかりにくい点があるので、以下で解説する。【コンボリューション層での誤差逆伝播法】p番目のコンボリューション層はe枚の特徴マップで構成されているので、p-1番目の層の微分誤差は次式のように展開される。ここでは式(2)と、式(1)を\(X\)で偏微分して得られる式(11)を用いた。\qquad(14)\]p番目の層の\(Y\)や\(X\)の添え字が\(i-a\)や\(j-b\)と表記されているが、式(1)におけるp-1番目の層の\(X\)の添え字\(i+a\)や\(j+b\)と符号が逆になっている。これはフォワードプロパゲーションの畳み込み演算において、p-1番目の層の座標\((i+a,j+b)\)がp番目の層の\((i,j)\)に対応しているので、p-1番目の層の座標\((i,j)\)はp番目の層の\((i-a,j-b)\)に対応するからである(詳しい説明を「コンボリューション層の誤差逆伝播法の図解説」で行っているので、参考にしてください)。{X}_{ijk}^{p-1}\)が求められる。コンボリューション層の誤差逆伝播式は式(12)などに表されるように、サメーション\(\sum\)を複数用いるので、何をしているのか分かりにくいかもしれない。ここで行っている誤差逆伝播は従来のニューラルネットワークの誤差逆伝播と本質的に同じである。結合荷重で結ばれているユニット間で誤差を伝播しているだけである。コンボリューション層では一つの結合荷重が複数のユニット間を結合しているので、それらの誤差を積算しなければならない。そのためにサメーション\(\sum\)が複数個使われることになる。コンボリューショナルニューラルネットワークでは、マックスプーリング層が用いられることが多いが、この層は単にコンボリューション層のユニットを一定サイズのブロックに区分し、各ブロック内の最大値を持つユニットを抽出する役割を果たす。従って、誤差逆伝播ではプーリング層のユニットをコンボリューション層の各ブロックの最大値を持つユニットに結びつけるだけでよい。以上のようにして、コンボリューショナルニューラルネットワークに関する誤差逆伝播を計算することができる。前の投稿ではニューラルネットワークとディープラーニングの構造を比較した。そこでは手書き数字画像(幅28画素*高さ28画素の白黒画像)を認識する場合を取り上げた。今回はその構造の違いにより性能がどのように異なるのかを説明する。前の投稿で示したニューラルネットワークとディープラーニングの画像認識プログラムをC++言語で作成した。機械学習の理論に基づいて、全てのプログラムを自作した。手書きの数字画像はMNISTのデータベースを使用した。ここには7万画像が含まれているので、トレーニングに6万画像、性能テストに残りの1万画像を使った。トレーニングに使った画像は性能テストには使用しないことが、正しく性能を評価する上で重要である。Rate)の関係を示す。トレーニングにおいては、6万枚の画像からランダムに画像を選び、画像1枚を入力する毎にバックプロパゲーションにて結合荷重を更新した。図中の←10、←100、←500、←1000などはトレーニング回数を表す。認識するのは数字0~9の10文字なので、全くデタラメに回答した場合の正解率は10%となるが、わずか10回学習するだけで、正解率が24%になり、100回で45.2%、1000回で84.6%と急速に向上する。このように正解率が急速に向上するのは、バックプロパゲーションによる学習(結合荷重の更新)が効果的になされていることを示している。トレーニング1万回では91.3%、3万回で95.4%となり、その後、正解率は横這いとなる。8万回の時に最高値96.5%となっているが、約6万回以降、トレーニング毎の結合荷重の更新で正解率が微小に振動しているので、その影響で最高値が出たと考えられる。トレーニングに使える画像が6万枚であるので、トレーニング回数も6万回程度で飽和するのはもっともなことだと考えられる。トレーニングに使用した画像が似たような画像ばかりであれば、もっと少ないトレーニング回数で正解率が飽和することもあり得る。次にディープラーニング(CNN:コンボリューショナルニューラルネットワーク)による手書き数字の認識正解率とトレーニング回数のグラフを図2に示す。用いたデータは上記と同じMNISTデータである。ディープラーニング(CNN)による手書き数字の認識正解率ディープラーニングのトレーニングパラメータとして、学習率ETA=0.01、バッチサイズ10、Momentum=0.1、L2=0.001とした。ドロップアウトは用いていない。バッチサイズ10とは10枚の画像で1回結合荷重を更新することを意味する。図2でも最初のトレーニングで急速に正解率が向上しており、バックプロパゲーションによる学習が適切に行われていることが分かる。1万回程度のトレーニングで正解率は横這いとなるが、それ以降ほんのわずかずつ向上し、6万回では最高値98.8%の正解率を出した。このあたりではMLPによるトレーニングと同様に、結合荷重の更新毎に正解率は微小に振動している。パラメータの値を変えたり、あるいはCNNの層構造やカーネルのサイズを変えると、正解率も変わるので、いろいろ工夫することで、さらに良い正解率を達成することも十分可能である。以上のように、従来のニューラルネットワークと最近注目されているディープラーニングの基本的な構造でその性能を比較した。画像認識の性能はそれぞれ96.5%と98.8%となり、2%の差が出た。100%に近いレベルにおいて2%の差が出るということは結構な性能向上と言ってよいであろう。私もこのMNISTのデータを目視で少しだけ認識したが、実は判断のつかない画像が散見された。図3はMNISTデータの一例だが、数字が何なのかを認識するのは簡単ではない。MNIST画像の判別しにくい例(http://neuralnetworksanddeeplearning.com/chap6.htmlより)図3の各数字の右上と右下に小さい数字が記入されているが、右上が正解で右下が間違いの例である。人間でも判断できない数字も少なくない。このような判別が難しい手書き数字の認識において正解率が98.8%あれば、まあま優秀と言えるのではないだろうか。画像認識プログラムは学習データだけを基準として判断するので、人間のような思い込みや自分の癖などが反映されない。よって、人間より客観的な判断ができると言える。このような画像認識が可能となったディープラーニングは今後益々様々な用途に利用されていくことは間違いなさそうだ。画像認識ニューラルネットワークとディープラーニングの性能の比較にコメントニューラルネットワークとディープラーニングの構造の比較ディープラーニングはニューラルネットワークの一形態であり、その層数を深くした構造を持つが、単に層数を深くしただけではなく、入力画像の形状を捉えるための工夫が施されている。今回はその構造について説明する。画像を認識する従来の基本的なニューラルネットワークの構造を図1に示す。これは多層パーセプトロンと呼ばれるニューラルネットワークで、この例では入力層1層、中間層であるHidden層1層、出力層1層の3層構造を有している。ニューラルネットワークの構造Input層には写真などの2次元の画像が用いられるが、図1に示したように、2次元の画像は1次元に変換されて、入力される。この2次元から1次元への変換は、2次元の各行を単純に1行につないで並べるだけの変換である。手書き数字(0~9)画像の代表的なデータベースであるMNISTを用いて画像認識を行う場合を例にとれば、Input層は手書き数字の画像サイズ28画素×28画素=784ユニットとなる。Hidden層には100ユニット程度が用いられるケースが多い。最後のOutput層は認識する数字の種類0~9の数と同じになるので、10ユニットとなる。入力画像が「0」であれば出力層の上から1番目のユニットの出力値が最大となり、入力画像が「1」であれば上から2番目のユニットの出力値が最大、「2」は3番目、「3」は4番目、、、「9」は10番目のユニットの出力が最大となるように機械学習させる。ニューラルネットワークを作成する上での重要なポイントは結合荷重の設定である。図1の下の方に具体的な結合荷重の数を示した。W10は入力層とHidden層の間、W21は出力層とHidden層の間の結合荷重である。添え字wは荷重パラメータであり、添え字bはバイアスパラメータを示す。初期値にはランダム値が設定される。このように従来のニューラルネットワークでは、図1のようなシンプルな層構造を持っている。これに対し、ディープラーニングで画像を認識させる場合には、図2のような構造を取る。ディープラーニングの構造ここでは画像認識で最も高い性能を上げているコンボリューショナルニューラルネットワークで手書き数字画像を認識する場合の一例を示した。図2に上の方に青い枠で囲まれた部分がディープラーニングの構成層を示し、その下の緑色の枠で囲まれた部分が演算に用いるフィルターである。その下に層を構成するユニットの模式図が描かれており、そのユニット数が紫色の下線を持つ数字で示されている。下のオレンジ色で囲まれた部分が各層間の結合荷重の構成を示している。これらを具体的に説明する。図2の上の方で青い枠に囲まれている各層は、Input層、特徴マップ層Fmap1、MaxPoolingされた層S1、特徴マップ層Fmap2、全結合層HiddenF3、Output層で構成されている。Input層には2次元画像28*28画素をそのまま使う。特徴マップ層Fmap1の1ユニットはInput層に5*5画素の畳み込みカーネルConv-karnelフィルタを掛けることで算出される。Input層28*28の画像の上に橙色の正方形で示されているカーネル領域を左から右に順番に移動させて、Fmap1の全てのユニットの値を算出する。Fmap1は4枚で構成されているので、この操作を4回繰り返して、4枚のFmap1を算出する。同じ操作を4回繰り返して4枚のFmap1を生成するが、演算に用いる結合荷重が異なるので、4枚のFmap1は全て異なる値を持つ。結合荷重の初期値はランダムに設定される。機械学習の過程では教師データの値をフィードバックするバックプロパゲーションにより結合荷重の値が更新される。このようにして生成されたFmap1層に2*2ユニットのMaxPooling処理をして、S1層を算出する。2*2ユニットのMaxPooling処理とは、縦2横2のユニットの中の最大値をS1層に代入する処理のことである。そのため、S1層のサイズはFmap1の縦横の半分になり、面積としては1/4になる。MaxPooling処理では、特徴マップの枚数に変化はないので、Fmap1が4枚なら、S1も4枚となる。特徴マップFmap2はS1に対し、5*5*4fのConv-karnelで畳み込み処理をして算出される。ここで5*5*4fは5*5ユニット×特徴マップ4枚の畳み込み演算のことであり、4枚で構成されているS1の同じ位置の5*5ユニットに対して畳み込み処理を行っている。3次元ユニット5*5*4fの畳み込み演算を行っている。ここでFmap2は特徴マップとして8枚を持つ構成にしたので、8枚分同じ処理を繰り返す。ここでも結合荷重の値が異なるので、異なる値を持つFmap2が8枚作製されることになる。S2はS1とまったく同様なMaxPooling処理である。このような処理の後、従来のニューラルネットワークのHidden層と同様な全結合層HiddenF3(100ユニット)を設け、これにS2の全ユニットを結合する。この全結合層にHiddenという名前を付けたのは従来のニューラルネットワークと同様の層であるためであり、この層だけがHiddenn(隠れた層)という訳ではない。最後のOutput層と全結合層を全て結合する。各層をつなぐ結合荷重を図2の下の方に橙色で囲んだW10、W21、W32、W43などで示した。map)の枚数を意味している。図1のニューラルネットワークと図2のディープラーニングを比較するとよく分かるが、ディープラーニングは従来のニューラルネットワークのInput層とHidden層の間に、畳み込み演算とMaxPooling処理をする数層を挟んだ構造をしている事に大きな特徴がある。これらの構造の差により、画像認識の性能がどの程度変わるのかを次に解説する。荷重パラメータニューラルネットワークとディープラーニングの構造の比較にコメント人工意識:脳のようなニューラルネットワークを作れば「意識」は生まれるか(3)意識とニューラルネットワークとの関係について、もう一つの重要な観点をお話します。様々な色を認識し、次に色の変化から形を認識し、背景なども認識し、対象物が何であるかを認識します。「この色とこの形だと、これは○○だ」のように、対象物を認識する根拠として、色や形を使います。「橙(だいだい)色で、この丸みで、表面のブツブツ状態からして、これはミカンだ」などと判断します。これに対し、コンピュータによるニューラルネットワークなどの画像認識では、対象物の色や形など全ての情報は数値に変換されて、ニューラルネットワークに入力され、演算処理がなされます。ニューラルネットワークの中では対象物の色や形は跡形もなくなくなり、全ての情報は数値に変換され、演算されて認識されるのです。画像認識で最も高い性能を出しているディープラーニングのコンボリューショナル・ニューラルネットワークでも、形の特徴を捉える工夫はあるものの、全て数値で演算され、認識されるところは同じです。このように人の脳とコンピュータのニューラルネットワークは根本的に認識過程が異なるのです。ここで重要なことは、人間の目や脳が、自然界には存在しない「色」を作り出している事です。自然界には本来「色」なるものは存在しません。自然界に存在するのは光(電磁波)です。この光を目の網膜や脳が色に変換して、つまり、色を作り出して認識しているのです。「そんなことはないよ!そこに赤いリンゴがあるじゃないか。赤い色が存在するから赤いリンゴがあるんだ」と思う人も多いと思いますが、実は「赤い」リンゴは人間の脳が作り出した存在で、そこにあるのは「波長700nmの電磁波を反射する」リンゴなのです。この変換により、リンゴは赤色として認識されるのです。七色の虹も同様で、空に浮かんでいるのは単なる水蒸気ですが、水蒸気により電磁波が波長ごとに分離し(屈折率の違いから)、それが目や脳により七色に色付けされて、カラフルな虹として認識されるのです。これに対してコンピュータでは、赤、緑、青(RGB)という三原色の光を数値に変換して入力し、演算処理をします。色としては認識せず、RGBの数値を用いて認識するのです。光の波長(数値)を色に変換して色として認識する人間と、色を数値に変換して数値の大小で認識するコンピュータという対称的な構図が存在します。私達が感知することのできないテレビ電波などの電磁波が全く無味乾燥な存在であるのと同じように、波長350nm~750nmの電磁波(光)も本来無味乾燥な存在のはずです。人の脳がコンピュータのように認識するのであれば、それをわざわざ色に変換する必要はありません。ディープラニングが行っているように、波長400nm、550nm、700nm(青、緑、赤)の光の強度の大小で演算処理をして、画像認識をすればよいのです。それにもかかわらず、なぜ目や脳は電磁波を味わい深い豊かな色に変換するのでしょうか?私には、それは人間の「意識」に対して、外界の状況をテレビのように投影するためのように思われるのです。人間の「意識」という主体が外界を分かり易く認識できるように、目や脳が外界の様子を投影して見せているように思えるのです。あるならば、コンピュータ上で動作するニューラルネットワークをいくら複雑に作ろうとも、いくら膨大なシステムにしようとも、人間の意識が生まれることはないと言えるでしょう。これは最初の投稿です。world!にコメント人工意識:脳のようなニューラルネットワークを作れば「意識」は生まれるか(2)2016/12/24昼過ぎにNHK教育番組を見ていたら、「人工意識」なるものを作る研究を行っている大学教授が出ていた。最近の意識に関する研究の進展から、意識は脳全体の情報を統合的に取り扱うことで生成される事が分かって来たので、これを人工的にコンピュータ内に作る研究を進めている、と発言していた。研究は多種多様な観点から進められるべきだし、このような研究が行われることに全く反対はない。いろんな人がいろんな観点から自分の信じる研究を進めればいいと思う。その際に注意してほしいことは、まだ分からないこと、解明されていない事は「まだ分からない、解明されていない」とはっきり言う事だ。脳と同じようなニューラルネットワーク構造をコンピュータ内に作れば意識が生まれる可能がある、という発言は、人間は機械のようなモノ、と捉えた場合に単純に導かれる発想と言える。私はそんな発想は思慮が足りないと考えるが、それは前の記事でも書いた数学的処理の観点からだけでなく、知識獲得の本質的な観点からも重要な点を見落としていると考えるからだ。書いた「暗黙知の次元」という本がある。10年ほど前に読んで深く感動したことを今もよく覚えている。その中に「あるレベル(次元)の機能を統合的に制御するには、それより上のレベル(次元)の機能が必要である」という内容の記述があった。自転車に乗るためには、下位レベルの機能である手足が動くだけではダメで、それらを統合的に制御する上位レベルの機能である脳が必要である、ということだ。脳が手や足の動きを統合的に制御して初めて自転車にうまく乗れるようになる。これは脳の働きに焦点を当てた場合にも適用される。脳は、モノを見たり(画像認識)、聞いたり(音声認識)、計算したり(演算処理)する各機能を有しているが、これらをある目的のために行わせたり、制御したりする統合的働きをするのが意識である。意識はこれらの機能より高いレベル、高い次元の存在でなければならない。ニューラルネットワークで実施した画像認識や音声認識を統合的に制御する意識の役割は、同じ次元であるニューラルネットワークでは担う事ができないことになる。次元が異なるということは、基本構造が異なることを意味しているので、意識がその役割を果たすにはコンピュータ内に構築する数学処理とは異なる構造が必要と考えられる。このような観点からも、意識とは何かを考察することが重要だと思っている。深層学習人工意識:脳のようなニューラルネットワークを作れば「意識」は生まれるか(2)にコメント3次元空間の回帰直線の求め方2次元平面上に存在する複数の点からその回帰直線を最小二乗法で求める問題はよくあるが、3次元空間に存在する複数の点からその回帰直線を最小二乗法で求める問題はあまり見ないようなので、ここにその解法を書いておきます。}\)は次式で表される。{P_0P}\)の単位ベクトルである。(5)\end{array}\]となる。\(a^2+b^2+c^2=1\)。}\)が示す直線は\(x,y\)平面上にあるので、通常の2次元平面上の直線となり、普通の最小二乗法で解を求めることができる。式(6)を(3)、(4)に代入すると式(7)、(8)が得られる。(9)\]式(7)、(8)から\(z\)を消去して\(x,y\)の関係式(9)を算出した。ここでは、\(A=a/c、B=(x_0-Az_0)、C=b/c、D=y_0-Bz_0\)と置き換えている。式(7)、(8)、(9)はそれぞれ\(zx\)平面、\(zy\)平面、\(xy\)平面における直線式を表している。この各々の2次元平面において、以前書いた擬似逆行列で回帰直線を求める方法を用いて式(7)、(8)、(9)の係数6個を求める。3次元空間に存在する全ての点\((x,y,z)\)の中から、\((x,z)\)の座標を式(7)に入れて係数\(A,B\)を求め、\((y,z)\)の座標を式(8)に入れて係数\(C,D\)を求め、\((y,x)\)の座標を式(9)に入れて係数\(E,F\)を求める。{P_0P}\)の3つの未知数を全て算出できる。{P_0P}\)の未知数は、\(t\)の長さとその単位ベクトルの未知数2個であるからだ(\(a^2+b^2+c^2=1\)より未知数は2個)。このようにして擬似逆行列で求めた直線は各点からの距離が近い回帰直線となる。{P_0P}\)の単位ベクトルとした。単位ベクトルの条件(\(a^2+b^2+c^2=1\)から、係数を一つ消去することで、未知数が6個であると説明した。この考え方でよいのだが、より簡単に計算するには、式(5)の\(ct\)→t’と置き換えることで式(3)、(4)、(5)は以下のように書き換えられる。t’\)の6個であることが分かる。この後は上式(6)以下と同様に変形して、未知数を算出することができ、3次元空間の回帰直線が求まる。直線3次元空間の回帰直線の求め方にコメント人工意識:脳のようなニューラルネットワークを作れば「意識」は生まれるか(1)人工知能を研究している大学の先生の中には、人工知能の代表的な手法であるニューラルネットワークの結合数を人間の脳のニューロンの結合数並みに増やしていくと、量が質に変わり、人間のような「意識」がコンピュータにも現れる、と言う人がいる。一般の人もこれに同調して、「なるほど、人間の脳と似たような人工神経回路網をコンピュータ内に作れば、人と同じような意識がでてきても不思議はない」と言う人が少なからずいる。コンピュータ内に作られたニューラルネットワークを支配するのは数学計算である。ディープラーニングの層数を現状の10層から1兆層に増大したとしても、数学的処理の層数が10層から1兆層に増えるだけで、そこに新たな生命体の息吹である「意識」が生まれることは決してない。プログラム通りに1兆層の計算を行うだけであり、コンピュータに意識が生まれることはあり得ない。正解となる、と主張するようなものだ。数学において、この+α(計算結果以外のモノ)が発生する余地は全くない。私はディープラーニングの画像認識プログラムや強化学習プログラムを全て自分で作成してきたので、人工知能が内部でどのような計算をしているかは全て把握している。そこで行う計算は四則演算(掛け算、割り算、足し算、引き算)である。{x}\)などの計算が入ることがあるが、これらもコンピュータ内では四則演算で近似されて計算されるので、コンピュータ内での演算は全て四則演算である。それゆえにディープラーニングで四則演算を1兆回行おうが、1兆の1兆乗回行おうが、数値計算の誤差は出るが、計算結果以外の何かである+αが生まれることはあり得ない。ニューラルネットワークの層数が1兆個に増えれば、とてつもなく複雑な処理が可能になり、人間の頭脳よりも繊細できめ細やかな処理や表現が可能になるであろう。感情があるかのような発言や行動が出来るようになるであろう。それはあくまでもプログラム通りに数学演算が多数回行われた結果であり、計算とは別の「何か」「意識のようなモノ」が生成されたということでは決してない。このような数学の基本法則からして、ニューラルネットワークの層数を人間の脳内のニューロンの結合数に近づけると「意識」が発生するなどという考え方は、まったく滑稽である。後日、別の観点からもこの問題について考察したい。