Abstraction and Reasoning Challenge
これは、F. Chollet氏が ”The Measure of Intelligence” で議論し提案している、”知能テスト:ARCデータセット”、を解くための ”AIシステム” を開発するKaggleのコンペです。
ARC(Abstraction and Reasoning Corpus)は、1930年代に開発されたヒトのための知能テストのフォーマットに似ていて、ヒトとAIシステムの両方に使える”知能テスト”を目指して開発されたようです。
開発的要素が大きい、非常に難しい課題であるが、同時に、非常に面白い課題であると感じている。知能テストを解くモデルができれば、それは、人工知能と呼べるかもしれない。
まずは、ヒトの知能で、400問のARC知能テストに挑戦してみる。
とりあえず、200問を解いてみた、3~5問くらいは、数分間以上考えた(楽しめた)が、あとは、だいたい1分以内でできたと思う。不注意で2問ほど間違った。唯一、166問(6e02f1e3)が解けなかった。所要時間を度外視すれば、正答率は197/200で、これなら、当分の間、AIに負けることはないだろう。(自分に勝てるAIを作りたいものだ)
ARCデータ(terain input と train outputのペア およびtest input) は、全て、幾何学模様である。
基本図形は。正方形で、グリッドの数は、最大で30 x 30くらい。最少は1グリッドだが、3 x 3から 5 x 5 くらいが多いように思う。
train inputデータとtrain outputデータから、変形の規則性を学び、test inputデータからoutputデータを推測する。
訓練データは、平均で3ペア程度。全400問とすると1200となり、タスクとドメインが同じであればこれまでのCNNで学習できそうだが、問題のパターン(変形のパターン)は数十種類以上あり、ラベルに相当する情報も複雑なので、この方向で検討する場合は、ラベル(の作り方)がネックとなるだろう。
3パターン程度の教師データから、変形の仕方を学習し、inputデータから正しいoutputデータを推測することを可能にするモデルを開発することになる。
ARCデータベースは、ヒトの知能テストに準じた課題であり、機械学習モデルの性能を測る1つのものさしとして、非常に興味深いものである。
ARCモデルに対して高得点を出せるモデルを、人工知能と名付けることができるかどうかは、そのモデルのアルゴリズム次第ということになるだろう。
ARCモデルは開発途上で課題はあるだろうし、モデルの性能を測る1つのものさしにはなっても、それが、”人工知能のものさし”となるかどうかは、誰にもわからない。
ヒトは、入力画像を出力画像に変換する方法を、どうやって見つけているのだろうか。
ヒトにとってわかりやすい問題として、ノイズ除去、閉じた領域への着色、長方形の皮1枚残したくりぬきなどがある。
ヒトは、それらの変換作業を経た入力画像と出力画像のペアを見比べることによって、出力画像では、ノイズが減った、閉じた領域が着色された、長方形の内部が着色された、ということを認識することができる。
ヒトは、これら3種類の変換が出題されると知っていたわけではないし、ARCデータベースには数十種類の異なる処理が施された画像の組が存在する。知能テストでは、原則として、それぞれの問題の内容を、画像の組を見て、初めて知ることになる。
ヒトが容易に理解できる画像処理について検討していると、既知・既存の方法で、画像処理してしまいがちで、AI化にとっては、百害あって一利なしということになりかねないので、少し複雑な課題を取り上げよう。
6d0160f0というデータセットを見てみよう。入力画像は、3 x 3 の画像が9種類あり、9つに仕切られたグリッドに収まっている。出力画像は、3 x 3の画像が、9つのグリッドの1か所だけに存在し、残りのグリッドは空である。入力画像の9つの3 x 3画像のうちの1つだけ、黄色が1グリッド存在する。その1グリッドの黄色が存在する3 x 3画像が、出力画像の唯一の3 x 3画像である。さらに、その黄色グリッドの3 x 3画像中での位置が、9つのグリッドの中での位置を示しているのである。4ペアの入力―出力画像から、そのルールを発見し、テスト画像に適用し、最終出力として正しい画像を生成できるモデルを作成しよう、ということである。
この6d0160f0という課題を解くために、少なくとも5~6分以上はかかった。4つの事例のうちの1つで、模様の一致しているグリッドがすぐ見つかり、他の3つも目を凝らして見つけた。しかし、出力画像のグリッドの位置を決めている理由が、なかなかわからなかった。黄色のグリッドが、3 x 3画像の選択と、3 x 3のマスの中での位置の2つの要因を決めていることに気付くのに、すこし時間がかかった。
さて、正解にたどり着くまでにヒトは何をしたか。まずは、出力側の3 x 3の模様がどこからきたかを探した。次に、9つのグリッドの中での位置がどのように決められたのかを示しているものがないかどうかを調べた。
もっと詳細に眺めてみよう。
最初にやったことは、入力画像と出力画像のセットを眺めること。6d0160f0は、4セットあるので8枚の画像を、横並びでざっと眺めていた。
この、8枚の画像全体をざっと眺めながら、どういった類の作業をしたら、訓練用出力画像と同様な出力画像をつくることができるのかを考えていた。
ヒトは、このとき、どこを見て、何を考えていたのだろうか。
実際にやったことをもっと詳細に追跡しよう。
直前の作業は次の通り。
直前に解いた課題6cf79266は、20 x 20のグリッドで、ざっと見て60%くらいのグリッドが、単色のグリッドでランダムに埋められていた。埋まっていないグリッドは黒である。3ペアあり、それぞれ灰と緑と橙である。出力画像に目を移すと、画像中に1か所もしくは2か所のみ、3 x 3の青い領域が追加されていた。対応する入力画像の場所は、3 x 3の黒抜きになっていることがわかった。これで入力と出力の関係が分かったので、類似作業をするためにテスト入力画像を見た。3 x 3の黒抜きの場所が3か所あったので、そこを頭の中で青にして、テスト出力画像を見て正解であることを確認した。
そして、マウスを操作して、6d0160f0の4対の訓練画像を見た。
グリッドは11 x 11で、1グリッドのサイズは面積で直前に扱った画像の3~4倍あり、カラフルである。1グリッド幅のグレーの直線で、9つの3x3グリッドに仕切られている。3x3グリッド内のパターンは、ベースが黒で、カラーで埋まっているグリッドの数は2から4で、隙間が多い。入力画像の9つの3x3グリッドは全て3 x 3のパターン画像で埋まっているが、出力画像は、スカスカ。1か所の3x3グリッドにのみ、パターン画像が入っている。
6d0160f0の4対の訓練画像を初めて目にしたときのことは、よく覚えていないが、直前の問題が易しかったので、少し戸惑ったように思う。
最初から順に解いてきたので、163番目の課題である。100番目を過ぎたあたりから、少しずつ、類似パターンに出くわすようになった。しかし、それを思い出しながら解こうとしたことはないと思う。
ヒトは、知能テストの画像を見ながら、何を考えていたのだろうか、何をしていたのだろうか。
入力画像から出力画像を作る(手続きを探す)ことに集中していた。
入力画像から出力画像を得るための方法を見出すときに何が必要だったのだろう。
入力画像と出力画像に違いがあるかどうかを見出す能力。
入力画像と出力画像にどのような違いがあるかを見出す能力。
入力画像と出力画像に違いがない部分を見出す能力。
入力画像と出力画像に違いがない部分の役割を見出す能力。
入力画像と出力画像に違いをもたらしているものを見出す能力。
入力画像と出力画像に違いをもたらしているのが、サイズに基づくものであることを見出す能力。
入力画像と出力画像に違いをもたらしているのが、形状に基づくものであることを見出す能力。
入力画像と出力画像に違いをもたらしているのが、色に基づくものであることを見出す能力。
入力画像と出力画像に違いをもたらしているのが、数量に基づくものであることを見出す能力。
入力画像と出力画像に違いをもたらしているのが、相似性に基づくものであることを見出す能力。
入力画像と出力画像に違いをもたらしているのが、対称性に基づくものであることを見出す能力。
入力画像と出力画像に違いをもたらしているのが、配列に基づくものであることを見出す能力。
入力画像と出力画像に違いをもたらしているのが、順序に基づくものであることを見出す能力。
入力画像から出力画像を得るための方法は、違いをもたらしているものを、全て見出した時にはじめて可能になるのだろうと思う。
ヒトは、訓練画像を眺めながら、頭の中で、上記のような要素について、試行錯誤していたのだろうか。
どのような順序で試行錯誤していたのだろうか。
何問か解いているうちに、動かないもの、変化しないもの、に対して、もっと注意を払わないといけないと思ったことは、はっきりと覚えている。
さらに、途中から、対称性を強く意識した。反転、鏡像、回転など。
また、細部にとらわれすぎないように、抽象化と一般化も意識した。
相似を意識することも重要な要素だったと思う。
これらは、ほんの1部にすぎないかもしれないが、AIが備えておくべき能力なのかもしれないと思う。
知能テストは、知能を測る。知能は、意識して習得するものである。学習によって習得するものである。外界との相互作用によって獲得するものである。知能テストによって、獲得してきた能力が目的に応じて適切に適用出来るかどうか、そのレベルを測っている。当然のことながら、感情を測るものではない。創造性を測るものでもない。技能を測るものでもない。知識の量を測るものでもない。
知能テストの内容を分析的に捉えることによって、AIモデルを作り出すことができるだろうか。
シングルタスクからマルチタスクへ、その先にあるものとして、一般化されたものをイメージするのだが、その道筋は単純なものではなさそうだ。タスクの数を増やすだけでは一般化はできない。一般化と言うのは、各タスクの最大公約数のようなもので、一般化の概念としてはなんとなくあてはまりそうに思うが、数式を解くようにはいかないだろう。
ディープラーニングで、汎化と言う言葉が使われる。一般化、普遍化と同義だと思うのだが、狭い領域で使われることもあり、オーバーフィッティングではない、という程度の状態を指していることもある。画像認識においては、データ量が少ない場合には、物体固有の特徴量ではないものが画像から抽出されて、それが、オーバーフィッティングの原因になることがあり、それを避ける手段の1つが、データの増量である。
このデータの増量 (data augmentation) が、なぜ、効果があるのか、どのような場合にその効果が大きくなるのかを考えることは重要である。
data augmentationの典型的な手法は、上下左右の反転(反転対称)回転(回転対象)拡大縮小(相似)ノイズ付加(部分的には、抽象化や一般化の効果がある)などであり、これによって、物体固有の特徴が抽出される確率が高くなる。
data augmentationは、スモールデータをビッグデータにする手段であるが、本質的には、画像固有の特徴を抽出するための、非常に合理的な画像処理手法であろう。
数学的な計算によって画像に加えた加工処理が、CNNによる訓練によって、画像から抽出した特徴量に一般性を与えていると考えることができるかもしれない。
知能テストの最中にヒトが行う試行錯誤は、この、data augmentationを頭の中で行い、得られたさまざまな画像を使って、入力画像と出力画像の関係を把握する作業とみなすことができるのではないだろうか。
知能テストの最中にヒトが行う典型的な作業として、ざっと見る、詳細に見る、単純化してみる、抽象化してみる、というのがある。これらは、CNNによる画像処理における、畳み込みやプーリングによって、前段中段後段のレイヤが獲得する画像の特徴量の抽象度の違いに対応しているように思う。
試行錯誤の仕上げに近づくと、試行錯誤によって獲得した加工手順を、訓練データに適用して、その手順が正しいかどうかを確認することになる。
知能テストにおけるヒトの試行錯誤の要素と、CNNの要素には、かなりの共通点があるように思うが、その共通点をどうモデル化するのか、考えると面白いかもしれない。
知能テストには、色、形、数量、大きさなどを判断基準にする場合がある。
知能は、一般化したものではなく、基礎、基本、ベースになるものではないかな。論理学や数学のように、知の枠組みとして捉えるのが良さそうな気がする。
今は、知能とはなんぞやに対する答えが必要なのではなく、F. Cholletさんが提案したARCを解くことができるモデルを開発することが重要である。
ARCを解くことができるヒトがここにいるので、このヒトの真似をすればよいだけだと思うのだが、そのためには、ヒトが知能テストの際に何をしているのかを正確に表現することが必要になる。
知能テストでは、最初に、訓練データ全体を眺める。
そこから、不動性、動性、追加、削除、選択、色、拡大、縮小、数量、順序、類似性、対称性、その他いろいろな基準を適用してみて、入力画像にどの操作をどの順序で適用したら出力画像になるかを試行錯誤しているのだろうと思う。
試行錯誤をする対象が、全体から部分へと移動し、詳細を眺め、場所を移動し、また視野を広げ、さらに全体像に戻ってから、また部分へと移動するような作業を繰り返しているのだが、これを一括して行う方法があるだろうか、
訓練モデルの出力画像を保持して、入力画像に対する関係を様々な角度から調べていくことが必要で、そのために、試行錯誤を行うことになる。
機械学習では、試行錯誤は、特徴量の選択であったり、特徴量の獲得であったりすると思うのだが、その範疇の試行錯誤で知能テストが解けるだろうか。
機械学習では、特徴量は明示的に存在することが多く、どう選定するのかが重要になるのだが、DNNでは、訓練データから特徴量を学んで獲得することになる。知能テストでは、特徴量は明示的には存在せず、数枚の訓練データの中に存在するので、知能テストに正解するには、訓練データから特徴量を学び取らなければならない。問題は、教師データが数件しかないことと、ラベルが明示的でないことである。
ARCデータセット全体を使えば、教師データは1200件くらいになるので、DNNのセンスからすれば、data augmentationがうまく適用出来れば問題のないデータ量ではある。問題は、数件ごとに、タスクが違うことである。類似タスクがあったとしても、データ数で最大数十枚程度である。augmentationをフル稼働させて数百枚にしたとすると、次の課題は、ラベルである。
ここで、根本的な問題点を思い出した。知能テストは、その本質からして、その問題を事前に知ることはできない。さらに、類似タスクを集めてトレーニングすることも、趣旨に反する。つまり、各問題は、試験を開始して初めて見ることができる、というのが大前提となっている。そのためもあって、知能テストは、公開されていない。
ARCデータセットは、知能テストではなく、知能テストに挑戦できるAIを開発するために開発された物であるから公開されているが、開発しようとしているAIモデルに、ARCデータセットを学ばせるのは、筋が通らないであろう。
知能テストは、予測問題ではない。したがって、知能テストにおける試行錯誤も、確からしさを指標にして、特徴量を抽出するのではない。特徴量という概念もあてはまらないかもしれない。
1つ1つの作業内容の結果は、確定値である。一致か不一致か、存在確率ではなく、存在するかしないかである。
さて、6d0160f0の問題を、AIに解いてもらいましょう。
8枚の画像をざっと眺めて、入力画像は3 x 3の画像が9つの3x3グリッドに配置されているのに対して、出力画像中では、1つの3x3グリッドの位置にしか3 x 3の画像が存在しないことに気付かなければならない。
その次には、出力画像の3 x 3画像が、入力画像のどの3x3グリッドの3 x 3パターンと同じなのかを調べて突き止めなければならない。
さらに、なぜ、出力画像中の9つの3x3グリッドの特定の位置にのみ、3 x 3の画像が存在するのかを調べて、答えを探し出さなければならない。
3 x 3の画像中での黄色のグリッドの位置が、9つの3x3グリッドの中での位置を決めていることに気付くためには、どうすればよいのだろうか。
3月14日
一昨日は、ARCデータセットの0番目から200番目までヒトのintelligenceで解いた。
昨日は、ARCを解いた結果を、振り返りながらまとめた。
今日は、201番目から、ヒトのintelligenceで解いて、そのプロセスをできるだけ詳細に追う。AIが解くことをイメージしながら。
201番目
<ヒトが普通に解く場合>
訓練画像
入力画像に黒いスポットがある ⇒ 出力画像は黒い線がある ⇒ 黒い点は黒い線に重なる ⇒ 黒い線の方向は垂直と水平 ⇒ 黒い線は同色の長方形の短辺方向 ⇒ 黒い線は同色の長方形の端部まで
テスト画像
同色の長方形のパターン内で、入力画像の黒い点を短辺方向に両端まで伸ばす。
・点を線にする。
・線の方向は短辺に平行
・線は同色のパターンの両端まで
ヒトは、テスト画像の作成まで行わず、テストデータの出力画像がヒトが出力画像としてイメージした画像と一致すれば正解したとみなす。
ちょっと待った。
テスト入力画像から、テスト出力画像を出力し、その出力データを提出することで、当該問題の試験は終了する。
試験問題を受け取るところから、提出するところまでやらないと試験を受けたことにはならない。
出力画像を作成するために必要な能力は、
理解すること:
・点を線にすること
・線は点を含むようにすること
・線を引く方向は、点が属していた長方形の短辺方向とすること
・線を引く範囲は、点が属していた長方形の端部までとすること
技能:
・理解したとおりに線を描くこと
<雑談>
人工知能に期待しているのは、人工知能がヒトと同じかヒトに優る能力を示すことに加えて、ヒトと同じように、ということでなければならないということだろうと思う。
ヒトと同じように、という言葉から、ヒトは人工知能に、感情表現や創造力を求める。
過去に、人工知能は何度も現れては消え、現れては消えてきた。単に消えたのではなく、それは人工知能ではない、と否定されてきた。否定の主たる理由は、感情表現や創造力の無さではない。エキスパートシステムと呼ばれたものも、オーム返しにすぎないと言われたようだが、データ量が増えて検索方法が進歩すると、たとえばウイキペディアの発展形とみなすことができ、知的資源としての有用性が生じるのだろう。
データ解析方法としての機械学習が発展し、データ認識方法としてのディープラーニングが現れ、あたかも、入力データから何かを学んだかのごとき結果を出力することができるようになった。これも出現当初は、これぞ人工知能と称され、現在のAIブームにつながっている。ニューラルネットワークは、脳の仕組みを模したものであり、CNNは視覚認識機能を模したものであり、何より、deep learningが、ヒトの学習能力を想起させることなどから、AIは近いうちにヒトを超えるだろうと言われるようにもなった。
しかしながら、研究者たちは、AIと、ML/DLを分けて考えている。ML/DLは、ヒトが知識を移転したものであり、受動的であり、AIとは呼べない。
目指すものはどこにあるのだろうか。AIは、ML/DLとは全く別のものとして出現するのだろうか。AIは、ML/DLの延長線上に出現するのだろうか。もしかすると、AIは、ML/DL/AIのように、DLの部分集合として出現するのかもしれない。AIは土台であって、派手なアプリのようなものとして出現するようなものではないのかもしれない。ML/DLの上に君臨するものではなく、ML/DLを下から支えるものとして出現するのかもしれない。知能が知の源なのだから、AIもML/DLの源でいいんじゃないのか。AIが生まれ、成長し、DLに組み込まれることによって、本物のAIの世界がやってくる、かもしれない。
ML/DLは、ヒトが知識を移転したものであると考えるならば、その土台となるAIは、ヒトが知能を移転したものであると考えることができるかもしれない。ヒトの知能を移転することができた暁には、そのAIに、ARCテストを受けさせてみようではないか。
201番目(855e0971)
<AIが解く場合>
訓練画像
AIには、訓練画像はヒトが見るようには見えない。
AIに、訓練画像8枚を入力する。行列が8個である。
最初の訓練入力画像の行列は、15x19のグリッドからなり、2x19, 7x19, 6x19のグリッドに分かれていて、それらのグリッドには、それぞれ、5, 4, 8の数字が入っている。
さらに、7x19のグリッドには0が2つ、6x19のグリッドには0が1つ入っている。
最初の訓練出力画像の行列は、入力画像と同様に、15x19のグリッドからなり、2x19, 7x19, 6x19のグリッドに分かれていて、それらのグリッドには、それぞれ、5, 4, 8の数字が入っている。
さらに、7x19のグリッドに入っていた2つの0のうちの1つは、上に3つ下に3つ増え、もう1つの0の上に1つ下に5つ0が増えている、6x19のマスにあった0は、その上に3つ、下に2つ0が増えている。
入力画像の3つの点が、出力画像において3本の線に変化したことは、ヒトは2枚の画像を(視覚で)見比べて判断することができる。
入力画像がどのように出力画像に変化したのかを知る方法は、まず、差をとること。要素ごとに差をとると、変化したグリッドの数値がマイナスとして残り、他は全てゼロになった残差ベクトルが得られる。
残りの訓練画像ペアについて残差行列を算出すると、それぞれの入力画像からの変化がわかる。
仮に、4ペアの残差行列の平均をとっても、意味のある配列にはならない。
欲しいのは、4つの入力画像と出力画像のそれぞれの残差に含まれている情報を、一般的、普遍的に表現したものである。
この問題のように、行列の差をとることは、単純だが、重要な情報を含んでいることは間違いない。3組くらいの訓練データから、共通項として、変換規則を抽出し、コンピュータ用語で表現しなければならない。
ここから前に一歩も進めない。
同じようなところで、同じような話を繰り返して、止まっている。
テスト入力画像からテスト出力画像を作るとき・・・。
訓練データから手順を読み取る方法と、それをテストデータに適用する方法
手順との簡単な例:
パターンを同じ色のバーの間に移動すること
ラインを訓練データと同じ形状でつくること
ノイズを消すこと
閉じた空間だけ塗りつぶすこと
つながった空間だけ塗りつぶすこと
お手本と同じ模様を作ること
特定の形のものだけ色を変えること
訓練データと同じようにパターンを増やすこと
同じ形状のパターンにマーキングすること
入力画像と出力画像の関係性をコンピュータ用語で表現する方法はあるのか
入力画像と出力画像の関係性を把握するために必要な画像処理技術はあるのか
左右に反転して移動するルールであることの把握
マス目の数が違う画像の比較
入力画像と出力画像の関係性を読み取る方法を定式化することに集中する。
必ず役に立つ、最も重要なことは、最も得意とするプログラミングソフトを使って、実際に、例題を解くこと。
入力画像(入力グリッド)を、出力画像(出力グリッド)に変換できること。
この作業を、コツコツと続けていくと、ヒトのintelligenceが、必ず、プログラミング技術を向上させる。
1問目が最初のヤマ、
それを超えると、例題もテスト問題も解ける。
2問目が次のヤマ、
課題が変わるとプログラムの内容が激変する、だろう。
これも、1例クリヤすれば、他の例とテストは解ける、だろう。
3問目も大きなヤマかもしれない、・・・。
・・・。
10問目くらいになると、どんな課題にも対応できるような気になってくる、かもしれない。
・・・。
20問目くらいになっても、難しい課題に出くわして、頭を抱え込んでしまうことがあるかもしれない。共通に使える関数が1つ2つできているかもしれない。
・・・。
50問目くらいになると、プログラミング技術に変化が出ている、かもしれない。共通に使える関数が10個くらいできているかもしれない。
・・・。
100問目くらいになると、なにかしら大きな変化が生じ始めているかもしれない。
・・・。
コンペ終了までにどのレベルまで到達できるか、ということよりも、まず、1問目の課題を解くことから始めましょう。
・・・。
Artificial General Intelligenceは、まだまだ、はるか先のほうにあるかもしれないし、200問くらい解いたら見えてくるかもしれないし、10問解ければ、ぼんやり見えてくるかもしれないし・・・。
つづく