세상의 변화에 대해 관심이 많은 이들의 Tech Blog search

Bert4Rec(Sequential Recommendation with BERT) 설명

|

이번 글에서는 BERT 구조를 차용하여 추천 알고리즘을 구성해본 Bert4Rec이란 논문에 대해 다뤄보겠습니다. 논문 원본은 이 곳에서 확인할 수 있습니다. 본 글에서는 핵심적인 부분에 대해서만 살펴보겠습니다.


Bert4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer 설명

1. Background

RNN을 필두로 한 left-to-right unidirectional model은 user behavior sequence를 파악하기에 충분하지 않습니다. 왜냐하면 user의 historical interaction에서 일어난 item 선택 과정에 대해 살펴보면, 여러 이유로 인해 꼭 그 순서 자체가 중요하다고 말할 수 없는 경우가 자주 발생하기 때문입니다. 예를 들어 어떤 user가 토너와 화장솜을 사고 싶다고 할 때 토너를 먼저 구매할 수도 있고, 화장솜을 먼저 구매할 수도 있습니다. 사실 어떤 것이 먼저 오냐는 관점에 따라 크게 중요하지 않은 사실이 될 가능성이 높습니다.

따라서 논문에서는 sequence representations learning을 위해 두 방향 모두에서 context를 통합해야 한다고 이야기합니다. 우리는 이미 BERT 논문을 통해 이러한 방법이 특히 언어 모델에서 매우 잘 작동한다는 사실을 알고 있습니다.

논문 2장에 나온 Related Work에 관해서는 직접 확인하길 바랍니다. 이전에 다룬 내용들이 많아 본 글에서는 생략합니다.


2. Architecture

$u, v$ 를 각각 user, item이라고 할 때 $S_u = [v_1^u, …, v_t^u, …, v_{n_u}^u]$ 는 user $u \in \mathcal{U}$ 가 상호작용한 item 목록, 즉 interaction sequence입니다. 이 때 $v_t^u \in \mathcal{V}$ 는 user $u$ 가 $t$ step에서 상호작용한 item이고 $n_u$ 는 user $u$ 의 interaction sequence의 총 길이입니다.

따라서 user $u$ 가 $n_u+1$ time에서 특정 item $v$ 를 선택할 확률은 아래와 같이 표현할 수 있습니다.

[p(v_{n_u+1}^u = v S_u)]

아래 그림은 Bert4Rec의 전체 구조와 비교 대상인 RNN의 구조를 도식으로 나타내고 있습니다.

Bert4Rec의 핵심은 stacked된 $L$ 개의 bidirectional Transformer layer입니다. 병렬적으로 이전 layer에 존재하는 모든 position에 있는 정보들을 상호 교환하여 모든 position의 representation을 수정함으로써 학습을 진행합니다. self-attention 메커니즘을 통해 위치/거리 제약 없이 직접적으로 dependency를 포착할 수 있습니다. 이러한 메커니즘은 일종의 global receptive field로 귀결됩니다.

Transformer layer에 대해서는 몇 가지 포인트만 짚고 넘어가겠습니다. 자세한 내용은 원 논문을 참조하시길 바랍니다.

Transformer layer는 multi-head self-attention과 position-wise feed-forward network로 구성됩니다. 후자는 attention sub-layer의 결과물에 대해 적용되는데 이를 통해 여러 dimension 사이에 존재하는 상호작용을 포착하고 비선형성을 강화해줍니다. 본 논문에서는 feed-forward network의 활성화함수로 GELU를 사용하였으니 참고하시길 바랍니다.

이렇게 여러 Transformer layer를 쌓으면 분명 네트워크가 상당히 깊어지기 때문에 residual connection은 필수적으로 들어가게 됩니다. 이 과정을 요약하면 아래와 같습니다.

[\forall l \in [1, …, L]]

[H^l = Trm(H^{l-1}) = LN(A^{l-1} + Dropout(PFFN(A^{l-1})))]

[A^{l-1} = LN(H^{l-1} + Dropout(MH(H^{l-1})))]

Embedding layer에서는 2가지를 기억하면 됩니다. 일단 positional embedding을 할 때 기존의 transformer와 달리 학습 가능한 방법을 사용했다는 것입니다.

[h_i^0 = v_i + p_i, p_i \in P, P \in \mathbb{R}^{N, d}]

그리고 만약 길이가 $N$ 을 넘는 sequence가 있다면 마지막 $N$ 개에 대해서만 학습/추론을 진행하였습니다.

논문에 명시된 것은 아니지만, 1가지 덧붙이자면 논문 원본의 경우 이렇게 $N$ 개의 item을 산정하고 학습을 진행하기 때문에 inductive inference는 불가능한 상황입니다. 따라서 새롭게 item이 자주 들어오고 나오는 상황에서는 다른 학습 환경이 필요할 것으로 판단됩니다.

$L$ 개의 layer를 통과하고 나면 드디어 최종 결과물을 얻을 수 있게 됩니다.

[P(v) = softmax(GELU(h_t^L W^P + b^P)E^T + b^O)]


3. Model Learning

학습은 Masked Language Model라고도 알려진 Cloze task를 sequential recommendation에 적용함으로써 진행됩니다. 각 학습 단계에서 input sequence의 모든 item 중 $p$ %를 무작위로 masking하고 주변 context를 통해 masked item의 original ID를 추론하는 것입니다.

이제 각 masked된 input $\grave{S_u}$ 를 masked target의 negative log-likelihood로 정의할 수 있습니다.

[\mathcal{L} = \frac{1}{\vert S_u^m \vert} \Sigma_{v_m \in S_u^m} -log P(v_m = v_m^* \vert \grave{S_u})]

이 때 $\grave{S_u}$ 는 user behavior history의 masked version이고, $v_m^*$ 는 masked item $v_m$ 의 true item입니다.

이러한 방식으로 학습 데이터를 구성하게 되면 사실 Bert4Rec은 만약 무작위로 $k$ 개의 item을 masking한다고 했을 때 $\binom{n}{k}$ 개의 sample을 얻을 수 있으므로 더욱 방대하고 다양한 데이터셋을 얻을 수 있을 것입니다.

학습과 달리 테스트 시에는 mask라고 하는 special token을 user behavior sequence의 맨 끝에 놓고 이 token의 final hidden representation에 기반하여 next item을 예측하도록 설정하였습니다.


4. Experiments and Conclusion

학습 데이터는 아래와 같습니다.

비교 대상 알고리즘, 평가 환경 세팅 등 자세한 내용은 논문 본문을 참조하시길 바랍니다.

논문 후반부에는 attention head에 대한 시각화 자료가 존재하며 hidden vector 차원 및 sequence 길이에 따른 성능 변화에 대한 연구도 포함되어 있어 인사이트를 얻기 좋습니다.

Bert4Rec은 NLP에서 괄목할 만한 성과를 거둔 BERT 구조를 추천 시스템에 적용한 알고리즘입니다. 전체적으로 알고리즘의 component에 대한 설명과 실험 결과에 대해 기술한 부분이 매우 합리적이고 실제 현업에서 적용하기에도 좋은 아이템이라고 판단됩니다. 다만 역시 sequence 형태의 데이터에 기반하였다보니 item 간의 상호작용이 꽤 분명한 task에서 잘 작동할 것으로 예상됩니다.

Comment  Read more

metapath2vec(Scalable Representation Learning for Heterogeneous Networks) 설명

|

이번 글에서는 Heterogenous Network에서 node representation을 학습하는 metapath2vec이란 논문에 대해 다뤄보겠습니다. 논문 원본은 이 곳에서 확인할 수 있습니다. 본 글에서는 핵심적인 부분에 대해서만 살펴보겠습니다.

그리고 관련하여 학습/분석 코드는 이 곳에 작성해두었으니 참고하셔도 좋을 것 같습니다.


metapath2vec: Scalable Representation Learning for Heterogeneous Networks 설명

1. Introduction

word2vec 기반의 network representation learning framework로는 DeepWalk, LINE, node2vec 등이 있고, 이들은 raw network로 부터 유용하고 의미있는 잠재적 feature를 자동적으로 발견해내는 역할을 수행합니다. 그러나 이들은 모두 homegenous network 기반의 알고리즘으로 여러 node/edge type이 존재하는 heterogenous network에서는 적용하기 어렵습니다.

본 논문은 heterogenous network에서 적용할 수 있는 meta-path-guided random walk strategy를 제시하고 있으며 이 방법론은 아래와 같은 특징을 갖습니다.

  • 여러 다른 type의 node/relation에서 구조적이고 의미론적인 상관관계를 포착
  • 복수의 node type 맥락 속에서 skip-gram 기반으로 network probability를 최대화
  • 효과적이고 효율적인 heterogenous negative sampling 기법 적용
  • similarity search, node classification, clustering 등에 적용 가능

논문에서는 metapath2vec과 이를 수정한 형태의 metapath2vec++를 제안하고 있습니다. 모든 node type에 대해서 같은 space에서 embedding을 생성하던 기존 방법과 달리 후자의 경우 각 node type 마다 별도의 space에서 embedding을 생성합니다.

2. Metapath2vec framework

hetegenous network는 $G=(V, E, T)$ 라고 하는 그래프로 정의됩니다. 이 때 여러 node/edge type을 표현하기 위한 mapping function이 존재합니다.

[\phi(v): V \rightarrow T_v]

[\varphi(e): E \rightarrow T_E]

위에서부터 각각 node type, edge type을 결정합니다. 물론 $\vert T_v \vert + \vert T_E \vert > 2 $ 여야 할 것입니다. 만약 $=2$ 라면 homogenous network가 되겠지요.

metapath2vec의 embedding은 homegenous skip-gram model을 수정, 발전시킨 형태입니다. node $v$ 가 주어졌을 때, $N_t(v), t \in T_V$ 라는 heterogenous context를 갖는 확률을 최대화하는 node representation을 학습하는 것이 이 알고리즘의 목표입니다.

skip-gram 모델의 아이디어와 마찬가지로 중심 node가 있을 때 주변 node의 특성을 학습한다는 설정은 동일하지만, 이 때 적절한 node type에 따라 학습해야 하는 것입니다.

[\underset{\theta}{argmax} \Sigma_{v \in V} \Sigma_{t \in T_v} \Sigma_{c_t \in N_t(v)} log p(c_t \vert v; \theta)]

$p$ 함수는 softmax 함수이고, $N_t(v)$ 는 node type $t$ 을 갖는 $v$ 의 이웃을 의미합니다. $X_v$ 는 $\mathbf{X}$ 의 $v$ 번째 row로 node $v$ 의 embedding vector를 의미합니다. 좀 더 자세한 설명은 논문의 3페이지를 참고하길 바랍니다.

학습의 효율성을 증대하기 위해 negative sampling 기법이 적용되었습니다. metapath2vec은 다만 node type과 상관없이 negative sample을 추출하며, metapath2vec++은 이와 달리 node type specific하게 샘플링을 진행합니다.

meta-path scheme $\mathcal{P}$ 는 아래와 같이 정의할 수 있습니다.

[V_1 \xrightarrow{R_1} V_2 \xrightarrow{R_2} … V_t \xrightarrow{R_t} V_{t+1} … \xrightarrow{R_{l-1}} V_l]

위 그림에서 예시를 들자면 APVPA는 2명의 작가가 어떤 paper를 냈고 이들이 같은 venue에서 accept되었다는 것을 의미합니다. 이러한 meta-path는 사실 metapath2vec에서는 domain 지식을 통해 사전에 설정되어야 합니다. 이는 많은 경우에 단점이 될 수 있는데, 이렇게 사전에 meta-path를 설정하기 어려운 경우가 많고, 어떤 path가 유의미한지 인간이 판단하기 어려울 때가 많기 때문입니다. 참고로 meta-path를 굳이 사전에 설정하지 않아도 자동적으로 찾는 기법을 고안한 논문으로는 Graph Transformer Networks가 있습니다.

metapath2vec에서 step $i$ 에서의 transition probability는 아래와 같이 정의합니다.

앞서 설명하였다시피 metapath2vec은 softmax 함수에서 node type 정보를 무시합니다. 이를 수정한 버전이 metapath2vec++입니다. 이 방법에서 softmax 함수는 context $c_t$ 의 node type에 따라 normalized됩니다. 이렇게 함으로써 skip-graph 모델의 output layer에서 각 type에 맞는 multinomial distribution을 정의할 수 있게 되는 것입니다.

목적함수는 아래와 같습니다.

알고리즘의 pseudo code는 아래와 같습니다.

3. Experiments & Conclusion

실험을 위해 2가지 데이터셋이 사용되었습니다. 자세한 사항은 논문을 참조하시길 바랍니다. 두 데이터 모두 author, paper, venue의 관계를 탐색합니다.

실험에서 주목할만한 결과만 간단히 기록하겠습니다.

  • Multiclass 분류 문제에서는 Macro F-1, Micro F-1 score를 통해 평가가 진행되었습니다. (이 metric은 이 곳에서 설명을 확인할 수 있습니다.) 대체적으로 metapath2vec 계열의 성능이 우수하였는데 특히 적은 데이터를 사용한 구간(전체 데이터의 20% 이하를 사용)에서의 성능이 돋보였습니다.

  • node별 walk 수, walk length, embedding dim, neighborhood size라는 4개의 parameter에 대해서 sensitivity test를 해보았는데, 값을 더 늘린다고 성능이 향상되지는 않았습니다. 이는 곧 적당히 효율적인 size로 충분한 효과를 발휘할 수 있음을 증명합니다.

  • Normalized Mutual Information을 metric으로 하여 node clustering 성능도 측정하였는데, metapath2vec 계열의 성능이 더욱 우수하였습니다.

  • 다른 알고리즘과 달리 metapath2vec++은 정확히 node type을 구분하면서도 실제 관련이 높은 node 사이의 거리를 가깝게 만드는데 성공한 것으로 보입니다.

글 서두에서도 밝혔듯이 metapath2vecmetapath2vec++은 heterogenous graph에서 구조적인 node representation learning을 가능하게 한 효과적인 방법론입니다. 핵심적인 아이디어가 돋보인 논문이고 그렇기 때문에 추후에 진행된 많은 연구에서 언급되고 있는 것으로 보입니다.

몇 가지 한계점도 있습니다. 일단 large intermediate output data가 존재할 때 학습하는 것이 쉽지 않습니다. 그리고 meta-path를 사전에 설정하는 해야 하는 것도 때때로 문제가 됩니다.

Comment  Read more

ViT(Vision Transformer) 논문 설명(An Image is Worth 16x16 Words - Transformers for Image Recognition at Scale)

|

이 글에서는 ViT(Vision Transformer) 논문을 간략하게 정리한다.


ViT(An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale)

논문 링크: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

Github: https://github.com/google-research/vision_transformer

  • 2020년 10월, ICLR 2021
  • Google Research, Brain Team
  • Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, et al.

이미지 class 분류를 위해 이미지를 여러 patch로 잘라 Transformer에 넣는 방법을 제안한다.

전체 구조를 순서대로 따라가보자. 왼쪽 아래에서부터 출발한다.

  1. 이미지를 16 x 16 크기의 patch로 나눈다. 자연어에서 word token sequence가 주어지는 것처럼, 여기서는 이미지를 16 x 16크기의 token으로 취급한다.
    • 이미지 크기가 224 x 224라면 총 196($=N$)개의 patch가 생긴다.
  2. 이 patch들의 linear embedding을 Transformer에 입력으로 주어야 하는데, 그 전에
    • [CLS] token embedding이 맨 앞에 추가된다.
    • Linear Embedding을 구하는 것은 Linear Projection $E \in \mathbb{R}^{(P^2C)\times D}$ 를 통해 가능하다.
      • 입력의 차원 변화는 $P^2C \rightarrow D$이다.
      • 여기서 $C=3, D=1024$를 사용했다.
    • 여기까지 보면, word를 embedding으로 바꿔서 Transformer에 입력으로 주는 것과 거의 동일한 과정이다.
    • Patch Embedding에 더해 Position Embedding이란 것을 추가하는 것을 볼 수가 있다. 이는 TransformerBERT에서 위치 정보를 추가해 주는 것과 같은 과정이다.
      • $E_{pos} \in \mathbb{R}^{(N+1)\times D}$을 곱한다. 이미지 patch 개수 $N$에 [CLS]를 더해 총 $N+1$개에 position embedding을 불인다.
  3. Transformer에 이 embedding들을 태우는데 Transformer는 Norm이 맨 앞으로 온 것을 빼면 똑같은 구조를 사용한다.
  4. 그리고 input image를 분류하기 위해 MLP에 태운다. 이 과정을 통해 이미지 분류를 수행할 수 있다.
    • MLP는 아래 식을 따른다. 여기서 MSA는 Multi-head Self-Attention이다.

실험 결과는 다음과 갈다.

이 논문의 강점은,

  • 꽤 많은 일반적인 데이터셋에서 좋은 성능을 보인다.
  • Image를 Transformer에 적용시켰다는 점에서 아이디어를 높이 살 수 있다.
  • 데이터가 많기만 하다면 spatial locality를 넘어 더 많은 어떤 feature를 잡아낼 수 있다.

단점은,

  • 계산량이 매우 많다.
  • JFT-300M과 같이 매우 큰 데이터셋에서 학습했을 때에만 잘 동작한다.
  • 이미지를 patch로 잘라서 일렬로 집어넣기 때문에 spatial info(inductive bias)를 활용하지 못한다. 작은 데이터셋에서 결과가 잘 나오지 않는 이유이기도 하다.

가장 작은 데이터셋인 ImageNet에서 성능이 가장 좋지 않다는 점을 아래 결과에서 확인할 수 있다.


Comment  Read more

ViViT(Video ViT, ViViT - A Video Vision Transformer), MTN, TimeSFormer, MViT 논문 설명

|

이 글에서는 Transformer를 기반으로 Vision 문제를 푸는 모델인 ViViT(Video ViT: ViViT - A Video Vision Transformer), MTN, TimeSFormer, MViT 논문을 간략하게 정리한다.


ViT(An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale)

논문 링크: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

Github: https://github.com/google-research/vision_transformer

  • 2020년 10월, ICLR 2021
  • Google Research, Brain Team
  • Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, et al.

ViT에 대한 설명은 여기를 참고하자.


Video transformer network

논문 링크: Video transformer network

VTN 논문에서는 사전학슬된 ViT 위에 tempoarl attention encoder를 추가하여 Video Action Recognition에서 좋은 성능을 내었다.


ViViT: A Video Vision Transformer

논문 링크: ViViT: A Video Vision Transformer

Github: https://github.com/google-research/scenic/tree/main/scenic/projects/vivit

  • 2021년 3월, ICCV 2021
  • Google Research
  • Anurag Arnab, Mostafa Dehghani, Georg Heigold, Chen Sun, Mario Lučić, Cordelia Schmid

위의 ViT 논문의 아이디어를 그대로 가져와 Video에 적용한 논문이다.

  1. 비디오의 각 frame을 $n_w \times n_h$ patch로 나누어 각 patch들은 Transformer Encoder에서 contextualize된다.
    • $n_h$: # of rows
    • $n_w$: # of columns
    • $n_t$: # of frames
  2. 그러나 attention 계산량이 매우 많다.
    • 총 patch 수가 ($n_t \times n_h \times n_w$)
    • 따라서 계산은 ($n_t^2 \times n_h^2 \times n_w^2$)
  3. 따라서 전체 frame 대신 일부만 균등선택하여 계산한다(uniformly frame sampling)
    • 또한 Tubelet embedding을 사용한다. 토큰화 중에 미리 spatio-temporal info를 합친 다음 계산하면 계산량을 줄일 수 있다.

이 논문에서는 생각할 수 있는 여러 개의 모델을 설명한다. 하나씩 살펴보자.

Model 1: Spatio-temporal attention

사실상 brute-force 모델에 가깝다. 모든 spatio-temporal token을 forward한다.

Model 2: Factorised encoder

  • 모든 spatio-temporal token에 대해 계산을 진행하는 대신, 일단 spatio token에 대해서만 계산을 진행한다(by ViT).
  • 각 frame을 embedding으로 바꾼 뒤 Temporal Transformer Encoder에 태운다.
  • 이러면 계산량은 다음과 같다: $(n_h^2n_w^2 + n_t^2)$

Model 3: Factorised self-attention

  • 모든 token 쌍에 대해 Multi-head Self-attention을 수행하는 대신, 먼저 spatial 부분에 대해 self-attention을 수행한다. 그리고 Temporally하게 self-attention을 수행한다.
  • Naive model(Model 1)과 같은 수의 Transformer layer를 갖는다.
  • [CLS] token은 사용되지 않는다.

Factorisesd self-attention은 다음과 같이 정의된다.

Model 4: Factorised dot-product attention

Transformer가 multi-head 연산을 포함한다는 것을 기억하자.

  • 절반의 attention head는 spatial한 부분을 key, value로 다룬다. (Spatial Head)
    • $\mathbf{K}_s, \mathbf{V}_s \in \mathbb{R}^{n_h \cdot n_w \times d}, \quad \mathbf{Y}_s = \text{Attention}(\mathbf{Q}, \mathbf{K}_s, \mathbf{V}_s)$
  • 나머지 절반은 같은 temporal index에서 key, value를 다룬다. (Temporal Head)
    • $\mathbf{K}_t, \mathbf{V}_t \in \mathbb{R}^{n_t \times d}, \quad \mathbf{Y}_t = \text{Attention}(\mathbf{Q}, \mathbf{K}_t, \mathbf{V}_t) $

위의 연산을 수행한 뒤 최종 결과는

[\mathbf{Y} = \text{Concat}(\mathbf{Y}_s, \mathbf{Y}_t)\mathbf{W}_O]

이 된다.

Experiments

ViT가 매우 큰 데이터셋에서만 좋은 결과를 얻을 수 있었기 때문에, ViT를 initialization으로 사용하였다.

위의 모델들을 실험한 결과는 다음과 같다. 또한, Temporal Transformer의 layer 수에 따라서도 Top-1 Accuracy를 측정한 결과도 있다.

결과가 약간 의외(?)인데, Model 1이 가장 연산이 비싸지만 성능은 제일 좋다. Model 2는 성능이 살짝 낮지만 연산량 대비해서는 꽤 효율적이라 할 수 있다.


TimeSFormer: Is Space-Time Attention All You Need for Video Understanding?

논문 링크: Is Space-Time Attention All You Need for Video Understanding?

Github: https://github.com/facebookresearch/TimeSformer

  • 2021년 6월, ICMl 2021
  • Facebook Research
  • Gedas Bertasius, Heng Wang, Lorenzo Torresani

Facebook에서 만든 논문인데 위의 ViViT와 거의 비슷하다. ViT를 Video에 적용시킨 논문이다.


Multiscale vision transformers

논문 링크: Multiscale vision transformers

MViT는 scratch로부터 학습된 video recognition 모델로 spatio-temporal 모델링을 위해 pooling attention을 취함으로써 계산량을 줄이고 SSv2에서 SOTA를 찍었다.


위의 Transformer 기반 Video 모델들은 global self-attention 모듈에 기초한다. 이렇게 하는 대신 Swin Transformer를 기반으로 문제를 해결하는 논문이 최근 올라와 있다.

Comment  Read more

Contrastive Learning, SimCLR 논문 설명(SimCLRv1, SimCLRv2)

|

이 글에서는 Contrastive Learning을 간략하게 정리한다.


Contrastive Learning

어떤 item들의 “차이”를 학습해서 그 rich representation을 학습하는 것을 말한다. 이 “차이”라는 것은 어떤 기준에 의해 정해진다.

Contrastive Learning은 Positive pair와 Negative pair로 구성된다. 단, Metric Learning과는 다르게 한 번에 3개가 아닌 2개의 point를 사용한다.

한 가지 예시는,

  • 같은 image에 서로 다른 augmentation을 가한 다음
  • 두 positive pair의 feature representation은 거리가 가까워지도록 학습을 하고
  • 다른 image에 서로 다른 augmentation을 가한 뒤
  • 두 negative pair의 feature representation은 거리가 멀어지도록 학습을 시키는

방법이 있다. 아래에서 간략히 소개할 SimCLR도 비슷한 방식이다.

Pair-wise Loss function을 사용하는데, 어떤 입력 쌍이 들어오면, ground truth distance $Y$는 두 입력이 비슷(similar)하면 0, 그렇지 않으면(dissmilar) 1의 값을 갖는다.

Loss function은 일반적으로 다음과 같이 나타낼 수 있다.

[\mathcal{L}(W) = \sum^P_{i=1} L(W, (Y, \vec{X_1}, \vec{X_2})^i)]

[L(W, (Y, \vec{X_1}, \vec{X_2})^i) = (1-Y)L_S(D^i_W) + YL_D(D^i_W)]

이때, 비슷한 경우와 그렇지 않은 경우 loss function을 다른 함수를 사용한다.

예를 들면,

[L(W, (Y, \vec{X_1}, \vec{X_2})^i) = (1-Y)\frac{1}{2}(D_W)^2 + (Y)\frac{1}{2}( \max(0, m-D_W) )^2]

즉 similar한 경우 멀어질수록 loss가 커지고, dissimilar한 경우 가까워질수록 loss가 커진다.


SimCLR(A Simple Framework for Contrastive Learning of Visual Representations)

논문 링크: A Simple Framework for Contrastive Learning of Visual Representations

Github: https://github.com/google-research/simclr

  • 2020년 2월(Arxiv), ICML
  • Google Research
  • Ting Chen, Simon Kornblith, Mohammad Norouzi, Geoffrey Hinton

Mini-batch에 $N$개의 image가 있다고 하면, 각각 다른 종류의 augmentation을 적용하여 $2N$개의 image를 생성한다. 이때 각 이미지에 대해, 나머지 $2N-1$개의 이미지 중 1개만 positive고 나머지 $2N-2$개의 image는 negative가 된다. 이렇게 하면 anchor에 대해 positive와 negative를 어렵지 않게 생성할 수 있고 따라서 contrastive learning을 수행할 수 있다.

위의 그림을 보면.

  1. 이미지 $x$에
  2. 서로 다른 2개의 augmentation을 적용하여 $\tilde{x}_i, \tilde{x}_j$을 생성
  3. 이는 CNN 기반 network $f(\cdot)$를 통과하여 visual representation $h_i, $h_j$로 변환됨
  4. 이 표현을 projection head, 즉 MLP 기반 network인 $g(\cdot)$을 통과하여 $z_i, z_j$를 얻으면
  5. 이 $z_i, z_j$로 contrastive loss를 계산한다.
  6. 위에서 설명한 대로 mini-batch 안의 $N$개의 이미지에 대해 positive와 negative를 정해서 계산한다.

Contrastive loss는 다음과 같이 쓸 수 있다. (NT-Xent(Normalized Temperature-scaled Cross Entropy))

[\ell_{(i, j)} = -\log \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum^{2N}{k=1} \mathbb{1}{[k \ne i]} \exp(\text{sim}(z_i, z_j) / \tau)}]

참고로 이는 self-supervised learning이다(사전에 얻은 label이 필요 없음을 알 수 있다).

Miscellaneous

  • Projection head는 2개의 linear layer로 구성되어 있고, 그 사이에는 ReLU activation을 적용한다.
  • Batch size가 클수록 많은 negative pair를 확보할 수 있으므로 클수록 좋다. SimCLR에서는 $N=4096$을 사용하였다.
  • SGD나 Momemtum 등을 사용하지 않고 대규모 batch size를 사용할 때 좋다고 알려진 LARS optimizer를 사용하였다.
  • Multi-device로 분산학습을 했는데, Batch Norm을 적용할 때는 device별로 따로 계산하지 않고 전체를 통합하여 평균/분산을 계산했다. 이러면 전체 device 간의 분포를 정규화하므로 정보 손실을 줄일 수 있다.
  • Data Augmentation은
    • Cropping/Resizing/Rotating/Cutout 등 이미지의 구도나 구조를 바꾸는 연산과
    • Color Jittering, Color Droppinog, Gaussian Blurring, Soble filtering 등 이미지의 색깔을 변형하는 2가지 방식을 제안하였다.
    • Augmentation 방법을 1개만 하는 것보다는 여러 개 하는 경우가 prediction task의 난이도를 높여 더 좋은 representation을 얻을 수 있다.
    • 7가지의 data augmentation 방법 중 Random crop + Random Color Distortion 방식을 적용하면 가장 좋은 성능을 보인다고 한다.

Experiments

ImageNet에서 같은 모델 크기 대비 훨씬 좋은 성능을 보인다.

3가지 방법으로 평가한 결과는 아래 표에서 볼 수 있다.

  1. 학습된 모델을 고정하고 linear classifier를 추가한 linear evaluation
  2. 학습된 모델과 linear classifier를 모두 학습시킨 fine-tuning
  3. 학습된 모델을 다른 dataset에서 평가하는 transfer learning

ImageNet 말고 다른 dataset에서 평가한 결과는 아래와 같다. Supervised 방식과 비등하거나 더 좋은 결과도 보여준다.


SimCLR v2(Big Self-Supervised Models are Strong Semi-Supervised Learners)

논문 링크: A Simple Framework for Contrastive Learning of Visual Representations

Github: https://github.com/google-research/simclr

  • 2020년 6월(Arxiv), NIPS
  • Google Research
  • Ting Chen, Simon Kornblith, Kevin Swersky, Mohammad Norouzi, Geoffrey Hinton

SimCLR를 여러 방법으로 개선시킨 논문이며, computer vision에서 unsupervised learning 연구에 큰 기여를 했다.

모델은 다음과 같은 과정을 따른다.

  1. Unsupervised(Self-supervised) Pre-training
  2. Supervised Fine-tuning
  3. Distillation using unlabeled data

이때 Unsupervsed 과정에서는 최종 task와는 무관한 데이터를 사용하였기에 task-agnostic이라는 용어를 사용한다.

Unsupervised(Self-supervised) Pre-training

대량의 unlabeled dataset으로 CNN model을 학습시켜 general representation을 모델이 학습하게 된다. SimCLR와 비슷하지만 다른 점은 SimCLRv1은 projection head를 버리고 downstream task를 수행하지만 v2는 1번째 head까지 포함시켜 fine-tuning이 시작된다.
또한 Projection head의 linear layer 개수도 2개에서 3개로 늘었다.

그 이유는 label fraction(label이 되어 있는 비율)이 낮을수록 projection head의 layer가 더 많을수록 성능이 높아지기 때문이라고 한다.

Supervised Fine-tuning

전술했듯 Projection head의 1번째 layer까지 포함하여 fine-tuning을 진행한다.

Distillation via unlaeled dataset

다음 과정을 통해 distillation을 수행한다.

  • 학습시킬 모델은 student model이다.
  • fine-tuning까지 학습된 teacher model을 준비한다. 이때 student model의 크기는 teacher보다 작다.
  • Unlabeled data를 teacher model과 student model에 집어넣고 teacher model의 output distribution을 얻는다. 여기서 가장 높은 값의 pseudo-label을 얻고 이를 student model의 output distribution과 비교하여 loss를 minimize한다.

이 과정을 통해 teacher model이 갖고 있는 지식을 student model이 학습할 수 있게 된다. 그러면서 크기는 더 작기 때문에 효율적인 모델을 만들 수 있는 것이다.

Ground-truth label과 조합하여 가중합 loss를 계산할 수도 있다.

Experiments

더 큰 모델이 더 좋은 성능을 내는 건 어쩔 수 없는 것 같다..

한 가지 눈여겨볼 것은 큰 모델일수록 label fraction이 낮은 dataset에 대해서 더 좋은 성능을 보인다는 것이다.

  • 또 Projection head를 더 깊게 쌓거나 크기가 클수록 Representation을 학습하는 데 더 도움이 된다.
  • Unlabeled data로 distillation을 수행하면 semi-supervised learning을 향상시킬 수 있다. 이때 label이 있는 경우 같이 사용해주면 좋은데, label이 있는 것와 없는 것을 따로 학습시키기보다는 distillation loss로 위에서 언급한 것처럼 가중합시킨 loss를 사용하면 성능이 가장 좋은 것을 확인할 수 있다.

References

Comment  Read more