2020年2月7日金曜日

記号処理とニューラルネット 前半 〈Python AI ニューラルネット その6〉

ニューラルネットに記号処理・記号学習を組み合わせたら、というお話です。前回、“多層化が認識の本筋ではない” ことに触れました システムの費用対効果 〈Python AI ニューラルネット - MNIST その5 その続きになります。


まず、テスト結果を見てみましょう。

中間層50セルのテストデータ評価

出力 0 1 2 3 4 5 6 7 8 9 合計
誤答 54 25 59 70 62 39 57 46 61 64 537
正答 962 1,114 967 953 932 808 919 961 912 935 9,463
合計  1,016 1,139 1,026 1,023 994 847 976 1,007 973 999 10,000

出力の3や9の誤答率が高いですね。どのように間違えているか見てみましょう。

同、出力別正解対応表

 出力
正解
0 1 2 3 4 5 6 7 8 9 合計 
0

2 2
4 7 2 1
18
1

2 2
1 5 2 9
21
2 11 1
7 10
9 9 16 2 65
3 1 1 16

14 1 11 10 3 57
4 1 2 4


10 2 3 28 50
5 11 1 3 25 3
14 5 15 7 84
6 11 3 3
10 6
1 5
39
7 3 7 25 7 5



20 67
8 5 3 3 16 6 8 11 6
4 62
9 11 7 1 11 28 6
8 2
74
合計  54 25 59 70 62 39 57 46 61 64 537

これを見ると、誤答パターンがあるのに気付きますね。

出力 = 3では誤答70例中、正解 =  5, 8 で41例と過半数を占めます。“3のような5”、“3のような8” の悪筆が比較的多かったとも言えます。出力 = 3で間違えたら 5 と再回答すれば 25 / 70 ≒ 36% の確率で正解します。

出力層第二位の結果に注目して詳細を見てみましょう。出力層第二位の結果を含めると正解率は向上します。
システムの費用対効果 〈Python AI ニューラルネット - MNIST の続き〉

二位出力別正解対応表(一位出力=3で誤答)
  二位出力
正解
2 4 5 6 7 8 9 合計
0

1

1
2
1

1
1

2
2
1 2
1 3
7
5

25



25
7



3 2 2 7
8 1
1 1
13
16
9

1

3 7 11
合計 1 1 31 1 5 22 9 70

二位出力=正解のケースは誤答総数70例中、48例( 25 + 3 + 13 + 7) です。なので二位出力を再回答すれば 48 / 70 ≒ 69% の確率で正解します。では全てのケースで二位出力を再回答すればよいのかというとそうでもありません。

二位出力別正解対応表(一位出力=9で誤答)
  二位出力
正解
2 4 5 6 7 8 合計
2




2 2
3

1
1 1 3
4
1 2 1 10 14 28
5
1 2
1 3 7
7 1 5 6
3 5 20
8
1

1 2 4
合計 1 8 11 1 16 27 64

最も多い正解は 4 で 28例です。4と再回答すると 28 / 64 ≒ 44% の確率で正解します。ところが二位出力=正解のケースは 8例しかありません。 正解確率は 8 / 64 ≒ 13% とかえって悪くなります。 “9のような4” 、 “9のような7” は単純なニューラルネットには難し過ぎるようです。
そこで二位出力が2,4,5の時は7と答え、6,7,8の時は4と答えると 37例が正解になります。正解確率は 37 / 64 ≒ 58% です。

このような再回答ロジックにより正解率97.4%(誤り率2.6%)に改善できます(元の正解率94.6%(誤り率5.4%))。なお、 第二位再回答では正解率96.9%(誤り率3.1%)です。

実はここまでが前置きになります。今回のお題は記号処理とニューラルネットです。このような再回答ロジックを “人間が” プログラムで組むことは簡単ですが、果たしてニューラルネットで表現したり、学習することはできるのでしょうか?

長くなったので2回に分けます。次回に続く。
永島志津夫