カテゴリー
人工知能

ニューラルネットワークの基本 ~フィードフォワードネットワーク~

[mathjax]人工知能の代表的な技術の一つに人工ニューラルネットワーク(Artificial Neural Network)があります。

人工ニューラルネットワークは、脳の神経細胞ニューロンの構造を真似て作成したもので、複数のニューロンが存在する層を積層し、異なる層のニューロンを接続して信号を伝達します。

今、\(p\)番目の層(\(p\)層とする)の\(j\)番目のユニット(ニューロン)について考えます。\(p-1\)層の\(i\)番目のユニットの出力を\(x_i\)とすると、これに重みパラメータ\(w_{ji}^{(p)}\)を乗じた項の線形和\(a_j\)が\(p\)層の\(j\)番目のユニットへの入力となります。

\[a_j= \sum_{i=0}^{m} w_{ji}^{(p)}x_i \qquad (1)\]

ここで、\(w_{ji}^{(p)}\)は\(p-1\)層の\(i\)番目のユニットから\(p\)層の\(j\)番目のユニットへの重みパラメータ\(w\)を表しており、\(a_j\)は活性と呼ばれます。

そして、\(p\)層、\(j\)番目のユニットへの入力\(a_j\)は、微分可能な非線形活性化関数\(h()\)により出力\(z_j\)に変換されます。

\[z_j=h(a_j) \qquad (2)\]

ここでは\(i=0\)の時、\(x_0=1\)として、入力信号の影響を受けない項\(w_{j0}^{(p)}\)としています。これをバイアスパラメータと呼びます。

図1 ニューラルネットワークの構成図

重みパラメータとバイアスパラメータを区別し、式(1)、(2)をまとめて書くと、

\[z_j=h( \sum_{i=1}^{m} w_{ji}^{(p)}x_i +w_{j0}^{(p)}) \qquad (3)\]

となり、\(p\)層の\(j\)番目のユニットへの入力\(x_i\)と出力\(z_j\)が表されます。

図1では、\(p-1\)層の全てのユニットから\(p\)層の\(j\)番目のユニットへの接続線しか表示されていないのですが、\(p-1\)層の全てのユニットは\(p\)層の全てのユニットに接続されています。

そして、重みパラメータとバイアスパラメータの値、および非線形活性化関数により、入力を所望の出力に変換させることを狙いとしています。

非線形活性化関数\(h()\)には、ロジステックシグモイド関数やtanh関数などのシグモイド関数が利用されます。

ロジステックシグモイド関数 \(\sigma\left(\right)\)

\[\sigma \left( a_j \right) =\frac { 1 }{ 1+exp\left({ -a_j }\right) } \qquad (4)\]

ハイパーボリックタンジェント関数 \(tanh\left(\right)\)

\[tanh \left( a_j \right) =\frac { exp\left({ a_j }\right)-exp\left({ -a_j }\right) }{ exp\left({ a_j }\right)+exp\left({ -a_j }\right) } \qquad (5)\]

式(3)の出力\(z_j\)は次の層への入力信号となり、順次これが繰り返され、最終的な出力が得られます。

分かり易い例として、図1のような、\(p-1\)層が入力層で、\(p\)層が隠れ層、\(p+1\)層が出力層となる3層構造を考えてみましょう。

これを用いて、例えば、30画素×30画素の白黒画像の数字0~9を認識させる場合であれば、入力層のユニット数を900個とし、ここに900画素の輝度値を入力します。つまり、輝度値が図1の\(x_i\)となります。ただし、輝度値\(x_i\)は0~1の間に収まるように規格化するのが一般的です。そして、式(3)を用いて隠れ層の出力\(z_j\)を計算します。この出力が3番目の出力層への入力信号となります。

隠れ層のユニット数は自由に設定することができます。言い換えると、性能が良くなるユニット数を実験から見出さねばなりません。

出力層のユニット数は10個とし、数字の0~9に対応させます。そして、例えば、数字の2の画像(900画素の輝度値)を入力したら、その正解出力は、出力層の2番目のユニットが1となり、その他は0となります。数字の5であれば、正解出力は出力層の5番目のユニットが1となり、その他は0となります。このような正解出力が出るように重みパラメータとバイアスパラメータを決定します。正解出力から逆方向に遡ってパラメータを決める過程をバックプロパゲーションと呼びます。また、0~9までの数字画像を次々と入力し、正解出力を与えて、その計算過程にあるパラメータを決めるプロセスは、まるで機械が学習をしているようなので、機械学習と呼ばれます。

次回は、バックプロパゲーションによりパラメータを算出する方法を解説します。

カテゴリー
応用数学

擬似逆行列と回帰方程式(最小二乗法)

[mathjax]前の投稿では擬似逆行列を用いて、回帰直線を得る方法を解説しました。

今回は、擬似逆行列を用いて、高次の回帰曲線を得る方法を説明します。

一般に、n次元曲線の方程式は次のように表現されます。

\[y={ a }_{ 0 }+{ a }_{ 1 }{ x }+{ a }_{ 1 }{ x }^{2}+\cdots +{ a }_{ n }{ x }^{ n } \qquad (1)\]

この\(x,y\)が、点\((x_1,y_1)\)、\((x_2,y_2)\)、\((x_3,y_3)\)、、、やその近傍を通過して欲しいならば、式(1)に代入して、その係数を求めます。その際、点の数は係数\(a_i\) \((i=0\)~\(n)\)の数\(n+1\)以上が必要です。今その点数を\(m\)個とすると、以下のように書き下せます。

\[{ y }_{ 1 }={ a }_{ 0 }+{ a }_{ 1 }{ x }_{ 1 }+{ a }_{ 2 }{ x }_{ 1 }^{ 2 }\cdots +{ a }_{ n }{ x }_{ 1 }^{ n }\qquad (2)\]

\[{ y }_{2}={ a }_{ 0 }+{ a }_{ 1 }{ x }_{2}+{ a }_{ 2 }{ x }_{2}^{ 2 }\cdots +{ a }_{ n }{ x }_{2}^{ n }\qquad (3)\]

\[\cdot \cdot \cdot \cdot \cdot \cdot \cdot \]

\[{ y }_{m}={ a }_{ 0 }+{ a }_{ 1 }{ x }_{m}+{ a }_{ 2 }{ x }_{m}^{ 2 }\cdots +{ a }_{ n }{ x }_{m}^{ n }\qquad (4)\]

これを行列で表すと

\[\left[ \begin{matrix} { y }_{ 1 } \\ { y }_{ 2 } \\\cdot\\ { y }_{ m } \end{matrix} \right] =\left[ \begin{matrix} 1 & { x }_{1} & { x }_{1}^2 & \cdots & { x }_{1}^{n} \\ 1 & { x }_{ 2 } & { x }_{2}^2 & \cdots & { x }_{2}^{n} \\ \cdot & \cdot & \cdot & \cdots & \cdot \\ 1 & { x }_{ m } & { x }_{m}^2 & \cdot & { x }_{ m }^{n} \end{matrix} \right] \left[ \begin{matrix} { a }_{ 0 } \\ { a }_{ 1 } \\ { a }_{2}\\\cdot\\ { a }_{n} \end{matrix} \right] \qquad (5)\]
となります。これは前の投稿の式(5)と同じ式に簡略化できます。

\[Y = XA\qquad (6)\]

従って、前の投稿と同じ方法で係数\(A\)を求めることができるので、前の投稿の式(15)と同じ次の結果が得られます。

\[A = (X^TX)^{-1}X^TY\qquad (7)\]

このように、擬似逆行列を用いれば、高次の回帰曲線であろうが、単なる回帰直線であろうが、同じ計算手法で簡易に算出することができます。なんと有り難い計算手法でしょう!これは最小二乗法などを用いた場合の煩雑な計算に較べ、大きな特長といえます。

カテゴリー
応用数学

擬似逆行列と回帰直線(最小二乗法)

[mathjax]数学の美しさ、完璧さに幾度となく驚いた私でしたが、擬似逆行列もその一つでした。その例を一つご紹介します。
直線の方程式は次のようにあらわされます。
\[y= ax + b\qquad (1)\]
この直線が点(\(x_1,y_1\))と点(\(x_2,y_2\))を通過するならば、
\[y_1= ax_1 + b\qquad (2)\]

\[y_2= ax_2 + b\qquad (3)\]が成立します。これを行列で書くと

\[\left[ \begin{matrix} y_1 \\ y_2 \end{matrix} \right]=\left[ \begin{matrix} { x }_{ 1 } & 1 \\ { x }_{ 2 } & 1 \end{matrix} \right]\left[ \begin{matrix} a \\ b \end{matrix} \right] \qquad (4)\]

となります。各行列を簡略化して表すと

\[Y= XA\qquad (5)\]となります。

\(X\)が逆行列\({ X }^{ -1 }\)を持つならば(正則行列)、式(5)の両辺に左側から\({ X }^{ -1 }\)を乗じて

\[{ X }^{ -1 }Y= { X }^{ -1 }XA\qquad (6)\]

ここで、

\[{ X }^{ -1 }X= E\qquad (7)\]

\(E\)は単位行列。よって、式(6)は下記となります。

\[{ X }^{ -1 }Y = A \qquad (8)\]

結果として得られた式(8)は、式(5)の\(X, Y\)が単なる変数である場合に得られる

\[A=\frac { Y }{ X }\qquad (9)\]

と同様の形をしています。

まあ、ここまでは普通の逆行列を用いた計算で、そういう風に表現できるんだ、で済む話ですが、ここから擬似逆行列が本領を発揮します。

式(1)は2点を通る直線という条件において、式(8)により係数\(a,b\)を出すことができます。しかし、一直線上にない3点以上が与えられた場合、式(8)から1組の係数\(a,b\)を出すことは出来ません。

それは、3点以上が与えられた場合、式(5)の各項は下記のようになり、

\[Y=\left[ \begin{matrix} y_1 \\ y_2 \\ y_3 \end{matrix} \right] \qquad (10)\]

\[A=\left[ \begin{matrix} a \\ b \end{matrix} \right]\qquad (11)\]

\[X=\left[ \begin{matrix} { x }_{ 1 } & 1 \\ { x }_{ 2 } & 1 \\ { x }_{ 3 } & 1 \end{matrix} \right] \qquad (12)\]

\(X\)は正方行列ではなくなり、逆行列をもてないからです。

しかし、行列演算をうまく行うと、式(10)、式(11)、式(12)で構成された\(Y=XA\)から、一組の\(A\)を出すことができるのです。

その方法は\(A\)の前にある行列項を、行列演算して正方行列に変換することです。

式(5)の両辺に左から、\(X\)の転置行列\(X^T\)を乗じます。
\[X^TY= X^TXA\qquad (13)\]

\(X^TX\)は正方行列になるので、これが正則行列であるならば、逆行列\((X^TX)^{-1}\)が存在します。逆行列を式(13)の左から掛けると
\[(X^TX)^{-1}X^TY= (X^TX)^{-1}X^TXA\qquad (14)\]
右辺\(A\)の前の行列演算結果は単位行列\(E\)となるので、次式が得られます。
\[(X^TX)^{-1}X^TY = A \qquad (15)\]

このようにして一組の係数\(A\)が得られました。

このように逆行列を持てない行列に対し、転置行列を乗じて正方行列に転換し、逆行列を作成することを擬似逆行列と呼びます。

ううう~ん、擬似逆行列、恐ろしや、3点以上を直線式に代入しても、一つの直線式を算出することができたのです。

ところで、この直線は何を意味しているのでしょうか?

これこそが代入した全ての点の回帰直線、即ち、点から直線までの距離の二乗の和が最も小さい直線なのです。

図1.回帰直線

私はこの手法を知った時に、数学の美しさというか完璧さというか一貫性というか、そういうものに感動しました。

回帰直線は、最小二乗法を用いて算出することがよく行われていますが、その導出過程の考え方の煩雑さに対し、擬似逆行列では式(5)から\(A\)を算出するという非常にシンプルな考え方になっています。

カテゴリー
人工知能

人工知能は技術屋なら誰でも使えるようになる

人工知能と聞くと、技術屋であっても「自分には関係ない世界の話だ」とか、「理論が難しくて理解できない」、などと反応されるかもしれません。

しかし、人工知能は決して難しい技術ではありません。

基本的な数学が分かる人であれば、少し努力すれば、誰でも人工知能技術を理解し、利用できるようになります。また、技術屋であれば、自分でコーディングして、これを作ることも決して無理なことではありません。

基本的なことをしっかり把握すれば、後は慣れることで、深く理解することができます。

人工知能という技術は、人間のような問題処理能力を持つコンピュータソフトのことであり、最近、急速に進化してきました。

例えば、画像認識の分野では、ここ数年で飛躍的に性能を上げてきており、手書き文字が何であるかを認識したり、写真に写っている多数の対象物が何であるかをそれぞれ識別するまでになってきました。

また、音声認識などでも、とても高い認識率を出しており、その利用価値はますます高まっています。

人工知能の代表的な技術は、人工ニューラルネットワーク(神経回路網)です。

人間の脳の構造を真似てプログラミングされた計算手法ですが、人間の脳を真似た所が非常に重要で、その構造ゆえに、人間の脳のように、多種多様な問題に対応することができるのです。

これまでのプログラミングでは、多くの場合、適用先は限定的でした。しかし、ニューラルネットワークは幅広い問題に適用できるのです。

皆さんもご自分の問題の解決に、是非とも人口知能を利用してみてください。うまくいけば、人工知能の有能性に驚かれることでしょう。

コンピューターによる画像認識を今の仕事の改善に利用できないか、とか、大量の過去データを元にして、今後の傾向の予想したい、とか、あるいは今起きている事象から次に起こりうる事象を予想できるか、など、様々な問題の解決に利用できます。

是非とも、人工知能技術を使って、ものごとを論理的に捉え、有利に進展させることを考えられるとよいのではないかと思います。

このサイトでは人口知能の利用方法についてお伝えし、皆様がこの技術を使えるようになれるようにサポートします。

ただし、人工知能を用いれば何でも解決できる、というモノではないことは、理解しておく必要があります。まだまだ発展途上の技術です。