gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

ニューラルネットワークによる画像パターン作成を続ける

2018-06-24 08:17:22 | ブログ
 6月10日に「ニューラルネットワークを用いて画像パターンをつくる」のブログを公開した後、そこで紹介した画像パターンの例では何か物足りない感じがつきまとっていた。

 Excelの散布図では、微妙な画像パターンを表現できないことが分かったが、点描による画像パターンらしく、点密度の高い領域と点密度がまばらな領域とが共にあるような画像パターンが欲しいと思った。典型的な例を挙げれば、正規分布のように山の頂上付近で点密度が高く、山の裾野の方に下るに従って点密度がまばらになるような画像パターンである。

 そこで、Excelの使用を前提とし、正規分布型の画像パターンがどの程度まで可能なのか作図してみることにした。Excelの正規乱数を使えば、正規分布になるような乱数を発生できるという。

 半径rが1の円を考える。r<0.2の円領域を空き領域とする。0.2<r<1の領域について外輪領域と内輪領域の面積が等しくなるような分割円周のrを計算すると、r=0.721になる。

 以下、0.2<r<1の範囲のrについて施す処理のステップをニューラルネットワークで表現すると、下図のようになる。



 まず、0.2<r<1の範囲の一様乱数を発生させ、入力層のI1とI2のユニットに入力する。I1は、rが0.2<r<0.721の範囲であれば、正規乱数r’を発生させる。正規乱数の平均値は、内輪領域のrの中央値である0.4605である。また、標準偏差シグマは、3シグマが0.721-0.4605になるような値とした。

 I2は、rが0.721<r<1の範囲であれば、この範囲の正規乱数r’を発生させる。平均値は、外輪領域のrの中央値である0.8605である。また、標準偏差シグマは、内輪領域のシグマと同じとした。これによって、外輪領域と内輪領域の正規分布は同じ形の関数となる。

 第1中間層は、ユニットI1,I2からのデータr’を入力するM11,M12の2つのユニットから成る。M11,M12は、r’に基づいてxの一様乱数を発生させる。xは、(0,0)から(x,y)に達する長さr’のベクトルのx軸と成す偏角(シータt)を媒介変数として表現される。シータtは、M11,M12とは別の列で0<t<2パイの一様乱数として発生させたものである。(2パイは、2*PI()と記述できる)。すなわち、x=r’costで与えられる。

 M11は、I1からのデータを入力し、0.2<r’<0.721ならば、上記によるxの一様乱数を出力する。M12は、0.721<r’<1ならばxの一様乱数を出力する。

 第2中間層は、ユニットI1,I2からのデータr’を入力し、r’に基づいてyの一様乱数を発生させるM21,M22の2つのユニットから成る。yはy=r’sintで与えられる。ここでシータtはM11またはM12で参照した同じtを参照する。M21は0.2<r’<0.721、M22は0.721<r’<1の条件がつく。

 第3中間層は、第1中間層と第2中間層のデータを参照するM31,M32の2つのユニットから成る。M31は、M11,M21の両データが0でなければ1を出力する。M32は、M12,M22の両データが0でなければ2を出力する。

 なお、関数によって発生させた一様乱数と正規乱数は、その値を貼り付けて固定した上で参照している。

 出力層Oは、選択された(x,y)の値を出力する。すなわち、xとしてM31が1ならM11を出力、1でなければM32が2であるからM12を出力する。また、yとしてM31が1ならM21を出力、1でなければM32が2であるからM22を出力する。

 下図は、Excelを用いて上記ニューラルネットワークを表形式に展開し、計算した結果である。



 内輪山と外輪山の点密度を比べると、どうしても内輪山の点密度が高く、外輪山の点密度が低くなる。

 入力する一様乱数rの件数を2500件程度にすると、外輪山の尾根がつながるようになるので、r方向に正規分布型と言えるような(x,y)点の分布となる。

 図の(x,y)点は、3回の乱数発生を重ねて決まるものであり、大局的には予想通り大数の法則に従うような結果となるが、内輪山や外輪山の裾野が不規則な形になるとともに、単独の点の散らばりが生じるなど、別の乱数発生では二度と再現できない画像パターンとなる。

 参考文献
 伊庭斉志著「進化計算と深層学習」(オーム社)

ニューラルネットワークを用いて画像パターンをつくる

2018-06-10 07:45:03 | ブログ
 (x,y)平面上にある何らかの形状をした閉曲線で囲まれる図形の面積を求めたいとする。このとき、モンテ・カルロ法という技法を使うことができる。この閉曲線に外接する正方形または長方形を考える。この閉曲線は、関数式で表現できるものとする。

 いまこの外接図形の範囲にある乱数列をとり、そのうち、二つずつを組とする。それらを(xi,yi),i=1,2,...としよう。この乱数の組(xi,yi)は、(x,y)平面上で一つの点Piに対応する。

 多数の乱数の組をとれば、多数の点Piが得られ、それらは、この外接図形の内部に、ほぼ一様に分布するであろう。全部でN個の点を得たとする。そのうち、この閉曲線の内部にあるものの数をMとする。そうすると、閉曲線図形の面積/外接図形の面積=M/Nの式から閉曲線図形の面積の近似値を求めることができる。

 閉曲線の内部にある点は、その関数を不等式で表現したものによって判定できる。つまり、点Pi:(xi,yi)が与えられたとき、その点が閉曲線の内部にあるか外部にあるかを判定できる。このようにして、点Piが閉曲線の内部にあるときだけ実際の点を打つことにすれば、この閉曲線図形の画像パターンを点描することができる。

 閉曲線図形が複数個あるときには、関数の不等式も複数個になるため、ニューラルネットワークを用いて画像パターンを構成する各点の採否を計算する手法が有効と考える。



 図は、そのようなニューラルネットワークのユニット構成の一例を示す。乱数の組(x,y)が入力層のユニットIに入力される。ここでx,yは-1から1までの範囲の一様乱数である。ユニットIは、=SQRT(x^2+y^2)の計算式によって原点を中心として点(x,y)を通る円の半径rを計算する。

 第1中間層は、ユニットIからのデータを入力するM11,M12,M13の3つのユニットから成る。M11は、rが0.8<r<1.0の範囲にあれば1を、そうでなければ0を出力する。M12は、rが0.4<r<0.6の範囲にあれば1を、そうでなければ0を出力する。M13は、r<0.2であれば1を、そうでなければ0を出力する。第1中間層は、入力データ(x,y)をrによって3つの領域に分けるので、一般的にはクラスタリングと呼ばれる手法である。

 第2中間層は、M21とM22の2つのユニットから成る。第2中間層は、M11,M12で選択された各領域について、より詳細な画像パターンを施す。ここでは、単純な例とするために、さらに領域分割を進めることにした。M21は、M11からのデータを入力し、値が1であって、(x>0,y>0)または(x<0,y<0)であれば1を、そうでなければ0を出力する。M22は、M12からのデータを入力し、値が1であって、(x<0,y>0)または(x>0,y<0)であれば1を、そうでなければ0を出力する。

 出力層のユニットOは、M21,M22,M13からのデータを入力し、いずれかのデータが1であれば、元の入力データ(x,y)をそのまま出力し、すべてのデータが0であれば、データ(0,0)を出力する。

 以上のようなニューラルネットワークを介する計算によって、選択された領域にだけ実際の点が点描されることになる。

 下図は、Excelを用いて上記ニューラルネットワークを表形式に展開し、計算した結果である。



 グラフ表示にはExcelの散布図を用いている。乱数組の数Nは、5,000ほどである。なお、M11によって選択されなかった空き領域と、M12によって選択されなかった空き領域には、別途各々3点を表示し、空き領域であることを表現している。

 Excelの散布図では、各点(x,y)を決められたサイズをもつマーカーで表示するため、微妙な画像パターンを表現するには適しないことが分かる。また、関数の不等式は、IF関数で表現している。このため、一つのセルの中で複数のIF条件をつけようとすると、最初のIFの「偽の場合」に続くIF条件が入れ子構造になり、ステートメント形式のプログラミング言語を用いる場合に比べて、見やすさの点で難点がある。

 以上のように、Excelを用いて本題の画像パターンをつくれることが分かったが、アートと言えるような本格的な画像パターンをつくるには、ステートメント形式のプログラミング言語を用いる必要があるだろう。

 また、参考文献で示唆するように、周期的な画像パターンをつくるには、三角関数などを用いることができる。しかし、計算も複雑となり、それなりのノウハウの蓄積が必要となるだろう。

 参考文献
 伊庭斉志著「進化計算と深層学習」(オーム社)
 藪下信著「計算物理(I)」(地人書館)