ココンの情報をいつでも、どこでも。ココントコ。

エンジニア 2018.06.26

プログラミングなし!Simbrainで学ぶニューラルネットワークの基礎 -後編-

AI戦略室の坂本です。
前回のエントリの続きです。
『プログラミングなし!Simbrainで学ぶニューラルネットワークの基礎』
お付き合いください。

目次

異なる分類を学習させてみる

さて、前回のエントリでは、ランダムに作成した30個の点を二つの領域へと分類しました。
今回の最初の例では、同じ30個の点を、前回とは異なる領域へと分類してみることにします。

今回分類する点の範囲は上の図のようになります。さて、このような分類は可能でしょうか?
まずは前回作成したものと同じニューラルネットワークに、上の図のような分類を学習させることにします。
なおここでも、前回と同じように
https://github.com/cocon-ai-group/simbrain-handson-makedata
にあるプログラムを使用して、学習に使用するデータファイルを作成出来ます。

Simbrainでは学習の進展がグラフで表示されますが、先ほどと異なっていることに、損失の値が一定以上減らずに、グラフが平行線になってしまいました。


データを分類できているか、実際に入力データに対する出力値を確かめてみると、上のように明らかに分類が出来ていません。

なぜ動かないのか考える

前回のエントリと同じように学習させたにもかかわらず、なぜ今回は分類が上手く出来なかったのでしょうか?
前回のエントリと同じように、ニューラルネットワークの動作を数式でもって考えてみることにしましょう。なお、ニューラルネットワーク内の処理の数式は前回のエントリに記載されているので、そちらも参照してください。

ここで使用したニューラルネットワークでは、学習パラメーター(接続の重み)の数は4個でした。そして、ニューラルネットワーク内の演算は連立方程式で表現する事が出来ます。
学習パラメーターをa,b,c,dとすると、ニューラルネットワークの学習は、入力値に対して常に正しい出力値を返すa,b,c,dを発見することに相当するのですが、図のように×型に範囲を指定すると、正しい出力値を返すa,b,c,dの組合せは存在できません(連立方程式と前回のエントリにあるSigmoid関数のグラフをよく眺めてください)。

層を増やすモチベーション

しかしそれでは単なる線形分析と等値ですので、×型の範囲を分離できるニューラルネットワークを考えてみましょう。
まずは入力層と出力層の2層だけではなく、5つの人工ニューロンを持つ中間層を間に挟んだ3層のニューラルネットワークを作成してみます。

このようにニューラルネットワーク内の層を増やしてゆくとなると、ニューラルネットワーク内に含まれている全ての演算を連立方程式にするのは、原理的には可能であっても人力で計算するのは難しいことが解ると思います。
なので数式としての解析は行いませんが、同じように機械学習させることで、モデルがどのように動作可能かを判断することは出来ます。

上の図のように、3層のニューラルネットワークでは、まだ×型の範囲を分離することは出来ないようです。


さて、それではより層の数を増やしてゆけば、どうなるでしょう?
ハンズオンなので、ここでは正解は書かずに実際に試して貰うことにしますが、層の数を増やしてゆけば、30個の点を全て正しく分離できるモデルが作成出来るはずです。

画像認識ニューラルネットワークの学習

と、ここまでは以前雑誌記事に書いた内容なのですが、ここからは追加で、もう少し見栄えのするクラス分類ニューラルネットワークの学習を行います。
まずは、入力層として64個、出力層として10個の人工ニューロンを持つ4層の順伝播型ニューラルネットワークを作成します。

64個の入力値は、下の図のように8×8の升目状に配置されるので、このニューラルネットワークには8×8ピクセルの解像度を持った画像を入力することが出来ます。
ニューラルネットワークの初期化として全ての重みデータをランダムに設定します。

学習させるデータは、同じGitHub上にあるプログラムから作成出来ます。
これはMNISTデータの一部をcsvファイル化したもので、0から9までの10個の数字を、8×8ピクセルの画像にし、64個のデータとしてcsvファイルに保存したものです。

ニューラルネットワークの学習方法はこれまでと同じで、前回のエントリに書いてある手順そのまま、読み込むファイルを「digit.csv」と「digit-class.csv」としただけです。

画像認識ニューラルネットワークを試す

ニューラルネットワークの学習を実行したら、実際に入力層に値を書き込んで、数字の認識を試してみましょう。
Simbrainではマウス操作で人工ニューロンの値を設定できるので、まるでペイントソフトで絵を描くように直接入力層へとデータを入力することが出来ます。

入力層に適当な数字を設定したら、スペースキーを押してニューラルネットワークに情報を伝播させます。

すると、出力層の人工ニューロンに入力に対応する値が設定されます。
ニューラルネットワークの学習と、入力層の値が適切であれば、出力層の状態は入力した数字に対応する人工ニューロンが赤くなり、手書き数字を認識している状態になるはずです。

以上でSimbrainを使ったニューラルネットワークを触ってみるハンズオンは終了です。
いかがだったでしょうか?Simbrainはあくまで学習用のツールであり、本格的な大きさのニューラルネットワークを扱うには、速度の面でも機能の面でも物足りない物があります。
しかしここで紹介したように、プログラムのコードは一切使わず、画面上の操作のみで直感的にニューラルネットワークを扱えるので、初期的なニューラルネットワークの学習には最適なのではないでしょうか。
今回のようなハンズオン、セミナー、講演などの社外に対する実施依頼がありましたら、AI戦略室までお問い合わせください。

弊社の社内勉強会の様子

お問い合わせはこちらまで。

イベント 2018.12.06

手に汗握る!デジタルイラストグランプリ開催

Panda Graphics株式会社の塩田です! Panda Graphicsは、主にスマートフォン向けのソーシャルゲームを中心…

エンジニア 2018.11.14

競馬予想AI再び -後編- 〜アンサンブル学習編〜

AI戦略室の坂本です。 あまりに気合いを入れて作成すると、社内での自分の評価が「競馬予想の人」になって…

エンジニア 2018.11.14

競馬予想AI再び -前編- 〜LambdaRank編〜

AI戦略室の坂本です。 元はといえば忘年会の余興から始まった競馬予想AIですが、ブログ記事のアクセス数も…