見出し画像

Stable DiffusionとLLMの基本のき/1

独自学習を続けてきたのでそろそろ一旦アウトプットしようかなと思います。
今わかっていることをまとめます。間違っているところは教えてください。
ざっくりと分かっていればとらえ違いしなくて済むポイントを提示することが目的です。

あと、ぼくはリアルモデルしかやったことが無いので全部リアルモデルでの話です。が仕組みはアニメモデルも全く同じなので例として言っているときだけリアルモデルでの話です。

まず用語の定義はこちらです。

  1. SD(Stable Diffusion)=推論画像生成AI

  2. LLM(Large Language Models)=推論文字生成AI

(本当ならばSDというのはプロジェクト名だからLLMと比較するものではないけど、なじみがあってわかりやすいからこのままでいきます。LLMの方をGPTと見てもいいです。)

共通しているのは推論で何かを生成するものということですね。
片方は画像を、もう片方は文字を生成します。
とてもシンプルですね。わかりやすいです。

SDは「画像」
LLMは「文字」のAI。


SDとLLMの共通点


いきなり核心部です。
SDとLLMは予測演算の計算機であるというところは同じです。(前々回ぐらいの記事を要参照↓リンク)。

つまり、任意の固定値を出しません。もっとも可能性の高いものを選んで出します。ここが分かってないと始まりません。

追記:最新のシェアではLLMは文字の計算機とか文字版電卓と言う表現よりも、オートコンプリートのすごい版という表現のされ方もあり、人によってはそちらの方がしっくりくるかもしれませんね。


次に、

  1. 『タグと画像のペア』を学習させたものが『SD』で、

  2. 『質問と回答のペア』を学習させたものが『LLM』です。

これが本質になります。

タグは文字(テキスト)です。質問も文字(テキスト)です。回答も文字(テキスト)です。
SDは文字と画像、LLMは文字と文字なんだけど、そこにすでに目的が備わっているからタグとか質問と回答とか言っているだけですね。

(LLMの場合には質問と回答以外のセットの場合もあります。けど基本のきはこれなのでほかのパターンには触れません。)

このようにペアを学習させているという共通項があるのでほぼほぼ仕組みは似ています。片方が分かるともう片方もおのずとわかりはじめます。やや複雑なだけであまり難しくはないです。

ここまでが核心部でした。

タグ と 画像 で SD
質問 と 回答 で LLM

個人的にはbingAIチャットに聞きながら補足してもらいながら自分の疑問を晴らすのが正解の勉強方法かなと思います。ぼくはそうしました。BingAIみたいなものは核心部分をバーンと言ってくれないので、この核心部分を知るのが難しかったです。

ここから先は核心ではないけど必須な機能みたいなことの説明に入ります。

SDとLLMの違い


SDとLLMの違いの解説は、マッチするところが無いので、知りたい方だけを選んでください。大きな違いは

  1. SDは 『画像生成特化モデル』で、

  2. LLMは『文字生成特化モデル』だというところです。

つまり、画像しか出せません。文字しか出せません。そして逆はできません。(SDは文字を出さないし、LLMは画像を出さない)

SD は 画像 だけ
LLM は 文字 だけ

SDとLLMの標準仕様


SDとLLMでは生成される目的物が違うのでおのずと生成の仕組みも違ってきます。それぞれ解説します。

SDの標準仕様


SDの標準仕様は、プロンプト(トークン)毎のセグメンテーションコラージュです。

たくさんのタグと画像のペアを学ぶと、おのずとタグによる区別(セグメンテーション)がしっかりできるぐらいになって、それをプロンプト(トークン)で呼び出せます。呼び出した要素を自然な文脈で判別(セグメンテーション)し、配置してコラージュ(合成)作品が完成します。セマンティックセグメンテーションコラージュです。これが基本です。生成ボタンを押して数秒待つだけで、全自動で意味が通る自然な配置を達成しつつ、破綻の少ない合成画像が得られるという意味です。これが画期的な発明なのです。

(セグメンテーションとは、男女を区別するとか、足を認識するとか、背景に何があるかを認識するとかそういうことです。学習量依存なので、認識できなかったり認識が甘いセグメントも残ります。)

人間はSDの中身を見れないので人間が思うプロンプトの内容と、実際にSDが保持しているトークンの内容は絶対に一致しないので、必ず思っていないものが現れて自然にコラージュされます。それは特徴成分を合成しているからで、これが『みそ』になります

セグメンテーションコラージュとは要素と要素をちゃんと区切ったり自然になじませたりする寄せ集めのことです。特徴というエッセンスだけをコラージュするので画像のコラージュとは考え方と仕組みが違います。

例えば、海と指定したのにヤシの木が勝手に出ますよね。ヤシの木が欲しければそのままで気になりませんが、邪魔ならネガティブプロンプトで打ち消す必要があります。海というトークンに紐づいている海の画像の「成分」が出力されます。これがセグメンテーションコラージュです。

この場合は、海の形の波とか色とか砂浜とかヤシの木とか水着とか水平線とか雲とか空とかです。普通、画像のコラージュだと海の切り抜きを使うと見る人が人間なので、普通にそれは海だと認識されますがPCは画像を数値の並びとしかみません。それだと違和感のないコラージュを自動化するのが難しいので特徴(数値)を抽出して認識させることでAIとして機能して使えるようにし、コラージュの自動化を達成しています。

それと、海に関連付けされているものはたいてい自然な形に出てきますが、無関係な指定(例えば海と銀河)をすると、どこかしらでコラージュの破綻が出ますが、アートスタイルっぽく見えると、人間はそれはそれで納得できてしまうので気にしていません。(後で出てくるLLMのハルシネーションはこの問題をシビアに見ているということです。)こちらもセグメンテーションコラージュになります。画像から抽出されたエッセンスである「特徴」だけをセマンティックコラージュしているからこそ、無関連の物どうしもきれいにマージされうるという意味です。

これはかなり簡潔に表現したSDの仕様です。

すべてはプロンプト(トークン)だけがキーポイントです。なぜなら、学習させているのがタグと画像のペアだからで、それ以外の何かを学んでいるわけではないからです。(例えば他の画像との関連性など)

画像出力という単一の機能であれだけ、豊かな多彩なAI画像が出せるようになるので、SDはもっとすごく賢くて、ブラックボックスで、訳が分からない謎技術の結晶なんだろうと思うかもしれませんが実際にはそうではないと思います。

例えば「顔」を例に出すと、同じプロンプトで100枚生成して、それを30回繰り返してできた画像を見ると、(どこかで見たな、あれ君また会ったねという少しずつ違う)同じ顔に何度か会うと思います。(おそらく)顔の特徴は拡大、縮小、回転、移動して使いまわされています。

また、動画と違い正面顔と横顔を勝手に合成して新たな斜め顔というものを生み出しません。斜め顔を出すときにはシンプルにデータセットに含まれている斜め顔から得た情報を出します。再帰的な自己学習はしないという意味です。
仕組みはすべて同じなので顔以外も同様です。

顔というのは目、鼻、口、頬、顎、眉毛、前髪、触覚、チーク(化粧)、リップ(化粧)、アイシャドウ(化粧)、アイライン(化粧)など等と人間では細かく認識するかもしれませんが、もともとのデータセットには「1girl,black eyes」のような簡素なタグしか含まれていないので、細かな指定は効きません。セグメンテーション的には目も鼻も認識はできると思いますが、指定してうまく出てくるかは別の話です。タグ付次第ということです。

特徴というものをとらえ違いしているとSDが万能だと勘違いしてしまいます。特徴量の学習はこのようにされているみたいです。(https://www.youtube.com/watch?v=vU-JfZNBdYU&t=730s)
たったのこれだけです。シンプル

一つ一つをかみ砕いていくと思いのほかシンプルな仕組みではないでしょうか?ぼくはこんなに簡単なことでいいのと楽しく思います。

学習時のタグと画像のペアがトークンごとにマージされていきます。

あるトークンは単一の特徴を強く保持しているというよりも、特徴をすべて保持してたくさんのベクトルを含みます。「girl」の生成物が1つの強い特徴に固定されなくて生成の度に変わるのは、たくさんの特徴が1トークンに含まれているからです。(グーグル検索に似ていますね)

でもこれだけだと、毎回似た絵(検索一致度)が出やすくなってしまうので、シードとCFGによってランダム性を持たせて出力幅が広くなるようにしてあります。

その他、ランダムつながりでいうとトークン毎に学習されている特徴量が違うので出やすいものと出にくいものがあります。(人は破綻が少なく出やすいけど、ぬいぐるみは破綻しやすいなど。)しかし、人は人でも指は破綻しやすい。それは「1girl,black eyes」というタグだとだめかもしれないということです。
(1girlに指は全部で5+5の10本だとしっかり学ばせられればあるいはうまくいくかもしれませんが、隠れていて指が見えない、本数がいつもばらばらな画像で学習されてしまうと指が無い、または本数が一定ではないのが1girlであるとAIは特徴を認識します。なので1girlと指定しても指の本数がばらばらなのがAI的には正しいのです。)

あとは、サンプル数は単にノイズを何回削除したかだけで、サンプラーはわかりませんがたぶん収束の仕方か何かです。

後、その他の機能は画像のサイズ変更であったり、顔修正だったり、直接画像生成(推論)とは関係ないおまけ機能になります。無いとまともな出力物にならないので必要ですが、画像生成部とおまけ機能を合わせて一つのUIにまとめてくれたのがWebUIです。言い換えれば、いくつかの単品機能をひとまとめにして連携機能として使えるようにしてくれたものがWebUIです。

画像生成部は(上記の)タグと画像のペアを学習させたものからプロンプト(トークン)を指定することで呼び出す部分だけです。

webUIを使っていると、新機能がどんどん発表されて使ったことが無い機能が増えてきますが、新機能はすべておまけ(補助)機能です。実はSDの根幹部分は何も変わっていません。だから、プロンプト(トークン)で呼び出す部分はそのままなのでいつもプロンプトで呼び出しているわけです。補助的に骨人間とか線画を使ったとしてもです。

ここまでがSDの仕様になります。

・SDはセマンティックセグメンテーションコラージュ
(あえて日本語でいうなら、タグによる自動判別寄せ集め 画像生成器)
・学習量依存だけど、全自動で意味が通る自然な配置を達成しつつ、破綻の少ない合成画像が作れる
・セグメンテーションコラージュとは特徴のマージ(合体)のことで、単純な画像のコラージュとは考え方も仕組みも異なる
・人が思うのとAIが掴んでいる特徴(ベクトル)は大きく違う
・特徴は拡大、縮小、回転、移動して使いまわしてるっぽい
・特徴AとBを合成して新たなCを生まない(自己学習は一切しない)
・シードとCFGで出力の幅広さがUP
・各トークンの学習率が異なるから各トークンの出力精度はまちまちになる
・WebUIは 画像生成部 と おまけ機能 と おまけ補助機能 のセットを素人でも常に最新版で使えるようにしてくれたもの


LLMの標準仕様


LLMとは、大量のテキストデータを使ってトレーニングされた自然言語処理のモデルです。LLMはテキストを単語や記号などの最小単位であるトークンに分割し、トークンの並びから次に来るトークンを予測することでテキストを生成します。このとき、文脈や背景なども考慮して適切なトークンを選択するように学習されています。

LLMの標準仕様とは、トークン単位の予測精度のことです。

ぼくはLLMは仕様をまともに解説するほどためしていないので、部分的にここまでは完全に理解したという所だけ書きます。なお、LLMは万能選手ということではないので、できないこと又は弱い部分があります。

LLMは予測演算器であり、質問と回答のペアで学習されているので、ハルシネーションが必ずありますが、それは仕組み上避けられない現象です。(仕様)

ハルシネーション(信頼性の欠如)を解決するためには、現行LLMではまともなデータセットを適切な量を用意する必要が生まれ、それは人の目を介さないとならないので大規模なものほど人的コストがかかり現実的ではなくなる、つまりそのLLMを使う時点でハルシネーション(信頼性の欠如)が常にどこかに存在しています。そしてどれがそれかが分かりにくいというのが「こりゃあかんわ」と言うところです。信頼性が欲しいところにはとても使いづらく感じます。

逆に言うとハルシネーション対策で雇用を作り、人を雇って人の目を通したスコアリングをしてデータセットの信頼性を高め、予測精度を上げる手法をとれる余地がまだありそうということで、一つのまともなLLMをみんなで仕事として作ることもできます。

ハルシネーションという問題があるけどLLMの開発を続けていく意味はリアルタイム双方向翻訳とか、画像認識=自動運転だとか、別にAGIでなくともLLMでできる新しい物がいっぱいあるのでそれを開発したいからしています。技術者が新しいインフラ整備のために頑張ります。

あとは作った人たちのお国柄とかのバイアスがもろに出てるので使いにくさがあって、それをローカライズして日本人のお国柄とか感覚にマッチしたLLMを作れば齟齬が消えるし、辞書や代行としても使えます。

ここまでがぼくがこれがそうだなとわかった部分的なLLMの仕様です。これ以外はまだ勉強中です。

LLMのハルシネーションは標準仕様
データセットの信頼性UPでハルシネーションを減らせるかも
LLMは使える場面があるから開発する

ここまでのまとめ


全部で1万文字以上のまとめになるのでここで一旦区切りとします。(ここまで約6000文字)

ここまで自分の中で蓄積してきた知識をまとめて出せてよかったと思います。自己学習なので、解説の仕方や切り口が初めて見るパターンだったかもしれませんがぼくは楽しかったです。

何か月か分の知識の圧縮なので一度読んだだけではつかみきれないと思うので、何度も反芻してみてください。ざっくりと分かっていればとらえ違いしなくて済むポイントを提示することが目的なので、これが分からないということはどこかとらえ違いしているとも言えます。でも心配しないでください。

一般的な解説とは全く違うので、一般的な解説との答え合わせを期待していると書いてあることが間違っていると感じて詰みますので、そうじゃなくて幅広い視点を持つとSDとかLLMの仕組みに新たな切り口から気が付けると思います。

しかし、技術者はちゃんと教科書どおりに学ばないとほかの技術者とかみ合わないと思います。これは独自学習の解釈です。自分で実装する必要のないアーティストや初学者などはこちらの仕組みの解説の方がシンプルでわかりやすいのではと思います。これをあとはずんだもんが解説してくれたらもっとわかりやすくなるだろうと思います。

今のAI技術の核心は、本当のAIではなくて「深層学習の重みの再現」技術だなと思います。だからインテリジェンスという枠組みではなくて、始めにデータセットありきの再現技術でその組み替えでさまざまな発想が出てくるというデモンストレーションだと思います。

すごく基本的なことを書きましたが、AIは一般人がどんどん参加していくような新規の産業革命なのでこの基本知識が広まるといいのかなと思います。腑に落ち着いたこと、納得できたことなら、どしどし自分の意見と混ぜ合わせて発信していってくださいね。全体的基礎力向上はあなたの肩にかかっている!(知らんけど)


~~~~~~~~~~~~~~~~~~~~~~~~~~

次はこちらです。


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?