
CLIP Text Deprojectorを使って画像生成してみる ~LSTMの次元数を増やす準備~
前回は、最終レイヤー正規化層のパラメータを固定する実験を行いましたが、今回の記事は、モデルを拡張するための準備作業に充てることにします。
前回の記事
他のStable Diffusionの関連記事
Layered Diffusion Pipelineを使うためのリンク集
ライブラリの入手先と使用法(英語) : Githubリポジトリ
日本語での使用方法の解説 : Noteの記事
LSTMモデルを向上する方法
前回の結果から、LSTMモデルを向上することが必要ということが分かりましたが、その方法として次のような方法が考えられます。
入力embeddingの情報の減衰を防ぐ
LSTMの内部次元数を増やす
ネットワークを多層化する
出力MLP層を追加する
このうち、最後のLSTMの内部次元数を増やすには、モデルの構成を少し変更する必要があります。
具体的には、LSTMの出力に残差接続を繋げている部分の次元が合わなくなるため、接続の仕方を変える必要があります。そして、その上で、次元数を変換するための線形変換をLSTMの入力と出力に適用します。
入力の情報の減衰を防ぐ
残差接続の部分の変更を検討する前に、入力embeddingの情報の減衰を防ぐ方法について検討しました。これは、残差接続の部分の変更と変更箇所が重なるためです。

(1)は、LSTMの出力に再度、入力embeddingを加算して情報減衰を防ぐ方法です。メリットは、パラメータサイズに変更がない点です。
(2)は、入力embeddingをコンテキストではなく、LSTMの入力の一部として与える方法です。この場合は、LSTMの入力次元が2倍になるため、パラメータサイズが増加するというデメリットがあります。
本記事では、(1)を分析することとして、パターンのバリエーションとして、次の設定を検討しました。
残差を接続しない
残差を出力にのみ接続し、再帰入力には接続しない
残差を出力と再帰入力の両方に接続する
生成画像
生成画像は上から次の順に並んでいます。
Deprojectorなし
入力を加算せず、残差を出力と再帰入力に含む
入力を加算し、残差を接続しない
入力を加算し、残差を出力のみに含む
入力を加算し、残差を出力と再帰入力に含む
使用したプロンプトはこれまでと同様、次の通りです。
単一embedding
cat maid (猫耳メイド)
1girl red hair blue eye black skirt(赤髪 青目 黒スカート)
1boy 1girl in class room(少年 少女 教室)
複数embeddingの合成
cat, maid (猫 メイド)
1girl, red hair, blue eye, black skirt (赤髪 青目 黒スカート)
1boy, 1girl, in class room (少年 少女 教室)


以上の実験から、「4. 入力を加算し、残差を出力のみに含む」の結果が最もノイズを低減していると見られます。
次元数変換のための線形変換
次に、LSTMの内部次元数を増やす際の残差接続部分の変更として、次の2種類を検討しました。

(1)は、残差接続を出力線形変換後に繋げ、その後に追加の変換は適用しません。バリエーションとして、残差接続を直接繋げず、1回線形変換を挟んで接続する方法も検討します。
(2)は、LSTMの出力に線形変換を適用して次元数を合わせてから残差接続を繋げ、さらに最後に出力線形変換を適用します。
どちらのバージョンも、入力embeddingをLSTMのコンテキストに繋ぐ際に、線形変換を適用して次元数を調整します。ただし、本記事の実験では、LSTMの内部次元数は入力次元数と同じものを使用し、アーキテクチャの変化のみの影響を確認します。
生成画像
生成画像は上から次の順に並んでいます。
Deprojectorなし
線形次元変換を適用しない。残差を出力のみに含む
線形次元変換を適用。線形変換なしで残差接続
線形次元変換を適用。線形変換後に残差接続
線形次元変換を適用。残差接続後に線形変換


次元数変換のための線形変換を適用すると、生成画像のノイズが増えました。3つの残差接続のバリエーションには大きな差は見られませんでした。
まとめ
入力embeddingの情報減衰を防ぐために、LSTMのコンテキストにステップごとに加算する方法を試し、改善が見られました。
次元変換のための線形変換は、生成画像のノイズを増やしました。