Explore "Full-Stack" in depth!

情報系の専門学校で、今は機械学習に的を絞って学習中。プログラミングを趣味でやりつつ、IT系のあらゆる知識と技術を身に付けるべく奮闘中。

最近知った深層学習系の知識(一部)をまとめる

目次

概要

Cybozu Labs Youth 8th 研究生として、
今は深層生成モデルをテーマに勉強をしています。

8期として入ったのですが、ほぼ終わるところだったので、
卒業は9期とおなじになると思います。

ところで、Text-To-Imageタスクのモデルを勉強していると、
それこそディープラーニングの入門書には書いてないような内容の概念が
それはもうごろごろと登場します。

今回はテーマが決まってから16日あまりが経過したので、
最近調べた知識を適当にまとめておこうと思います。

この記事でその内容が理解できるというものではなく、
論文を読む上でこういう知識が必要になってきたよという経験談をお話できればと思っています。

実際に各項目の深い内容を知りたい方は、
記載しているリンク先に飛んで記事・論文を読むようにしてください。
私がここで書く中途半端な解説よりよっぽど詳しいし厳密だと思うので。


Conditioning Augmentation

StackGAN-v1に用いられている手法です。
従来の手法

  • GAWWN
    • バウンディングボックスとテキストのペアにより生成画像のレイアウトを制御するみたいなアプローチの研究
  • GAN-INT-CLS
    • Text-To-ImageタスクにGANを用いて初めて64×64画像の生成に成功

では、Text Descriptionの分散表現(text embedding)に非線形変換を適用していたために、
潜在空間がしばしば高次元化(大体100↑)してしまうような問題がありました。

StackGAN-v1の論文では、
埋め込み表現φtの平均・共分散行列を求め、
ガウス分布 f:id:orangebladdy:20190328143136j:plainから条件変数c^をサンプリングするという手法を取っています。

計算は、

f:id:orangebladdy:20190328143439j:plain

のようにして行われます。
(黒丸の記号は アダマールε は標準正規分布からのサンプリング )

MSGAN(mode seeking GAN)

めちゃくちゃ最近の手法です。

こちらの記事がめちゃくちゃわかりやすかったので是非見てほしいです。

簡単にまとめると、

  • 潜在変数zを元に画像を生成するGAN(cGAN)ですが、 多様性に欠如した画像 を連続して生成してしまう 「モード崩壊」 があります。
  • これを解決するために、潜在変数間距離と生成画像間距離の比率正則化項として加えています。
    • 正則化項の最大化により、多様性のある画像の生成が出来るようになっています。
    • 多くのGANの目的関数に追加出来るため汎用性も高いです

みたいなアプローチです。
詳細を知りたい方は下の論文を御覧ください。

https://arxiv.org/pdf/1903.05628v1.pdfarxiv.org

私も上記Qiitaの記事を読んだだけなので、
この手法を取り入れる時に論文読み直そうと思います。

バッチ正規化

ネットワーク中を伝播する信号において、
入力データの分布と各層によって変換されたデータの分布にズレが生じる事で、
高い学習率の設定正則化効果重みの初期値に依存しない等の効果があります。
特にDropoutに代替するポテンシャルを持つとして有名ですよね。
最近提唱された手法の殆どで用いられていると思います。

各層の活性化関数の前後(どちらか)で、
ミニバッチごとに標本平均・標準偏差を求めて、
正規化を適用しています。

AttnGANでも用いられていますね。

AttnGANの優位性-word-level features-

text-to-image synthesisタスクにおける従来の手法が、
Text Description(入力文章)全体のベクトルを用い、
そこから条件変数を求めて適用していました。

しかしこれでは 単語レベルの重要な情報が欠如 という主張から、
文章全体・単語単位 の特徴ベクトルを用いる方向にシフトした
みたいな内容の手法です。

論文を読んでない人はこちらの記事が分かりやすいです。
tsunotsuno.hatenablog.com

Gated Linear Units

言語モデルの性能指標であるパープレキシティにて、
提唱当時SOTAを達成した上に、
RNNベースの手法に比べて計算時間が高速だったようですね。

今日はじめてちゃんと調べたのであまり詳しくないのですが、
入力特徴Xの線形写像をSigmoid関数でゲーティングする手法のようです。

AttnGANでも用いられていますね。

これについてはもっと調べる必要がありそうです。
というかここで紹介する手法は何度も参照して落とし込む必要がありそう…。

有名なりょぼっとさんが記事を出しています。
深層学習・NLP系の知見がここまでまとまっているのは凄い…。

deeplearning.hatenablog.com

こちらの論文に詳細な記載があります https://arxiv.org/pdf/1612.08083.pdfarxiv.org

Residual Block

StackGAN++等の生成モデルでも用いられている手法です。
活性化関数の微分は基本1以下になってしまうことから、
層が深すぎるネットワークにおいて勾配が非常に小さな値に収束してしまう
勾配消失問題を解決する為に用いられます。

各レイヤーを重み付けられて伝播するルートとは別に、
入力信号をそのまま伝えるルートをショートカットの要領で用意します。

これもバッチ正規化と同じく多くの手法で用いられている手法になります。


総評

機械学習ディープラーニングの勉強を始めたばかりの方も見ていると思いますが、
私も本格的に勉強し始めたのは2018年の10月からです。

何かやりたい事を決めて、その研究を追う上で論文等を読んで知識を補完するという勉強法はかなりオススメです。

技術書を勉強しているだけでは得られない知見があると思います。