らんだむな記憶

blogというものを体験してみようか!的なー

ゼロつく 2 (12)

Seq2seq による足し算の計算はジョン・サール中国語の部屋 - Wikipedia を彷彿とさせる。【外から記号の羅列を受け取り、確率的にありそうな記号の羅列にして外に返す。すると、AI の外にいる人間は「この AI は足し算を理解している」と考える。しかしながら、AI の中には再帰ニューラルネットワークがあるだけである。ニューラルネットワークは全く数字が読めず、作業の意味を全く理解しないまま、ただ確率どおりの記号の生成を繰り返しているだけである。それでも AI の外部から見ると、足し算が成立している。】という状況に見える。11 エポックも回すと*1ほぼ間違わなくなっている。だが別に足し算のルールを理解したわけではないのだ。

val acc 91.180%

別に AI は何も理解していないけど、それを使う側にとってメリットがあり、あたかも AI が何かの知識を持っているように適切に振る舞ってくれるならそれで問題ないところに面白みがあるように感じられる。

なお、x_train などの中身を確認したければ以下のようにすれば良い:

np.set_printoptions(threshold=sys.maxsize)
print(np.apply_along_axis(lambda row: np.array([id_to_char[v] for v in row]), 1, x_train)[:5,:])
print(np.apply_along_axis(lambda row: np.array([id_to_char[v] for v in row]), 1, t_train)[:5,:])

この場合、例えば以下のような出力になる:

[['7' '1' '+' '1' '1' '8' ' ']
 ['5' '1' '0' '+' '2' '2' '3']
 ['6' '6' '+' '7' '0' '1' ' ']
 ['8' '8' '5' '+' '0' ' ' ' ']
 ['8' '0' '+' '3' '0' '0' ' ']]
[['_' '1' '8' '9' ' ']
 ['_' '7' '3' '3' ' ']
 ['_' '7' '6' '7' ' ']
 ['_' '8' '8' '5' ' ']
 ['_' '3' '8' '0' ' ']]

科学哲学的な興味深さをおぼえつつ、p.324 まで完了ということにする。

*1:GPU を使って 15 分くらい。