ブログ

【LoRA】Low-Rank Adaptationの概要とTransformerへの導入

Fine-Tuningを行うにあたって、低ランクの行列分解に基づく手法であるLoRA(Low-Rank Adaptation)は実用上の観点から大変有力な手法です。当記事ではLoRAの概要とLoRAのTransformerへの適用について取りまとめました。
LoRAの論文である「LoRA: Low-Rank Aaptation of Large Language Models」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

LoRAの概要

パラメータ行列の分解

LoRA(Low-Rank Adaptation)ではFine-Tuningの際に全結合層(MLP)の計算に用いるパラメータ行列の分解を行います。たとえばパラメータ行列$W \in \mathbb{R}^{D \times D}$を用いる場合、$W$は下記のように分解することができます。
$$
\large
\begin{align}
W & \longrightarrow XY \\
X & \in \mathbb{R}^{D \times r}, \, Y \in \mathbb{R}^{r \times D}
\end{align}
$$

上記のように分解を行う場合、$D=10{,}000, r=10$であれば「$W$のパラメータ数」と「$X$と$Y$のパラメータ数の合計」はそれぞれ下記のように計算できます。
・$W$のパラメータ数
$$
\large
\begin{align}
10{,}000 \times 10{,}000 = 10^{8}
\end{align}
$$

・$X$と$Y$のパラメータ数の合計
$$
\large
\begin{align}
10,000 \times 10 + 10 \times 10{,}000 = 2 \times 10^{4}
\end{align}
$$

上記のようにLoRAではパラメータ$W$を$XY$のように分解してFine-Tuningの際に$X$と$Y$とそれぞれ学習を行います。このような処理を行うことでFine-Tuningの際の学習パラメータを減らすことが可能になります。

LoRA論文 Figure$\, 1$

LoRAの処理の概要は上図からも確認できます。パラメータの初期値は$r \times D$の行列の値を正規分布$\mathcal{N}(0, \sigma^{2})$に基づいてサンプリングし、$D \times r$の行列を零行列で用意します1

図では$W \in \mathbb{R}^{D \times D}$が前提である一方で、論文の本文では$d \times k$で表記されている箇所があることは合わせて注意しておくと良いと思います。

一部のパラメータのみのFine-Tuning

Fine-Tuning時にLoRAを用いるにあたっては、基本的に全てのパラメータを用いずに一部のパラメータのみのFine-Tuningを行います。どのパラメータをFine-TuningするかはPre-trained modelやdownstream taskの特性に合わせて検討されます。

推論時の処理

LoRAではFine-Tuning時にパラメータ$W$をUpdateするのではなく、初期値が$0$の$\Delta W$に蓄積させるような処理が行われます。逆に推論時にはFine-Tuning時に学習した結果の$\Delta W$に対応する$W$に対して$W + \Delta W$を計算することで推論を行うことができます。

このような枠組みでFine-Tuningや推論を行うことで、推論時の処理を大きく変えないことが可能です。また、大元のパラメータの値を変えないことから、LoRAの入れ替えをスムーズに行うことが可能であり、アプリケーションへの反映がしやすくなります。

TransformerへのLoRAの導入

TransformerにおけるMLP

TransformerではMultiHead Attention時のlinear projectionと$2$層FFN(FeedForward Network)の$2$つの処理をMLPと見なすことができ、LoRA(Low-Rank Adaptation)を適用することが可能です2

LoRAの論文ではMultiHead Attention時の$W_q, W_k, W_v, W_o$を用いるlinear projectionのみ実験されておりFFNはfuture workの課題とされているので、以下$W_q, W_k, W_v, W_o$についてのみ確認を行います。

MultiHead AttentionのどのパラメータにLoRAを用いるか

LoRA論文のSection$\, 7.1$ではTransformerにおけるMultiHead AttentionのどのパラメータにLoRAを用いるかについて実験を元に考察が行われています。LoRA論文では$1{,}750$億のパラメータ数で構成されるGPT-$3$に対し、LoRAで用いるパラメータ数を$1{,}800$万とする条件下で実験が行われており、「$r=8$で$W_q, W_k, W_v, W_o$をどれか$1$つだけ用いるパターン」と「$r=4$かつ$2$つのパラメータを用いるパターン」、「$r=2$かつ$4$つ全てのパラメータを学習させるパターン」についてそれぞれパフォーマンスが計測されます。$1{,}800$万は$96 \times 12288 \times 8 \times 2 = 18{,}874{,}368$に基づきます。

LoRA論文 Table$\, 5$

上記の表より、$r$を大きくするよりFine-Tuning対象のパラメータを増やすのが有力であるということが確認できます。この結果から、それほど複雑でないFine-Tuningタスクでは行列のランクが小さくても十分であると見なすことができます3

また、$W_q, W_k, W_v$の学習にあたっては、一般的なMultiHead Attentionの処理はヘッド毎にパラメータ行列を計算するように立式される一方で、$D \times D$のパラメータ行列で計算した後に分割する演算で表すこともできます。このような点に基づいてMultiHead AttentionにおけるLoRAでは$D \times D$を$D \times r$と$r \times D$で分割し、学習を行うことが可能です。

  1. LoRAではFine-Tuning時にパラメータ$W$をUpdateするのではなく初期値が$0$の$\Delta W$に蓄積させるような処理が行われるので、学習前の$\Delta W$が零行列となるように初期値を設定する必要があります。 ↩︎
  2. MLPと見なせるかではなく、処理にパラメータ行列の積の演算が含まれるかで判断するのがシンプルで良いと思います。 ↩︎
  3. LoRA論文では$r=2$でも十分であったのはタスクが簡単であったからと推察されており、たとえば多言語が前提となる場合は$r=2$では十分でない可能性があると記載されています。 ↩︎

GELU(Gaussian Error Linear Unit)の数式とグラフの描画

近年様々なタスクに用いられるTransformer処理では活性化関数にGELU(Gaussian Error Linear Unit)が用いられることが多いです。当記事ではGELUの数式の確認と、Pythonを用いたグラフの描画を行いました。
当記事の作成にあたっては、GELU論文や「深層学習 第$2$版」の第$2$章「ネットワークの基本構造」の内容などを参考にしました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

GELUの数式

標準正規分布の累積分布関数

GELU(Gaussian Error Linear Unit)の数式には標準正規分布$\mathcal{N}(0,1)$の累積分布関数が用いられます。標準正規分布の確率密度関数を$\phi(x)$、累積分布関数を$\Phi(x)$とおくとき、$\phi(x), \Phi(x)$はそれぞれ下記のように表されます。
$$
\large
\begin{align}
\phi(x) &= \frac{1}{\sqrt{2 \pi}} \exp{ \left( \frac{x^{2}}{2} \right) } \\
\Phi(x) &= \int_{-\infty}^{x} \phi(t) dt
\end{align}
$$

GELUの数式

前項で確認を行った標準正規分布の累積分布関数$\Phi(x)$を元にGELUの数式$\mathrm{GELU}(x)$は下記のように定義されます。
$$
\large
\begin{align}
\mathrm{GELU}(x) = x \Phi(x)
\end{align}
$$

GELUの微分

$\mathrm{GELU}(x) = x \Phi(x)$は下記のように計算することができます。
$$
\large
\begin{align}
\frac{d}{dx} \mathrm{GELU}(x) &= \frac{d}{dx} (x \Phi(x)) \\
&= \Phi(x) + x \cdot \frac{d}{dx} \Phi(x) \\
&= \Phi(x) + x \phi(x) \quad (1)
\end{align}
$$

GELUのグラフの描画

ReLUとGELUのグラフは下記を実行することで行うことができます。

import numpy as np
from scipy import stats

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme()

x = np.arange(-2.5, 2.51, 0.01)

y_relu = np.maximum(0, x)
y_gelu = x * stats.norm.cdf(x)

plt.plot(x, y_relu, label="ReLU")
plt.plot(x, y_gelu, label="GELU")

plt.legend()
plt.show()

・実行結果

上記のGELUの理解にあたっては、下記を実行するとわかりやすいと思います。

x = np.arange(-1., 2., 0.01)

y = x
y_gelu = x * stats.norm.cdf(x)

plt.plot(x, y, label="ReLU")
plt.plot(x, y_gelu, label="GELU")

plt.plot(x, np.zeros(x.shape[0]), "k--")

print("Phi(-1): {:.2f}".format(stats.norm.cdf(-1)))
print("Phi(1): {:.2f}".format(stats.norm.cdf(1)))
print("Phi(2): {:.2f}".format(stats.norm.cdf(2)))

plt.legend()
plt.show()

・実行結果

$\Phi(-1)=0.16, \, \Phi(1)=0.84, \, \Phi(2)=0.98$のような値が得られた一方で、$x=-1$ではオレンジが青のおおよそ$0.16$倍、$x=1$ではオレンジが青のおおよそ$0.84$倍、$x=2$ではオレンジが青のおおよそ$0.98$倍であることがそれぞれ確認できます。

また、$x=0$で微分を行うことのできないReLUに対し、GELUでは微分を行うことが可能です。前節の$(1)$式に基づいてGELUの$x=0$における接線は下記のように描画することができます。

x = np.arange(-1., 2., 0.01)

y_gelu = x * stats.norm.cdf(x)
y_tangent = stats.norm.cdf(0) * x

plt.plot(x, y_gelu, label="GELU")
plt.plot(x, y_tangent, label="tangent_line")

plt.plot([0], [0], "go")

plt.legend()
plt.show()

・実行結果

参考

・GELU論文

【SETR論文まとめ】Transformerを用いたSemantic Segmentation

Segmentationタスクには従来VGGNetやResNetなどのCNNをbackboneに持つネットワークを用いることが主流であった一方で、近年Transformerの導入も行われています。当記事ではSemantic SegmentationにTransformerを導入した研究であるSETRについて取りまとめました。
SETRの論文である「Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

Transformerの概要

Dot Product Attentionに主に基づくTransformerの仕組みについては既知である前提で当記事はまとめました。下記などに解説コンテンツを作成しましたので、合わせて参照ください。

・直感的に理解するTransformerの仕組み(統計の森作成)

ViT

SETR

処理の概要

SETR(Segmentation TRansformer)の処理の概要は下図より確認できます。

SETR論文 Figure$\, 1$

上図の$(\mathrm{a})$より、SETRにおける処理の全体像が確認できます。基本的な処理構造はTransformer・ViTと同様な構成です。一方、DecoderではSegmentationタスク用の処理が行われており、$(\mathrm{b})$ではDecoderにおける基本処理、$(\mathrm{c})$ではmulti-level feature aggregationを用いたDecoderの処理の改良(SETR-MLA)についてそれぞれ図解されています。以下、それぞれについて詳しく確認を行います。

Transformerへの入力の用意

入力が$x \in \mathbb{R}^{H \times W \times 3}$のように得られるとき、ピクセル単位でTransformerの処理を行うとTransformerの系列の長さが$500 \times 500 \times 3 = 750{,}000$のように大変大きな値になります1

そこでSETRではViTなどに同じく、$16 \times 16$ピクセルを$1$つのパッチと見なし、Linear Projectionなどを行うことで$x_{f} \in \mathbb{R}^{\frac{H}{16} \times \frac{W}{16} \times C}$のようなTransformerへの入力を作成します。

ここで行われているLinear Projection処理には「CvTで用いられる畳み込み」や「SegFormerで用いられるOverlapped Patch Merging」のような改良が考案されているので、合わせて確認しておくと良いと思います。

基本的なUpsamplingの概要

Transformerの出力のFeature mapが$\displaystyle Z^{L_{e}} \in \mathbb{R}^{\frac{HW}{256} \times C}$のように表されるとき、セグメンテーションを行うにあたってFeature mapを$\displaystyle Z’ \in \mathbb{R}^{\frac{H}{16} \times \frac{W}{16} \times C}$のような形式に変形を行います。

基本的な手法ではカテゴリ数を$K$とするとき$\displaystyle Z’ \in \mathbb{R}^{\frac{H}{16} \times \frac{W}{16} \times C}$を$\displaystyle \frac{H}{16} \times \frac{W}{16} \times K$に変形し、その後にUpsamplingを行いピクセル単位の分類を行います2

Progressive Upsampling

前項のようにUpsamplingを一度に行う手法はノイズが多い予測となり得ることから、SETRでは段階的なアップサンプリング(PUP; Progressive UPsampling)が主に用いられます。

SETR論文 Figure$\, 1 \, (\mathrm{b})$

PUPでは上図のように$2$倍を$4$回行うことで$\displaystyle \frac{H}{16} \times \frac{W}{16}$を$H \times W$に変換します。このようなDecoderを用いる場合を、SETR論文ではSETR-PUPのように表します。

Multi-Level feature Aggregation

SETR論文ではFPN(Feature Pyramid Network)のように段階的に特徴マップを採用して用いるという手法も検討されています。
$$
\large
\begin{align}
\{ Z^{1}, Z^{2}, \cdots , Z^{L_e} \}
\end{align}
$$

上記のようにTransformerの各層のfeature mapが表される際に$M$個のレイヤーを用いて推論を行う場合、下記のように表されるレイヤーの集合$\{ Z^{m} \}$を用いてMulti-Level feature Aggregation(MLA)の処理が行われます。
$$
\large
\begin{align}
\{ Z^{m} \}, \quad m \in \left\{ \frac{L^{e}}{M}, 2 \frac{L^{e}}{M}, \cdots , M \frac{L^{e}}{M} \right\}
\end{align}
$$

たとえば$L_e=12, M=3$の時は$\{ Z^{3}, Z^{6}, Z^{9}, Z^{12} \}$を用いてMulti-Level feature Aggregationが行われます。このようにMLAに基づくDecoderを用いる場合を、SETR論文ではSETR-MLAのように表します。

SETR論文 Table$\, 2$

上記がSETR論文におけるパフォーマンスの表です。基本的にはSETR-PUPのパフォーマンスが良いことが確認できます。

SETR-MLAのパフォーマンスがそれほどよくない点についてはそもそもFPNの利点である「ダウンサンプリングによって解像度が低くなる前のfeature mapを反映させられる点」が実現できていないというのにあるのではないかと思います。

SETRが出たタイミングがViTと同時であるので、MLAの改良にあたってはその少し後に取り組まれた階層型のViTに基づく手法であるSegFormerに着目すると良いと思います。

参考

・Transformer論文
・SETR論文

  1. Transformerのデフォルトは$512$であり、Attentionの計算が原理的には$N^{2}$に比例することから$750{,}000$をそのまま取り扱うと計算量がボトルネックになります。 ↩︎
  2. Cityscapesを用いる場合、$K=19$であるので$19$クラス分類が行われます。 ↩︎

【Grad-CAM論文まとめ】勾配計算に基づいた予測に寄与する中間層の可視化

クラス活性マッピング(CAM; Class Activation Mapping)はDeepLearningにおける予測に寄与した領域の可視化を行う際に用いる手法です。当記事では特定のネットワーク構造でしか用いることのできないCAMを一般的に用いれるように拡張を行ったGrad-CAMについて取りまとめました。
Grad-CAMの論文である「Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization」や「深層学習 第$2$版」第$9$章「説明と可視化」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

クラス活性マッピング

クラス活性マッピング(CAM; Class Activation Mapping)の最もシンプルな例には、下記のようなCNN構造を持つ場合が挙げられます。

(最終畳み込み層、ReLUが活性化関数)$\, \longrightarrow \,$(大域平均プーリング(GAP)層)$\, \longrightarrow \,$(ソフトマックス関数)$\, \longrightarrow \,$(クラススコア)

上記のような場合、最終畳み込み層の出力のFeature mapを$A \in \mathbb{R}^{H \times W \times C}$とすると、ReLUによって$Z$の全ての成分について$A_{ijc} \geq 0$が成立することからFeature mapのチャネル方向の$k$番目を$A_{k} \in \mathbb{R}^{H \times W}$とおくと、$A_{k}$の平均がソフトマックス関数の入力となります。よって、$A_{k}$の可視化を行うことでクラス$k$の分類にどの領域が寄与しているかの確認ができます。

また、CAMは下記のようなネットワーク構造を持つ場合も行うことができます。

(最終畳み込み層、ReLUが活性化関数)$\, \longrightarrow \,$(GAP層)$\, \longrightarrow \,$($1$層の全結合層)$\, \longrightarrow \,$(ソフトマックス関数)$\, \longrightarrow \,$(クラススコア)

上記のようなネットワークの場合、チャネル$c$からクラス$k \in \{ 1, 2, \cdots , K \}$への全結合層のパラメータを$w_{ck}$とおくと、クラス$k$についてのクラス活性$L_{\mathrm{CAM}}^{k}$は下記のように計算できます1
$$
\large
\begin{align}
L_{\mathrm{CAM}}^{k} = \sum_{c=1}^{C} w_{ck} Z_{c}
\end{align}
$$

Grad-CAM

Grad-CAMの概要・数式

Grad-CAMの処理の全体像は下図を元に掴むと良いです。

Grad-CAM論文 Figure$\, 2$

Grad-CAMに基づくクラス$k$のクラス活性$L_{\mathrm{Grad-CAM}}^{k} \in \mathbb{R}^{H \times W}$はFeature mapの$A^{c}, \, c = 1, \cdots C$、クラス$k \in \{ 1, 2, \cdots , K \}$のソフトマックスへの入力値$y^{k}$を元に下記のように定義されます。
$$
\large
\begin{align}
L_{\mathrm{Grad-CAM}}^{k} &= \mathrm{ReLU} \left( \sum_{c=1}^{C} \alpha_{c}^{k} A^{c} \right) \\
\alpha_{c}^{k} &= \frac{1}{HW} \sum_{i=1}^{H} \sum_{j=1}^{W} \frac{\partial y^{k}}{\partial A_{ij}^{c}}
\end{align}
$$

Grad-CAMは上記のように偏微分の計算に基づいてCAM(Class Activation Mapping)の一般化を行う手法です。

参考

・Grad-CAM

  1. Grad-CAMの論文ではFeature mapのインデックスが$k$、クラス分類のインデックスが$c$で表されますが、「$K$クラス分類問題」や「チャネル数$C$」などのように表されることが多いので当記事では逆に用いました。 ↩︎

【SimCSE】対照学習(Contrastive Learning)に基づくベクトル表現の取得②

SimCSE(Simple Contrastive Learning of Sentence Embeddings)は対照学習(Contrastive Learning)を用いてテキストのベクトル表現を抽出する手法です。当記事ではSimCSEの一連の学習手順について取りまとめを行いました。
SimCLRの論文の「SimCSE: Simple Contrastive Learning of Sentence Embeddings」を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

指示関数

指示関数(indicator function)の$\mathbb{1}_{[k \neq i]} \in \{ 0, 1 \}$は下記のように定義されます。
$$
\large
\mathbb{1}_{[k \neq i]} =
\begin{cases}
1 \quad \mathrm{if} \quad k \neq i \\
0 \quad \mathrm{otherwise}
\end{cases}
$$

SimCLR

SimCSEはSimCLRと同様に対照学習(Contrastive Learning)という枠組みに基づいて学習が行われます。SimCLRについては下記で詳しく取り扱いました。

SimCSE

SimCSEの全容

SimCSEの全容は下記を元に掴むと良いです。

SimCSE論文 Figure$\, 1$

SimCSEは「教師なしCSE(Unsupervised CSE)」と「教師ありCSE(Supervised CSE)」の二つに大別され、上図の$(\mathrm{a})$が教師なしCSE、$(\mathrm{b})$が教師ありCSEにそれぞれ対応します。

次項次々項でUnsupervised CSEとSupervised CSEについて詳しく確認を行います。

Unsupervised CSE

Unsupervised CSEでは同じ入力テキスト$x_i$をTransformerに$2$度入力し、FFN層で$2$種類のDropout maskの$z_i, z_i’$を作用させることで$2$種類のembeddingである$h_{i}^{z_{i}}, h_{i}^{z_{i}’}$を取得し、学習を行います。

学習にあたっては、SimCLRと同様に入力$x_i$について下記のようなlossの$l_i$を定義し、lossが最小になるようにパラメータの学習を行います。
$$
\large
\begin{align}
l_i &= -\log{ \frac{e^{\mathrm{sim}}(h_{i}^{z_{i}}, h_{i}^{z_{i}’})/\tau}{\sum_{j=1}^{N} e^{\mathrm{sim}}(h_{i}^{z_{i}}, h_{j}^{z_{j}’})/\tau} }
\end{align}
$$

SimSCEではハイパーパラメータであるDropout rateの$p$のデフォルト値が$p=0.1$とされることも合わせて抑えておくと良いです。

Supervised CSE

Supervised CSEではNLI(Natural Language Inference)のデータセットが用いられます。NLIでは対象の一文に対し、絶対的に正しい(entailment)、正しいかもしれない(neutral)、明確に正しくない(contradiction)の$3$つが与えられます。

Supervised CSEでは入力$x_i$に対し、entailmentを正例$x_i^{+}$、contradictionを負例$x_i^{-}$と見なし下記のように定義されるlossの$l_i$を最小化するように学習を行います。
$$
\large
\begin{align}
l_i &= -\log{ \frac{e^{\mathrm{sim}}(h_{i}, h_{i}^{+})/\tau}{\sum_{j=1}^{N} \left( e^{\mathrm{sim}(h_{i}, h_{j}^{+})/\tau} + e^{\mathrm{sim}(h_{i}, h_{j}^{-})/\tau} \right)} }
\end{align}
$$

参考

・SimCLR論文
・SimCSE論文

二部グラフ(bipartite graph)に基づくCross Attentionの解釈

TransformerのSelf-Attentionはグラフニューラルネットワーク(GNN)を元に理解することができます。当記事では二部グラフ(bipartite graph)に基づくTransformerのCross-Attentionの理解にあたって取りまとめを作成しました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

グラフ理論とグラフニューラルネットワーク

下記で詳しく取り扱いました。

二部グラフ

グラフ理論における$2$部グラフ(bipartite graph)は「頂点集合を$2$つに分割して各部分の頂点は互いに隣接しないようにできるグラフ1」のことです。

$2$部グラフ①:英語版Wikipedia Bipartite graphより

上図のように$2$部グラフでは頂点集合を「赤」と「青」の$2$つに分割し、それぞれのノード間をエッジで連結します。上図のグラフは下図のように表すこともできます。

$2$部グラフ②:英語版Wikipedia Bipartite graphより

上図のような表し方に基づいて、「赤と青のそれぞれのノードが交互に出てくるグラフ」のように$2$部グラフを解釈することも可能です。また、赤と青の全てのノードの組み合わせをエッジで連結したグラフを完全$2$部グラフ(complete bipartite graph)といいます。

完全$2$部グラフ:英語版Wikipedia Bipartite graphより

完全$2$部グラフは上図のように表すことができます。上図のように$2$部グラフ・完全$2$部グラフでは$2$つのノード集合の要素数が一致しない場合があります。DeepLearningではMLP(Multi Layer Perceptron)の層間の計算を表した図が完全$2$部グラフに対応することは抑えておくと良いです。

当記事でのメインテーマであるTransformerにおけるCross-Attentionも完全$2$部グラフで表すことができることを次節で確認を行います。

$2$部グラフとCross-Attentionの解釈

Cross-Attentionの概要

Transformer論文におけるCross-Attention: Transformer論文Figure$\, 1$を改変

上図の赤枠で示すようにTransformerのDecoderではEncoderからの出力をKey・Value、Decoderへの入力をQueryとするCross-Attentionの処理が行われます。Cross-Attentionの名称は下記などを参考にしました2

A Survey of Transformers.のSection$2.1$ Vanilla Transformerより

Cross-AttentionはQuery・Key・Valueの用意の仕方がSelf-Attentionと異なる一方で、計算自体は同様なので、それぞれを$Q, K, V$と表すとき下記のような式でCross-Attentionの処理を表すことができます。
$$
\large
\begin{align}
\mathrm{CrossAttention}(Q, K, V) &= \mathrm{softmax} \left( \frac{Q K^{\mathrm{T}}}{\sqrt{d}} \right) V \quad (1) \\
Q & \neq K = V
\end{align}
$$

$2$部グラフとCross-Attentionの対応と処理の解釈

Cross-AttentionはQueryを$1$つ目のノード集合、Key・Valueを$2$つ目のノード集合とする完全$2$部グラフを元に表すことができます。

Cross-Attentionと完全$2$部グラフ:英語版Wikipedia Bipartite graphの図を改変

たとえば上図のように「青」のノード集合をQuery、「赤」のノード集合をKey・Valueに対応させ、それぞれのノード間の類似度を計算し、重み付け和を計算することで$(1)$式で表されるCross-Attentionと同様の計算を行うことができます。

TransformerのDecoderにおけるCross-Attention

TransformerのDecoderではCross-AttentionによってDecoderへのそれぞれの入力についてEncoderの出力を反映させます。このような処理に基づいて機械翻訳などに用いられる系列変換タスクや文章生成などを実現することができます。

Key・Valueのダウンサンプリングと計算の軽量化

Cross-AttentionではQueryとKey・Valueが一致する必要がないことから、Key・Valueのノードの数を削減し、計算の軽量化を実現することが可能です。たとえばPVTにおけるSpatial Reduction Attention(SRA)やSegFormerにおけるEfficient Self-Attentionなどが軽量化の例です。

Spatial Reduction Attention(SRA)やEfficient Self-Attentionでは隣接するViTのパッチが局所相関を持つことから局所領域でパッチを連結したものをKey・Valueと見なす手法です。このような処理を行うことでViTの計算量を抑えることが可能になります。

参考

・Transformer論文
・$2$部グラフ:Wikipedia
・Bipartite graph:Wikipedia

  1. Wikipediaの$2$部グラフの記載を引用 ↩︎
  2. Transformerのオリジナルの論文「Attention Is All You Need」ではCross-Attentionという名称は出てきませんが、Self-Attentionと分けて理解するにあたって何らかの名称があると良いので当記事ではSurvey論文を参考にCross-Attentionを用いました。 ↩︎

【CLIP論文まとめ】対照学習を用いたmulti-modal embeddingの取得

SimCLRのような対照学習(Contrastive Learning)の枠組みを用いることで画像のベクトル表現の抽出が可能です。当記事では画像とテキストのベクトル表現の抽出をmulti-modalに行った研究であるCLIPについて取りまとめを作成しました。
CLIPの論文である「Learning Transferable Visual Models From Natural Language Supervision」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

SimCLR

SimCLRについては下記で詳しく取りまとめました。

CLIP

CLIPの処理の概要と対照学習

CLIP(Contrastive Language-Image Pre-training)論文の処理の全体像は下図を確認すると理解しやすいです。

CLIP論文 Figure$\, 1$

上図の$(1)$は対照学習(Contrastive Learning)に基づく学習プロセス、$(2)$と$(3)$は推論プロセスにそれぞれ対応します。

対照学習を用いた学習プロセスでは$N$個の画像とテキストの組を用意し、$N \times N$の対応について類似度計算を行うようにします。このとき、それぞれの行について対角成分のみを正解と見なし学習を行います。基本的な学習の流れはCLIP論文のFigure$\, 3$の擬似コードを確認すると良いです。

CLIP論文 Figure$\, 3$

上記の計算はSimCLRの学習におけるlossの計算と基本的には同様な計算です。このような学習を行うことで、画像とテキストに関するマルチモーダルなベクトル表現の獲得が可能になります。

このような学習によって得られるベクトル表現の活用である$(2)$と$(3)$については次項で確認します。

CLIPの学習結果を用いたzero-shot分類

CLIPは画像とテキストが同じペアであるかの判定を行うことによって、zero-shot分類を行うことが可能です。

CLIP論文 Figure$\, 1$の右半分

たとえば上図のようにCLIPで学習を行ったText EncoderとImage Encoderを用いてEmbedding(ベクトル表現)をそれぞれ計算し、コサイン類似度を計算することで分類を行うことができます。$(2)$のText Encoderの使い方については「A photo of a plane.」の入力に対応するText Encoderの出力が$T_1$、「A photo of a car.」の入力に対応する出力が$T_2$などのようにテキストのベクトル表現$T_i$を生成し、$I_1$との類似度を計算すると理解すると良いです。

図の計算結果では「A photo of a car.」に対応する出力である$T_3$とImage Encoderの出力の$I_1$の類似度が高いことから、zero-shot分類の結果は「A photo of a dog.」が出力されます。

【3DETR論文まとめ】Transformerを用いた$3$D Object Detection

$3$D Object Detectionは点群の$3$D空間上の点に対してバウンディングボックス(bounding box)とそのクラスを予測するタスクです。当記事では$3$D Object DetectionにTransformerを導入した研究である$3$DETRについて取りまとめました。
DETRの論文である「End-to-End Object Detection with Transformers」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

Transformerの概要

Dot Product Attentionに主に基づくTransformerの仕組みについては既知である前提で当記事はまとめました。下記などに解説コンテンツを作成しましたので、合わせて参照ください。

・直感的に理解するTransformerの仕組み(統計の森作成)

GIoU

DETR

3DETR

処理の概要

$3$DETR(DEtection TRansformer)の処理の概要は下図より確認できます。

$3$DETR論文 Figure$\, 2 \, (\mathrm{left})$

基本的にはDETRのCNN backbone処理をPointNet++に基づくMLP処理に置き換えたと理解して良いと思います。PointNet++やPointNet++で用いられるFPS(Farthest Point Sampling)については下記で詳しく取り扱いました。

query embeddings

Faster-RCNNやSSDなどのCNNを用いたObject Detectionのネットワークではバウンディングボックスの予測にあたって、事前に設定したAnchor boxとネットワークの出力のオフセット項を元にバウンディングボックスの回帰を行います。

一方、Transformerを用いてObject Detectionを行ったDETRではTransformerのPositional Encodingを学習パラメータに設定し、Positional EncodingをAnchor boxの代わりに用います。

このPositional Encodingをquery embeddingsといい、$3$DETRでも同様な処理が用いられます。

Decoderのアウトプット

Location

Locationはバウンディングボックスの中心の位置の$(X,Y,Z)$値に対応し、$3$DETR論文では$\mathbf{c}$で表されます。query embeddingsに基づく$\mathbf{q}$とネットワークからの出力の補正項の$\Delta \mathbf{q}$を用いて$\mathbf{c}$の予測は$\hat{\mathbf{c}} = \mathbf{q} + \Delta \mathbf{q} \in \mathbb{R}^{3}$のように定義されます。

ここでground truthの「$\cdot$」に対して「$\hat{\cdot}$」は予測を表すにあたって用いられることも注意しておくと良いです。

Size

Locationはバウンディングボックスのサイズに対応し、$X,Y,Z$の三方向についてスカラー値を持ちます。Locationと同様にquery embeddingとネットワークの出力の補正項を元に$\hat{\mathbf{d}} \in \mathbb{R}^{3}$が定義されます。

Orientation

室内を取り扱った点群であるSUN RGB-Dなどでは重力方向に変換したものが用いられるので、角度の自由度は$1$つだけ取り扱えれば十分です。$3$DETRではVoteNetなどと同様に、$[0, 2 \pi)$の間から$12$個のクラスと補正項のresidualの予測を行います。

$12$個のカテゴリを$\mathbf{a}_{c}$、residualを$\mathbf{a}_{r}$と表し、角度に関する出力$\hat{\mathbf{a}}$を下記のように定義します。
$$
\large
\begin{align}
\hat{\mathbf{a}} = [\hat{\mathbf{a}}_{c}, \hat{\mathbf{a}}_{r}]
\end{align}
$$

Semantic Class

Semantic Classはバウンディングボックス内のクラス分類の結果に対応します。ground truthの$\mathbf{s}$が$K$カテゴリ+背景の$1-$hotベクトル、ネットワークの出力に基づく予測が$\hat{\mathbf{s}} \in [0, 1]^{K+1}$のベクトルでそれぞれ定義されます。

3DETRのloss

$3$DETRのlossの$\mathcal{L}_{3 \mathrm{DETR}}$は下記のように定義されます。
$$
\large
\begin{align}
\mathcal{L}_{3 \mathrm{DETR}} = \lambda_{c}|| \hat{\mathbf{c}}-\mathbf{c}||_{1} &+ \lambda_{d}|| \hat{\mathbf{d}}-\mathbf{d}||_{1} + \lambda_{ar}|| \hat{\mathbf{a}}_{r}-\mathbf{a}_{r}||_{\mathrm{huber}} \\
&- \lambda_{ac} \mathbf{a}_{c}^{\mathrm{T}} \log{\hat{\mathbf{a}}_{c}} \, – \, \lambda_{s} \mathbf{s}^{\mathrm{T}} \log{\hat{\mathbf{s}}}
\end{align}
$$

上記の$||\cdot||_{1}$は$L1$ノルム、$||\cdot||_{\mathrm{huber}}$はHuber lossと同様の計算に基づくノルムをそれぞれ表します。また、$\mathbf{a}_{c}$や$\mathbf{s}$はそれぞれベクトルであることから、上記のようにクロスエントロピーによる分類のlossが計算されます。

Bipartite Matching

前項で取り扱った$3$DETRのlossの定義にあたっては、「どの予測とどのバウンディングボックスを対応させるか」という前段階の処理が必要です。このBipartite Matchingの解決にあたってはHungarian algorithmが用いられます。

参考

・Transformer論文
・DETR論文
・$3$DETR論文

GIoU(Generalized IoU)の数式と指標の解釈

Object Detectionタスクなどにおけるバウンディングボックスの予測にあたっては予測結果とground truthとの当てはまりの指標が必要でこの際にIoU(Intersection over Union)が一般的に用いられます。当記事ではIoUを改良した指標であるGIoUについてまとめました。
GIoUの論文である「Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

IoUの概要と数式

IoU(Intersection over Union)は「二つの図形がどのくらい類似しているかの指標」であり、Object Detectionタスクにおけるバウンディングボックスの予測結果の評価などにあたってよく用いられます。

領域$X$と領域$Y$のIoUを$\mathrm{IoU}(X,Y)$とおくと、$\mathrm{IoU}(X,Y)$は$X$と$Y$の和集合$X \cup Y$と$X$と$Y$の積集合$X \cap Y$を用いて下記のような式で表されます。
$$
\large
\begin{align}
\mathrm{IoU}(X,Y) = \frac{X \cap Y}{X \cup Y}
\end{align}
$$

たとえば$X$と$Y$が一致している場合$X \cup Y = X \cap Y$であるので$\mathrm{IoU}(X,Y) = 1$、$X$と$Y$が共通部分を持たない場合は$X \cap Y = 0$であるので$\mathrm{IoU}(X,Y) = 0$のように計算できます。

IoUの課題

「二つの図形の類似度を計算を行う」際にIoUは有力な手法である一方で、「$X \cap Y = 0$の際に$X$と$Y$がどのくらい離れているかの指標にはならない」という点で課題があります。

たとえばObject Detectionタスクでは多くの予測がされるので、ground truthと予測のバウンディングボックスが共通部分を持たない可能性もあり、このような場合にIoUをそのまま用いるとどのくらい離れているかに基づいて学習を行うことができません。

GIoU(Generalized Intersection over Union)はこの課題の解決にあたって導入される指標です。GIoUについて詳しくは次節で確認します。

GIoU

GIoUの定義式

集合$X$と集合$Y$を全て含む最小の集合を$C$とおくとき、$X$と$Y$のGIoUは下記のように計算することができます。
$$
\large
\begin{align}
\mathrm{IoU}(X,Y) &= \frac{X \cap Y}{X \cup Y} \\
\mathrm{GIoU}(X,Y) &= \mathrm{IoU}(X,Y) \, – \, \frac{|C-(X \cup Y)|}{|C|} \quad (1)
\end{align}
$$

上記の式は、$|C|$が$|X \cup Y|$に対して大きくなればなるほど$\mathrm{GIoU}(X,Y)$は小さくなると理解すると良いです。また、$\mathrm{GIoU}(X,Y)$の最小値は$\mathrm{IoU}(X,Y)=0$、$\frac{|X \cup Y|}{|C|} \to 0$のとき漸近的に下記のように得られます。
$$
\large
\begin{align}
\lim_{\frac{|X \cup Y|}{|C|} \to 0} \mathrm{GIoU}(X,Y) = -1
\end{align}
$$

GIoUの論文では$(1)$式が下記のように$\mathrm{Algorithm} \, 1$で記載されています。

GIoU論文 $\mathrm{Algorithm} \, 1$

バウンディングボックス回帰におけるGIoUの計算

バウンディングボックス回帰におけるGIoUの計算はGIoU論文の$\mathrm{Algorithm} \, 2$で取り扱われています。

GIoU論文 $\mathrm{Algorithm} \, 2$

上記は一見複雑に見えるかもしれませんが、predictionとground truthの積集合(Intersection)を$\mathcal{I}$、和集合(Union)を$\mathcal{U}$、predictionとground truthを含む最小の領域を$A^{c}$で表すことから逆に計算を辿ると理解しやすいと思います。

【SegFormer】Transformerを用いたシンプルかつ効率的なセグメンテーション

局所的な特徴量の抽出に適したCNNに対して、大域的な特徴量の抽出に適したTransformerはViT以降、多くのComputer Visionのタスクに用いられます。当記事ではTransformerを用いてシンプルかつ効率的なセグメンテーションを実現したSegFormerについて取りまとめました。
SegFormerの論文である「SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

Transformerの概要

Dot Product Attentionに主に基づくTransformerの仕組みについては既知である前提で当記事はまとめました。下記などに解説コンテンツを作成しましたので、合わせて参照ください。

・直感的に理解するTransformerの仕組み(統計の森作成)

ViT

SegFormer

処理の概要

SegFormerの処理の全体は下図を元に掴むと良いです。

SegFormer論文 Figure$\, 2$

Hierarchical Feature Representation

$H \times W \times 3$の入力に対し、ステージ$i$におけるFeature mapを$F_{i}$とおくと、$F_{i}$のサイズは下記のように定義されます。
$$
\large
\begin{align}
F_{i} & \in \mathbb{R}^{\frac{H}{2^{i+1}} \times \frac{W}{2^{i+1}} \times C_i} \quad (1) \\
i &= \{ 1, 2, 3, 4 \}
\end{align}
$$

$i=1$のとき$2^{i+1}=2^{2}=4$、$i=2$のとき$2^{i+1}=2^{3}=8$なので、$(1)$式はSegFormer論文のFigure$\, 2$と対応することが確認できます。

また、$i$が大きくなるにつれて$C_i$は大きくなるので$C_{i} < C_{i+1}$が成立します。ここでの処理はVGGNetやResNetのbackboneネットワークによるFeature mapの作成と同様なものであると理解しておくと良いです。

Overlapped Patch Merging

パッチの特徴量の作成にあたっては、「パッチに含まれるピクセルや特徴量の値をそのまま用いる」というのが基本的である一方で、このようにパッチ特徴量の作成を行うと「パッチの境界における相関」をうまく取り扱うことができません1

この解決にあたってSegFormerではOverlapped Patch Mergingが導入されます。Overlapped Patch Mergingはパッチ作成時にフィルタの大きなCNNを用い、パッチ作成にあたって用いる領域を重複させる手法です。

このようにOverlapped Patch Mergingを用いることでパッチ間の境界領域の相関も特徴量抽出にうまく反映させることができ、パフォーマンスの向上に役立ちます。

Efficient Self-Attention

Efficient Self-AttentionではPyramid Vision Transformer(PVT)のSpatial Reduction Attention(SRA)と同様の処理を行うことで、ViTのボトルネックである計算量の改良を実現します。

Fix-FFN

Mix-FFNでは下記のような式に基づいてFeed Forward Network(FFN)処理が行われます。
$$
\large
\begin{align}
X_{out} &= \mathrm{MLP}(\mathrm{GELU}(\mathrm{Conv}_{3 \times 3}(\mathrm{MLP}(X_{in})))) + X_{in} \\
\mathrm{GELU}(x) &= x \Phi(x) \\
\Phi(x) &= \int_{-\infty}^{x} \frac{1}{\sqrt{2 \pi}} \exp{ \left[ -\frac{t^{2}}{2} \right] } dt
\end{align}
$$

Mix-FFNでは上記の式に基づいて、$3 \times 3$の「Depth-wise Convolution」処理が途中で実行されます。また、Mix-FFNに畳み込み処理を導入することで位置情報を反映できるので、セグメンテーションタスクではPositional Encodingは必ずしも必要ではないとSegFormer論文に記載があります(We argue that positional encoding is actually not necessary for semantic segmentation.2)。

参考

・Transformer論文:Attention is All you need[$2017$]
・SegFormer論文

  1. もちろん「パッチの境界における相関」を取り扱うにあたってViTの$16 \times 16$サイズのパッチを階層型のViTでは$4 \times 4$まで抑えることで改良させることは可能ですが、あくまで改良に過ぎず直接的な解決にはならないことに注意が必要です。 ↩︎
  2. SegFormer論文 $3.1$ Hierarchical Transformer Encoder Mix-FFN.の一文 ↩︎