HOME > 画像分類(中級)-1(MNIST) > 画像分類(中級)-2(MNIST) > 画像分類(中級)-3(MNIST)

05.03 画像分類(中級)-3(MNIST)

今回は自分の勉強のための覚書ですのでNNCのみ、やってみたい方は読み飛ばしていただいても構いません。

では以前の復習ですが、人間の神経系を模したアルゴリズム「パーセプトロン」は、複数の入力に対し”重み”を付加し、「バイアス」というものを加えることによって”答えが出てくる”仕組みでした。ちなみに”答えが出てくること”を「発火する」といいます。この仕組みを計算式で表すと下記のようになります。

y = { 0 ( w 1 x 1 + w 2 x 2 θ ) 1 ( w 1 x 1 + w 2 x 2 > θ )




しかし「バイアス」も「1つの入力値」として考えると、1つの関数h()にB、x1w1、x2w2の入力信号が入る形となり、下記のように表すことができます。

     y = h(b + w1x1 + w2x2)

関数h()は「発火」をもたらすための関数で、内容はパラメータの総和が変換されて出力値が出てくる仕組みであるといえます。
( x ) = { 0 ( 0 ) 1 ( > 0 )



【中間層】

★ 活性化関数

この発火をもたらすための関数h()は「活性化関数(activation function)」という名前がついているというところまでを以前やりました。今回自分で1から作成するにあたり「中間層プロパティ」で「活性化関数の指定」という項目が出てきました。っということは、ここで活性化関数は複数存在していて、今回は、下記の設定にしました。

中間層:  活性化関数は「ReLU関数」(HPでは取り上げなかった)

まずは、活性化関数の種類と、どのように動作するかを見ていきましょう。




★ ステップ関数

ちょっと余談ですが、今までのコンピュータの世界(量子コンピュータは別)は0と1のみを扱っているので0.5ビットなるものは存在しません。当然記憶するメモリーやコンピュータ内も当然ながら0と1のように見えます。しかし電気的に見た時必ずしも、0Vが”0”で 1がnV(ボルト)ということはありません。”ある境”より以上を”1”、以下を”0”とし、その境を俗に”閾値(しきいち)”といいます。この場合は0.5ビットは存在しないため、値は”突然
変化
”します。
03.02パーセプトロン」でビット論理積(AND C++だと”&”)、論理和(OR C++dato”|”)を実施することができると言ったように前述と同じようにパーセプトロンの活性化関数は”閾値(しきいち)”を境にして0と1とに”突然変化する関数”であると言えなくはないのです。このように変化させる活性化関数を「ステップ関数」といいます。

Pythonを用いてステップ関数の数値をグラフ化すると下記のような動作となります。


【ステップ関数のグラフ】





★ シグモイド関数

先日AKB柏木由紀の判別を実施した際写真が小さいために人間でも、「そうか」「そうでないか」を判別しようとすると、「多分そうだ」とか「多分違う」という曖昧な判別してしまう場合があるかもしれません。そんなときどうするでしょうか?
沢口靖子がやっている科捜研ドラマだと「柏木由紀の可能性 98%」のように確率で出てきますよね。
ドラマと同じように0か1かではなく、”その途中”を作り、発火までを数値で表す「じわっと変わる活性化関数」を作り出したわけです。

つまり今回の 中間層プロパティが選択させようとしたのは、「突然変化する関数」か「じわっと変わる活性化関数」を使用するか、どのように変化させるのかを決めるためのものなのです。中でも「じわっと変わる活性化関数」は複数あり、これを説明していきます。

最初は機械制御などでよく使用されますオーソドックスな関数を紹介します。
シグモイド関数(sigmoid function)といい、「じわっと変わる活性化関数」の代表格として紹介されることが多い関数です。これはGGEも含めてですが、数式を見ると虫唾が走るということや何のことやらさっぱりわからないという方も見えると思います。こう言うとき一番わかりやすいのは結果をグラフでみることだと思います。Pythonで数値シミュレーションした際のグラフ見てみたいと思います。 だいたい「じわっと変化する」のを想像すると下記グラフの青色の部分ではないでしょうか。

このシグモイド関数な中身は下記のような式で表されています。

h(x) = 1 1 + e - x


【シグモイド関数のグラフ】



★ ReLU関数

次にご紹介するのは今回使用しましたReLUで、「Rectified Linear Unit」の略です。
なにやら英語で書くと仰々しい名前が付いた関数に思われますが、直訳すると「直線に調整するユニット」ということになり、グラムを見ても明らか、式で書くと下記のように0以下は0、それ以上は数値のままという関数です。一時期はシグモイドが多く用いられていたようですが、今回も使用したように最近ではこの方式が流行りのようです。

h(x) = { x ( x > 0 ) 0 ( x θ )

【ReLU関数のグラフ】



結論から言ってしまえば

活性化関数はじわっと変化させるための関数」で、方法は複数あるということになります。





【出力層】

★ ソフトマックス関数

次に「出力層」に移ります。色々難しい用語や数式が出てくるのでさっぱりわからないという方もいると思いますが、数式だけ目をつむってみてみると、実は非常に単純なことをやっています。出力層もまた同様で、式で書くと下記のようになります。
k = e a k i = 1 n e a i
このややこしい式は目をつむって、この計算式を計算したらどうなるかに目を向けてみましょう。

以前に行ったAKB48の例題をもっと複雑にして、柏木由紀・指原莉乃・大家志津香の3人の判別を行うことになったとしましょう。
出力層が内部で扱う値は中間層のバイアスを含む、各入力値x重みの総和であるために結果は0~1ではないじゃないですか。

そこで登場するのが、この「ソフトマックス」ということになるのです。 以前と同じように、この計算式にランダムな数値を入れてやってみると、柏木由紀・指原莉乃・大家志津香の3人に関する入力値が仮に(4, 1.1, 0.3)の場合、この計算式に当てはめると結果は一番右の欄(黄色枠内)になります。 

柏木由紀 4 0.926143
指原莉乃 1.1 0.050959
大家志津香 0.3 0.022898

結果どうなったかというと、次に黄色枠内を全部加算します。

    0.926143 + 0.050959 + 0.022898 = 1.0

要するに全てを加算すると”1”となるように変換されたということになり、沢口靖子科捜研を思い出してください。

lこの値を100倍した値は確率となり、「柏木由紀の確率 92.61%」「指原莉乃の確率 5.09%」「大家志津香の確率 2.2%」となり、「この写真は92%の確率で柏木由紀」だと判断されるわけです。

もうひとつ言うなら「判断」をした基準は「数値の大きさ」によって決めたということになり、ソフトマックスは確率を求めるための関数と言い換えることもできます。




【学習】

今回作成した事例でも最後「Trining」と「Evaluation」と2つを実施しましたが、「Trining」実施した場合の結果は「Epoch」=データの数をこなしていくと「Error」が少なくなっていっています。上のニューラルネットワークを通ると、この場合正解がフォルダー名とラベルで分かっているため、正解・不正解により重み等のパラメータを探索します。例えば「柏木由紀か」「そうでないか」といったような「指標」を持ち判断するわけです。このような指標を「損失関数(loss function)」といいます.





従ってトレーニング中というのは正解を元に間違った場合「反省を促されます」。
人間の場合も間違いの度合いによって叱られる→警察へ行く→裁判を受ける→刑務所へ入る→死刑になるといったように段階があります。NNCも同様に「教師が教えたこととの間違いに尺度」を持っています。仮にこれを「誤差」と呼ぶなら、この誤差を小さくするようにパラメータを調整します。これが「学習」だといえます。 一旦トレーニングが終了すると蓄積したパラメータが学習結果となり、これを使用し「評価」を行います。



★ 交差エントロピー

先に説明した「損失関数」には「二乗和損失関数」「交差エントロピー損失関数」という代表する2つがあります。例えば「二乗和損失関数」の場合、標準偏差や偏差値の考え方と同じで標準偏差の場合は全体の平均値との差分の二乗を累積していきますが、こちらは教示データとの差分の二乗を蓄積していきます。今回使用した「交差エントロピー」というのは、名前からして難しいので詳細な解説は分からないので飛ばして、前回同様に計算式から出た答えを元に解説します。計算式は下記です。
E = - i = 1 n t k log e ( y k )
この式で yk はニューラルネットワークの出力、tk は教示データとなります。
これをエクセルに入力して、グラフを出すと次のようなグラフになります。

すると、tkは正解ラベルとなるものだけ1で、それ以外は0、とすると、ニューラルネットワークの出力値がが大きければ0になるし、小さければ値は大きくなることになり、正解との誤差を数値で示したことになるのです。


【交差エントロピーのグラフ】
 



これを繰り返すことによって、NNCは手書き文字を短期間に覚えたのでした。





【参考文献】
リックテレコム 足立悠著
ソニー開発のNeural Network Console入門

オライリー・ジャパン 斎藤 康毅著
ゼロから作るDeep Learning ――Pythonで学ぶディープラーニングの理論と実装

HOME > 画像分類(中級)-1(MNIST) > 画像分類(中級)-2(MNIST) > 画像分類(中級)-3(MNIST)