site_review: 2025-07-22 00:31:11.888451 【技術本】ゼロから作るDeepLearning❺

【技術本】ゼロから作るDeepLearning❺

https://amzn.to/4m9DhPC


【技術本】ゼロから作るDeepLearning❺


x postへポスト
本書では、単純な1次元の正規分布を数式でモデル化して擬似データを生成できることから始め、徐々に複雑さを上げて、最終的に任意の条件の画像データを生成できるモデルを実装するまでの過程を数式、絵図、Pythonコードで紹介してくれている。
現代(2024年)の生成AIは多様で複雑でありながらも、確率の正規分布を数式で求め最適なパラメータを探す技術からの積み重ねであることを技術進歩の遍歴から伺うことができる。
本書は全体でステップ10からなり、具体的には、次の流れとなる。

⚫︎ステップ1
確率の基礎、正規分布、中心極限定理、サンプル和の確率分布などの概要

⚫︎ステップ2〜5
実データにおける正規分布を、数式によるモデル化と最尤推定により、対数尤度が最大になるパラメータを推定することによって、その正規分布に則した擬似的な新たなデータを生成できるようにする。
まずは単純な1次元の正規分布(身長データの分布:ヒストグラムで左右対称な釣鐘型の分布になるもの)から行い、次は次元を増やしたもの(身長と体重の2次元データ:3Dグラフだと一つの円状に等高線を持つ峰を形成する分布)や、多峰性分布(混合ガウスモデル)のもの(男女混合の身長と体重データ:3Dグラフだと2つの円状に等高線を持つ峰を形成する分布)など徐々に複雑な表現のモデル化とパラメータ推定へと進む。

⚫︎ステップ6
Pytorchを使ったニューラルネットワーク実装概要

⚫︎ステップ7
ニューラルネットワークの導入の段階まで進むと複雑さが一気に進み、散布図にて複雑な形をしたクラスタ(学習データによって柔軟に形が決まる確率分布)を生成することに挑む。変分オートエンコーダモデルで学習を行い、MNISTデータセットによる数字の文字画像を学習して新たに生成できるようになる。

⚫︎ステップ8〜9
さらにモデルの複雑化は進化し、潜在変数を複数扱える拡散モデルを使用したデータ生成へ進む。潜在変数を階層化することで、複雑な表現を効率的に表すことができる。元の画像にガウスノイズを少しずつ加える拡散過程と、ガウズノイズから徐々にノイズを取り除いて画像を生成する逆拡散過程がある。基本的には拡散過程を考え、その逆を辿ることでノイズから画像を生成している。拡散過程において、観測変数から潜在変数への変換を単に正規分布から生成されるノイズの処理に置き換えることでパラメータ推定の困難さや計算処理量の多さを解消する。
学習は全てのモデルの時と同様、対数尤度が最大になるパラメータを探す。
実装はU-Netモデルを使用する。

⚫︎ステップ10
さらに条件付き拡散モデルに進歩させ、生成したい画像をコントロールできるようにする。数字ラベルを与えると、その数字の画像を生成できるようになるまでを実装する。

最後にStableDiffusionの実装概要が紹介されている。
主にプロンプト入力によって意図した画像を生成する技術の紹介がある。
プロンプト入力からCLIPと呼ばれるニューラルネットワークに渡される。CLIPは画像エンコーダとテキストエンコーダがあり、画像とテキストが共通のベクトル空間で表現でき類似性を計算できる。これにより文字による生成条件を、Attention層を使ってU-Netに取り入れて、意図した通りの画像を生成できるようにしている。

本書を読むことで、生成モデルの初歩なモデルから現代レベル(2022〜23年)の複雑なモデルに至るまでの技術の改良の遍歴をストーリー仕立てで追うことができる。
解析的に求めるのが難しい式になる場合は、近似を求めて回避したり、項を他の数式に置き換えて、解析可能な項だけに注目させる手法をとったりする。具体的には、混合ガウスモデルではEMアルゴリズムが効率的であるが、数式の一部の項がlog-sum計算によって解析的に解けない問題があるのをKLダイバージェンス式を使って変形させて置き換え解析可能な項(ELBO)のみに注目させる手法の紹介をしている。これらが、VAEによるEMアルゴリズムの改善時や、拡散モデルにおいても、テクニックとして受け継がれていたりする
。それに加え、色々な効率的な最適化手法も相まった技術の積み重ねを追うことができる。これらの数々の技術進歩のための技術の置き換えや最適化の柔軟なアイディアの数々が、響く人には響くと感じた。

今回は、前提する数学的知識がシリーズ4と同じくらい高度であるが、文章だけで追えなくもないが、数式を追える人には非常に興味深い技術遍歴、問題対処のテクニックが散りばめられた書籍になると感じた。読み終える頃には、Stable Diffusionの実装の大まかな概要もイメージしやすくなり、興味ある人はオープンソースで公開されているソースコードに興味が持てるよう橋渡しもされている気がする。
生成モデルを初歩の段階から技術を追いたい人に価値が出てくる著作だと感じた。

ーーーー
以下内容メモ

⚫︎ステップ1:正規分布
確率の基礎
・確率変数:例・サイコロの目が出る確率など
・確率分布:例・それぞの目の出る確率=それぞれの確率の総和は1(100%)
 Σ[k=1...N]p(x_k)=1
確率分布の種類
・離散型確率分布:サイコロの結果など
・連続型確率分布:体重や身長の分布割合など
連続型の確率分布は、確率密度として積分で求められる。
 ∮[x=170...180]p(x)dx : 身長170〜180センチの区間にある確率密度
 *全ての範囲(全体)を積分すると1(100%)になる

期待値と分散
期待値:得られる可能性のある全ての値とそれが起こる確率の積を足し合わせたもの。
 離散型確率分布の場合:Σ[k=1...N]x_k*p(x_k)
 連続型確率分布の場合:∮[x=-♾️ ...♾️ ]xp(x)dx
分散:確率変数xと期待値μの差の2乗を計算し、その期待値を求める。確率変数の取る値が期待値μの周りにどの程度ばらつくかを表す。
 離散型確率分布の場合:Σ[k=1...N](x_k-μ)^2*p(x_k)
 連続型確率分布の場合:∮[x=-♾️ ...♾️ ](x-μ)^2*p(x)dx
標準偏差:分散の平方根:分散は2乗していたものだが、平方根により元の単位に戻るので直感的に数値で判別しやすい。
サイコロの例
 期待値(平均):μ(μ(ミュー))
  μ=1*1/6 + 2*1/6 + 3*1/6 + 4*1/6 + 5*1/6 + 6*1/6 = 3.5
 分散:σ^2 (σ(シグマ))
  σ^2=(1-3.5)^2*1/6 + (2-3.5)^2*1/6.... (6-3.5)^2*1/6 = 2.916...
  *2乗する理由:値と平均を引くと負になる場合もあるので2乗して負数を排除している。
 標準偏差:σ
  σ=√2.916... = 1.707...

正規分布(ガウス分布)
 y = 1 / (np.sqrt(2 * np.pi) * sigma) * np.exp(-(x - mu)**2 / (2 * sigma**2))
 パラメータ
 ・平均:x軸の分布曲線の中央(平均)に来る位置が変化する。
 ・標準偏差:分布の幅が値が小さくなるほど狭くなりy軸の確率密度が高くなる。

中心極限定理
ある母集団の確率分布p(x)がどんな分布であっても、そのサンプル平均の分布は、標本Nを大きくしていくと、平均は「μ(期待値)」、分散は「p(x)の分散の1/N(=σ^2/N)」の正規分布に近付いていく。
例:サイコロを2回投げで出た目の平均の標本分布は、正規分布になりにくいが、サイコロを5回、10回と増やして出た目の平均を取れば、振った回数が多くなる程、標本分布は正規分布に近づく。その分散はσ^2/Nに近づくという意味。

サンプル和の確率分布
サンプル和(s)の分布は平均Nμ、分散Nσ^2の正規分布に近づく。

一様分布の平均と分散
0から1の間の一様分布は平均が1/2,分散が1/12

身の回りにある正規分布
・測定誤差
・製品のサイズ
・人の身長

⚫︎ステップ2:最尤推定
最尤推定:正規分布に似た分布に対して、正規分布を適合させる(フィットさせる)方法
・生成モデルの目標
 あるデータxの確率分布p(x)をモデル化(数式にする)する
  (手順)
  1.モデル化:真の確率分布がパラメータで調整可能な確率分布で近似されると仮定
  2.パラメータ推定:その確率分布がサンプルデータに合うようにパラメータを推定
   確率分布のパラメータ(正規分布なら期待値(平均)と標準偏差)
 その集団から選んできたような擬似的なデータを新たに生成する
まずはデータが1次元の正規分布(身長の分布のようにヒストグラムで釣鐘型に分布されたもの)を実データを元に、正規分布を数式を使ってモデル化し、それを最尤推定を行って、より最も同じ正規分布らしくなるようにパラメータ推定することを試みる。
正規分布の確率密度(モデル):f(x)=1/(√2πσ)exp(-(x-μ)^2/2σ^2)
尤度:p(x)=Π[n=1...N](1/(√2πσ)exp(-(x^(n)-μ)^2/2σ^2))
対数尤度 log p(x)=-N/2 log 2πσ^2-(1/2σ^2)Σ[n=1...N](x^(n)-μ)^2
※対数関数の底はe(ネイピア数:e=2.7182818284....の無理数)であり、log_e 2πσ^2と書くところを、底を省略してlog 2πσ^2と書いている。本書も含めて、以降は底はネイピア数として固定しながらも表記を省略する。
※通常の対数関数例 2 = log_10 100
対数尤度はμの2次関数で、2次の係数が負のため((-1/2σ^2)<0)、微分が0のところに最大値がある。
(1/σ^2)Σ[n=1...N](x^(n)-μ)=0(右辺が0なのは微分が0の所が最大値のため)として式展開すると、hat{μ}=(1/N)Σ[n=1...N]x^(n)の時に対数尤度が最大(推定したサンプルの期待値)となる。標準偏差においても、μ=hat{μ}の時に対数尤度をσに関して最大化する計算する。こちらも解析的に求めることができる。μの時と同様に微分を求めてそれを0とする数式を展開するとhat{σ}=√((1/N)Σ[n=1...N](x^(n)-hat{μ})^2)の時に最大(推定したサンプルの標準偏差)となる。
パラメータ
 推定したサンプルの期待値(平均):hat{μ}=(1/N)Σ[n=1...N]x^(n)
 推定したサンプルの標準偏差:hat{σ}=√((1/N)Σ[n=1...N](x^(n)-hat{μ})^2)
正規分布モデルに、期待値(平均)と分散のパラメータをうまく当てはめることで、実データと同様の正規分布のデータを新たに生成できるようになる。

⚫︎ステップ3:多次元正規分布
次に多次元正規分布(身長と体重の2次元データ:3Dグラフだと一つの峰が形成される)を実データを元に、同様に正規分布を数式を使ってモデル化し、最尤推定を行ってパラメータ推定を行い、データをランダムで生成できるようにする。
多次元正規分布の式(モデル):f(x)=(1/√((2π)^D|Σ|)exp{(-(1/2)(x-μ)^⊤*Σ^-1(x-μ)}
μ:平均ベクトル
Σ:共分散行列 D*Dの行列。対角成分は各変数の「分散」。非対角成分は各変数間の「共分散」
Σ^-1:逆行列 行列式が0でない行列のみ存在。元の行列との積が単位行列になる
単位行列:対角成分が全て1で他が0
⊤:転置 行列の対角成分で折り返した行列に変形する。
 (転置例)
 [1 2 →1,4の対角で折り返す→[1 3 5
  3 4             2 4 6]
  5 6]
|Σ|:行列式

尤度が最大の箇所は、次の2つの方程式を解くことで求められる。
∂L/∂μ=0、∂L/∂Σ=0 ※微分が0のところが最大値なので右辺は0
※∂:dの筆記体、偏微分を表すのに用いられる
パラメータ:上記方程式を解いた結果
 推定した平均ベクトル:hat{μ}=(1/N)Σ[n-1...N]x^(n)
 推定した共分散行列:hat{Σ}=(1/N)Σ[n=1...N](x^(n)-hat{μ})(x^(n)-hat{μ})^⊤

⚫︎ステップ4:混合ガウスモデル
次に複数の正規分布からなる混合ガウスモデルによる、多峰性分布(前回は3Dグラフだと峰が一つの多次元正規分布だったが、今回は峰が複数ある。ヒストグラムでも2つの異なる山のピークが現れる)について取り扱う。実データ例は男女ごとの身長、体重のデータなどが該当する。
同様に数式を使ってモデル化、パラメータ推定を行い、データをランダムに生成できるようにする。
1モデル化:観測データの分布がGMMによって表現できると仮定
2パラメータ推定:GMMのパラメータを推定

GMMの式
 データ生成方法
 1:K個の正規分布の中から、ある確率分布に従って1つを選ぶ
 2:選んだ正規分布からデータを生成する
 上記1はカテゴリカル分布によって表される。数式は次の通り。
  p(z=k;φ)=φ_k ,,,(式1)
  φはクラスごとの確率を表す。k番めのクラスの出現する確率はφ_k
  2クラスのカテゴリカル分布の場合、φ=(0.35, 0.65)のようなパラメータになる
 次に正規分布を数式で表す。K個の正規分布のパラメータは次のとおり
  μ={μ_1, μ_2, ..., μ_k}
  Σ={Σ_1, Σ_2, ..., Σ_k}
  正規分布がk個用意された時、zの取る値によって正規分布が決まる(z=kのときはk番めの正規分布)
  p(x|z=k; μ,Σ)=N(x; μ_k, Σ_k) ...(式2)
 GMMの場合、確率の周辺化によりp(x, z)を使ってp(x)を表せる
  p(x)=Σ[k=1...K]p(x, z=k)
  同時確率のp(x, z=k)は次のように表せる。
  p(x,z=k)=p(z=k)p(x|z=k) (乗法定理)
  = φ_k*N(x;μ_k,Σ_k)  (式1) と(式2) を代入
 よって確率分布はこうなる(GMMのモデル):p(x)=Σ[k=1...N]φ_k*N(x;μ_k,Σ_k)

最尤推定における対数尤度=Σ[n=1...N]log(Σ[k=1...K](φ_k*N(x^(n);μ_k,Σ_k))
この対数尤度の式はlog-sum(logΣ)の形をしていて解析が難しい。それを解決するのが次のEMアルゴリズム。

⚫︎ステップ5:EMアルゴリズム
EMアルゴリズムを使用することで、混合ガウスモデルのパラメータ推定が効率的に行える。
EMアルゴリズムの導出にはKLダイバージェンスが重要な役割を果たす
式:
(xが連続型の時)D_KL(p||q)=∮p(x)log(p(x)/q(x))dx
(xが離散型の時)D_KL(p||q)=Σ[x]p(x)log(p(x)/q(x))

KLダイバージェンスと最尤推定の関係:
・パラメータを最大にするのが最尤推定の式
・同じパラメータを最小にするのがKLダイバージェンスの式
最小値の引数(arg min)のKLダイバージェンス式 = 最大値の引数(arg max)の最尤推定の式
この2つの式は等しくなる。
*KLダイバージェンスは2つ(p(x), q(x)の2つ)の確率分布を比較し、確率分布が一致する時0となり、異なるほど大きな値を示す式。
*最尤推定は、パラメータが最大の時に2つの確率分布が同じになる式。

EMアルゴリズムの導出
GMMは潜在変数(直接的に観測できない変数)を持つモデル。(一つのデータに対する対数尤度)
式離散型:log pθ(x) = logΣ[z]pθ(x,z)
式連続型:log pθ(x) = log∮pθ(x,z)dz
そのモデルの数式の一部が[log-sum]で表される(離散型の方)。log-sumでは解析的に解くことができない。(逆のsum-logなら可能)
上記離散型をサンプルD={x^(1),x^(2),...,x^(N)}が得られた時の対数尤度:log pθ(D)=Σ[n=1...N]logΣ[z^(n)]pθ(x^(n),z^(n))
上記の式はlog-sumになっている。
一つのデータxに関する条件付き確率を考えたときも以下のようにlog-sumになる
pθ(z|x)=pθ(x,z)/(Σ_z*pθ(x,z)) ←分母にΣがあるのでlog pθ(x)の時はlog-sumになる。
この問題に対処するためq(z)をpθ(z|x)の近似分布として使用する
log pθ(x)=log pθ(x,z)/pθ(z|x)=log pθ(x,z)/q(z)+log q(z)/pθ(z|x) ←式(1)
上記式にはまだ問題のあるpθ(z|x)が第2項にある。 その解析的に解けない式展開において、KLダイバージェンスの式と置き換えることで、解析的に解ける問題に置き換えている。
置き換え式:log pθ(x)=log pθ(x)Σ[z]q(z)
=Σ[z]q(z)logpθ(x)
=Σ[z]q(z)log(pθ(x,z)/q(z))+log(q(z)/(pθ(z|x)))
=Σ[z]q(z)log(pθ(x,z)/q(z))+Σ[z]q(z)log (q(z)/pθ(z|x)) ←式(1)を代入
=Σ[z]q(z)log(pθ(x,z)/q(z))+D_KL(q(z)||pθ(z|x)) ←第二項をKLダイバージェンスに置き換え
ELBO(x;q,θ)=Σ[z]q(z)log(pθ(x,z)/q(z)) ←式 ELBO
対数尤度の式をKLダイバージェンスの式とELBO(対数尤度以下の値となる「エビデンスの下界」)の和の式で表せる。
KLダイバージェンスの計算結果を0(一致する確率分布の時)と考えた時、対数尤度は常にELBO以上の値になる点と、ELBOは「sum-log」の形になっており解析しやすいことから、ELBOを大きくするようなパラメータを探せば良いということになる。
前述のように、GMMでは[log-sum]という手に負えない数式が含まれるため、ELBOの式を最適化の対象にすることで解析的に求めることができる。

ELBO項とKL項の和は常に一定。
KL項を小さくすればELBO項は大きくなる。KL項は2つの確率分布が等しい時0になる。つまり、対数尤度=ELBOと捉えることができる。

上記までは一つのデータxに対する式なので、複数データ(N個の観測データ{x^(1),x^(2),...,x^(N)})に拡張する。各データに対応した任意の確率分布を{q^(1),q^(2),...,q^(N)}として用意すると、対数尤度とELBOの関係は以下となる。
Σ[n=1...N]logΣ[z^(n)]pθ(x^(n),z^(n))>=Σ[n=1...N]ELBO(x^(n);q^(n),θ)=Σ[n=1...N]Σ[
z^(n)]q^(n)*(z^(n))log pθ(x^(n),z^(n))/(q^(n)*(z^(n)))

EMアルゴリズムは、ELBOにある2つのパラメータ(上記 「式 ELBO」のqとθ( 以下θ={φ,μ,Σ}とする))を両方同時に最適化するのは困難なので、片方を固定して更新、次はもう片方を固定して更新という作業を繰り返して最適化していく。
それぞれEステップ、Mステップと呼ばれる。
Eステップ(各n,kに対して計算:Mステップのパラメータは固定、q^(1),q^(n)...q^(N)の更新(q^(n)*(k):確率分布)):
 q^(n)*(k)=(φ_k*N(x^(n);μ_k,Σ_k)/(Σ[j=1...K]φ_j*N(x^(n);μ_j,Σ_j)
Mステップ(各kに対して計算:Eステップのパラメータは固定、ELBOを最大化するパラメータ(θ=(φ、μ、Σ))の更新):
 φ_k=(1/N)Σ[n=1...N]q^(n)*(k)
 μ_k = (Σ[n=1...N]q^(n)*(k)x^(n))/(Σ[n=1...N]q^(n)*(k))
 Σ_k = (Σ[n=1...N]q^(n)*(k)(x^(n)-μ_k)(x^(n)-μ_k)^⊤)/(Σ[n=1...N]q^(n)*(k))
終了判定(対数尤度を計算し比較):(1/N)Σ[n=1...N]log Σ[j=1...K]φ_j*N(x^(n);μ_j,Σ_j)

⚫︎ステップ6:ニューラルネットワーク
PyTorchの使い方
テンソルとバックプロバゲーション(誤差逆伝播法)の確認
ローゼンブロック関数で勾配を求める
線形問題を解く:損失関数=平均2乗誤差
ニューラルネットワークを実装し、非線形の問題を解く
 活性化関数:sigmoid,ReLU
画像処理ライブラリ:touchvision
 データセットの読み込み、画像の前処理機能
 mnistデータで画像データの前処理、データローダを実装

⚫︎ステップ7:変分オートエンコーダ(VAE)
前節までで、散布図にて単純なほぼ円状に分布した複数のクラスタによる等高線を描く散布図の生成モデル使用してデータを新しく生成できるまで至った。(3Dグラフでは2つの峰を形成する正規分布)
次にニューラルネットワークを使用した変分オートエンコーダ(VAE)で、散布図にて複雑な形をしたクラスタ(学習データによって柔軟に形が決まる確率分布)を生成することに挑む。
VAEもEMアルゴリズムで学習ができるようになる。
だたし問題点があり、計算量の制約により実現が困難。VAEの場合、EMアルゴリズムのEステップにて事後分布pθ(z|x^(n))を求めるのにpθ(x)=∮pθ(x,z)dzという積分の計算が必要。GMMの場合は離散値の潜在変数なので積分の計算は可能だった。しかしVAEは潜在変数zは多次元ベクトルのため、全ての値の積分は一般的に不可能。そのためにEMアルゴリズムを改良する。

VAEの潜在変数zは実数のベクトル。そこで確率分布q(z)を「正規分布」に限定する。正規分布は平均ベクトルμと共分散行列Σの2つによって形が決まる。
一つ問題ががあり、実際にはN個 {x^(1),x^(2),...,x^(N)}のデータを取り扱う必要があり、各データx^(n)ごとにパラメータ{μ^(n),Σ^(n)}を用意する必要がある。これを解決できるのがニューラルネットワーク。

VAEのデータ生成手順
1:ニューラルネットワークによって潜在変数zを固定の正規分布(あらかじめ設定した平均ベクトルと共分散行列による正規分布)から生成:(エンコーダ)
2:ニューラルネットワークによって、潜在変数zから観測変数xへと変換する。(デコーダ)

この2つのモデル(エンコーダ、デコーダ)で対数尤度を最大化する。(しかし対数尤度そのものは前述において手に負えないので、ELBOを最大化することを考える)
*ニューラルネットワークのパラメータ:φ
一つのデータxに対するELBO: ELBO(x;θ,φ)=∮qφ(z|x)log((pθ(x,z))/(qφ(z|x)))dz
N個のデータに対するELBO:Σ[n=1...N]ELBO(x^(n);θ,φ)=Σ[n=1...N]∮qφ(z|x^(n))log(pθ(x^(n),z)/qφ(z|x^(n)))dz
まずは一つのデータxに対するELBOの式展開で、期待値とKLダイバージェンスの差で表すことができる。
ELBO(x;θ,φ)=∮qφ(z|x)log pθ(x|z)dz-∮qφ(z|x)log(qφ(z|x)/p(z))dz
ELBO(x;θ,φ)=E_(qφ)*(z|x)[log pθ(x|z)] - D_KL(qφ(z|x)||p(z)) ←1項目は期待値、2項目はKLダイバージェンス
期待値はモンテカルロ法で近似できる。マイナスのついているKLダイバージェンス式を限りなく0に近づけるようにする。
以上によりELBOは次のように計算できる。
ELBO(x;θ,φ)=(-1/2)Σ[d=1...D](x_d-hat{x}_d)^2+(1/2)Σ[h=1...H](1+log σ^2_h-μ^2_h-σ^2_h)+const
VAEのパラメータはθ={μ(平均ベクトル)、Σ(共分散行列)}とφ=(ニューラルネットワークのパラメータ)の2つ。双方ともニューラルネットワークのパラメータなので勾配法によって更新できる。パラメータも同時更新できる。(EMアルゴリズム時のように交互の更新とか不要)
ただ、VAEはエンコーダで「潜在変数zの生成をするために正規分布からサンプリングしている箇所」に微分不可能な計算があるため、誤差逆伝播法が使えない。それを解決するのが変数変換トリック。

最終的に、VAEによって、MNISTデータセットの数字の画像を学習して生成することが可能
になる。

⚫︎ステップ8:拡散モデルの理論
VAEは潜在変数の数が一つだが、その潜在変数を階層化(T個に増える)したものが改装型VAE。これにより、複雑な表現を効率的に表すことが期待できる。
これをさらに進化させたものが拡散モデル。
実現させるための変更点
・観測変数と潜在変数の次元数を同じにする。
・エンコーダは、固定の正規分布によるノイズを追加する(拡散過程)
前時刻のデータに対してノイズを加える。最終時刻におけるデータが完全なノイズになる。
・ノイズを除去する処理をニューラルネットワークでモデル化する。(逆拡散過程)
拡散モデルでは、変数{x_0,x_1,...x_T}の次元数が全て同じ。よってニューラルネットワークをT個(エンコーダ、デコーダごとにT個)用意するのでなく、時刻tの入力を追加して、時刻で共通化して1つのニューラルネットワーク(エンコーダ、デコーダごとに一つ)で処理を行う。

学習はVAEと同様、対数尤度が最大になるパラメータを探す。
*前述の理由により対数尤度の計算が困難なのでELBOを最適化の対象にする。
 今回はELBOは正確に計算できないので、近似する。
 サンプルサイズT個で近似:1回の計算にT回のサンプリングが必要になる。
 サンプルサイズ2個で近似
 サンプルサイズ1個で近似

・サンプルサイズTで近似する方法:
拡散モデルのELBO(VAEのELBOを元に導くことができる)
VAEのELBO
ELBO(x;θ,φ)=∮qφ(z|x)log (pθ(x,z)/qφ(z|x))dz=E_(qφ(z|x))[log(pθ(x,z)/qφ(z|x))]
次の3点の変更で導ける
・xをx_0へ変更
・zをx_1,x_2,...x_Tへ変更
・パラメータφを消去
ELBO(x_0;θ)=E_(q(x_1,x_2,...,x_t|x_0))[log(pθ(x_0,x_1,....,x_T)/q(x_1,x_2,...,x_T|x_0))]
ELBOはθに関して最適化する。式展開によりθを含まない項を除くと以下になる。
E_(q(x_(1:T)|x_0))[Σ[t=1...T]log pθ(x_(t-1)|x_t)]
この式は期待値によって表されるのでモンテカルト法で近似できる
Σ[t=1...T]log pθ(x_(t-1)|x_t)
式展開を進めると目的関数は以下のようになる。
-(1/2)Σ[t=0...T-1]||x_t-hat{x}_t||^2 ←目的関数

目的関数の求める手順まとめ
1拡散過程によりT個のサンプリングをする
2ニューラルネットワークをT回適用してノイズ除去
3各時刻の2乗誤差||x_t-hat{x}_t||^2を求める

・サンプルサイズ2個で近似する方法
q(x_t|x_0)が解析的に表せることを利用する

ELBOの近似解:これは次のように式展開できる
Σ[t=1...T]E_(q(x_(t-1),x_i|x_0))[log pθ(x_(t-1)|x_t)]
この式で重要な点はq(x_(t-1),x_t|x_0)からのサンプリングは2つの手順で生成できること。
q(x_(t-1)|x_0)からx_(t-1)をサンプリングし、q(x_t|x_(t-1)からx_tをサンプリングする。
この式のT個の和(Σ[t=1...T]の部分]は、一様分布u(t)に関する期待値で表せられる。
TE_(u(t))[E_(q(x_(t-1),x_t|x_0))[log pθ(x_(t-1)|x_t)]]
この2重の期待値(E)はモンテカルロ法で近似できる
そして正規分布の対数尤度は2乗誤差に帰着して目的関数は以下になる。
-(T/2)||x_(t-1)-hat{x}_(t-1)||^2 ←目的関数

目的関数の求める手順まとめ
1.一様分布U{1,T}から時刻tをサンプリングする
2.q(x_(t-1)|x_0)からx_(t-1)をサンプリングし、次にq(x_t|x_(t-1))からx_tをサンプリング
3.ニューラルネットワークにx_tを入力してhat{x}_(t-1)を出力
4.2乗誤差||x_(t-1)-hat{x}_(t-1)||^2を求める

・サンプルサイズ1個で近似する方法
キーとなるのがq(x_(t-1)|x_t,x_0)という確率分布:x_0とx_tが与えられた時のx_([-1)の確率。この式は解析的に表すことができる。

前のサンプルサイズ2個では、ELBOを式展開して目的関数として以下の式を得た
Σ[t=1...T]E_(q(x_(t-1),x_i|x_0))[log pθ(x_(t-1)|x_t)]
=TE_(u(t))[E_(q(x_(t-1),x_t|x_0))[log pθ(x_(t-1)|x_t)]] ←[]内をJ_0とする
=TE_(u(t))[J0]
θに対して最適化しているので、J_0から「パラメータθを含まない定数項」を省略できる。逆の操作、定数行の追加も可能。ここではJ_0に「q(x_(t-1)|x_t,x_0)」を入れ込む
arg_θ max J_0 = arg_θ max(J_0-E_(q(x_(t-1),x_1|x_0))[log q(x-1|x_t,x_0)])
=arg_θ max E_(q(x_(t-1),x_t|x_0))[log pθ(x_(t-1)|x_t)/q(x_(t-1)|x_t,_x_0))] ←(E)以降をJ_1とする
=TE_(u(t))[J_1]

J_1は次のように式展開できる
J_1 = ∮q(x_(t-1),x_t|x_0)log(pθ(x_(t-1)|x_t)/q(x_(t-1)|x_t,x_0))dx_(t-1)dx_t
=-∮q(x_t|x_0) ∮q(x_(t-1)|x_t,x_0) log(q(x_(t-1)|x_t,x_0)/pθ(x_(t-1)|x_t))dx_(t-1)dx_t ←2個目の∮からdx_(t-1)までがKLダイバージェンスに置き換えできる
=-E_q(x_t|x_0)[D_KL(q(x_(t-1)|x_t,x_0)||pθ(x_(t-1)|x_t))]

KLダイバージェンスの計算
D_KL(q(x_(t-1)|x_t,x_0)||pθ(x_(t-1)|x_t))=1/(2σ^2_q*(t))||μθ(x_t,t)-μ_q(x_t,x_0)||^2

よってまとめると目的関数、損失関数は次のようになる。
目的関数
-TE_(u(t))[E_(q(x_t|x_0))[(1/(2σ^2_q*(t))||μθ(x_t,t)-μ_q(x_t,x_0)||^2)]
損失関数(損失関数は目的関数にマイナスをつけることで求められる。上記式の-2/T倍した値を設定)
E_(u(t))[E_(q(x_t|x_0))[(1/(σ^2_q*(t)))||μθ(x_t,t)-μ_q(x_t,x_0)||^2]]
モンテカルロ法による損失関数
1/(σ^2_q*(t))||μθ(x_t,t)-μ_q(x_t,x_0)||^2

⚫︎ステップ9:拡散モデルの実装
拡散モデルは、ニューラルネットワークの「U-Net」モデルで構築。
U-Netは医療画像の「セマンティック・セグメンテーション」のために開発されたモデル。
画像内の各ピクセルに対して特定のクラスラベルを割り当てるタスク。
入力(C,H,W):Color, Height, Width
出力(D,H,W) ; D(分類クラス数), Height, Width

拡散モデルでは、出力も(C,W,H)とする。
U-Netでは、前半の縮小ステージと、後半の拡大ステージに分けられる。
前半では畳み込み層による処理を行いながら特徴マップを小さくしていく。>ダウンサンプリング層
後半では、畳み込み層による特徴抽出を行いながら、前半とは逆に特徴マップのサイズを大きくしていく>アップサンプリング層
U-Netの特徴にはスキップ接続というものがある。ネットワークの対応する縮小ステージと拡大ステージの間で特徴マップを直接伝える機構がある。これにより、U-Netは全体の特徴を捉えながら、より細かい空間的な位置情報を使った処理ができる。

正弦波位置エンコーディング
時刻tをU-Netに取り入れる方法。時刻tは整数。
整数ベクトルに変換することで効果的な学習と予測が可能になる。
位置情報を絶対的な値でなく、周期的特徴を持つsin,cos関数を通じてエンコードする。>位置情報の相対的な差異や周期パターンが明確に表現できるので、その関係性を効果的に学習できる。

⚫︎ステップ10:拡散モデルの応用
stable diffusion, midjourneyは条件付き拡散モデルによって実現している。
条件付き確率であるp(x|y)をモデル化できれば、条件yによって、生成したいxをコントロールできる。
条件y:テキスト、画像、ラベルなど

ガイダンスの機能:与えられた生成条件をより強調して取り入れる仕組み
 スコア関数:入力に対する勾配を表す、ガイダンスで使用する。
 分類器ガイダンス:条件を強調したデータを生成できる。しかし分類器を別途用意する必要があり実用性が乏しい
 分類器なしガイダンス:上記ガイダンスを改善したもの。

本章では、MNISTの数字画像データ生成において、数字ラベルを与えると、そのラベルに対応する画像を生成するモデルを実装。

通常の拡散モデルではμθ(x_t,t)をニューラルネットワークでモデル化した。
条件付き拡散モデルではμθ(x_t,t,y)の通り、引数にyが追加される。これで条件付き拡散モデルに進化させることができる。
ノイズを予測するニューラルネットワークも∈θ(x_t,t)から∈θ(x_t,t,y)で対応する。

stable diffusion概要
CLIP:テキスト(プロンプト内容)のエンコーディングに使用するニューラルネットワーク。画像エンコーダと、テキストエンコーダの2つから構成。
画像エンコーダは画像をベクトルに変換し、テキストエンコーダはテキストをベクトルに変換する。そして、その2つのベクトルから類似度を計算し、データセットに含まれるアデータの類似度が高くなるように損失関数を設定して学習。これにより、画像とテキストが共通のベクトル空間で表現でき、類似性を計算できるようになる。

⚫︎付録A:多次元正規分布の最尤推定の導出
⚫︎付録B:イェンセンの不等式
⚫︎付録C:改装型VAEの理論と実装
⚫︎付録D:数式記号一覧

以上。


x postへポスト


  Copyright 2021-2025 REVIEW_SITE ALL RIGHTS RESERVED.
  このサイトについて/お問い合わせ
  プライバシーポリシー
  総合トップページへ