拡散モデル入門:技術的深掘り#2

AI入門
この記事は約43分で読めます。

本動画は拡散モデル(Diffusion Models)の技術的な深掘り解説である。拡散モデルの基本概念から数学的な定式化、そしてアーキテクチャの選択まで、包括的に扱われている。講師のSahil Panjwaniは、画像に段階的にノイズを加える順方向過程と、ノイズから元の画像を復元する逆方向過程という2つの核心的なプロセスを詳細に説明する。GANsやVAEsといった他の生成モデルとの比較を通じて、拡散モデルの優位性―モード崩壊問題の回避、条件付けの容易さ、スケーラビリティ―が明らかにされる。数学的には、ガウス分布を用いた確率的定式化、マルコフ連鎖の性質、損失関数の導出が段階的に示される。また、UNETアーキテクチャが画像生成タスクで広く採用される理由として、エンコーダとデコーダの間でのスキップ接続による細部情報の保持が挙げられる。最後に、実装のためのコード例とともに、Stable Diffusionのような現代的な応用への言及もなされている。

Introduction to Diffusion Models: Technical Deep Dive #2
In this session, you'll learn the concept behind the development of the diffusion model and see how to implement a diffu...

拡散モデルの基本原理

本講義では、拡散モデルの核心的な考え方について解説します。拡散モデルの主要なアイデアは、何らかの画像を生成したいということです。ここで1つの観察があります。画像に何らかのノイズを加えると、その画像はノイズだらけになります。さらにノイズを加えると、より一層ノイズが増えていきます。

特定の画像に対してノイズを加え続けていくと、いずれは画像が完全にノイズ化される時点が訪れます。そうなると、もはや何も推測できなくなります。もし順方向のプロセス、つまりこの画像からこの画像へと進むことができるなら、完全にノイズ化された画像から元の画像を取り戻す方法が必ずあるはずです。

これが拡散モデルの核心的なアイデアでした。モデルは何らかのノイズ入力を受け取り、ループ内で中間処理を行い、そして実際の画像のように見える出力を吐き出します。これが拡散モデルの核心的なアイデアです。

拡散モデルを学び始める前に、なぜ拡散モデルについて学ぶべきなのか、なぜ拡散モデルを気にかけるべきなのかを理解しましょう。敵対的生成ネットワーク(GAN)やVAEのような他の生成モデルを使う代わりに、です。拡散モデル以前は、GANsが画像生成において最も有名なモデルでした。しかし、いくつかの欠点がありました。

GANsと拡散モデルの比較

各モデルがどのような利点を持ち、どのように機能するかを段階的に見ていきましょう。まず、GANsがどのように機能するかを説明します。GANsには2種類のニューラルネットワークがあります。1つは識別器(discriminator)で、もう1つは生成ネットワークです。

GANsのプロセスはどうなっているでしょうか。生成ネットワークは何らかの画像を生成します。次に、その画像をGANsの識別器ネットワークに渡します。識別器は、それが生成された画像かどうかを予測する必要があります。また、実際の画像も識別器ネットワークに供給することがあります。

このループが続きます。時間が経つにつれて、識別器ネットワークは「この画像は生成ネットワークから来た偽物の画像だ」「別の画像は実際の画像から来た本物の画像で、自然界でよく見るものだ」ということを学習していきます。

そして拡散モデルについては、先ほど簡単に説明しました。GANsでは新しい画像の生成は1回のパスで行われます。ノイズである入力データを与えて「何か生成してください」と言えば、直接新しい画像を生成します。

しかし拡散モデルでは、新しい画像を直接生成するのではなく、純粋なノイズが与えられたとき、まずノイズの少ない画像を作ろうとします。次により少ないノイズの画像を作ろうとし、最終的にはノイズを減らしていくことで、画像により細かいディテールが現れ、実際の画像のように見えるようになります。

これが複数パスによる生成です。最終的な画像を1回のパスで生成するのではなく、複数のパスで最終的な画像を生成します。次に、敵対的生成ネットワークの主要な欠点であるモード崩壊問題(mode collapsing problem)があります。

モード崩壊問題

敵対的生成ネットワークには2種類のネットワークがあると言いました。1つは識別器で、もう1つは生成ネットワークです。シナリオを想像してみてください。「この画像はAIから来たものか、それとも実際のデータから来たものか」と言おうとしている人がいます。

徐々にAIが特定の画像を生成し始めます。犬と猫の画像を作ろうとしていると仮定しましょう。生成モデルを訓練して、犬の画像や猫の画像を作成します。その後、突然データ画像を識別器ネットワークに供給すると、ペナルティが課されます。

しかし、生成ネットワークが犬の画像を本当にうまく生成できることを学習したとします。すると、常に犬の画像を生成するようになり、猫の画像を生成しなくなります。なぜなら、犬の画像を生成するたびに、このネットワークはそれが本物か偽物かを識別できないからです。

ペナルティや損失を減らすために、生成ネットワークは常に1種類の画像を生成します。これがモード崩壊問題と呼ばれるものです。画像内のあらゆる種類の物体を生成するのではなく、1種類の物体だけを生成するのです。

一方、拡散モデルにはそのようなモード崩壊問題がありません。なぜでしょうか。複数のパスで主要な画像を生成する際に、確率分布を導入しているからです。この確率的な性質により、拡散モデルはより良く汎化できるようになります。

条件付けと推論速度

次に、GANsは条件付けが難しいという点があります。なぜGANsは条件付けが難しいと言われるのでしょうか。敵対的生成ネットワークでは、1回のパスで画像を生成します。

そのため、条件付き入力(テキストや他の種類の埋め込みなど)を導入するのは1回だけです。しかし拡散モデルでは、そうではありません。モデルが中間画像を生成するたびに、つまりノイズが少なくなるたびに条件を導入します。

そのため、拡散モデルは条件付けがより容易です。次に、敵対的生成ネットワークの1つの利点があります。それは、画像を非常に迅速に、できるだけ早く推論または生成できることです。なぜなら、1つの画像を生成するだけでよいからです。

しかし、拡散モデルではそうはいきません。推論、つまり何らかの画像やデータの生成は非常に遅いです。なぜでしょうか。まずノイズを取り、次にノイズを減らし、さらにノイズを減らし、またノイズを減らします。このプロセスを1000回、800回と繰り返すため、多くの時間がかかります。

結果として、拡散モデルの推論が遅くなります。敵対的生成ネットワークでは、よく構造化された潜在空間があります。非常に平易な言葉で言うと、完全に詳細には説明しませんが、敵対的生成ネットワークで何らかの画像を生成したい場合、まず完全なノイズ画像を供給します。

そしてこの生成器ネットワークが何かを生成しようとします。しかし時間が経つにつれて、この生成器ネットワークはそのようなマッピングを学習します。ノイズ画像を取って生成ネットワークに渡し、そのネットワークがゴーグルをかけた人の顔を作成したとします。

次に別のノイズを取って、再び生成ネットワークに供給すると、今度は女性の人物の画像を作成したとします。実際には、その現在のノイズに対して代数的な操作を行い、それを生成ネットワークに供給することができます。

たとえば、ゴーグルをかけた人のノイズを引き算して、女性の人物の画像から引くと、別の画像、たとえばゴーグルをかけた女性の画像が生成されるかもしれません。このような条件が可能です。

この性質は、敵対的生成ネットワークの潜在空間がよく定義されている、またはよく構造化されていることを示しています。拡散モデルには、スケーラビリティという特徴があります。スケーラビリティとは、拡散モデルに関する多くの実験が示しているのは、より深いモデルを作り、より多くのデータを導入すると、ディテールや画像がどんどん良くなっていくということです。しかし、敵対的生成ネットワークではそうではありません。ある程度でプラトーに達してしまいます。

しばらくすると、十分なデータを提供した後でも、結果を改善することができなくなります。これが拡散モデルを考案する動機でした。では、詳細を確認していきましょう。

拡散モデルの4つの構成要素

拡散モデルには4つの構成要素があります。1つ目は拡散プロセスで、実際の画像からノイズの多い画像へと進みます。X0はデータセットからの主要な画像です。

そして何らかのノイズを加えます。このノイズは、モデルが追加するものではないことを明確にしておきますが、より多くのノイズを加える別のプロセスを導入し、X1を作成し、さらにノイズを加えてX2を作成し、最終的に純粋なノイズ画像であるXTを作成します。

どのようにノイズを追加するかを決定する方法については、後のセッションで学びますが、そのプロセスは拡散プロセスと呼ばれます。次にノイズ除去プロセスがあります。

ノイズ除去プロセスでは、実際にノイズの多い入力、ノイズの多い画像を取り、そこからノイズを減らし、よりきれいな画像を作り出し、再びノイズを減らし、最終的に実際の画像のように見える画像を得ます。

これらが2つの構成要素です。次にアーキテクチャがあります。拡散モデルでは、UNETアーキテクチャを使用します。なぜこのアーキテクチャを使用するのか、何をするのか、このアーキテクチャを使用する利点は何かを、さらに理解していきます。

そして損失関数があります。損失関数は単純に、モデルが何かを作成して出力したとき、モデルにペナルティを課すものです。これら4つの構成要素を組み合わせることで、拡散モデルを作ります。

生成モデルの本質

拡散は生成モデルの一種です。生成モデルとは何でしょうか。生成モデルは、いつでも実際のように見えるデータを生成できるモデルです。

これが生成モデルだとします。どんな種類のモデルでもかまいません。敵対的生成ネットワークでもよいし、他の種類の生成モデルである変分オートエンコーダでもよいですが、それらはすべて実際のデータのように見えるデータを生成します。

そしてGPT、ChatGPTも生成モデルです。それは画像のデータでも、テキストのデータでも、音声のデータでもかまいません。しかし拡散は、生成モデルでもある拡散モデルは、画像データに広く使用されています。

拡散における主要なタスクは、何かを生成することです。では1つ質問させてください。何らかのデータを生成したい場合、人間として、どのような知識を持つべきでしょうか。実際のように見えるデータを生成するために、何を理解する必要があるでしょうか。

何か考えはありますか。そうですね、確率です。例を見てみましょう。ここにコイン投げの3つのシーケンスがあります。1つのシーケンスは実際のもので、コインを投げることから得られるシーケンスです。

別のシーケンスは、私が作成したシーケンスで、3番目のシーケンスは、何も知らないAIから来たものです。この3つのシーケンスのうち、どれが本当のシーケンスで、どれが完全に生成されたシーケンスかを教えてください。

そうですね。では、どうやって最後のものが完全に生成されたものだと識別したのでしょうか。しかし、コイン投げをしても、このようなことが起こる確率はあります。しかし、ここで重要なことがあります。

すべてが本当のシーケンスである可能性はありますが、このシーケンスが起こる確率は非常に低いです。そのため、このシーケンスを書き留めた人は、コイン投げの結果の真の分布を知らないため、実際のように見えないシーケンスを生成したということが自動的にわかります。

しかし最初の2つでは、どちらが本当か識別できません。なぜなら、この結果も起こりそうで、この結果も起こりそうだからです。つまり、コイン投げの確率の分布を知るだけで、実際のように見えるシーケンスを作成できたのです。

何らかの生成データを生成するためには、あらゆる種類のデータを生成するためには、そのデータが由来する基礎となる確率分布を理解する必要があります。

コイン投げの例では、表と裏が出る確率はそれぞれ0.5です。それが重要なポイントです。すべての生成モデルは1つの特定の例に基づいています。それは、あらゆる種類のデータは何らかの基礎となる分布に従うということです。

その特定の基礎となる分布を知っているかもしれないし、知らないかもしれませんが、モデルの目標は常に、その基礎となる分布が何であるかを理解することです。その基礎となる分布を知れば、いつでもデータをサンプリングでき、実際のように見えるデータを生成する可能性が高くなります。

ここまでで何か質問はありますか。では、画像の形で何を意味するかを理解しましょう。3つの画像があるとします。3つの画像があり、これらの3つの画像が2つの変数によって定義されているとします。

それはXとYかもしれません。そして、この画像がグリッドのどこに位置するか、この画像がどこに位置するかをマッピングしようとします。次にヒストグラムを作成します。

これは、これらの画像の確率分布を予測または模倣します。この分布では、ほとんどの画像が位置するピークや場所があることがわかります。そして、画像が全く来ない他の領域があります。

では、何らかの画像を生成してくださいと言われたとします。この分布から画像を生成するために、どの座標を選びますか。それは一番下の方ですよね。

ほとんどの画像がそこにあることがわかっているので、分布を知っていれば、座標を予測できます。「その場所では、この画像が発生する確率が最も高い」と。その座標を使って画像を生成すれば、誰でもだますことができます。

しかし白い空間があります。そこにはノイズがあります。そして、その死んだ空間からは何も来ません。つまり、外部や自然界でそのようなノイズを見る確率は非常に低く、ゼロかもしれません。

つまり、それが重要なポイントです。あらゆる種類のデータには基礎となる確率分布があります。モデルや拡散モデルの目標は、拡散モデルが独自の基礎となる分布を構築することです。

コイン投げの例を考えてみましょう。拡散モデルは最初、「表は90%の確率で出て、裏は10%の確率で出る」と考えます。しかしデータを見て、最終的には「表も50%の確率で出て、裏も50%の確率で出る」ということを理解します。本質的に、生成モデルは、データを生成するために予測または内部的に構築する確率分布が、データXの確率分布と同じであることを確認しています。

そして、これは前の確率分布の等高線図です。等高線図では、これらの黄色い領域は特定のデータを見る確率が高く、この紫色の場所は確率が非常に低いです。

拡散プロセスの概念

質問はありますか。これは等高線図です。この確率分布の。等高線図が何か知っていますか。ヒートマップのようなものです。

等高線図では、同じ色を持つすべての領域は、それらが表す画像が発生する確率が同じです。実際の生活において。そして真ん中では、それらの領域は確率が非常に高く、側面では、それらの領域は確率が非常に低いです。

それは、モデルが訓練中に持っているデータの量を表していますか。質問を繰り返してもらえますか。データを表すのです。モデルが訓練中に持っているデータを。

そうですね。つまり、非常に外側の領域については、モデルが見ていないデータですと言えるわけではありません。それは単なる基礎となる確率分布です。なぜでしょうか。誰かが拡散モデルを訓練していて、私もそのデータにノイズ画像を追加できるとします。しかし、その特定の種類のノイズ画像、または類似の種類の画像を見る確率は、データでは非常に低いです。

つまり、それはモデルが見たデータを表しているわけではありません。しかし、この基礎となる確率分布からは、多くのデータポイントが出現します。そしてほとんどのデータポイントは真ん中の部分から来て、少数のデータポイントは外側の部分から来て、非常に少ないか、またはデータポイントがこの部分から来ることはありません。

つまり、モデルはほとんど真ん中の部分からデータポイントを見ることになり、側面の部分からデータポイントを見る可能性は低く、非常に遠い場所からデータポイントを見る可能性は非常に低いと言えます。どうぞ。

それは、とても良い質問です。その意味では、それはバイアスではありません。なぜでしょうか。バイアスは、この分布から多くのデータがあるとします。この分布からあらゆる種類のデータを取るのではなく、この領域から来るデータポイントのみを取っています。

そのことがバイアスを導入します。なぜなら、データの基礎となる分布を乱すからです。しかし、それはアプリケーションにも依存します。

たとえば、ただ猫の画像を生成するためにモデルを訓練しているとします。すると、真の空間では、猫の画像がここにあり、犬の画像があるかもしれません。

しかし、猫を生成するためにここからの画像のみを生成している場合、その場合、それはバイアスではありません。選択したデータが、その特定の種類のデータの基礎となる分布を模倣していることを確認する必要があります。

しかし、その場合、特に猫のデータを提供することになります。しかしその場合、条件付き分布になります。猫のデータが与えられたとき、猫のように見える何かを生成します。

それ以外の場合、すべての画像のデータポイントを考慮すると、何らかの基礎となる分布もあるかもしれません。

私の質問は単なる確認です。モデルに生成されたものの分布が、与えられたものと同じであることを確認したいと言っていますね。それを確認するには。1つの画像だけではなく、複数の画像で確認する必要があります。生成されたものの分布が、与えられたベースと同じかどうかを見るために。

質問を繰り返してもらえますか。あなたは、データの真の分布があると言っています。その分布はわかりません。ただ分布からのデータポイントがあるだけです。

そして、データを見ることからモデルがその真の分布を学習できないと言っているのですか。それがあなたの質問ですか、それとも…

モデルが生成したものの分布が、与えたものの分布と同じであることを確認したいと言っていますね。それを確認するには。1つ以上の画像でテストする必要があります。

モデルによるデータの分布が何であるかは、モデルからいくつかの画像を生成した場合にのみわかると言っているのですね。そう言えるかもしれません。

しかし画像の場合、実際のように見える画像を生成すれば、すでに基礎となる分布を知っていることになります。なぜなら、これが画像の分布だと言いましたが、実際の世界では。

2次元でさえないかもしれません。たとえば512×512ピクセルがあれば、真の分布は非常に高次元になります。そして分布の中で、実際のように見える画像を生成する領域はわずかしかないかもしれません。その広大な空間から。

モデルがいくつかの場所からのみ画像を生成する場合、すでに「基礎となる分布を理解している」と言えます。

その確率分布曲線を微調整する方法はありますか。

どの曲線について話していますか。領域、微調整する方法はありますか。モデルの分布を微調整したいのですか。高密度領域を基本的に。

その場合、何をするかというと。高密度領域を増やしたいのですか。

データの分布から直接データを生成すると、そのデータでは、ほとんどのデータがすでに真ん中の部分にあります。そのデータをモデルに供給すると、モデルはすでに学習します。

ほとんどのデータをこの部分から生成すべきだと。しかし微調整と言ったとき、それはモデル自体の分布を変更することを指すかもしれません。

モデルがすでにあらゆる種類の画像を生成しているとします。そしてこの部分だけが、猫の画像に関係しています。

モデルを微調整している場合、それは実際には、この空間で高い確率を持つようにモデルの分布を変更していることを意味します。基本的に、この高確率のピークをその空間にシフトさせています。

微調整によって、それを行うことができます。他に質問はありますか。

私には難しい点があります。今話していることについて。私が抱えている問題は、特定のものを生成することです。その猫の画像があるとして、同じ猫で青い猫が欲しいとします。それを言えば、違うものが得られます。

最初の質問に対する答えを述べさせてください。Stable Diffusionについて学ぶのですか。いいえ。

Stable Diffusionについて話すかもしれませんが、学ぶことになるのは、拡散モデルの真のプロセス、拡散モデルのファミリー、つまり拡散がどのように機能するかです。そして私たちが従うのは、拡散モデルを導入した最初の拡散モデル論文に関連しています。そのモデルでは。

Stable Diffusionとは異なり、条件付き入力などは含まれていませんでした。Stable Diffusionでは、テキスト入力を与えることができます。

しかし拡散のファミリーの最初のモデルでは、画像を生成するためにテキスト入力や他の種類の入力のような条件付き入力を与えることができませんでした。そのため、Stable Diffusionについて詳しく話すことはありませんが、それについて質問があれば、ワークショップの最後に確実に尋ねることができます。

もう1つの質問は何でしたか、忘れてしまいました。編集について。他に質問がある人はいますか。

ラフな手順

では、ラフな手順です。基礎となる確率分布から低確率の場所から高確率の場所へ行くように感じられることを知っています。最後の部分を飛ばしてしまいました。

拡散モデルがここで何をしているのか。拡散モデルにノイズを与えていると仮定します。ほとんどの場合、そのノイズでは、開始点がモデルのどこか別の場所にあります。

そして徐々にノイズを減らして、真の画像のように見えるようにしています。確率分布の空間では、このようになります。ランダムな点からここで始めました。

その点をモデルに供給します。ノイズを減らすか、ノイズを予測し、新しい画像を作成しました。それがこの別の点ですが、この点は高確率の場所により近いです。

そしてこの画像に関連しているかもしれません。次に、再びこの点をモデル、拡散モデルに供給します。新しい画像を生成します。それは別の点かもしれませんが、今度はこの点は高確率の場所により近くなっています。徐々に低確率の場所から高確率の場所へと進んでいます。

拡散モデルが何らかの形で私たちをガイドします。「ここにいるなら、その方向に一歩進むか、新しい画像を作成すれば、高確率の場所に行き着く」と。別の場所から始めたとします。

しかし拡散モデルが常にこの高確率の場所からサンプリングする場合、本質的に、データの内部確率分布がデータの真の基礎となる分布と同じになったと言えます。

そして、ここがヒーローです。低確率の場所から高確率の場所へ行くことは、ノイズの多い画像から実際の画像へ行くように感じられ、実際の画像からノイズの多い画像へ行くことは、高確率の場所から低確率の場所へ行くように感じられます。

これは重要な概念です。なぜなら、さらに、画像にノイズをどのように追加するかを定義しようとしているからです。そのために、この概念を参照します。

画像を変更すると、確率を持つ特徴空間のある点から別の点へと移動します。そして、より多くのノイズを持つ画像は、多くの場合、低い確率密度を持つ領域にあります。

この特徴マップの中で。わかりますか。本質的に、モデルは本当に高い確率分布がどこにあるか、そして少し高い確率分布がどこにあるかを知る必要があります。

それを複数のステップで行い、1つや2つではないようにするためです。そうです。そして、正しい方向を知ることは、画像にどれだけのノイズがあるかを知ることだとも言えます。なぜなら、この特徴空間マップで正しい方向を知っていれば、ノイズの多い画像からノイズの少ない画像へと進むことしかできないからです。

この特徴空間マップはどうやって作られるのですか。ここでは非常にシンプルな例を使っていますが、特徴空間マップを知るためには、さまざまな種類のアーキテクチャがあります。

小さな画像がある場合、ピクセルの計量を直接取ることができます。特徴空間マップとして、64×64次元の非常に長いベクトルになります。

64×64次元ですが、4K画像のような非常に高解像度の画像がある場合、次元性の呪いのため、非常に大きな特徴空間マップを持つことはうまくいきません。その場合、別のモデル、エンコーダーモデルを訓練することがよくあります。

この画像を低次元の潜在変数にエンコードします。それはオートエンコーダーモデルのトピックです。

とても重要です。画像が分類されている必要がありますか、これは…高確率分布はどうですか。あなたが正しく言っているように、コンテキストに応じて。

画像について、この画像がどれくらい確率が高いかを説明するラベルは必要ありません。ただデータからの画像が必要なだけです。

なぜなら、この画像がどれくらい確率が高いかを学習するのはモデルの仕事だからです。どんな種類のラベルも必要なく、画像のデータだけが必要です。

モデルが複数の異なる種類のものを学習するのは簡単ではないでしょう。しかし、異なる種類の背景など、さまざまなものがある場合。

モデルがタグを学習するのは難しくなります。特に、異なるタイプのタグや…それは興味深い質問です。

正直に言って、それに対する完璧な答えを与えることはできません。たとえば、多くの異なる種類の猫がいて、猫を作成できるモデルを作りたい場合、50万のデータポイントで十分でしょう。

それは訓練プロセスに依存します。データが十分でないと思う場合は、より多くのデータを供給できます。

正確な数を言うと、誤った主張をすることになります。そのような場合、よく行うのは。

Stable Diffusionでも起こりますが、画像を直接モデルに適合させるわけではありません。なぜなら、良い潜在マップへの良いマッピングがあれば。

次元を減らすことができます。ここで問題になるのは、画像の中に異なる種類の猫がいて、異なる種類の物体、異なる種類の背景があるかもしれないと言いました。

しかし、良いエンコーダーモデルがあれば、猫の特徴と猫の品種のみをエンコードする場合、すでに背景などの他の不要な情報を削除しています。

そうすることで、非常に少ないデータ量でモデルを効果的に訓練できます。しかしその場合、エンコーダーモデルが基礎となる意味的特徴を表現するのに十分良いものであることを確認する必要があります。

理解できますか。そうですね、それは本当です。しかし、背景に関係なく、特定の特徴セットのみを効果的にエンコードするエンコーダーモデルを作ることもできます。

そうすることで、非常に少ないデータ量で拡散モデルを訓練できます。これがStable Diffusionモデルの動機です。

誰かが質問をしていましたね。モデルを訓練するとき、モデルに多くの高品質な画像を与えて、それが…低品質の画像を作成してより悪い場所に配置するということですか。

モデルはそれをしません。より明確な画像を作るための正しい方向を見つけるのがモデルの仕事です。ノイズの多い画像を作るのは私たちですが、モデルがより明確な画像を作りやすいようにどうやって作るか、それは私たち次第です。そしてここでその部分が来ます。

さらに、どのようにノイズを追加しているかが来ます。それはハードコードされた部分になります。モデルの仕事ではありません。

ラフな手順を説明します。以前に理解したことを述べています。拡散モデルについて、ノイズの多い画像を取ります。

その画像を拡散モデルに適合させて、ノイズの少ない画像を作成します。そして、モデルが非常に明確な画像を得るまで、このステップを繰り返します。しかしモデルをどうやって訓練するのでしょうか。

実際の画像から純粋なノイズへと、このノイズの多い画像を作っているとします。そしてX1ステップで、このノイズ画像を作成しました。

ハードコードでノイズを追加しました。しかし、モデルが途中のどこかにいるとします。X2画像を持っていて、X1画像を予測したいとします。

予測したものは何でも、これら2つの画像の差を取ってモデルにペナルティを課します。そのため、モデルを訓練するために、このフォワードパスを使用します。ここではより多くのノイズを追加しています。

2つのプロセスがあります。1つはフォワードプロセスと呼ばれ、実際の画像に各ステップでより多くのノイズを追加して、ノイズの多いデータを作成します。そしてリバースプロセスがあります。

データからノイズを除去します。このプロセスはモデルの仕事で、このプロセスを実行することです。そしてこれは私たちの仕事です。

フォワードプロセスを実行して、モデルを訓練できるようにします。最初に説明したい用語がいくつかあります。

X0を実際の画像として表記します。そして各タイムステップで、より多くのノイズを追加します。

次のタイムステップはX1になり、もう一度ノイズを追加すると、X2、X3になり、最終的にT回ノイズを追加し、最後の画像をXTと呼びます。

この用語を定義しているのは、数学を理解するのに役立つようにするためです。そしてそれがポイントです。

X0から始めて、XTで終わります。これはノイズ画像です。そしてモデルは、何度も何度もノイズを予測することで、XTからX0へと進みます。

フォワードプロセスでは、画像を生成していても、最もノイズの多い画像を常にXTと定義するような用語を定義しました。

なぜそうするのか説明します。たとえば、タイムステップフレームで、XTによって最後の画像、または最もノイズの多い画像を参照できます。X1によって、常に実際の画像にノイズを追加した後の1ステップ後を意味します。

数学的表記を簡単にするためです。

モデルが経る他のステップはハードコードされていますか、それともモデルがそれを決定しますか。いいえ。そのステップはハードコードされています。それはハイパーパラメータです。モデルが何回ノイズを予測するかを決定します。

しかし、多くの良いモデルでは、タイムステップは数千または数万です。

コードもあります。では、重要なノイズがあります。

重要なノート、いいえ、ノイズです。画像にノイズを追加する方法を知っている必要があります。X3の分布がわかるように。

最後の画像、または純粋なノイズ画像をモデルに与えて、より明確な画像を生成すると言いました。

しかし、最後の画像の分布がわからない場合はどうなるでしょうか。その場合、モデルに他の種類の画像を与えることになります。すべての画像が、画像にノイズを追加しようとすると、すべての最後の画像、つまりXTが、特徴空間マップのどこかここにあることになります。すべてのノイズ画像がここに来ます。しかし、ノイズ画像の分布がわからない場合、モデルに開始点を与えることができません。そして開始点を正しくモデルに与えないと、その特定のデータでモデルを訓練していないようなものです。

そのため、実際の画像が何であれ、この最後の画像の分布が何であるかを知る必要があります。

そうすることで、その画像をモデルに適合させるための開始点が得られます。より明確にしていくために。

リバースパートで。

それが最初のポイントです。最後の画像、つまり純粋なノイズの分布を常に知っている必要があります。

そして、新しい画像は与えられた画像に依存する必要があります。今XTにいるとします。するとXT+1とXT-1は、XT画像に依存する必要があります。

なぜそうなのでしょうか。そのようにすると、数学もさらに明確になります。そして直感的にも理にかなっています。

この点にいるとします。この点に来た場所は問題ではないはずです。

フォワードプロセスで実際の画像からその特定のノイズの多い画像へ行く際に、どこから来たかは問題ではありません。

ある時点に到達したら、常にこの方向または他の方向へ行くべきです。つまり、未来は過去に依存するのではなく、現在に依存します。

それが重要なノートです。これら2つのノートを使用して、画像にノイズをどのように追加し、モデルを使用してノイズを除去するかについての数学的詳細を作成またはモデル化します。

そして、この最後の詳細を覚えておいてください。さらに進む前に、1つお伝えします。

マルコフ連鎖と呼ばれる別の概念を紹介します。これは拡散プロセスを作成するのに役立ちます。

この画像を見て、雨が降るか降らないか教えてもらえますか。はい。

おそらく。しかしなぜ私に聞かなかったのですか。昨日の天気、1ヶ月前の天気、または3ヶ月前の天気についての情報をください。なぜ過去についてのより多くの情報を求めなかったのですか。

現在の状態に依存します。多くのシステムは、特定の状態に到達したら、どこから来たかを心配する必要がないように作られています。現在の状態またはステップから常に未来を予測できます。

これがマルコフ連鎖と呼ばれるものです。この質問をしました。

マルコフ連鎖では、述べたように、未来は過去に依存するのではなく、現在にのみ依存します。

雨、曇り、晴れなどの複数の状態があると仮定できます。常に晴れから雨への遷移確率をモデル化できます。確率は0.1で、太陽に戻る確率は0.6です。マルコフ連鎖を使用して、これらの基礎となる確率を使って、このグラフはマルコフ連鎖グラフと呼ばれます。

なぜこれを導入したのでしょうか。マルコフ連鎖の基礎となる数学があり、それを使用して拡散モデルの方程式を導出し、拡散モデルの損失関数を導出します。

詳細な導出には深く立ち入りませんが、このモデルがある意味で拡散モデルを作成するのに役立ったことを知ることが重要です。

フォワードプロセスとリバースプロセスの数学的定義

ここに完全に集中してください。フォワードプロセスとリバースプロセスを数学的に定義します。

今のところ、それは直感でしたね。静的な確率を使用しています。XT画像がある場合、新しい画像を生成すると、以前の確率は変わりません。再びその画像に来ると、常に同じ確率になります。

いいえ。これはX0についてです。実際の画像です。そして新しいノイズ画像を生成したいとします。高確率空間からさらに離れるためのランダムウォークを行う基礎となる分布を定義します。

これが与えられた画像であれば、次のステップがここ、ここ、ここ、ここにある可能性があると教えてくれる分布を定義したいと思います。

次のステップが与えられたら、ここにいるときの分布を定義したいと思います。X2がサンプリングされる確率がこの場所で高いと教えてくれる分布を。

同様に、XT+1のこの特定の点にいるとき。

この場所からより多くのノイズ画像をサンプリングする高い確率があるかもしれません。このことを理解できましたか。

もっと説明できます。

ありがたいことに。

それが行く空間のようなものですか。完全にノイズ除去された犬がありますね。完全にきれいなマップ。そうすれば、等高線図のどこかにあります。

しかし中央には…これ全体が等高線プロットです。

そのプロット内の、中心から非常に離れた部分では、確率の低い画像が得られます。これは主にピクセル化された画像です。

そして中央で、高い確率がある場所では、実際のように見える画像が得られます。

距離についてピクセルで話しているのか、それとも抽象的に話しているのか。

ここでは距離についてはあまり気にしません。しかし、これら2つの間の距離と言えば、それは、これら2つが似ているかどうかを言っているようなものです。しかし距離については気にしません。なぜなら、気にするのは、ここにいるとき、どこから行けるか、方向です。

どこから行けるので、よりノイズの多いプロセスを持つようになるのか。なぜなら、これが実際の画像であれば、どの方向に行っても、常に確率は減少します。そしてほとんどの場合、ノイズの多い画像が得られます。

距離はピクセル単位の減算として取ることができます。

マッピングについてもっと話していますね。

ケースでは、2D画像がある場合、それはXとYかもしれません。しかし、X、Y変数は実際にどのように定義されますか。

画像ケースでは、2Dプロットではないかもしれません。32×32画像があるとします。そうすると、プロットは実際には32×32次元ベクトルになります。

そして、高い確率を持つ領域があるかもしれません。他の領域は低い確率です。そして、より似ている2つの画像は互いに近くにあります。意味的にではなく、実際のデータ的にどのように似ているかです。

X0から始めました。X1を見つけるために、X0があると言います。すると何らかの基礎となる分布があるかもしれません。または、別の分布としてX1の値をモデル化します。

ここにいます。X0からX1へ、またはX1からX2へ行くための分布があります。

その分布からX1をサンプリングし、X1の値が何であれ、それが新しい画像です。

そして分布が何になるかを決定します。リバースパートについては。

モデルも、XTがある場合、これが分布だと教えてくれます。

あるいは、これがノイズか何かです。何らかの方法で分布を考え出し、その分布からXT-1をサンプリングします。

分布と言うとき、画像の分布を意味していますか。つまり、このグラフの各点が画像であれば…黄色い空間には多くの画像があるということですか。

明確にしましょう。この基礎となる等高線図は、データの分布です。

異なる画像の。そうです、黄色い部分には多くの画像があります。

しかし、ここからここへ行く分布とは関係ありません。X0にいて、次の位置であるX1や何かを見つけたいとします。

1つの分布をモデル化します。この方向に平均を取り、ここに何らかの分布を持ち、場所をサンプリングし、ここに来ます。すると私のX1はここにあります。

それが、X1、X2、またはXT-1、X0をXからサンプリングする方法です。

X0から、どのようにX1がどこにあるかを見つけるのか繰り返してもらえますか。さらに進みましょう。明確にしましょう。まず、ある点から別の点へ、別の点から最初の点へ行くために、何らかの分布を使用することを理解する必要があります。

X0からX1へ、またはX1からXT、X2へ行く、または画像をよりノイズの多いものにする分布は、XT given XT-1のQで記述されます。

基本的には、このノイズの少ない画像が与えられたとき、より多くのノイズ画像はどこにあるかです。

それがフォワードプロセスであり、フォワードプロセスに使用する分布です。

そして別の分布、P thetaがあります。XT given XT minus 1の。

この分布は、ノイズの多い画像を知っていることを表します。この画像がノイズの少ないか、この画像がノイズの少ないか、この画像がノイズの少ないかの確率は何でしょうか。

ここにも添え字のthetaがあります。なぜなら、それはパラメータ化を表すからです。

つまり、モデルがこの分布を学習することになります。

わかりますか。理解するのは少し難しいかもしれませんが、質問があれば教えてください。

なぜガウスノイズだけなのですか。

興味深い質問です。指数ノイズがあるとします。指数分布またはポアソン分布でノイズをモデル化しようとしていますが、さらに、X0だけを与えてXT-1の分布を見つけたいとします。

その場合、その分布の最終形式は非常に奇妙になります。

そして計算も困難になります。

しかしガウス分布では、常に別のガウス分布から1つのガウス分布をモデル化できます。平均3、分散5のガウス分布があるとします。

標準正規分布からデータをサンプリングすることで、その分布を常にモデル化できます。

それに5を掛けて、3を加えます。

つまり、常にガウス分布を数学的に扱う方が簡単です。

そのためガウス分布を使用します。

次のパートに進みましょう。フォワードプロセス。

フォワードプロセスを定義するためにガウス分布を使用します。

X0からX1へ、ここから、ここ、またはここへ行くために、何らかのガウス分布があり、ここに平均があり、これがシグマだと言います。その分布から画像をサンプリングすると、よりノイズの多い画像が得られます。

しかし、新しい分布の平均とシグマも定義する必要がありますよね。

モデルが新しい画像からノイズを学習すること、またはリバースプロセスを学習することも容易になるように定義する必要があります。

まず最初の質問、muとsigmaは何でしょうか。その答えは、最初の重要なノートにあります。テストを始める前に、1つか2つの重要なノートを述べたのを覚えていますか。

1つはマルコフ連鎖について話し、もう1つは、すべてのファイナー画像、またはすべてのノイズ画像がどこにあるかを知るために、データの最終分布を持つことについてでした。

X0を生成したら、X1を生成し、X2を生成しますが、最終的にXTは常に特定の空間に来るようにし、常にXTをサンプリングしてリバースプロセスを開始できるようにしたいと考えています。

それを考慮して、与えられた空間から使用できます。すでに定義しました。純粋なノイズ画像の確率分布をすでに定義しており、標準正規分布テーブルの標準正規分布になると言いました。

純粋なノイズ画像は、常にこの分布からサンプリングでき、それをモデルに与えてリバースプロセスを開始できます。

そして、ここでXTの分布を固定しましたが、すべてのフォワードプロセス分布がそのような形式に従うことを確認する必要があります。

この分布、最終分布が同じになるように。

その性質のために、選択する平均とシグマは次のとおりです。

直感的に、この各項が何を意味するかを説明してから、この方程式が何を意味するかを定義します。

シグマとしてbeta TとIを選択し、平均として1 minus beta tとその平方根を選択したことがわかります。

そして、最後の画像、最後の画像X3-1を掛けます。

beta tは何らかの定数です。

分散に任意の定数を使用することは理にかなっています。

しかし、その定数から平均も定義します。この平均は、1 minus beta Dは、最後の画像からどれだけの情報があるか、最後の画像からどれだけの情報量があるかを表し、betaは、どれだけのノイズを追加したかを表します。

最後の画像から。

このことを理解できましたか。このシグマ、またはこのbeta Tは、X0からX1へ行く場合、どれだけのノイズを追加するかを直感的に示しています。これがbeta Tが1だとします。

すると、X0からX1へ、X1は常にガウスノイズになります。

つまり、最後のX0画像についての情報はありません。しかし、beta Tがゼロに近い非常に小さな数であれば、平均は現在の画像と同じになります。

そして、別の方向にほとんど動きません。

つまり、beta Tは直感的に、画像にどれだけのノイズを追加しているかを表します。

そして1 minus beta tは直感的に、現在の画像で前の画像についてどれだけの情報をまだ持っているかを表します。

約3000ステップ、または1000ステップのような複数のステップを踏むと、最終的に、この平均が見えるようになります。X0にいるとします。

X0にいます。1 minus beta dという定数を掛けると、それは1未満になります。

時間とともに平均は低くなっていきます。

そして最終的に、無限のステップを踏むと、正規分布に減少することを教えてくれます。

その性質のため、この特定の形式を取ると言います。最後の方程式は何を表していますか。全体の軌跡を表しています。

X0が与えられたとき、X1からXTまでのすべての中間画像を生成する確率は何でしょうか。

各条件付き確率関数の積を取っているだけです。

そして本質的に、これが私たちのフォワードプロセスだと言っています。フォワードプロセスについて何か質問はありますか。

理解するのは少し難しいかもしれませんが、質問があれば聞いてください。

では、リバースプロセスに進みます。リバースプロセスでは、この分布はモデルによって学習されると言いました。

XTからXT minus 1へ行くこと。モデルによって実行されて学習されます。

しかし、その分布について、私たちは言います。

これもガウス分布になりますが、その分布の平均とシグマは何でしょうか。なぜガウス分布を使用するのですか。数学的には扱いやすく、フォワードプロセスでも同じ種類の分布を使用したため、リバースプロセスで再度ガウス分布を使用すれば、フォワードプロセスとより密接に一致させることができるかもしれません。

しかし、モデルが学習するシグマと平均が何になるか、またはモデルがそのシグマや平均を予測しようとするものを定義する必要があります。

しかし、平均とシグマについてもっと話す前に、私たちは言うことができます。

シーケンスを理解したい場合、特定のシーケンスを生成する確率を理解したいなら、ランダムな与えられたサンプルから始まります。

標準正規分布から来るもので、それを定義しました。これが純粋なノイズ画像の分布です。

そして何らかの形で、モデルがノイズの少ない画像を生成する分布を生成します。

そしてその画像を使用して、よりノイズの少ない画像にし、さらにノイズの少ない画像にしていきます。

そして最終的に、ノイズから適切な画像へ進む画像のシーケンスを生成し、そのシーケンスを生成する確率はこの方程式で与えられます。

さらに、シグマと平均について考えます。分散、または標準偏差も定数として取ります。これはフォワードプロセスと同じになります。

2つの理由があります。なぜそうするのか説明しましょう。

そして、なぜフォワードプロセスでも定数を分散として取ったのかも説明しましょう。

まず、モデル化が簡単になります。そして、このbeta tはリバースプロセスと同じになるため、TからT minus 1へ行くのと、T-1からTへ行くのでは、同じbeta Dを持つことになります。もう1つの理由は…

非常に高い分散を持つ分布を扱っているとしますが、その分散は各時点で変化しています。

すると、モデルは何かを予測しようとします。

しかし次回、そのことは真実ではありません。次回、分布は完全にランダムなもの、または非常に遠いものを生成します。

最後のデータポイントから。

そしてモデルは誤って予測します。そうすることで、ノイズの多い勾配を持つことになります。

1つ例を挙げましょう。人々がどれくらい中央のエリアに座るかを学習するモデルを作っているとします。

教室のどの場所に人々が最も多く座るか。

そして、毎日5〜6人だけが来て、中央のエリアに座るとします。その場合、分散は非常に低いです。だから直接、その中央の場所で高い確率があると言えます。しかし、毎日5人が来ているとしますが、ある人はここに座り、ある人はそこに座り、ある人はそこやそこに座っています。すると、私にとって、平均的に中央のここに座っているのか、それとも平均的に中央のここに座っているのかを予測するのは非常に難しくなります。毎回、予測した平均が異なります。

そして、予測した平均が異なります。勾配はますますノイズが多くなります。

そのため、生成モデルを扱おうとする場合、分散を定数にするか、低い値にしようとすることがよくあります。

それが分散を定数として取る理由です。

では平均について話しましょう。

beta tは、確率…定数は分散に等しいと言いましたが、それは直感的に、最後の画像からどれだけのノイズを追加したかも教えてくれます。

しかし1 minus beta tは、どれだけのノイズ…最後の画像からどれだけの情報を保持したかを教えてくれます。これは画像XT-1からの情報です。

そしてこのalpha T barは、その前のすべてのalpha tの積です。これはその時間ステップ前のすべてのalphaの積です。

直感的に、元の画像から始めて、この時間ステップまで元の情報をどれだけ保持したかを教えてくれます。

時間ステップが最後のような場合、alpha Sは本当にゼロに近くなります。なぜなら1 minus beta tが毎回積で掛けられると、非常にゼロになり、元の情報からの情報量が非常に低いことを示します。

そして数学的なツールを使用して、人々はこの方程式を考え出しました。

平均は現在の画像の関数になり、それにXT倍し、次の画像を予測する分布の平均になります。

これはリバースプロセスのXT-1になります。

平均はXTと現在のタイムスタンプに依存します。これは完全に理にかなっています、直感的に。より少ないノイズ画像がどれかを予測したい場合、現在のノイズ画像を知る必要があります。

そしてこの方程式は直感的に教えてくれます。

何らかのノイズがあります。元の画像から追加しました。

元の…これはモデルによって予測されるノイズです。

そしてXT-1からXTへ何らかの量のノイズを追加しました。

その値に一致するように、スケールダウンするだけです。そして、ノイズを削除します。

現在の画像から、再び。alpha Tでスケールします。なぜそのようなフォーマットなのか、すべてを説明しましょう。

平均を予測したいと言います。

平均はこの関数によって予測されますが、この関数では、モデルによって予測される1つのノイズ項があります。

beta tは、XT-1からXTへ追加したノイズの量、またはノイズの割合です。

1 minus alpha bar tは、alpha bar tが元の画像から保持した情報の総量である場合、直感的に、1 minus alpha bar tは元の画像から追加したノイズの総量を教えてくれます。

割合を取ると、最後の画像で追加したノイズの量と、これまでに追加したノイズの総量を計算すると、ノイズの総量の割合…ノイズの割合が得られます。

これはXT-1からXTへ行くことに起因します。

そのため、モデルがノイズを予測するとき、スケールダウンします。なぜなら、そのノイズは本当に大きいかもしれないし、元々は、XTからX0へ直接ノイズを予測することを想定していたかもしれないからです。XTにいるとします。するとモデルは予測します。

この最終的なノイズを。

しかし、それは真のノイズではありません。XT-1からXTへ行く際に追加されたものです。そのため、スケールダウンしようとします。

次に、現在のノイズの多い画像からそのノイズを削除します。そして覚えていますか、平均もスケールダウンしています。それに一致させるために、alpha tの平方根で割ってスケールアップする必要があります。

alpha Tも、XT-1からXTへ来て保持された情報量のようなものです。

方程式を以前にすべてメモしていれば、それを証明するのは非常に簡単です。

しかし、このことについて何か質問はありますか。

この時間ステップ埋め込みを各層に与えて条件付けしていることがわかります。このX3画像は時間ステップTに関連しています。同じ種類のアプローチを使用できます。テキスト入力の埋め込みを持つことができます。

そしてここでそれを与えます。私たちのモデルで。

そしてそれらのモデルはStable Diffusionモデルと呼ばれます。しかし、拡散モデルに焦点を当てていただけなので、新しいモデルのさらなる改良は含めていません。

要約では、ハイパーパラメータを選択します。ハイパーパラメータを使用して、フォワードプロセスからノイズのあるサンプルを生成します。

次に、ノイズの多い各画像について、ノイズを予測します。

損失を計算し、モデルを訓練し、リバースプロセスを実行して推論…画像を生成するために推論を行います。

コードを始めることができます。

コードを始めたい方は、できます。

テンプレートを作成しました。

その中で、まずデータセットを定義します。データセットを取得している場所からのコードは、MNISTデータセットです。

次に、データセットを-1から1に変換する必要があります。

そしてハイパーパラメータを定義する必要があります。各分布にbeta Tがあると言いましたが、アプリケーションではよく、beta Tの増加する値を持ちます。

そして線形ベータスケジュール関数を使用して、ベータの配列を作成し、インデックス0でbeta 0を表します。そして時間が経つにつれて。

人々は新しいスケジューラーや、このベータの配列を見つけるさまざまな方法を考え出しました。

そしてここではalphasとalpha headを定義しました。

これはベータ値のプロットです。

そして今、ノイズの多い画像を実際に取得できる関数を作成しています。しかし数学のおかげで。

X0からTへ、または時間ステップXTへ直接ノイズ画像を取得できました。

そしてここで使用した方程式があります。

そのために、損失関数でも説明しました。

そして今、異なる時間ステップのいくつかの画像をプロットしています。

これはシンプルなUNETアーキテクチャです。すべての詳細を書き留めましたが、テンプレートでは、練習のために記入する必要があります。

そして、シンプルなUNETアーキテクチャでは、時間埋め込みを含めていません。なぜなら、このセッションではシンプルにしておこうと思ったからです。将来的には、もっと複雑なものやStable Diffusionを実際に作れるかもしれません。そしてこれが損失関数です。

予測されたノイズとサンプルノイズの間の平均二乗誤差として定義しました。

そして最後に、メインループを実行しています。ループでは、すべてをコメントアウトしました。あなたが何をする必要があるか。

そして時間が経つにつれて、何をする必要があるか、それらのことを記入してください。

そしてフォワードプロセス、これは推論です。

そして、各時間ステップで、より少ないノイズ、より少ないノイズ画像を予測していること、そして事前に宣言されたノイズをどのように使用して、実際に少ないノイズ画像を考え出しているかも含まれています。

この文字列を記入すると、このモデルを実行できるようになります。

質問はありますか。

Stable Diffusionでは、説明しましょう。グラフをここに持ってきましょう。皆さんも理解しやすいように。

Stable Diffusionでは、前に言ったように。画像が非常に高品質な画像、または非常に高次元の画像を扱う場合、それらの高次元画像とUNETを使用して、ノイズを予測し、画像を再実行し、再びノイズを予測し、それを1000回、10000回行うことは、実行可能ではないか、計算的に非常に重いです。

それがどれほど計算的に重いかを実際に理解できます。

現在の拡散モデルで行うことは、これはStable Diffusionの例ですが、現在の拡散モデルです。別のエンコーダーとデコーダー関数を訓練します。

エンコーダーとデコーダーも、同じ種類のニューラル…別の種類のニューラルネットワークですが、それらのニューラルネットワークは、入力画像を与えて出力画像を吐き出すように構築されていますが、出力画像は同じであるべきです。

入力画像として。

エンコーダー部分では。入力画像を与えると、何らかの低次元ベクトルを教えてくれます。そのベクトルをデコーダーに適合させると、デコーダーは別の画像を出力しますが、出力、この出力と入力の両方の画像が同じであることを確認したいと思います。

全体として、エンコーダーとデコーダーは、画像の情報をエンコードすることを学習します。そしてこの中間のものは潜在変数と呼ばれます。

それらの潜在変数を使用して拡散を行います。

現在の主要な画像、またはデータを画像としてStable Diffusionモデルに入力する前に、代わりに、まずその画像をオートエンコーダーアーキテクチャ、特にエンコーダー部分に通します。何らかの中間ベクトルを考え出します。

これが潜在ベクトルで、その潜在ベクトルを拡散モデルに渡して何かを生成します。

または何らかのことを行います。

そして最後に、拡散モデルが「これが最も明確な画像だ」と考えるとき、それは1000タイムステップ後か2000タイムステップ後かもしれません。

新しいものを吐き出します。潜在ベクトルは、より多くの意味情報などを持ち、デコーダーを使用して、新しい種類の画像を作成します。

それがStable Diffusionモデルのようなものですが、主なことは、Stable Diffusionでは条件付けも行えることです。

Stable Diffusionでは、もう1つのことも行います。リバースプロセスを使用して、Tタイムステップ後に新しい潜在ベクトルを生成するたびに。

リバースプロセスを使用します。

テキスト入力や他の種類の入力の条件付き埋め込みを追加します…連結ではなく、実際には条件付き埋め込みを追加します。

「これらのベクトルは実際に何かを表していて、条件付き入力を取っている」と確認し、それを再び拡散モデルに供給して、ノイズの少ない潜在ベクトルを作成します。

この議論は外で行いましょうか。

質問があれば外で教えてください。答えられます。

コメント

タイトルとURLをコピーしました