Skip to content

2年間のこと③ 数学とAIを学ぶ

2022年末の時点で向こう2年半、2025年夏まで仕事のスケジュールが埋まっていた。この時点では明らかに僕は、日本で最も忙しい劇作家・演出家の一人だった。そしてその予定がすべて吹っ飛んだ。これにより僕は、日本で最も仕事のない劇作家・演出家になった。

最初の3ヶ月はまぁいろんなことがあって、大冒険の日々だった。いずれ書こうと思う。ややあって膨大に時間がある……要は盛大にヒマだということに気がつき、「勉強しよう」と思い立った。時間があるときにしかできないことをやる。そして数学とプログラミングを始めた。

僕は高3まで理数系だったが演劇をやるために途中でやめて、そのことをずっと後悔していた。まして世間は空前絶後のAIブームだ。機械学習、ディープラーニング、ニューラルネットワークというものを数式レベルで理解してみたいとずっと思っていた。そして、理数系の方はおわかりになるだろうが、数式を理解するには数式を解くしかない。

まず古本屋で高校数学の本を買ってきて三角関数から勉強し直した。「三角関数なんてなくても生きていける」、ときどきそう言う人がいるし、それは完全に正しい。しかし三角関数くらいでも完璧に理解すると、式や定理の描く世界があまりにも美しく、ダイナミックで、思わず声が出るほど面白い。こんな快感、まぁ知らなくても生きていけるけど、知らずに生きるのはもったいない!

動画サイトを見ながら大学数学の勉強も始めた。行列、確率、シャノンの情報理論、この辺りは機械学習を学ぶ上でマストらしい。行列なんて最初は全く意味がわからなかった。こういうやつだ。

これがちょっと勉強するとこんな風になる。

この式の意味がわかるようになると、もうほとんどエクスタシーだ。「ライブですごい演奏を聴いた」とか「最高級の牛肉を食べた」とかに近い。「こんな感覚があったのか!」「こんなに美しいものがあったのか!」、そういう感動がある。

確率の勉強もめちゃくちゃ面白かった。少し数学に興味がある人なら自然界は「黄金比」に溢れていて、巻き貝の模様や木の葉のつき方がキレイに1.618…になることを知っている。確率の“正規分布”も神秘的だ。

自然界に存在するランダムに見える現象、たとえばクラスの生徒の身長とか、川原に転がってる石の大きさ、サイコロの出目などいろんなものがこの形に収束する。「ちょっとズレるな」と思ったら、サンプル数を増やせばこの形になる。「全然違う形になった」という場合でも、値そのものではなく値がどれだけズレているか、つまり“誤差の値”をグラフに描いてやると……そこに正規分布が現れる! あるいは値の誤差を2乗したものが正規分布を描いたりもする。僕らと違って自然界の諸々は、累乗でリズムをとったりしているからだ。

数学や物理の天才、それこそアインシュタインのような人は、かえって神を信じたらしい。「こんなに美しい法則が自然界にあふれているのは、神がいたと考えるしかない。それがもっとも“論理的”だ」。哲学から曖昧なものを排除して、論理的・数学的に世界を記述した言語学哲学の祖、ウィトゲンシュタインもそうだった。「神は存在する。ただしそれは、この机の上には置けない」。

* * *

こうして学んだ数学知識を組み合わせて、AI、ディープラーニングの世界へ分け入っていく。AIについてざっくりわかっている人はいても、その仕組みを説明できたり数式やプログラミングで書ける人は少ないだろう。E資格というエンジニア向けの技能試験があるので、ひとまずそれを目標として勉強を始めた。

ここまですべて独学で来たが、E資格は認定スクールを修了していることが受験資格となる。スクールは大抵15~20万はして、中には50万するところまである。僕はもともと「勉強は自分でするもの」と思っているのでそんな大金払いたくないし、安いところを探してみると、オンライン限定、相談や個別指導は一切なし、勝手に頑張って課題までこなせば約3万円で修了できるコースがあったので、迷わずそこを選んだ。

講義動画の最後で必ず、「えー、それでは実習です。◯◯関数を実装してみましょう。また✕✕の定理のパラメーターの影響をmatplotlibで描写して見てみます。……あ、オンラインの方はここで終了です。各々頑張ってみて下さい。お疲れ様でした」と放り出された。上等だ。やってやろうじゃねぇか。

最終課題は現在のAI技術の起爆剤となった技術である「シグモイド関数」や「逆誤差伝播法」、「畳み込み」、「バッチ正規化」なんかを自力でプログラムに書き起こし、「手書きカタカナ文字画像の分類AI」を実装する。そして正答率99・9%を目指すというもの。自力でAIを書く作業で、これがやりたかった。

日夜コードを調整し、正答率を上げていく。修正したプログラムを走らせて、仮眠し、2~3時間したら進捗状況をチェック。パラメーターやコードを調整してスコアを上げていく。正答率90%くらいまではすぐに上がった。バグをとって98、海外の論文を読んで99.2、バッチ正規化を実装して99.5とじわじわ上がっていく。その度一喜一憂し、寝て、起きて、スコアを見て、カタカタとコードを直す。「おお、サの分類が100%になった!」「やっぱりお前はヌとスが苦手だな」……。

約2週間、まるで子供や動物が育っていくのを見るようで面白かった。しかしこれはすべてチューリング完全、ただの数学的演算の結果だ。例えばディープラーニングをかじった人なら死ぬほど目にするシグモイド関数は、Pythonコードで書くとこうなる。

def sigmoid(a):
  s = 1 / (1 + e**-a)
  return s

結局はこれと、行列の掛け算なのだ。こんな何でもない数式が、生き物のように動き出し、人間にしかできないと思われていた文字の認識を可能にした。そしてあと一歩で絵を描くようになり、文章を生成するようになる――つまりはChatGPTに到達する。

何日もの徹夜作業を経て、僕が作っていたカタカナ分類器はとうとう99・9%の精度を達成した。人間だって見間違えるような手書き文字を、人間より正確に読み解くほど成長した。この初歩的なCNN画像分類器とChatGPTの間には、Word2vecやAttentionなど技術的ブレイクスルーがいくつか挟まっているが、原理は同じだ。やはりただの計算なのだ。

となると逆に疑問が湧いてくる。知性とは何か? 論理とは何か、創造性とは何か? ――僕はもともと、やがてAIが物語を生み出すようになると予測してこんな勉強を始めていた。今やあれほど精緻な絵を描くようになったAIだ、物語を書く日も近いのでは? ならば……。

しかしこうしてきちんとソースコードレベルでAI技術を理解できるようになって、結論から言うと、それは不可能だろうと考えている。それはなぜか? 次回書く。

(続く)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です