階層型強化学習 RGoal を用いた記号推論の実現手法の検討
汎用人工知能研究会
2019-08-30

1

私の研究の中期的目標• 前頭前野周辺の計算論的モデルの構築– 報酬期待値を最大化する合理的な行動・思考・言語理解・発話をする知的エージェントのモデル
運動野
前頭前野

言語野

視覚野

大脳皮質

基底核

扁桃体

海馬

小脳
2

今回の目標：幼児が行うような簡単な推論の実現「何か食べるものはないか」「きのうスナックとチョコレートがあったなあ」「おにいちゃんはチョコレートは食べてないと言っていた」「まだチョコレートが残っていて食べられるはず」

https://www.irasutoya.com/2016/12/blog-post_40.html

3

記号ＡＩが扱う知識の利点• 知識の汎用性が高い。
– 知識を組み合わせることで多様な推論が行える。

• 汎化能力が高い。
• 知識のモジュラリティが高い。
– 環境の変化に対応しやすい。

• 自然言語との相互変換が容易。
– 他者との情報交換を前提とした知識の内部表現に適している。
4

記号ＡＩと強化学習の融合の試み• RRL (Relational Reinforcement Learning, 2001)– 高い汎化能力の実現が目的• 強化学習と帰納論理プログラミングの融合• 行動価値関数を論理決定木に圧縮• DNC(Differentiable Neural Computers, 2016) DeepMind– 汎用人工知能の実現が目的• NN でプログラムを表現、強化学習等で学習• rlCoP (2018) NeurIPS– 定理証明システムの性能向上が目的• 証明の１ステップをモンテカルロ木探索で選択• 本研究：ヒトと同様の推論・知識獲得の再現が目的
5

アーキテクチャの説明

6

RGoal アーキテクチャ[一杉 et al.第9回 汎用人工知能研究会 2018]

知的エージェント
報酬関数 状態 𝑠𝑠̃ = (𝑠𝑠, 𝑔𝑔) ワーキングメモリ
𝑟𝑟(𝑠𝑠̃ , 𝑎𝑎)
状態 𝑠𝑠

報酬 𝑟𝑟

行動価値関数
𝑄𝑄(𝑠𝑠, 𝑔𝑔, 𝑎𝑎)
行動 𝑎𝑎

センサー

サブゴール 𝑔𝑔
スタック環境ワーキングメモリの更新
Call, Set, ...
環境への行動出力

アクチュエーター

サブルーチンの共有により学習を加速する階層型強化学習アーキテクチャ

7なぜＡＧＩにサブルーチンが必要か？
• 適切な教育カリキュラムがある間は、エージェントは１つのサブルーチンを定数時間で獲得できる。
• 獲得したサブルーチンの数が増えれば、解けるタスクの数が組み合わせ爆発的に増える。
解けるタスクの数

エージェントの成長

8パターンを用いたテーブル検索[一杉 et al.第10回 汎用人工知能研究会 2018]
Y 0

1234

パターン

値

2.0 1.0 1.0 3.0 1.0

(3,3)

4.0

1

1.0 2.0 1.0 3.0 1.0

(X,3)

3.0

2

1.0 1.0 2.0 3.0 1.0

(X,X)

2.0

3

1.0 1.0 1.0 4.0 1.0

(X,Y)

1.0

4

1.0 1.0 1.0 3.0 2.0

X0

テーブルのインデックスの代わりにパターンを用いることで、サイズ 5 x 5 = 25 のテーブルがサイズ 4 に圧縮
・ ルールの順序には意味はないものとする。
・ マッチするルールが複数ある場合、最も特殊なパターンをもつルールの方を選択する。
・ 「最も特殊なパターン」とは、用いる変数の種類が最も少ないパターンと定義。
9ベイジアンネットを用いたパターンマッチの回路の１つの案
パターン内の変数への値の割り当て(X,X,1,Y,Y,4)
パターン P

X
5Y

Z

9

-

パターンに応じてゲートの開閉を制御

ゲートノード群
ゲートノード[一杉 2016 汎用人工知能研究会]

制御ノード
Open

下の層に値を与えると、上の層にマッチするパターンと変数の値が推論される。

UCloseU

ゲートノード551

994

ゲートノードの条件付確率表

X

𝑃 𝐺 = 0 𝑐, 𝑢 = 1 − 1 − 𝑤𝑢 ¬𝑢 1 − 𝑤𝑐 c
𝑃 𝐺 = 1 𝑐, 𝑢 = 1 − 𝑤𝑢 ¬𝑢 1 − 𝑤𝑐 𝑐

X・ 論理回路のような感覚で生成モデルを設計できる。
・ あくまでベイジアンネットなので、 出力（下流の値）から入力（上流の値）の推定もできる。
ゲートノードの行列
C

U1

C

U2

U1

U2

X1

X2

略記
X1

入力ベクトル

制御ノードの値がOpen なら U と Ｘ が結合、Close なら切断

X2

定理証明の実現の方針• 「真であると仮定する命題」が与えられている。
• Prolog のように、後ろ向き連鎖で証明。
– ゴールとなる命題の証明に必要な命題を、再帰的に証明していく。

• モンテカルロでランダムに証明を探索する。
• 証明の１ステップを、強化学習における行動１ステップに対応付ける。

11

命題のベクトル表現• 命題を固定長のベクトルで表現。
• 今回の実装では 以下の形の命題のみ。
– 述語の引数は高々２つ： P(a1,a2)– 命題の形は A 、 A→B 、 A∧B→C いずれか

• すべての命題を長さ９のベクトルで表現。
例：
P(a,b) ∧ Q(c) → RP(a,b) → Q(c)P(a,b): (P a b Q c O R O O)
: (P a b O O O Q c O)
: (O O O O O O P a b)
"O" は空を表す記号

12

状態• 行動価値関数 Q(s,g,a) の s, g, はそれぞれ、命題（長さ９のベクトル）で表現する。

13

行動• Q(s,g,a) の a は Call(m), Set(m), Fail のいずれかとする。（今回は環境に対する行動はない。）– Call(m) ：サブルーチン呼び出し• 現在のサブゴール g をスタックに積んで、 m を新しいサブゴールとする。

– Set(m) ：状態の書き換え• 現在の状態 s を m に置き換える。

– Fail : 状態のリセット• スタックを破棄し、 s, g, を初期値にリセットする。
• 行動の選択肢が他になくなった時に実行される。
14

行動価値関数のテーブル
RGoal では行動ルールは Q(s,g,a) の形をしたパターンで記述。
命題 A が真であると仮定されているとき：
Q((_, _ ,_), (O,O,A), Set(O,O,A)). % 命題Ａは無条件に証明完了とする。
命題 A → B が真であると仮定されているとき：
Q((_,_,_), (O,O,B), Call(O,O,A)). % Ａを証明する。
Q((O,O,A), (O,O,B), Set(O,O,B)). % Ａが証明済みならＢは証明完了とする。
命題 A ∧ B → C が真であると仮定されているとき：
Q((_,_,_), (O,O,C), Call(A,O,O)).
Q((A,O,O), (O,O,C), Call(A,B,O)).
Q((A,B,O), (O,O,C), Set(O,O,C)). % Ａ，Ｂが証明済みならばＣは証明完了とする。
Q((_,_,_), (A,O,O), Call(O,O,A)).
Q((O,O,A), (A,O,O), Set(A,O,O)).
Q((A,O,O), (A,B,O), Call(O,O,B)).
Q((O,O,B), (A,B,O), Set(A,B,O)).
注： "O" は空、 "_" はワイルドカードを表す。

15

変数束縛についての制限• prolog は未束縛の変数をデータ構造に埋め込んで再帰呼び出しできるが、このような強力すぎる機構が脳にあるとは考えにくい。
• 今回は、変数の共有構造は推論１ステップの中でのみ有効であるような実装とした。
– 非常に強い制限だが、それなりにいろいろなことができそう。
A

B

CE

D

実行順序F
G

16

実行アルゴリズムの疑似コード

今回の追加部分

17実行例18

例題タスク
昨日はスナックがあった。
昨日はチョコレートがあった。
兄はチョコレートを食べていない。
昨日Ｘがあって、兄がＸを食べていないなら、Ｘは今日もまだある。
Ｘが今日あるなら、Ｘを食べられる。
何か食べられるＸはあるか？
Yes, Ｘ＝チョコレート
prolog による記述：
exist(yesterday, snack).
exist(yesterday, chocolate).
notEat(brother, chocolate).
exist(today,X) :- exist(yesterday,X), notEat(brother,X).
canEat(X) :- exist(today, X).
?- canEat(X).
X = chocolate.
19

例題タスクを実行する行動ルールをQ(s,g,a) の形で表現
Q((__,__,__,__,__,__,__,__,__), (__,__,__,__,__,__,__,__,__), Fail)
Q((__,__,__,__,__,__,__,__,__), (O,O,O,O,O,O,Exist,Yesterday,Snack), Set(O,O,O,O,O,O,Exist,Yesterday,Snack))
Q((__,__,__,__,__,__,__,__,__), (O,O,O,O,O,O,Exist,Yesterday,Chocolate), Set(O,O,O,O,O,O,Exist,Yesterday,Chocolate))Q((__,__,__,__,__,__,__,__,__), (O,O,O,O,O,O,NotEat,Brother,Chocolate), Set(O,O,O,O,O,O,NotEat,Brother,Chocolate))Q((__,__,__,__,__,__,__,__,__), (O,O,O,O,O,O,Exist,Today,x), Call(Exist,Yesterday,x,O,O,O,O,O,O))
Q((Exist,Yesterday,x,O,O,O,O,O,O), (O,O,O,O,O,O,Exist,Today,x), Call(Exist,Yesterday,x,NotEat,Brother,x,O,O,O))
Q((Exist,Yesterday,x,NotEat,Brother,x,O,O,O), (O,O,O,O,O,O,Exist,Today,x), Set(O,O,O,O,O,O,Exist,Today,x))
Q((__,__,__,__,__,__,__,__,__), (Exist,Yesterday,x,O,O,O,O,O,O), Call(O,O,O,O,O,O,Exist,Yesterday,x))
Q((O,O,O,O,O,O,Exist,Yesterday,x), (Exist,Yesterday,x,O,O,O,O,O,O), Set(Exist,Yesterday,x,O,O,O,O,O,O))
Q((Exist,Yesterday,x,O,O,O,O,O,O), (Exist,Yesterday,x,NotEat,Brother,x,O,O,O), Call(O,O,O,O,O,O,NotEat,Brother,x))
Q((O,O,O,O,O,O,NotEat,Brother,x), (Exist,Yesterday,x,NotEat,Brother,x,O,O,O), Set(Exist,Yesterday,x,NotEat,Brother,x,O,O,O))
Q((__,__,__,__,__,__,__,__,__), (O,O,O,O,O,O,CanEat,x,O), Call(O,O,O,O,O,O,Exist,Today,x))
Q((O,O,O,O,O,O,Exist,Today,x), (O,O,O,O,O,O,CanEat,x,O), Set(O,O,O,O,O,O,CanEat,x,O))

20実行ログ

Call(O,O,O,O,O,O,CanEat,PHI,O)
Call(O,O,O,O,O,O,Exist,Today,PHI)
Call(Exist,Yesterday,PHI,O,O,O,O,O,O)
Call(O,O,O,O,O,O,Exist,Yesterday,PHI)
非決定論的な選択：
Set(O,O,O,O,O,O,Exist,Yesterday,Snack)昨日スナックがあった。
ReturnSet(Exist,Yesterday,Snack,O,O,O,O,O,O)
ReturnCall(Exist,Yesterday,Snack,NotEat,Brother,Snack,O,O,O)
Call(O,O,O,O,O,O,NotEat,Brother,Snack)Fail
証明失敗。最初からやりなおし。
Call(O,O,O,O,O,O,CanEat,PHI,O)
Call(O,O,O,O,O,O,Exist,Today,PHI)
Call(Exist,Yesterday,PHI,O,O,O,O,O,O)
Call(O,O,O,O,O,O,Exist,Yesterday,PHI)
非決定論的な選択：
Set(O,O,O,O,O,O,Exist,Yesterday,Chocolate)
昨日チョコレートがあった。
ReturnSet(Exist,Yesterday,Chocolate,O,O,O,O,O,O)
ReturnCall(Exist,Yesterday,Chocolate,NotEat,Brother,Chocolate,O,O,O)
Call(O,O,O,O,O,O,NotEat,Brother,Chocolate)Set(O,O,O,O,O,O,NotEat,Brother,Chocolate)
ReturnSet(Exist,Yesterday,Chocolate,NotEat,Brother,Chocolate,O,O,O)
ReturnSet(O,O,O,O,O,O,Exist,Today,Chocolate)
ReturnSet(O,O,O,O,O,O,CanEat,Chocolate,O)
証明成功。「チョコレートが食べられる」
Return21記号的知識の獲得方法の案• 命題は環境の状態を抽象化したもの。
• 下記のようなグラフィカルモデルで前提１∧前提２→結論 という命題が獲得されるのでは？
前提１

前提２...

...
...
...
...
...

結論

感覚連合野

センサー入力22

まとめ• 強化学習の枠組みの中で定理証明器を実装。
– RGoal に２つのアクション Set, Fail を追加。
– パターンによるテーブル圧縮。
– 命題を固定長のベクトルで表現。

• アルゴリズムとデータ構造は脳内の神経回路で実現可能なほどシンプル。
• 記号的知識の獲得方法について考察した。
• 自律的な推論・自律的な知識獲得の実現に近づいた。
23

予備スライド24

記号ＡＩと強化学習の統合の利点• 知識を経験から獲得できる。
• 推論が学習によって効率化する。
• 矛盾のある知識も許容するような柔軟な推論システムが自然に構築できる可能性がある。
• 記号ＡＩと統計的機械学習（教師なし学習）の統合につながる。

25

探索戦略
• 今回は単純なモンテカルロ探索。
– 現在の s, g にマッチするルールを softmax で選択。
• Prolog はルールを先頭から順番に試すが、本手法では価値に応じた確率でランダムに選択。

– 選択できるルールがない場合は fail して最初からやり直す。
• Prolog では証明の途中までバックトラックするが、本手法では最初からやり直す。

26

変数束縛の制限について
今回試した例題では、証明の副産物として述語の引数の値（チョコレート）が得られているが、一般にはそれができるとは限らない。
今回の実装では、変数に束縛した値が実行順序にそって伝搬していく。
prolog のような「代入の遅延」は行われない。

AB

C

E

D

実行順序F
G

今後導入予定の一時メモリを使えば、この制限を超えられるかもしれない。
一時メモリには、直前の証明探索の実行ログが記録される。
もういちど証明探索を繰り返せば、直前の証明途中の情報にアクセスできるので、実質的に未来の情報を参照できることになる。

27