学習した絵 ≈ 20億枚以上
1枚あたり < 1 バイト
-
AIは絵を
どう学ぶのかStable Diffusion などの画像生成AIは、拡散モデルという方法で絵を学んでいます。私の作品を1枚サンプルにして、その中身を1段ずつ見ていきましょう。
→キーか「次へ」で進みます。右上でサンプルの作品を切り替えられます。
-
AIが学ぶ材料は、1枚の絵と、その絵を説明する短い文章の組(ペア)です。
※ ここの説明文は、この解説のために書いた例です。実際の学習データでは、ウェブ上の画像に付いていた代替テキストなどが使われます。
-
説明文は単語に分けられ、言葉用のAI(CLIP)によって、1語ずつ512個の数の列に変換されます。左の単語の下の小さな棒は、そのうち最初の16個です(上=プラス、下=マイナス)。
下の図は、512個すべてを1語1行で並べたものです。
-
この512個の数は、ひとまとめにして512次元の空間の中の1本の矢印として扱います。大事なのは1個1個の数ではなく、矢印の向き。意味が近い言葉ほど、向きが近くなります。
絵を作るAIは、この向きを手がかりにノイズを取り除きます。だから向きの近い言葉(猫と犬、オレンジとカボチャ)は、似た絵に向かいやすくなります。
図の中の言葉(または左の単語)を押すと、向きが近い言葉が出ます。
-
こうした組を、ウェブから何十億組も集めて学習します。Stable Diffusion は LAION というデータセットをもとに作られました。
-
でも、そのままの絵は数字が多すぎます。384×512の絵なら、マスが196,608個。色3つ分で589,824個の数です。
-
そこで、まず解像度を半分に。2×2のマスを1つにまとめて、192×256マスにします。
-
さらに半分で96×128マス。細かい模様が消えはじめます。
-
もう半分で48×64マス——縦横それぞれ1/8です。数は12,288個、元の約1/48になりました。
-
もっと縮めるとどうなるでしょう。24×32、12×16……ここまで来ると、何の絵か分からなくなります。
-
だから画像生成AIは1/8で止めます。ここから最後まで、AIはこの48×64のモザイクだけを相手にします。
※ 正確には、この圧縮は専用のAI(VAE)が行い、1マスには色ではない4つの数が入ります。ここでは見やすいよう、各マスを平均の色で表示しています。
-
次に、このモザイクに砂嵐のようなノイズを少しだけ混ぜます。
-
混ぜる量を増やしていくと、絵の成分が減り、ノイズの成分が増えていきます。
-
700段階目。もう、うっすらとしか見えません。
-
1000段階目。ほとんど砂嵐だけになりました。
※ 混ぜる割合は Stable Diffusion と同じ式(scaled linear・1000段階)で計算しています。
-
ここまでは計算式だけでできます。AIが学ぶのは、この逆向き——砂嵐から絵を取り戻すほうです。
-
学習の1回分を見てみましょう。
① 絵に、ランダムな段階のノイズを混ぜます。 -
② それを説明文と一緒にAIに見せて、「どこがノイズか」を予想させます。
-
③ 本当に混ぜたノイズと答え合わせ。右下の赤いところが、予想が外れたところです。
-
④ ずれが小さくなる方向へ、AIの中の数(重み)をほんの少し直します。絵もノイズも変えながら何百万回もくり返すと、赤が薄くなっていきます。
-
では、AIは何を覚えるのか。強いノイズ(t = 900)が混ざると、元がどの絵だったかは、もう誰にも分かりません。AIにも分かりません。
-
分からないとき、誤差がいちばん小さくなる答えは、同じ言葉が付いた絵すべての「平均」です。たとえば、同じ言葉で私が作った作品を集めると——
-
1枚、2枚、4枚……と重ねて平均をとっていきます。1枚ずつの細部は打ち消し合って消え、共通する色と配置だけが残ります。
-
数式にすると、こうなります。学習は二乗の誤差を小さくすること。それを最小にする答えは「平均」で、絵が何億枚にもなると、AIの答えはその言葉の平均に近づいていきます。
-
言葉が違えば、平均も違います。AIが覚えるのは、こうした言葉ごとの傾向です。ほかの言葉も押してみてください。
※ 平均の絵は、私の作品からブラウザで実際に計算しています。本物のAIはこうした絵をしまっておくのではなく、こういう答えを出せる数(重み)を学びます。
-
学習を終えたAIで、絵を生み出してみます。出発点は砂嵐。ここでは違う砂嵐を3つ用意します。
-
言葉を手がかりに少しずつノイズを取り除くと、まず現れるのはその言葉の平均——大まかな色と配置です。右下の小さな絵 x̂ は、AIがそのとき思い描いている完成形。3つとも同じ姿です。
-
ノイズが減るにつれて、細部が決まっていきます。細部の描き方は無数にあり、どれになるかは出発点の砂嵐しだい。だから3つは別々の絵に分かれていきます。
-
最後にモザイクを元の大きさに戻して(デコード)完成。同じ言葉から、3枚の新しい絵が生まれました。
※ 完成例として、この言葉で私がAIで生成した作品を置いています。どれも学習データの絵を再現したものではありません。途中経過は図解で、本物のAIの出力ではありません。
-
言葉を変えると平均が変わり、生まれる絵も変わります。ほかの言葉も押してみてください。
-
結局、AIは何を覚えたのか。残っているのは絵の束ではなく、「この言葉なら、こういう色がこう並びやすい」という言葉ごとの平均(傾向)を計算するための、大量の数(重み)です。
-
Stable Diffusion でざっと計算すると、モデルは約2GB、学習した絵は20億枚以上。1枚あたり1バイトにも満たず、絵をそのまましまう容量はありません。
-
ただし、同じ絵が学習データに何度も重複して入っていると(有名な絵画やロゴなど)、その言葉の「平均」がその1枚に引き寄せられ、ほぼそのまま出てしまうことがあると研究で報告されています。学習データや権利の扱いが議論されるのは、このためです。
-
AIは「言葉に合いそうなもの」へ向かうだけ。どんな言葉を選び、何百枚からどれを残し、どう仕上げるか——作品性は、その選択の中に宿ります。
出典:Stable Diffusion などの潜在拡散モデル(Rombach ほか 2022、Ho ほか 2020)。モザイクの大きさ(縦横1/8)、1000段階のノイズの割合と混ぜ方は実際の方法に合わせています。AIの予想や生成の途中経過は、ブラウザで作った図解です。丸覚え:Carlini ほか「Extracting Training Data from Diffusion Models」(2023)。
1行=1語、左から右へ512個の数。金=プラス、赤=マイナス、濃いほど大きな数です。どの行にも縦にそろって出る縞は、どの言葉にも共通する部分。1個1個の数に「赤さ」「丸さ」のような決まった意味はなく、512個の組み合わせで意味を表します。
※ これはAIの「重み」ではありません。重み(CLIPの言葉の部分だけで約6,300万個の数)を使って計算した、言葉の座標です。数は CLIP(ViT-B/32)で実際に計算した値。Stable Diffusion 1.x は大きい版の CLIP(1語768個)を使い、文全体の流れの中で各単語を数にします。
512次元はそのまま描けないので、選んだ言葉(赤)を真ん中に置いた「方位磁石」の形で描いています。真ん中からの距離が、512次元での矢印どうしの本当の角度です(円は内側から30°・40°・50°・60°)。円のどちら側にあるかは、見やすく並べただけで意味はありません。関係のない言葉どうしでも50°ほどしか離れていないのは、どの言葉にも大きな共通部分があるためです。灰色の言葉は説明文には無い、比べるための言葉です。
= その言葉の平均(期待値)
x̂ は AIが予想する元の絵、x₁…x_N は同じ言葉が付いた絵。中央値ではなく平均(期待値)です。二乗の誤差を最小にするのは平均で、絶対値の誤差なら中央値になります。ノイズを当てることと元の絵を当てることは、式の上では同じです(絵 = ノイズ入りのモザイク − ノイズ)。正確には「同じ言葉で、このノイズ入りのモザイクになりえた絵」すべての平均です。