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

神経回路網特論
2015 年 6 月 9 日
課題: 制約付きボルツマン機械(RBM)と連想記憶モデル
図 1: 制約付きボルツマン機械
ボルツマン機械は,教師なし学習(自己組織)のモデルであるが,教師あり学習(例題
からの学習)や連想記憶モデルとしても機能する.さらに,マルコフ確率場でもあるので,
いくつもの顔をもつ.このモデルは,1983 年頃,G. E. Hinton らにより提案されたが,学
習に非現実的な時間がかかることから,この原理を使って何か製品が実用化されるという
ことはなかった.30 年経った現在,原理はそのままで実際に使える,制約付きボルツマン
機械(Restricted Boltzmann Machine, RBM)とよばれるモデルが,Google 社,Microsoft
社,Facebook 社などで活発に利用されている.ここではそのモデルを紹介する.
ボルツマン機械は与えられた確率分布を近似する機械であり,この意味では,自己組織の
モデルである.紹介する順序としては,不自然になるが,まず,連想記憶モデルにおける,
記憶パターンの学習に利用することを考えてみる.具体的には,自由に走らせると(外部か
ら入力を与えず素子の状態を更新すると),m 個の興奮パターンだけが出現するような回路
をボルツマン機械に学習させる.学習後,ボルツマン機械ということは忘れ,回路を確定的
に動作させる(確定的な状態更新).記憶させたパターンの想起特性や記憶容量を,相関型
連想記憶モデル(課題 1)と比較し,ボルツマン機械の学習性能が高い(?)ことを確認す
ることがこの課題の目的である.
30 年前に提案されたボルツマン機械がどうして実用にならなかった.まずこの理由を考
えてみよう.ボルツマン機械の学習は 2 つのフェーズからなる.入力信号が与えられている
時の Hebb 学習を第 1 フェーズ,入力はなく,回路の状態が自由に動いている時の反 Hebb
1
学習を第 2 フェーズと,よぶことにする.いま,隠れ素子のない,素子数 n = 100 の単純
な回路を考えよう.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
exp{−E(x̃; w)/T }
,
(4)
x̃
w はパラメータ w = (w01 , · · · , wn1 n2 ) である.パラメータ(値が常に 0 の結合係数は除く)
は全部で n1 n2 + n1 + n2 個ある.これを相互結合型の回路とみると,結合係数の半分以上
が値 0 をとる(図 2).
図 2: 結合係数の構造
具体的に考えるほうがイメージが湧くだろう.以下では特別な指定がない限り,n1 =
1000, n2 = 500,記憶パターン数 m = 500 の場合を考えてみる.
【学習手順】
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 が計算できる.
これで連想記憶の回路が完成した.学習後は,ボルツマン機械のことは忘れよう.入力を
与えたり,想起に成功したかどうか判定するのには第 1 層の n1 個のみを使う.
【想起の手順】
1. t = 0.第 1 層に入力 (x1 , · · · , xn1 )T を与える.具体的には,1 番目の記憶パターンの
うち最初の a 個の 0, 1 を反転させたものを与える.
2. 第 1 層の活動をもとに,第 2 層の各素子の興奮・非興奮を決める.
( n
)
1
∑
xj (t) = 1
wji xi (t) , j = n1 + 1, · · · , n1 + n2
(16)
i=0
ここで x0 = 1,
{
1(u) =
1, u > 0
0, u ≦ 0
(17)
である.
3. 第 1 層の各素子の状態を同期更新
(
xi (t + 1) = 1
n∑
1 +n2
)
wij xj (t) , i = 1, · · · , n1
(18)
j=0,n1 +1
4. もとの記憶パターンとの方向余弦を計算する.xi = 0, 1 のとき,方向余弦 dc は 0 ≦
dc ≦ 1.
5. t := t + 1.2. にもどり値が収束するまで(もしくは t = 20 程度まで)繰り返す.
5
この回路で,どこまで m (記憶パターンの数)を増やせるだろうか.入力の素子数 n1 を
固定した場合,もちろん素子数 n2 は大きいほうが記憶容量は大きくなるだろう.ランダム
パターンを記憶させた場合,相関型連想記憶モデルの場合の記憶容量は m ≈ 0.14n である
(n は素子数).フェアに性能を比較するなら素子数を同じにするより,パラメータの個数を
等しくする必要がある.相関学習の場合,n(n − 1)/2 個のパラメータがある.したがってパ
ラメータ一つあたり,
0.28
0.14n
=
≈ 0.000280
n(n − 1)/2
n−1
個のパターンを記憶している(最後の数字は n = 1000 を代入した結果).ここで紹介した
2 層の回路は素子数が n1 + n2 + 1 で,結合係数(パラメータ)の個数は n1 n2 + n1 + n2 =
n2 (n1 + 1) + n1 である.繰り返し学習している分,この回路のほうが記憶容量が大きいの
は自然である.n1 = 1000 を考えると,
m/(1001n2 + 1000) ≧ 0.000280
が成り立つであろう.この式は n2 = 500, 400, 300 で,それぞれ,
m ≧ 140, 112, 84
である.実際には,この数字の 2 倍くらいは記憶できるのではないかと予想する.
【課題】
1. 第 1 層の素子数と記憶パターン数を n1 = 1000, m = 160 と固定,n2 を 500, 400, 300
と変え,適当な回数学習した後(たとえば学習係数 µ = 0.0005 で学習回数 1000 回),
想起の実験を実施せよ.各場合で,横軸に時間 t,縦軸に x1 との方向余弦 dc の値を
プロットした図を作成せよ(初期値に与えるノイズの量 a を変え,様々な初期値を試
すこと.たとえば a = 0, 50, 100, 150, 200, · · · ).
2. 第 2 層の素子が,どのような役割を担っているかに興味がある.1. の n2 = 500, 400, 300
それぞれの場合について次のヒストグラムを作成せよ.各 m = 160 個の記憶を正しく
想起できた場合に,第 2 層の活動パターンを記憶しておき,j 番目の素子が,m 個の
うち,何個の記憶パターンに 1 を出力したかを求めよ.横軸に 1 を出力した回数,縦
軸に素子数をとった図を描け.結果を比較し,考察せよ.ヒストグラムを構成する要
素の個数は n2 となる.n2 = 500 の場合,どのパターンにも反応しない(1 を出力し
ない)素子が多いはずである.
6
3. 1. の n2 = 500, 400, 300 それぞれの場合について次のヒストグラムを作成せよ.各
m = 160 個の記憶を正しく想起できた場合に,第 2 層の素子のうち何個が 1 を出力し
ているか,その割合(%)を求めよ.横軸に発火率(活動度,1 を出力している素子数
/n2 ),縦軸に記憶パターンの個数をとった図を描け.ヒストグラムを構成する要素の
個数は m となる.結果を比較し,考察せよ.
4. 今度は素子数を n1 = 1000, n2 = 500 と固定し,記憶パターン数 m を m = 160, 225, 300, 500
と変え,2. と 3. の実験をしてみよ(m = 160 の場合は,2.,3. で実行済である).結
果を比較し,考察せよ.
7