(cs.LG)はじめに2014年に画像生成のためのアルゴリズム「GAN」が発表されました。「機械学習において、この10年でもっとも面白いアイディア」と評価しています。GANの発表以降、GANに関する大量の論文が発表されており、2018にはGANに関係する論文が11800本発表されたとの報告があります。画像生成の枠組みで生まれたGANですが、今では自然言語処理や音声処理などの様々な分野で応用されています。本記事では、GANの発展の歴史をアルゴリズムの側面から紹介します。GANとはGANとは、一言で表すなら生成器(以後、G)と識別器(以後、D)の二つが互いに敵対的な学習を行うというものです。Gは生成した画像をなるべく本物に近づけるように、そしてDは入力された画像が本物か、それともGが生成した偽物か精度良く識別するように学習が行われます。これを表したものが以下の図です。GANの概要図Gはノイズzから本物に近い画像を生成するように学習します。本物の画像とGが生成した画像の区別をDが出来なくなったとき、学習が収束します。Gは学習データの分布を学習できたということを表しています。オリジナルのGANの損失関数は以下のように表せます。Gを固定して、Dの最適解を求めると以下のようになります。ここで、PgはGが獲得したデータの分布です。Pg=Pdataとなるとき、Dは1/2となります。ここで、このD✳︎Gを元の式に代入すると、オリジナルのGANはJS距離と呼ばれるものを最小化する問題に帰着します。ここで、JS距離はKL距離を対称にした距離です。GANの問題点GANは学習に大きな問題を抱えています。それは、勾配消失問題とモード崩壊です。下記の図はオリジナルのGANの損失関数をD(G(z))を軸に表したものです。赤の線がオリジナルのGANを表しています。学習の初期には、本物のデータとGが生成するデータは簡単に判別できます。D(G(z))は0に近くなります。0付近ではほとんど勾配が0であり、Gの学習が十分に行われません。これを勾配消失問題と呼びます。GがDを騙せる画像を生成した際に、その画像ばかり生成すれば損失関数は小さくなります。学習されたGは同じような画像ばかりを生成するようになります。これをモード崩壊と呼びます。GANの代表的な亜種では、ここからはGANの代表的な亜種を紹介していきます。InfoGANオリジナルのGANでは、ノイズzをどう変更すれば画像が変わるか調整が難しいという問題がありました。InfoGANは、潜在変数cを用意し、相互情報量の最大化を行うことで、cに画像の特徴を埋め込むことに成功しました。下記の式が、InfoGANの損失関数です。Gの生成する画像の情報をcに埋め込むように、学習が進みます。相互情報量の最大化で、情報が埋め込めるのかは、こちらのサイトを参照してみて下さい。GANはある条件の元、画像を生成するというものです。クラスラベルや文章特徴で条件付けて、それに対応する画像生成するというものがあります。GANの例として、pix2pixが挙げられます。これは画像間のスタイル変換を行う手法です。以下の図は、白黒画像に色を付けるというタスクを表しています。白黒画像に色を付けるpix2pixの例pix2pixでは、元の画像yをGによって変換します。yと変換後の画像G(y)が本当のペアであるか、そして同時にxという本物の画像についても、xとyが本物のペアかであるか正確に識別するようにDの学習が進みます。GはyとG(y)が本物のペアだとDに誤認識させるように学習を行います。これにより、Gは自然な変換の仕方を学習できます。(x,y)というペアで学習している点において、条件付きだと言うことが出来ます。CycleGANCycleGANは、pix2pixに似ていますが条件設定が異なります。pix2pixでは画像ごとに1対1にペア(白黒画像と、それに対応した色の付いた画像など)が存在しています。ペアが得られないという場合も多々あります。馬とシマウマの画像はあるが、1対1に画像が対応してない場合などです。このような場合でも、スタイル変換を行うことが出来るのがCycleGANです。下記の図はCycleGANの概要図です。CycleGANの概要CycleGANには、二つの生成器G・Fと二つの識別器Dx・DYが存在します。Gを用いてxをyに変換し、それをDYによって識別します。yについても同様です。このまま学習を行うと、ペアが存在していないため、スタイルだけでなく他の部分も変化してしまう可能性があります。x$となるように制約をかけることを提案しています。元に戻るという制約をかけることで、変換後の画像が復元可能、つまり大きく変化しないようにしています。WGANWGANはGANの学習を安定させるために、Wasserstein距離と呼ばれる二つの分布間の距離測度を用いた損失関数を提案したGANです。Wasserstein距離は、ある分布を対象となる分布に一致させるために必要な最小距離です。離散分布を用いるとイメージしやすいと思います。分布PとQがあり、PをQに一致させることを考えます。ここでは、以下のようなPとQを想定します。Q4=0.3この二つの分布を一致させるためには、P1からP2に0.2、P2からP3へ0.2、Q3からQ4へ0.1移動させることで、二つの分布を一致させることが出来ました。これを示したのが以下の図です。この合計がWasserstein距離(0.2+0.2+0.1=0.5)となります。これを連続分布に適応すると、以下のようになります。GANの問題点でも紹介しましたが、JS距離とW距離では何が異なるのでしょうか。この差分を見るために、以下のような想定でJS距離とW距離を計算してみましょう。Pはx=0のみで確率値を、Qはx=θのみで確率値を持つ分布です。W距離=$|θ|$となります。θ=0のときはJS距離は0となり、不連続な関数であることが分かります。W距離は連続であり、これがGANの安定した学習を可能にします。詳細な議論はこちらのサイトをご覧下さい。損失関数を工夫したGANGANの問題点の章でも述べたように、オリジナルのGANの学習は非常に不安定です。これを解決するために、様々な損失関数によるGANが提案されています。LSGANLSGANは、非常にシンプルでありながらGの学習の初期における、勾配消失問題を解決する損失関数を提案しています。c=1などが推奨されています。二つ目の式からわかるように、学習の初期においてもc=1とすることで、Gの学習に十分な勾配が得られます。GANヒンジロスを用いた損失関数を用いたGANも提案されています。encorderとなっています。Dは本物の画像か、Gが生成した画像か明示的に識別しません。その代わりに、以下のWasserstein距離を最大化します。mgen|ここで、mrealは本物の画像の復元誤差で、mgenはGによって生成された画像の復元誤差です。Wを最大化するということは、本物の画像の復元誤差を0に近づけ、生成された偽物の画像の復元誤差を♾にするということです。同時に、Gは自分自身が生成した画像の復元誤差を小さくするように学習します。GとDのどちらの学習を成功させることが出来ません。詳細な議論はこちらのサイトをご覧ください。GANの代表的な構造DCGANオリジナルのGANでは、GとDはMLP(多層パーセプトロン)で構成されていました。これに対して、DCGANでは、畳み込み層を用いて、GとDの表現力を高めています。下記の図はGに使用された構造の例です。SAGAN従来のGANの構造はCNNをベースにしており、局所的な部分に注目して画像生成してしまうという問題がありました。Attention機構をGANの構造に組み込むことで、大域的な特徴にも基づいて生成を行います。