논문 읽기/Self-Supervised

[논문 읽기] MoCov2(2020), Improved Baselines with Momentum Contrastive Learning

AI 꿈나무 2021. 7. 12. 16:11
반응형

 안녕하세요, 오늘 읽은 논문은 Improved Baselines with Mometum Contrastive Learning 입니다.

 

 

 해당 논문은 MoCo v1에서 SimCLR의 두 가지 아이디어를 적용한 모델입니다.

 

 SimCLR은 contrastive learning에서 세 가지 핵심 요소를 제안하는데요, (1) 많은 negative sample을 사용하기 위한 large batch, longer training, (2) stronger augmentation(color distortion, random resize crop, blur), (3) MLP projection head 가 contrastive learning의 성능을 높일 수 있다는 것을 실험적으로 보여줍니다.

 

 MoCov2는 SimCLR에서 제안한 3가지 방법 중 (2)와 (3)을 적용하여 SOTA 성능을 달성합니다. MoCo는 negative sample을 queue에 저장하고 사용하므로 large batch를 사용하지 않아도 된다는 장점이 있어 (1) 을 적용하지 않았습니다.

 

 augmentation은 random resized crop + strong color distortion + blur를 사용하고, unsupervised learning시에 encoder의 마지막 단에 MLP 구조(fc + relu + fc) 를 추가하고, transfer learning시에 이 MLP 구조를 버리고 linear layer를 추가하여 transfer 합니다.

 

 pytorch 코드로 다음과 같이 구현할 수 있습니다.

# I use q encoder as resnett18 model
q_encoder = resnet18(pretrained=False)

# define classifier for our task
classifier = nn.Sequential(OrderedDict([
    ('fc1', nn.Linear(q_encoder.fc.in_features, 100)),
    ('added_relu1', nn.ReLU()),
    ('fc2', nn.Linear(100, 50)),
    ('added_relu2', nn.ReLU()),
    ('fc3', nn.Linear(50, 25))
]))

# replace classifier 
# and this classifier make representation have 25 dimention 
q_encoder.fc = classifier

 

 MLP 구조를 추가하여 unsupervised learning 학습을 진행한 후에, transfer learning시에 아래 코드와 같이 MLP 구조를 제거합니다. 

 

# removing the projection head of q_encoder
if len(nn.Sequential(*list(q_encoder.fc.children()))) == 5:
    q_encoder.fc = nn.Sequential(*list(q_encoder.fc.children())[:-3])

 

 그리고 Linear layer를 추가하여 transfer learning을 합니다.

 

# define Linear Classifier for transfer learning
class LinearClassifier(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = torch.nn.Linear(100,10)

    def forward(self, x):
        x = self.fc1(x)
        return x

linear_classifier = LinearClassifier().to(device)

 

Experiment

 MLP, augmentation, cosine learning rate scheduler의 ablation study 입니다.

 

 MoCov2와 SimCLR의 비교입니다.

 


참고자료

[1] https://www.analyticsvidhya.com/blog/2020/08/moco-v2-in-pytorch/

[2] https://arxiv.org/pdf/2003.04297.pdf

반응형