シンギュラリティ実験ノート

購入した1000ドルPCで何がどこまでできるのか実験した記録です。

700億パラメタのLLMは小学生の算数の問題が解けるか

1000ドルPC上で70億パラメタのLLMを動かしてみると、LLMは算数の問題が意外と得意ではないことが分かる。JanがダウンロードできるLLMには700億パラメタのLLMも複数あるので、700億パラメタにすると算数の問題が解けるようになるのか試してみた。また70億パラメタで日本語と数学の得意なモデルを融合させたSakana AIというLLMも公開されたので試してみた。

SDXL-Lightning- Text To Image 2-Stepsで描いてもらいました

小学生の算数の問題

これを試そうと思ったのはGigazineの以下の記事を見つけたことがきっかけだった。

gigazine.net

このベンチマークテストの中で正答率の低い質問として以下の質問があった。

私は市場へ行きリンゴを10個買いました。私はリンゴを2個隣の人に、もう2個を修理屋さんにあげました。それからリンゴをさらに5個買い、1個食べました。また、バナナを3本兄にあげました。リンゴは何個残ったでしょう?段階的に考えてみましょう。

バナナの本数が入っていて引っ掛け問題になっているが、落ち着いて考えることができる小学生なら答えられるレベルだ。小学生の算数の問題と思っていいだろう。試してみるとGigazineの記事の通り、ほとんどの70億パラメタのLLMでは正しい答えが返ってこなかった。例えばこんな感じだ。

いくつかのLLMでは正解できていたが、概して70億パラメタのLLMでは小学生の算数レベルでも難しいようだ。では700億パラメタになるとどうだろう。

 

Janでは700億パラメタのLLMとして「Tulu 2 70B Q4」と「Llama2 Chat 70B Q4」がダウンロードできる。このクラスになるとモデルサイズが40GB、GPUではメモリが足りないのでCPUで動かすことになるが、使用メモリは50GBを超える。これまでMac miniで4GBのメモリで遊んでいた私からすれば、実に豪勢な遊びだ。

結論から言うと、このクラスになると小学生の算数レベルの問題は正しく答えてくれる。以下は「Tulu 2 70B」の答えだ。

中学受験レベルの問題

では、鶴亀算ではどうだろう。鶴亀算は小学校では教えていない。私立中学を受験する子たちが塾で習う算数の問題だ。中学生なら連立方程式を使って解くことができるが、小学生には連立方程式は理解できないので、鶴亀算という特殊な方法を習った子なら解くことができる。

鶴の足は2本、亀の足は4本です。鶴と亀の合計は5匹で、足の数を合計すると14本です。その場合、亀は何匹いますか?

この問題はIT naviさんがLLMを評価されていたページから借用した。

鶴亀算は「Tulu 2 70B Q4」「Llama2 Chat 70B Q4」共に正解できなかった。「Tulu 2 70B Q4」は以下のように惜しいところまでいくが正解できなかった。

鶴亀算の問題ができないからLLMには小学生レベルの能力がない、と言ってしまうのには抵抗がある。人間の場合でも、普通の小学生は鶴亀算の解き方を習わないし、習ったことがなければできなくても当然なのだ。それはLLMでも同じだろう。

そこで算数(数学)の訓練を受けたモデルで試してみたいと思った。たまたまSakana AIという日本語と数学の得意なモデルが公開されていたので、これを試してみることにした。

 

Sakana AIは鶴亀算の問題を解いてくれた。ただし何故か回答は英語だった。

中略

70億パラメタでも数学を学習すれば中学レベルの問題も解けるようだ。

高校数学レベルの問題

IT naviさんのページからまた借用してSakana AIに因数分解の問題をやらせてみた。

6x^2+x-12を因数分解してください。

いい線までいったが不正解だ。正解は(2X+3)(3Xー4)である。70億パラメタで数学の学習をしたLLMも高校数学レベルはまだ難しいようだ。

国立大学入試レベルの問題

最後に無茶振りかもしれないが、国立大学入試問題を解かせてみた。

1000以下の素数は250個以下であることを示せ (2021年 一橋大学

正直、このレベルになると私自身も正解する自信はない。この問題の解き方はYouTubeで検索すると解説動画が出てくるので、興味のある方は見て欲しい。Sakana AIくんが返してきた回答は、実に味わい深い回答だった。

以下略

「エラトステネスの篩(ふるい)」という考え方で問題を解こうとしているところは正しいのだが、Pythonを使っている。これはルール違反だ。出題する時に「Pythonは使わないこと」と注意しなかった私の出題ミスだったかもしれない。しかし作成したPythonスクリプトを実行すると、確かに1000以下の素数は168個しかないと正しく計算している。つまりAIにとっては1000以下の素数が250以下であることは「直感的」に瞬時に分かってしまうことなのかもしれない。

参考までに、以前私が何度かBing(Copilotと呼び方が変わる前)で試してみた時に、一番分かり易いと思った回答がこれである。YouTubeの解説動画でもこの証明方法を使っていたと思う。

1000以下の素数が250個以下であることを証明するには、1000以下の合成数が750個以上であることを示せばよいです。1000以下の2の倍数、3の倍数、5の倍数の個数を求め、それらの和から重複している部分を引くことで、2または3または5の倍数の個数が求められます。それらの中には2,3,5が含まれているため、それらを除いた合成数が731個存在します。さらに、7×7, 7×11, 7×13, 7×17, 7×19, 7×23, 7×29, 7×31, 7×37, 7×41, 7×43, 7×47, 7×53, 7×59, 7×61, 7×67, 7×71, 7×73 の19個が少なくとも存在するため、少なくとも750個の合成数が存在することが示されます。したがって、1000以下の素数は250個以下であることが証明されます。

雑感

現在の70億パラメタのLLMでも、きちんと学習したLLMであれば中学生レベルの数学は正しく回答できることが分かった。高校数学レベルはまだ間違えるようだが、PCの性能が上がっていけば、高校数学はもちろん、大学入試レベルでも正しく答えられるようになるだろう。それも時間の問題だと思う。

ここから話が横道にそれるが、AIが大学入試問題にPythonのプログラムで回答してきたことは、私には興味深いことだった。つまりAIにとって自明なこと(例えば1000以下の素数は168個しかないこと)を、AIが人間に分り易く説明することの難しさと大切さを気付かせてくれたのだ。

この課題は将棋AIの世界でもよく話題になる。将棋AIは瞬時に何億通りもの手筋を読み、最も勝率の高い手を示してくれる。しかし何故その手が良い手なのかは説明してくれない。現在のプロ棋士達は将棋AIを使って研究することが当たり前になっているが、何故その手が良い手なのかをAIが言葉で説明して欲しいと思っているのだ。

将来、AIが人間の能力を超えて賢くなった時(レイ・カーツワイル氏は2020年代の最後までにそうなると予測している)AIが何を考えているのか人間が理解できなくなることを懸念する声がある。確かにそれはそれで怖い面がある。しかし私は今のままAI技術が発展していけば、AIが人間に対して分り易く説明する能力も身に付けてくれるのではないかと楽観的に考えている。今回の大学入試問題も最先端のAIなら人間に分り易く説明できているからだ。

その意味ではSakana AIが取り組んでいるような、日本語という言葉と数学などの個別能力を融合させる取り組みは有効であると思うし、今後もっと盛んに研究されるべきだと思う。