LoginSignup
10
12

N次元出力のED法について考えてみた

Posted at

ED法についてはこの辺から

一次元

天下り的になりますが、今後次元を増やしたときの構成の仕方を考えるために、一度一次元で改めてED法を構成してみます。
ED法の特徴の中から、「重み(シナプス)には、出力を上げるためのものと、出力を下げるためのものがあり、それぞれに正の重みをもつものと負の重みを持つものが存在する」「学習は誤差に従いシナプスの重みの絶対値を増やすことにより行う」という点をもとに作ってみます。

各種シナプスとその後ろに来るニューロン、そこから辿り着く出力を用意します。
ニューロンの種類はまだ確定させず、ニューロンと出力の間は複数のシナプスやニューロンが存在できるものとします。
image.png

モデル中の計算は、重み付き和と、単調増加の活性化関数のみのため、シナプスの重みの絶対値を増やすと、そこから通るルートにあるシナプスの正負の数により、出力が上がるか下がるかが決定します。
出力を上げたい場合、自身とその後通るシナプスの重みはマイナスが偶数個必要で、
出力を下げたい場合、自身とその後通るシナプスの重みはマイナスが奇数個必要です。
自身を除くと以下の通りになります。
image.png

続くルートが同一のニューロンは同一視できるため、それぞれaとbと文字を振っておきます。
image.png

続いて、ニューロンに注目してまとめます。
image.png

ニューロンの後ろに、シナプスを用意します。
ニューロンから伸びるシナプスは、+の重みをもつものと-の重みをもつものの2種類のみ存在できます。
image.png

今度は、ニューロンの種類に注目して、必要なマイナスの重みを持つシナプスの個数を数えます。
image.png

ここから、未分類のシナプスの種類を確定させることができます。
image.png

最後に、ニューロンの名前をa→+、b→-とします。
image.png
これにより
出力を上げたいときは、接続元が+のニューロンであるシナプスの重みの絶対値を増やす
出力を下げたいときは、接続元が-のニューロンであるシナプスの重みの絶対値を増やす
ようにすれば良いことが分かりました。
image.png

二次元

1次元目をx、2次元目をyとします。
二次元でED法を構成するためには、いくつか方法があります。

方法その1

それぞれの次元で独立したED法のモデルを立てます。
シナプスに注目して考えると、
xの出力のみを上げるシナプス
xの出力のみを下げるシナプス
yの出力のみを上げるシナプス
yの出力のみを下げるシナプス
の4種類できます。
それぞれ[1,0][-1,0][0,1][0,-1]とします。
それぞれに+の重みをもつものと-の重みを持つものが存在するため、シナプスは合計8種類あります。
[1,0][-1,0]はxの出力のみに辿り着き、yの出力に接続されてはいけません。
[0,1][0,-1]はyの出力のみに辿り着き、xの出力に接続されてはいけません。
よって[1,0][-1,0]のモデルと[0,1][0,-1]のモデルは独立です。
それぞれのモデルは1次元の場合と同様に組めます。
[ 1, 0]は「xとy両方上げたいとき」と「xを上げyを下げたいとき」
[-1, 0]は「xとy両方下げたいとき」と「xを下げyを上げたいとき」
[ 0, 1]は「xとy両方上げたいとき」と「xを下げyを上げたいとき」
[ 0,-1]は「xとy両方下げたいとき」と「xを上げyを下げたいとき」
に重みの絶対値をあげます。
ニューロンの名前は、
xの+を( 1, 0)
xの-を(-1, 0)
yの+を( 0, 1)
yの-を( 0,-1)
とします。
image.png

方法その2

xとy両方に反応するシナプスを用意して構成します。
xとy両方上げるシナプス
xを上げyを下げるシナプス
xを下げyを上げるシナプス
xとy両方下げるシナプス
の4種類できます。
それぞれ[1,1][1,-1][-1,1][-1,-1]となります。
+の重みをもつものと-の重みをもつものがあるため計8種類です。
1次元のときと同様の方法でED法を構成してみます。
image.png
image.png
同じルートが続くニューロンに同じ名前を与えます。
image.png
image.png
ニューロンに着目してまとめ、そこから伸びる+と-のシナプスを用意し、後ろに続くマイナスのシナプスの個数を数えます。
image.png
image.png
ニューロンの後ろのシナプスを分類します。
image.png
image.png
aを(1,1)、bを(-1,-1)、cを(1,-1)、dを(-1,1)として、図を整理します。
image.png
中間層の最終層から出力への接続は、それぞれの次元の+に対応するニューロンから値を持ってくるようにします。
(1,1)(-1,-1)のモデルと(1,-1)(-1,1)のモデルは中間層の最終層まで独立です。

方法その3

その1とその2で作ったニューロンとシナプスを両方使います。

その2で作ったニューロンからその1で作ったニューロンへ接続することが可能です。
image.png
ただし、分岐せずに接続すると、その2のニューロンが実質その1のニューロンと同じものになります。
image.png
また、その2のニューロンからその1のニューロンへ接続するシナプスは、その1のものもその2のものも使えます。
image.png
その1のニューロン同士を接続するシナプスにその2のものを使っても破綻はしません。
image.png
シナプスの直接の接続元だけでなく、根の方を追っていって決めても良いかもしれません。
image.png
合流があるとややこしくなりますが。
image.png
さらに言えば、(1,1)と(-1,-1)のような、その1やその2では対になっていたニューロンを、対に設置する必要がなくなる気がします。
(1,0)→(1,1)のような、情報が増える方向で接続しなければ、ランダムに配置しても良いでしょう。
ただし、「xとy両方上げたいとき」「xを上げyを下げたいとき」「xとy両方下げたいとき」「xを下げyを上げたいとき」それぞれに対応するシナプスが1つ以上ないと、学習が止まってしまう恐れがあります。

三次元

二次元の方法その1と同様にすると、(1,0,0)(-1,0,0)と(0,1,0)(0,-1,0)と(0,0,1)(0,0,-1)の独立した3つのモデルができます。

方法その2に習えば、(1,1,1)(-1,-1,-1)と(1,1,-1)(-1,-1,1)と(1,-1,1)(-1,1,-1)と(-1,1,1)(1,-1,-1)の独立した4つのモデルができます。

他にも、(1,1,0)(-1,-1,0)と(1,-1,0)(-1,1,0)と(1,0,1)(-1,0,-1)と(1,0,-1)(-1,0,1)と(0,1,1)(0,-1,-1)と(0,1,-1)(0,-1,1)の独立した6つのモデルを作ることもできます。
これは、2つ次元を選んで射影をとったモデルと解釈できます。それぞれの構成は、欠けた次元を無視して二次元の方法その2そのものになります。

これらを纏めると、それぞれの次元で+をとるか-をとるか、あるいは選ばないかの3択があり、その組み合わせは3^3通りで、全ての次元を選ばない1通りだけは使えません。全ての次元の正負が逆転したものが対になり独立したモデルを構成できます。よって、(3^3-1)/2=13個のモデルが作れます。

方法その3に習うなら、上記の26種(13対)のニューロン、シナプスを組み合わせられます。
(1,1,1)→(1,0,0)のように、一気に2次元分情報を減らす接続もできます。
(1,1,1)→(1,-1,0)のように情報が減ってない部分で符号がそのままでも全て反転でもない接続はできません。
(1,1,1)からは
( 1, 1, 1)、( 1, 1,0)、( 1,0, 1)、(0, 1, 1)、( 1,0,0)、(0, 1,0)、(0,0, 1)に正の重みをもつシナプスで
(-1,-1,-1)、(-1,-1,0)、(-1,0,-1)、(0,-1,-1)、(-1,0,0)、(0,-1,0)、(0,0,-1)に負の重みをもつシナプスで
接続できます。

N次元

三次元の場合と同様に、それぞれの次元で+をとるか-をとるか、あるいは選ばないかの3択があり、その組み合わせは全ての次元を選ばない場合を除いて3^n-1通りあるため、3^n-1種のニューロンとシナプスができます。
二次元の方法その3や三次元での説明の通り、次元が増える方向でなく、符号がそのままでも全て反転でもない接続でもなければ、自由に組み合わせられます。
出力の変え方がそれぞれの次元を上げたいか下げたいかの2^n通りあり、それぞれに対応するシナプスが1つ以上あれば学習ができるものと思われます。
出力の中に関係の深い成分が存在していることがわかるなら、モデルの工夫の余地はあるかもしれません。
例えば、MNISTなら、似た文字のみを扱う部分を作ってあげることで、判別の難しいものに優先的にリソースを回せるでしょう。
ただ、一般に対応できるモデルを組むなら、全ての次元に対応する2^(n-1)個の独立したモデルから、1つの次元にのみ対応するn個の独立したモデルに接続するように作るのが結局良い気がします。
あるいはランダムに作るかでしょうか。

最後に

実装してないので、机上の空論で終わってますね。本当に良くない。
しかも二次元の方法その3からは理論としてもかなり雑。
一応何次元でも対応できるような理論になりましたが、次元が増えると指数関数的にシナプスの種類が増える等、かなり面倒なモデルのため、ED法は一次元か二次元に抑えて、BP法と組み合わせる方が良い気がします。
逆伝播層1→拡散層→逆伝播層2となっている部分で、逆伝播層2の入り口まで逆伝播してきた誤差を拡散層全体と逆伝播層1の出口に拡散するようにすれば、既存のモデルに容易に組み込める気がします。
この方法なら、BP法の最先端の複雑なモデルの一部分のみED法に置き換えて、学習コストを下げられるでしょう。
以下の記事でやっているのがそういうことなのでしょうか(ちゃんと理解できてない)。

2つのシナプスやニューロンが対になって独立する、というのは重みが+と-の二種類しかとれない所に原因がある気がするので、ニューロンの出力やシナプスの重みを複素数や四元数で持てるようにするなど、この記事とは別の方向性での工夫はまだできる気がします。

10
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12