課題 3A: 制約付きボルツマン機械(RBM)と連想記憶モデル

神経回路網特論
2014 年 5 月 18 日
更新 2014 年 6 月 9 日
課題 3A: 制約付きボルツマン機械(RBM)と連想記憶モデル
図 1: 制約付きボルツマン機械
ボルツマン機械は,教師なし学習(自己組織)のモデルであるが,教師あり学習(例題か
らの学習)や連想記憶モデルとしても機能する.さらに,マルコフ確率場でもある.このよ
うに,いくつかの顔をもつ.このモデルは,1983 年頃,G. E. Hinton らにより提案された
が,学習に非現実的な時間がかかることから,実用化されることはなかった.30 年経った
現在,制約付きボルツマン機械(Restricted Boltzmann Machine, RBM)とよばれるモデ
ルが,Google 社,Microsoft 社,Facebook 社などで活発に利用されている.
ここではそのモデルを紹介する.ボルツマン機械は与えられた確率分布を近似する機械で
あり,この意味では,自己組織のモデルである.紹介する順序としては,不自然になるが,
まず,連想記憶モデルにおける,記憶パターンの学習に利用することを考えてみる.具体的
には,自由に走らせると(外部から入力を与えず素子の状態を更新すると),m 個の興奮パ
ターンだけが出現するような回路をボルツマン機械に学習させる.学習後,ボルツマン機械
ということは忘れ,回路を確定的に動作させる(確定的な状態更新).記憶させたパターン
の想起特性や記憶容量を,相関型連想記憶モデル(課題 1)と比較し,ボルツマン機械の学
習性能が高い(?)ことを確認することがこの課題の目的である.
30 年前に提案されたボルツマン機械がどうして実用にならなかった.まずこの理由を考
えてみよう.ボルツマン機械の学習は 2 つのフェーズからなる.入力信号が与えられている
時の Hebb 学習を第 1 フェーズ,入力はなく,回路の状態が自由に動いている時の反 Hebb
学習を第 2 フェーズと,よぶことにする.いま,隠れ素子のない,素子数 n = 100 の単純
1
な回路を考えよう.Hebb 学習とは,入力信号に応じて,i 番目と j 番目の素子間の結合係
数 wij が,それら 2 つの素子が同時に興奮した頻度に応じて増加することをいう.これは簡
単だ.一方,反 Hebb 学習は簡単でない.現実的な時間で,2 つの素子が同時に興奮した頻
度を精度よく計算することが難しい.原理的には 2n 個の状態すべてに遷移する可能性があ
るが,現実的な時間では辿り着かない状態がたくさんある.回路の状態は,ある時間 t で,
かならず 1 個の素子しか状態を更新しない.回路には,出現確率がほぼ 0 の状態が多数ある
ため,複数の出現頻度の高い状態(x1 , x2 , · · · )があっても,いったん出現頻度の高い状態
(たとえば x1 )に遷移すると,そこから別の状態(x2 )に遷移するのは難しい.
すべての素子が互いにつながっている相互結合型の回路を考えよう.素子が n 個あると,
対称結合で自己結合はないので,各素子のしきい値を合わせると n(n + 1)/2 個のパラメー
タ(結合係数 w)をもつ.回路には 2n 個の取りうる状態があるが,ボルツマン機械ではパ
ラメータ w の値で,そのそれぞれの状態の出現確率が定まっている.回路の学習とは,こ
の w の値を変えることである.gij を i 番目の素子と j 番目の素子が同時に興奮した頻度と
しよう.実際に,各素子を確率的に動作させ,回路を自由に動かせば gij の値が推定できる.
何回くらい,回路の状態を更新する必要があるだろうか.n = 100 の小さな回路を考えてみ
よう.状態の総数は 2100 = 210
10
≈ 103
10
= 1030 である.学習するには,それぞれの状態に
最低 1 回くらいは遷移して欲しい(?)と思うと,10 億(109 )回,状態を更新する程度で
はダメである.要するに,ボルツマン機械は,数学的には見通しが良いものの,n = 100 程
度でも実際的には使えない.
この欠点が深刻でないのが制約付きボルツマン機械である.具体的に,2 層からなる回路
を考えてみよう(図 1).入力層(第 1 層)には n1 = 1000 個,隠れ層(第 2 層)には n2 = 10
個,各ニューロンのしきい値用に常に興奮する細胞を 1 個,合計 n = (n1 + n2 + 1) 個の素
子からなる回路を考える.ここで,同一層内の素子間に結合はないことを仮定する.これが
制約付きとよばれる理由である.回路の定常分布が
p(x; w) = c exp{−E(x; w)/T }
(1)
の形で書けることは,先の課題で説明した.ここで T は温度と呼ばれるパラメータで,こ
こでは 1 と思っていてよい.同一層内の素子間に結合がないと E は次のように書ける.
E(x; w) = −
∑
wij xi xj
(2)
i<j
n∑
1 +n2
= −(
w0i xi +
n2
n1 ∑
∑
i=1 j=1
i=1
2
wij xi xj )
(3)
であり,c は
∑
p(x; w) = 1 とするための正規化定数
x
c = c(w) =
∑
1
˜ w)/T }
exp{−E(x;
,
(4)
˜
x
w はパラメータ w = (w01 , · · · , wn1 n2 ) である.パラメータ(値が常に 0 の結合係数は除く)
は全部で n1 n2 + n1 + n2 個ある.これを相互結合型の回路とみると,結合係数の半分以上
が値 0 をとる(図 2).
図 2: 結合係数の構造
【実験手順】
1. 記憶パターン x1 , · · · , xm を生成する.ここで,各要素は独立に,それぞれ確率 0.5 で
0, 1 をとる.例:x1 = (x11 , x12 , · · · , x11000 ) = (0, 1, 1, 0, 1, 1, 0, 0, 0, · · · )
2. 回路のパラメータ W = {wij } を初期化する.初期値は例えば [-0.1:0.1] の一様乱数を
割り当てる.同一層内の結合係数の値は 0(図 2).
3. m 個の記憶パターンのうち,一つをランダムに選び(xα , α = 1, · · · , m),回路の第 1
層に与える.
4. 第 1 層の値 xα をもとに,第 2 層の各素子(j = n1 + 1, · · · , n1 + n2 )が興奮する確率
pj = Pr{xj = 1} =
3
1 + exp{−
1
∑n1
α
i=0 wji xi }
(5)
を計算し(常に xα
0 = 1),この値に応じて Hebb 学習
wji := wji + µxαi pj
(6)
wij
(7)
:= wji
ここで i = 1, · · · , n1 , j = n1 + 1, · · · , n2 ,しきい値は
wi0 := wi0 + µxαi
(8)
wj0 := wj0 + µpj
(9)
をおこなう.µ は学習係数で,小さな正の値,例えば µ = 0.01 に設定する.
5. 第 2 層の各素子について,興奮する確率 pj に応じて,実際に興奮するか静止するか,
出力値を確定する(これをサンプリングという.xj = 0, 1, j = n1 + 1, · · · , n2 ).
6. 第 2 層の出力をもとに,第 1 層の各素子が興奮する確率
pi = Pr{xi = 1} =
1 + exp{−
1
∑n1 +n2
j=0,n1 +1 wij xj }
(10)
を計算し,それをもとに第 1 層各素子の出力値を確定する(xi = 0, 1, i = 1, · · · , n1 ).
7. 第 2 層の各素子について,興奮する確率を計算し,その値に応じて反 Hebb 学習する.
wji := wji − µxi pj , wij := wji
(11)
ここで i = 1, · · · , n1 , j = n1 + 1, · · · , n2 ,しきい値も同様に学習をおこなう.
wi0 := wi0 − µxi
(12)
wj0 := wj0 − µpj
(13)
6. で得られたパターンを入力だと思うと,4. の Hebb 学習と符号が異なるだけである
ので,実装の際は,同じ関数が使える.
8. 3. に戻り,繰り返す.どれだけ繰り返す必要があるだろうか.横軸に繰り返し回数,
∑
∆wij もしくは
縦軸に,たとえば,一回の繰り返しで結合係数が変化した総量
∑
i,j
2
(∆wij ) をとり,時間変化がある程度変わらなくなったところで止めればよいだろ
i,j
う.本当は,Kullback-Leibler のダイバージェンス
D =
m
∑
α=1
4
q(xα ) log
q(xα )
p(xα )
(14)
の時間変化を観測したい.ここで q(xα ) は,第 1 層に外部から与えられる n1 次元ベ
クトルの出現確率(2n1 通りあり,m 個のみが確率 1/m,ほかは 0),p(xα ) は,回路
を自由に走らせたときの第一層の状態の出現確率
∑
p(xα ) =
p(xα xh )
(15)
xh
である(周辺確率.第 1 層を xα に固定,第 2 層を 2n2 個のありとあらゆるパターン
について出現確率の和をとったもの).m 個のパターン以外の q(x) の値は 0 なので
x1 , · · · , xm だけについて確率の和を計算すればよい(0 log 0 = 0 とする).第 2 層の
素子数 n2 が小さい場合(n2 = 20 くらいまで)は,式(1)にしたがい,回路のパラ
メータ w から D が計算できる.
9. これで連想記憶の回路が完成した.ボルツマン機械のことは忘れて,この回路を素子
数 n = n1 + n2 + 1 の連想記憶モデルとして利用しよう.データを与えたり,想起に成
功したかどうか判定するのには n1 個のみを使う.n2 個の隠れ素子は補助変数である.
(a) 第 1 層に入力の一部を与える(例:x1 にノイズを加えたパターン).その活動を
もとに第 2 層の素子の興奮・非興奮を決める.以上で,n = n1 + n2 個の活動の
初期値を設定が完了した.
(b) n 個のうち,ランダムに素子を一つ選び,状態を更新する(非同期更新).n 回
の更新(平均して各素子が 1 回の更新をする)ごとに,もとの記憶パターンとの
方向余弦を計算する.xi = 0, 1 のとき,方向余弦 dc は 0 ≦ dc ≦ 1.
(c) 3 にもどり繰り返す(どの素子を更新しても,値が変わらないようなら,そこが
平衡状態).横軸に時間,縦軸に x1 との方向余弦をとり実験してみよ.
以上,xi = 0, 1 モデルで説明したが,xi = −1, 1 モデルのほうが,課題 1 と比較しや
すい.連想記憶モデルの性能も高いと思われる(いまさらではあるが...).
10. n1 = 1000 と固定し,n2 を 3, 10, 100, 1000, 2000 と変え,各回路で,どこまで m
(記憶パターンの数)を増やせるか,実験してみよ.相関学習の場合,(n + 1)n/2 個
のパラメータがあった.フェアに性能を比較するなら素子数を同じにするより,パラ
メータの個数を等しくする必要があろう.(n + 1)n/2 = n1 n2 + n1 + n2 であるので,
n = 1000, n1 = 1000 と固定した場合,500500 = 1001n2 + 1000 であるので n2 ≈ 501
となる.n1 = 1000, n2 = 500 の RBM もしくは,n2 がもっと小さい値で実験してみよ
う.m = 2n1 (もしかして超える?)程度の記憶が保持できる可能性がある.ランダ
ムパターンを記憶させた場合,相関型連想記憶モデルの場合の記憶容量は m ≈ 0.14n
である.
5
神経回路網特論
2014 年 6 月 3 日
更新 2014 年 6 月 9 日
課題 3A: 制約付きボルツマン機械(RBM)と連想記憶モデル
課題 3B: 制約付きボルツマン機械による自己組織
課題 3C,3D,3E: 自己組織化マップ,ニューラルガス,甘利の自己組織モデル
提出締切 6 月 10 日(火)
課題 3 は,A,B,C,D,E のうち,一つ以上を実行してください.課題 3A に既に取り組んで
いる人は課題 3B が容易です.この課題で扱うモデルはすべて 2 層回路ですが,この後,こ
れにもう一層付け加えた 3 層回路を考えます.それを使って,手書き数字データを教師あり
学習の実験をしてもらう予定です.
1
課題 3A の補足
記憶パターンを学習した後の,連想記憶モデルとしての使い方.
1. 第 1 層に入力の一部を与える.
2. 第 1 層の活動をもとに,第 2 層の素子の興奮・非興奮を決める.このように n = n1 +n2
個の活動の初期値を決める.
3. ランダムに素子を一つ選び,状態を更新する.n 回の更新(平均して各素子が 1 回の
更新をする)ごとに,もとの記憶パターンとの方向余弦を計算する.xi = 0, 1 のとき,
方向余弦 dc は 0 ≦ dc ≦ 1.
4. 3 にもどり繰り返す(どの素子を更新しても,値が変わらないようなら,そこが平衡
状態).
※ 配布資料では xi = 0, 1 モデルで説明しているが,xi = −1, 1 モデルのほうが,課題 1 と
比較しやすい.連想記憶モデルの性能も高いと思われる.
2
課題 3B
1. 学習の手順は,課題 3A と同じ.3A では入力の種類は m 種類であったが,学習デー
タとして,60000 枚の手書き数字データ MNIST を使う.入力信号 x は ||x||2 = 1 に
正規化しておく(コードを参照).
2. 学習回数に応じ,第 2 層の各素子(隠れ素子)の結合係数がどのように変化するか,可
視化し(数値ではなく,各ピクセルに結合係数の大きさに応じ色を付け)確認する.
3. 隠れ素子の個数を変えて(例えば n2 = 5, 10, 50, 100, 1000),2. を実験する.
6
神経回路網特論
2014 年 6 月 3 日
更新 2014 年 6 月 9 日
3
課題 3C: Kohonen モデル(Self-organizing Map, SOM)
目的は 3B と同じ.素子数 n を固定し,いくつか次元の異なる神経場の SOM を試す.具
体的には,n = 1024 の場合,1D-SOM では,1 × 1024,2D-SOM では,32 × 32,5D-SOM
では,4 × 4 × 4 × 4 × 4.もしくは n = 4096 = 212 を考え,1D,2D,3D,4D, 6D-SOM を実
現,つまり 1 × 1024,64 × 64,16 × 16 × 16,8 × 8 × 8 × 8,4 × 4 × · · · 4,の神経場を作
り,学習結果を比較する(各素子が入力信号空間にもつ重みを可視化).
2 次元 SOM の場合を例に,学習アルゴリズムを説明しよう.各素子は 28 × 28 の信号
x = (x1 , x2 , · · · )T を受け取り,i 番目の素子は入力空間に対して mi = (mi1 , mi2 , · · · )T の
重みをもつ.
1. mi1 , mi2 , · · · , i = 1, · · · , n の初期値を設定する.たとえば,区間 [0,1) の一様分布に
したがう乱数に設定すればよい.
2. 入力を一つ与える.SOM は,入力 x に対し,入力信号にもっとも近い重み(参照ベク
トルとも言う)をもつ素子(勝者とよぶ,以下 c 番目の素子とする)だけが興奮する.
c = argmin||mi − x||
(16)
i
3. 入力信号 x を 1 回与えるごとに,係数 mi , i = 1, · · · , n の値を以下の式にしたがい更
新する.
{ ||r − r ||2 }
c
i
mi := mi + α exp −
(x − mi )
2σ 2
(17)
ここで ri は,i 番目の素子の配列上(神経場)での位置である.配列上の位置とは,n =
10 × 10 の場合,i = 1, · · · , 100 であり,r1 = (0, 0),r2 = (1, 0), r3 = (2, 0), · · · , r11 =
(0, 1), r12 = (1, 1), · · · , · · · , r100 = (9, 9) などと考えればよい.ri = (x, y) と書くと,
x, y = 0, · · · , 9 として i = x + 1 + 10y と表現できる.パラメータの値は,たとえば
α = 0.2, σ = 3.0 にしておく.学習の初期段階では,σ の値を大きくしておくとよい.
4. 2. にもどり繰り返す.学習は数万回は必要かもしれない.
学習用データは 6 万枚用意されているが,時間がかかるので全部は使わず,例えば,100
枚を,3 万回学習してみよ.機械を評価する場合は,学習に使ったデータに対するエラー率
と,学習に使っていない 1 万枚に対するエラー率を調べよ.モデルによって性能のどう変わ
るか比較するときは,学習につかった枚数を同じにして比較すること.
※ 学習係数 α は αt = 0.8(1.0 − t/T ) + 0.01 のように時間と共に小さくすればよい.ここで
t は学習時間,T は総学習時間である.パラメータ σ も,例えば, σt = σ0 (1.0 − t/T ) + 0.1
7
(σt > 0.5 を満たす限り.それ以外の場合,σt = 0.5)のように,時間と共に小さくなるよ
うにすればよい.σ0 は,神経場の対角線より大きい値(例えば,10 × 10 の 2D-SOM なら
√
9 2 ≈ 13 以上,10 × 10 × 10 の 3D-SOM なら 16 以上)に設定しておけばよいと言われて
いる.
4
課題 3D: ニューラルガス(Neural GAS)
SOM が近傍学習であるのに対し,ニューラルガスは順位学習をおこなう.ニューラルガ
スは素子間の隣接関係を学習後に定義するため,様々な形をもつ信号空間に対応できるとい
う特徴がある.アルゴリズムを以下に示す.
1. mi , i = 1, · · · , n の初期値を設定する.
2. 入力信号 x を与える.
3. 入力信号 x に対し,mi とのユークリッド距離をすべての素子について求め,距離の
小さい順に素子を順位付けする.以下では,i 番目の素子は 第 si 位にランクされた
と仮定する.
4. mi , i = 1, · · · , n の学習をおこなう.
mi := mi + αg(si )(x − mi )
(18)
学習は入力信号 x に近い参照ベクトルをもつ素子ほど大きく,その大きさを決める関
数が g(s) である.たとえば,R, 0 ≤ R < 1 として,
g(s) = Rs−1 , s = 1, 2, · · · , n
(19)
を用いる.
5. 2. に戻って繰り返す.
5
課題 3E: 甘利の自己組織モデル
素直な Hebb 学習だけで,どんなことができるだろう.古典の一つである甘利の自己組織
化モデルを紹介しよう.
1. wi , i = 1, · · · , n の初期値を適当な乱数に設定する.
2. 入力信号 x を与える.
(入力信号 x は,あらかじめ ||x||2 = 1 に正規化しておく)
8
3. 出力値 hi , i = 1, · · · , n を計算
hi = 1(wi · x − w0 )
ここで
{
1(u) =
(20)
1 (u > 0)
0 (u ≦ 0)
である.
4. wi , i = 1, · · · , n を学習する.
wi := wi + µ1 {−wi + x}hi
(21)
ここで hi は 0 か 1 であるので,出力値が 1 の素子だけ結合係数の値を更新すればよ
い.同様に
w0 := w0 + µ2 {−w0 + c′ }hi
(22)
とする(具体的には µ1 = µ2 = 0.01 としておく).c′ は学習係数で 0 < c′ < 1 とし,
0.6 < c′ < 0.98 程度で適度に分布させれば良い.実は,この c′ の値をどんな値に設定
するかが,後で効いてくる.
5. 2. に戻って繰り返す.
これだけである.甘利モデルは,もっともシンプルな自己組織のモデルである.出力素子
hi の間に,競合的な相互作用を導入するほうが自然である.とくに,側抑制型の相互作用を
導入すると SOM と同じ結果が得られる(このモデルを単純化したものが SOM と言える).
9
神経回路網特論
2014 年 6 月 10 日
課題 4: 教師あり学習
中間発表(30 秒/人)
:6 月 24 日(火)
提出締切 7 月 1 日(火)
課題 3 で作った回路にもう一層付け加えた 3 層回路(図 3)を使い,手書き数字データを教
師あり学習しよう.
図 3: 3 層神経回路モデル(実質は 2 層)
6
教師あり学習
第 3 層として,10 個の出力素子を用意する.入力 x に対する望ましい出力を y(x) と書
く.第 3 層の素子の出力は線形としよう.つまり,第 3 層の i 番目の素子の出力は
zi =
n2
∑
wij uj − θi
(23)
j=1
とする.ここで,uj は第 2 層の活動(j = 1, · · · , n2 ),θi は出力層の i 番目の素子のしきい
値(i = 0, · · · , 9),wij は,第 2 層 j 番目の素子から第 3 層 i 番目の素子への結合の重みで
ある.目的は,ある入力(数字画像)x が与えられた時,
1∑
(zi (x) − yi (x))2
2
9
E =
(24)
i=0
を最小化することだと考えると,
∆wij
∆θi


n2
∑
∂E
wij uj (x) − θi − yi (x) uj (x)
= −µ 
= −µ
∂wij
j=1


n2
∑
∂E
= −µ
wij uj (x) − θi − yi (x)
= µ
∂θi
j=1
10
(25)
(26)
と学習すればよい.ここで学習係数 µ は µ = 0.05 などと設定する.第 2 層の出力 uj は,第
2 層が SOM の神経場の場合,勝者 c のみを 1(uc = 1),それ以外を 0 とすることも考え
られるが,それよりは,
{ ||r − r ||2 }
c
i
ui = exp −
2
2σ
(27)
とするほうがよいだろう.同様に,ニューラルガスの場合は,ui = g(si ) としたほうがよい
と思われる.
ちなみに u0 = 1 という常に興奮する 0 番素子を考えると,wi0 = −θi で
zi =
n2
∑
(28)
wij uj
j=0
∆wij


n2
∑
∂E
= −µ
= −µ 
wij uj (x) − yi (x) uj (x)
∂wij
(29)
j=0
とすっきり書ける.
入力 x に対し,出力層の 10 個の素子のうち,もっとも大きな出力値をもつものを回路の
出力とする.
学習用データは 60000 枚用意されているが,まずは,そのうち,100 枚だけを学習に使っ
て,性能を比較してみよう.正解率は,学習に使ったデータと,10000 枚のテスト用データ
の両方を使って調べてみる.これらを訓練誤差と汎化誤差とよぼう.例えば 100 回の学習に
つき 1 回,この統計量を計算すれば,学習がどのように進んでいるのか,把握できる.これ
が一つの方法.
もう一つの方法は,10 個の素子で,別々に,ROC カーブを描くこともできる(各素子に
対し,学習データ,テストデータで,2 本の曲線が描ける).この場合,出力が 0.5 以上だと,
その数字が出現したとする.他の評価方法もありうるので,いろいろ試してみるのがよい.
7
試して見ること
以下,全部を試す必要はないが,このうちいくつかを試し,できた機械の性能を比較せよ.
1. 2 層回路(入力層の素子と出力層の素子がすべてつながっている回路)を用い,教師
あり学習する(正答率 85%を達成できるはず).
2. 2 層目に,1D-SOM, 2D-SOM,3D-SOM,4D-SOM などを使い事前学習を済ませた
後,2-3 層間を教師あり学習する.
3. 2 層目に,Neural-GAS を使い事前学習を済ませた後,2-3 層間を教師あり学習する.
11
4. 1-2 層目として RBM を使い,事前学習を済ませた後,2-3 層間を教師あり学習する.
5. 1-2 層目として RBM を使い,事前学習を済ませた後,2-3 層間だけでなく,1-2 層間
も教師あり学習する(バックプロパゲーション).
6. 2 層目に,甘利モデルを使い事前学習を済ませた後,2-3 層間を教師あり学習する.
7. 2 層目に,甘利モデルを使い事前学習を済ませた後,2-3 層間だけでなく,1-2 層間も
教師あり学習する(バックプロパゲーション).
8. とくに事前学習せず,3 層回路を,バックプロパゲーションで学習する.
図 4: 入力信号と出力素子の学習信号との Hebb 学習
バックプロパゲーションは,アルゴリズムだけ書いておこう.これは Hebb 学習を一般化
したもであると考えれば,わかりやすい(図 4).第 2 層の j 番目の素子と,第 3 層の i 番
目の素子間の結合の学習は

∆wij
= −µ
∂E
= −µ 
∂wij
n2
∑

wij uj (x) − yi (x) uj (x)
(30)
j=0
= −µri uj
(31)
と見ると,これは第 3 層 i 番目の素子の学習信号 ri と第 2 層 j 番目の素子の出力との Hebb
学習である(i = 1, · · · , 9, j = 0, · · · , n2 ).ここでは天下りに,アルゴリズムだけを示そう.
第 1 層 k 番目の素子と第 2 層 j 番目の素子の結合係数を sjk とすると
( 10
)
) (n
1
∑
∑
∂E
′
∆sjk = −µ
= −µ
sjk xk xk
wij ri f
∂sjk
i=1
= −µrj′ xk
(32)
k=0
(33)
12
と書ける(k = 0, · · · , n1 , j = 1, · · · , n2 ).ここで f ′ (u) は,第 2 層の素子の入出力関数 f (u)
の微分で,
1
1 − e−u/T
(34)
1
f (u)(1 − f (u))
T
(35)
f (u) =
の場合
f ′ (u) =
であり(実際に微分し確認してみよ),出力が a なら,f ′ = a(1 − a) と簡単に計算できる.
13