ComyUIでお絵描きをしており、そもそもどのような技術でお絵描きできているのか知るために、調べていった内容をまとめていきます。
この記事では、難しい数式については(あまり)記述しないようにします。
そこらへんの詳しい記述、メカニズムは他の方にお任せします。
大まかに概要を2分くらいで掴みたい方向けの記事です。
拡散モデルの名前
Denoising Diffusion Probabilistic Models(略して、DDPM)
ノイズ除去拡散確率モデル
ここから、縮めて「拡散モデル」と呼ばれるようです。
拡散モデルについて
【2つのフェーズ】
- 学習時(開発者が実施)
- 生成時(ユーザーが実施)
【学習時の核心】
・元画像にノイズを加える
・AIがノイズを予測
・実際に加えたノイズと予測ノイズの差を最小化
・パラメータを最適化(何百万回繰り返し)
→ ノイズ予測能力を獲得
【生成時の核心】
・プロンプトで方向を指定
・学習済みモデルで指向的にノイズ除去
・段階的に繰り返して画像生成
【重要な制約】
プロンプトで指向できるのは学習済み概念の範囲内のみ
学習プロセスの全体
ランダムなパラメータで開始
↓
画像を1枚取る
↓
ノイズを加える
↓
U-Netで予測
↓
実際のノイズと比較
↓
差(Loss)を計算
↓
「どうパラメータを変えればLossが減るか」計算
↓
パラメータを少し調整
↓
次の画像へ
これを何百万回も繰り返す
↓
Lossが十分小さくなる
↓
学習完了
↓
最適化されたパラメータを保存
↓
モデルファイル(.safetensors)
「学習」というイメージ
美術の授業で、絵の描き方を習うようなイメージ。
【学習時】先生(モデル作成者)が何百枚もの絵を見せて、描き方を教える
→ 「りんごとは何か」「猫とは何か」という概念を学ぶ
→ これが「学習」
【生成時】学んだ知識を元に白いキャンバスから新しい絵を描く
→ 「バナナを描いて」という指示(プロンプト)で方向を決める
→ これが「生成」
学習で見た特定の絵をコピーするのではなく、
概念を理解して新しい絵を描く。