- 2021년 1월 22일 오후 7:41
- 조회수: 11727
INFORMATION
- 2021년 1월 29일
- 오후 1시 ~
- 온라인 비디오 시청 (YouTube)
TOPIC
On-Line Video
OVERVIEW
발표자 후기
Contrastive learning의 기본인 내용을 다루기 위한 세미나를 진행했다. 개인적으로 연구를 진행하고 있는 분야이기도 하고 최근 1~2년간 매우 좋은 성능을 보여주고 있기 때문에 한번쯤 정리해보고 싶은 주제이기도 했다. Contrastive learning은 기본적으로 각각의 관측치끼리 분류를 할 수 있을만큼 정교한 representation을 학습하는 것을 목표로 한다. 모든 관측치를 클래스로 간주하고 softmax를 사용할 수 없기 때문에 다른 관측치들의 일부만을 샘플링하여 손실함수를 계산하는 noise contrastive estimation (NCE) 방식을 가져와 사용한다. 특정 이미지 anchor에 대해서 비슷하게 만들고 싶은 샘플을 positive example, 다르게 만들고 싶은 샘플을 negative sample이라고 정의하여 NCE loss를 계산하게 된다. NPID 논문에 대해서만 이해를 할 수 있어도 contrastive learning의 기본적인 개념은 대부분 이해한 것이라고 생각한다. 최근 관심있게 보고 있는 분야는 어떤 positive, negative를 사용해야 모델의 성능을 향상시킬 수 있는가에 대한 것이다. Negative가 되게 애매한데 "anchor와 너무 다르지도 않으면서 너무 비슷하지도 않은, 적당히 anchor 주변에 있는" hard negative를 사용할 때 결과적으로 성능 향상을 이끌어낼 수 있다. 관련 연구들이 최근 많이 이루어지고 있는데 연구 동기나 접근 컨셉은 간단하지만 실질적으로 작동하는 알고리즘은 복잡한 부분이 많아 이번 세미나에서는 생략을 했었고 아쉬운 점으로 남았다. 또한, 이번에 처음으로 세미나 영상을 녹화했는데 원래 생각했던 것보다 말이 빨라졌던 것 같다. 현장에서 청취자와 자유롭게 질의응답을 하면서 세미나를 진행할 수 있도록 빨리 코로나 사태가 종식되었으면 한다.
청취자 후기
이번 세미나는 “Towards Contrastive Learning” 주제로 민구형이 발표했다. Self-supervised learning에는 크게 pretext task를 정의하는 방법과 pretext task 없이 contrastive learning으로 데이터의 representation을 잘 학습하는 방법이 있다. 세미나에서는 contrastive learning을 중점적으로 다루었다. Contrastive learning은 noise contrastive estimation (NCE) 기반으로 데이터 내의 positive pair & negative examples 간의 관계를 학습한다. 최근 contrastive learning 연구가 활발해지면서 data augmentation의 중요성, negative examples, sampling 전략 등이 소개되고 있다. 현재 연구하고 있는 분야는 contrastive learning과 reinforcement learning을 결합하는 연구를 하고 있다. 게임 도메인을 사용하는 만큼 적절한 data augmentation의 종류, examples 정의, sampling 전략이 매우 중요하다. 특히, 이번 세미나에서 examples 정의 및 sampling 전략 연구 동향을 소개해준 덕분에 좋은 인사이트를 얻을 수 있었고 이를 집중적으로 공부하여 현재 연구의 아이디어를 찾는데 도움이 될 것 같다.
Self-Supervised Learning 은 딥러닝 분야에서 현재 가장 핫한 토픽이라고 생각한다. Computer Vision이나 NLP 등의 태스크와 달리, Self-Supervised Learning은 그 자체로 분류 문제의 정확도를 높이는 것이 목적이 아니다. Backbone 모델에서 더 좋은 feature(Representation)을 추출할 수 있도록하여 차후 task에서 성능을 올리는 것이 목적이다. 이를 위한 초기 연구들은 보통 Jigsaw나 Rotation 등의 간단한 Pretext Task를 직접 선정하여 backbone 모델을 학습시키는 것이었다. 하지만 최근 Self-Supervised Learning 연구 동향은 Pretext Task 없이 Contrastive Learning 을 통해 학습하는 것이다. SSL의 알고리즘은 BYOL, PIRL, MoCo, SimCLR 등 많지만, 오늘은 기본적인 Contrastive Learning의 이해와, 구글의 SimCLR, 페이스북의 MoCo를 주축으로 비교한 세미나였다.
SSL 을 통해 학습한 모델이 일반화 성능이 좋다는 것이 밝혀짐에 따라, CV, RL, NLP 등 다양한 분야에 접목되고 있다. 예로, 강화학습에서도 Contrastive Learning 을 적용한 CURL 이라는 알고리즘이 있다. 최근 연구 동향에 맞춰 적절한 타이밍에 필요한 세미나였다. 세미나를 준비한다고 고생하신 민구형께 감사의 말씀을 드린다.
금일 세미나는 자가지도학습 연구 중 핫한 토픽인 contrastive learning의 핫한 연구 방향에 대해 알아갈 수 있었다. 재밌어서 한번 더 봤는데, 두번 보는걸 정말 추천한다! Pretext 기반의 자기지도학습에는 어느정도 익숙한 감이 있었는데, 금일 민구형이 소개해주신 contrastive learning은 새롭고 흥미로운 주제였다. 본 방법론은 contrastive loss를 이용한 학습법으로, 데이터 instance간의 유사성을 학습하여 데이터에 대한 좋은 특징들을 추출하는 방법이다. 구체적으로 Anchor와 positive, negative라는 개념을 도입하였고, achor가 positive와는 유사하게, negative와는 다르게 학습되도록 cosine 유사도 기반 loss를 이용하였다. 야무지고 정갈한 설명이 좋았다. 이렇게 contrastive learning에 대한 직관적인 설명을 해준 뒤, example을 정의하는 방법(or sampling)을 개선하며 등장한 Moco와 배치 단위에서 contrastive learning을 수행할 수 있도록 제안된 SimCLR에 대해 알아갈 수 있었다. 나아가, positive 설정을 군집화 알고리즘과 연관지음으로써 성능 개선을 이룬 논문과 Negative 데이터의 품질을 판별하여 negative로 적합하지 않은 데이터는 필터링하는 논문도 소개해주었다. 마지막으로 정교한 특징 학습을 위해 일부러 (Good, but difficult) negative 데이터를 샘플링하여 성능 개선을 시도한 따끈따끈한 최신 논문도 소개해주었다. 뜨거운 세미나였다.
Self-Supervised Learning(SSL)은 명시적인 레이블(y) 없이 입력(X) 자체에서 얻을 수 있는 정보를 사용하여 representation을 얻는 학습 프레임워크인데, 금일은 Pre-text가 필요없는 Contrastive learning에 대해 자세히 살펴보았다. Contrastive Learning은 one-hot으로 학습된 이미지 분류모델의 분류 결과에서 타겟 클래스와 시각적으로 유사해보이는 클래스일수록 더 높은 확률값을 갖고, 반대로 전혀 다른 클래스는 작은 값을 갖는다는 관찰로부터 출발하였다. 이는 자연스럽게 레이블 정보 없이 '관측치(instance)' 레벨에서 학습 ∙ 공유하는 representation 구조가 있을 것이라는 가정으로 이어져, instance간 유사성 기반으로 '서로 구분하도록 학습(Instance Discrimination)'시켜보자는 시도로 이어졌고, 이것이 Contrastive Learning의 핵심 아이디어다. 이러한 기본 토대에 성능을 향상시키기 위해 SimCLR, MoCo 등이 소개되고, 나아가 positive, negative sampling을 더 정교하게 설계하는 방법론들에 대해 알아보았는데, 특히 뒤에 나온 방법론들이 그래프 도메인에서 sample을 정의하는 방법에 도움이 되겠다는 생각이 들었다. 금일 소개된 Contrastive Learning은 컴퓨전 비전에서 시작되었으나, 이미지 도메인 한정적인 기법이 아니라 하나의 프레임워크이기에, 분야를 막론하고 머신러닝을 공부하는 모든 듣는이에게 현재의 트렌드를 명확하게 볼 수 있는 세미나였다. 많은 내용임에도 불구하고 Top-Down으로 필요한 개념을 직관적으로 구성해준 민구형에게 감사의 말을 전한다.
오늘 세미나는 민구 오빠가 self-supervised learning 방법론 가운데 contrastive learning에 대해서 자세히 다루어 주었다. 지도 학습은 입력 데이터에 대한 레이블 정보가 쌍으로 주어지고 이 사이의 관계를 학습하게 된다. 하지만 양질의 레이블 정보를 충분히 얻는 것은 어려운 일이다. 따라서 self-supervised learning은 자기 자신 입력 데이터 자체에서 쉽게 얻을 수 있는 정보를 사용해서 레이블이 없이도 좋은 representation을 학습하는 것을 목표로 한다. 이때 자체에서 얻을 수 있는 정보를 사전에 정의하여 이를 잘 맞추도록 학습하는 작업을 pretext task라고 일컬으며 이 분야의 연구를 pretext-based learning이라 부르고 Jigsaw, colorization, rotation 등의 방법이 존재한다. 오늘 소개되는 contrastive learning은 pretext task 작업을 정의하지 않고 contrastive loss를 사용하여 학습되는 또다른 종류의 self-supervised learning 연구 분야이다. 이미지 분류를 잘하는 모델이 구축되었다고 생각해보면 고양이, 호랑이, 컵을 구분하는 모델에서 고양이의 사진이 들어갔을 때 고양이가 제일 높은 확률 값 그 다음이 호랑이, 컵 순으로 확률 값이 나오길 기대할 수 있다. 하지만 기존 지도학습에서는 one-hot 레이블 정보로 이미지 분류기를 학습하기 때문에 이와 같은 결과는 기대하기 어렵다. 따라서 개별 관측치의 semantic한 의미를 분류 모델이 학습할 수 있게 원하는 metric learning의 개념이 사용된 self-supervised learning의 종류가 contrastive learning이다. 이때 자기 자신과 비슷한 데이터는 가까운 곳에 다른 데이터는 먼 곳에 representation 하기 위해서 instance discrimination 방식을 활용할 수 있다. 하지만 수많은 관측치를 분류하는 모델을 softmax를 단순하게 적용하는 것은 분모가 너무 커지게 되어 학습의 어려움이 발생할 것이다. 이런 문제를 해결할 수 있는 loss과 학습 framework를 정의한 연구들이 contrastive learning을 사용한 self-supervised learning이다. 오늘 세미나에서는 unsupervised feature learning via non-parametric instance discrimination의 아이디어를 설명해줬을 뿐만 아니라 조금씩 단점들을 보완하여 나온 후속 논문들 MoCo, SimCLR 등의 연구들의 포인트가 설명되었다. 깔끔한 발표 자료로 청자들의 이해를 도왔을 뿐 아니라 연구 발전의 흐름, 포인트를 잘 짚어주어 너무나도 유익한 세미나였다.
이번 세미나는 “Towards Contrastive Learning”을 주제로 데이터에 대한 pretext를 정의하지 않고 데이터에 대하여 좋은 representation을 얻는 방법인 Contrastive Learning에 대하여 알아보았다. 이는 관측치들 간의 유사성을 기반으로 구분이 되도록 학습한다면 더 좋은 representation을 얻을 것이라는 가정으로 시작되었다. 모델을 통하여 학습하기 위하여 anchor와 positive는 비슷하게, 그리고 나머지 데이터들(negative)은 다르게 학습되도록 코사인 유사도를 기반으로 한 NCE Loss를 활용하게 된다. 이렇게 contrastive learning이 잘 되었을 때에는 각 데이터들이 초구를 중심으로 유사한 관측치들끼리 모이게 되며, 이에 대한 linear classifier를 사용하여 분류할 수 있다. 기본적인 contrastive learning 알고리즘에서 positive/negative를 분류하는 sampling 방법을 개선시킨 알고리즘은 MoCo로, 모든 임베딩 정보를 Memory Bank에 저장하던 방식에서 효율성을 위하여 memory queue로 바꾼 방법론이다. 또한, embedding 방법을 개선시킨 것이 SimCLR로, 배치 사이즈를 증가시켜 negative 생성에 대한 문제를 개선시키고자 노력하였다. 이 외에도 군집화 알고리즘을 활용하여 군집의 중심을 positive로 사용하는 방법, augmentation을 여러번 진행하여 false negative를 찾아내어 제거 또는 positive에 포함시키는 방법 등을 알아볼 수 있었다. Contrastive Learning에 대한 정의부터 발전 방향, 그리고 최신 연구 동향까지 매우 깔끔하게 설명해주셔서 쉽게 이해할 수 있는 세미나였다.
이번 세미나는 contrastive learning을 주제로 진행되었다. 그동안 잘 알지 못했던 개념인데 이번 세미나를 통해 contrastive learning에 대해 기본적인 내용을 알 수 있게 된 것 같다. 특히, 어려웠던 내용을 직관적으로 이해할 수 있도록 많은 노력을 해준 것 같아서 도움이 많이 되었다. Self-supervised learning은 Unsupervised learning 방법으로, 입력데이터 자체에서 얻을 수 있는 정보를 사용하여 좋은 representation을 학습하고자 하는 방법이다. 이 때 contrastive learning은 사전에 정의된 작업을 맞추도록 학습하는 pretext-based learning과는 달리, pretext task 없이 contrastive loss로 학습하는 방법이다. 즉, 관측치 사이의 유사성을 기반으로 관측치끼리 구분하도록 학습을 한다면 label 정보 없이도 좋은 representation을 얻을 수 있을 것이라는 전제로 학습을 하게 된다. 이를 위해 모든 데이터의 임베딩 정보를 저장한 후(Memory Bank), 타겟 데이터인 anchor와 positive의 유사도는 높이고, negative와의 유사도는 낮추기 위해 cosine 유사도를 사용하여 확률로 표현하고 이를 loss로 활용하게 된다. 이러한 기본적인 학습의 성능을 더 향상시키기 위한 두 가지 모델인 MoCo와 SimCLR가 소개되었다. MoCo는 Memory Bank의 단점을 극복하기 위해 Memory Queue를 사용하고, 과거 모델의 weight들을 가중 평균하여 업데이트하는 방식을 갖는다. SimCLR는 MoCo의 Queue도 사용하지 않고 batch size를 2048, 4096, 8192 등으로 증가시켜 batch 안에서 negative를 생성하는 방식이며 관측치별로 2번의 augmentation을 적용한다고 한다. 마지막으로는 positive와 negative를 더욱 정교하게 정의하고 샘플링하기 위해, false negative를 제거하거나 positive로 포함시키는 방법과 easy negative, hard negative에 대한 개념을 사용하는 방법이 소개되었다. 아직 contrastive learning을 직접적으로 사용해본적이 없어서 깊게 이해하기는 어려웠지만, 곽민구 연구원의 친절하고 직관적인 설명 덕분에 어느정도 흐름은 파악할 수 있었고 개념이해에 정말 많은 도움이 되었다. 최근 많이 연구되는 분야로 알고 있는데 좋은 내용으로 알차게 준비해준 곽민구 연구원에게 감사의 말을 전한다.
금일 세미나는 민구가 Contrastive Learning을 주제로 발표해주었다. 지도 학습을 통한 이미지 분류 모델은 굉장히 높은 성능을 확보했지만 그러한 성능을 달성하기 위해 무수히 많은 양의 데이터가 필요하다. 하지만 이미지 분류 모델에 사용되는 학습 데이터는 이미지와 더불어 각 샘플마다 Label이 필요한데, 이 Label을 일일이 달아주는 작업은 많은 시간과 비용이 필요하다. 따라서 이러한 문제를 해결하기 위해 사전에 정의된 작업(pretext)을 맞추도록 하여 Unlabeled 데이터들로도 데이터 자체에 대한 이해를 높일 수 있는 data representation을 모델이 학습하도록 하는 방식이 있다. 금일 세미나에서는 pretext 기반의 방법론이 아닌 contrastive loss를 이용하여 representation을 학습하는 Contrastive Learning의 최신 연구 흐름을 민구가 알려주었다. Contrastive Learning을 간단히 설명하면, 같은 이미지에 augmentation을 가한 뒤, 기준인 anchor와 positive 사이의 positive pair의 embedded vector가 유사해지도록 학습을 하고, 다른 이미지에 서로 다른 augmentation을 가한 뒤, 기준인 anchor embedded vector와 negative embedded vector 사이의 거리는 멀어지도록 학습을 시키는 것이다. 금일 세미나에서는 Contrastive Learning의 기본적인 구조를 먼저 언급한 뒤 embedding하는 방법과 positive나 negative pair를 정의하고 샘플링하는 방식을 개선시킴에 따라 Contrastive Learning이 어떻게 발전해왔는지를 주로 언급해 주었다. MoCo는 Memory Queue를 이용하여 기존의 메모리 뱅크에 계속 관측치를 저장해야하는 이슈와 랜덤 샘플링으로 negative example을 구성하는 방식을 개선한 알고리즘이다. 또한 기존 Contrastive Learning의 학습이 불안정한 문제를 극복하기 위해 Momentum Encoding을 적용하여 성능을 끌어올렸다. SimCLR 역시 MoCo와 유사하게 negative example 생성 방식 개선에 집중했는데 batch size를 늘려서 negative 생성을 batch 안에서 해결하는 방식을 사용했다. 하지만 SimCLR의 성능을 크게 개선시킨 부분은 다양한 data augmentation 기법을 활용하고 embedding layer를 더 깊게 쌓음으로써 유사도를 비교하는 공간인 feature space를 더 개선한 것이었다. MoCo V2는 깊은 embedding layer & data augmentation 기법을 MoCo에 적용해 다시 성능을 개선시켰다. 금일 세미나에서 민구의 직관적인 설명 덕분에 Contrastive Learning의 연구 흐름을 잘 이해할 수 있었다. 다시 한번 훌륭한 발표를 해 준 민구에게 감사를 표한다.
이번 세미나는 Contrastive Learning에 대해 이미지 분류 위주로 진행되었다. Contrastive Learning은 레이블 정보 없이 정교한 representation을 학습할 수 있는 학습 방법이다. 모델 학습 과정에 대한 순차적인 설명을 그림과 함께 설명해 주셔서 직관적인 이해에 큰 도움이 되었다. Contrastive Learning이 발전된 과정은 대표적인 모델인 MoCo, SimCLR를 통해 볼 수 있는데, 일단 MoCo는 Memory Bank의 단점을 개선하기 위해 Memory Queue를 사용하고 과거 모델의 weight들의 가중 평균으로 encoder를 업데이트하며 모델을 더 효율적으로 학습시킬 수 있는 방법이다. SimCLR은 Queue 대신 Batch size를 늘려서 충분한 negative를 뽑고 다양한 Data Augmentation 기법을 활용하여 모델 성능을 향상시킨다. 더 높은 성능의 모델을 위해 example 정의 방법과 sampling 방법을 개선한 연구에 대해서도 짚어주셔서 더 자세한 내용을 들을 수 있었다. Prototypical Contrasive Learning은 뭉쳐있는 군집의 중심을 positive로 사용하여 positive의 정의를 개선하는 방식이고, False Negative Cancellation은 False Negative(Anchor와 다른 이미지로부터 생성되었지만 원본 이미지 기준으로는 유사한 sample)를 찾아내고 이것을 제거하거나 positive에 포함시키는 방식으로 negative sampling 방법을 개선하는 방식이다. Contrastive Learning에 대한 이해가 필요했는데 이미지 분류라는 태스크를 기준으로 깔끔하게 설명해 주셔서 도움이 많이 되었던 세미나였다. 헷갈리는 부분들이 있어서 여러 번 돌려보았는데 어려운 내용을 쉽게 전달하기 위해 많은 준비를 해주신 것 같아 감사하다는 말씀을 전한다.
이번 세미나는 "Contrastive Learning"을 주제로 진행이 되었다. Supervised learning은 입력된 데이터와 주어진 label 사이에서의 관계를 학습하지만, 양질의 데이터 정보를 얻는데 비용과 시간의 측면에서의 어려움이 존재한다. 이를 보완하기 위한 방법으로 데이터 자체에서 얻어내기 쉬운 정보를 label로 활용하려는 목적으로 Self-Supervised Learning이 나오게 되었다. 기존의 Input data에 미리 정의된 작업을 수행하여 맞추도록 하는 것을 pretext learning이라 하는데, Contrastive learning은 이러한 pretext를 정의하지 않고 contrastive loss를 활용하는 방법론이다. 이는 관측치들 사이에서의 유사성을 기반으로 관측치간의 구분이 진행된다면 label 정보가 없더라도 좋은 representation을 얻을 수 있을 것이라는 생각에서 출발하게 되었다. Moco , SimCLR 을 통해서 Contrastive learning의 학습성능을 향상시키기 위한 발전 방향을 살펴 볼 수 있었다. MoCo는 메모리 저장과 학습 기여도의 이슈인 Memory Bank의 단점을 보완하기 위하여 FIFO 알고리즘에 의해서 작동하는 Memory Queue를 사용한다. SimCLR은 Queue를 사용하지 않고 batch size를 크게 사용하여서 충분한 양의 negative를 생성하며 다양한 Data augmentation 기법을 활용한다. 최신 연구동향에 대해서도 소개해주며, 직관적인 설명으로 이해를 돕도록 세미나를 준비해주어서 감사하다는 말씀을 전한다.
금일 세미나는 민구형이 "Towards Contrastive Learning"이라는 주제로 발표를 진행해주었다. Contrastive learning은 Self-Supervised Learning 방법론 중 하나이다. Self-supervised learning은 레이블 정보를 사용하지 않고 입력 데이터 자체에서 얻을 수 있는 정보를 활용하여 적절한 representation을 학습하는 것이다. 이를 실현시키기 위한 방법론에는 크게 Pretext-based learning과 오늘 세미나의 주요 내용인 Contrastive learning이 있다. Pretext-based learning의 경우에는 사전에 따로 colorization이나 rotation과 같은 태스크를 Pretext task로 정의하여 Pretext task를 잘 수행하는 모델을 학습하여 이를 통해 적절한 representation을 학습하고자 하는 방법론이다. 반면에 Contrastive learning은 pre-text를 정의하지 않고 contrasitve loss를 통해 좋은 representation을 학습하고자 하는 것이다. 개인적으로 오늘 세미나를 통해 알 수 있었던 이론 중 Noise Contrastive Estimation은 내가 개인적으로 연구하고 있는 부분에서 잘 활용될 수 있을 것 같았다. Instance Discrimination 과정에서 너무 많은 샘플들에 대해 소프트맥스 값을 계산하여 예측을 하는데 어려움을 해결해주기 위해 고안된 알고리즘으로 일부만을 샘플링하여 계산을 하는 것이 Noise Contrasitve Estimation이였다. 이는 소프트맥스로 계산된 어텐션 가중치와 같은 정보를 활용하고 싶을 때 너무 고차원인 경우에 대해서 너무 작은 값의 어텐션 가중치가 측정된다는 한계를 해결해줄 수 있는 아이디어 중의 하나가 될 수 있다는 생각이 들었다. 사실 Self-supervised 관련해서 연구를 진행하던 것은 아니지만 민구형의 세미나를 통해 개인 연구에 아이디어에 이로운 정보를 얻어갈 수 있게 되어서 감사하다. 세미나가 아닌 개인적인 만남과 연구 미팅을 통해서도 매번 객관적인 시선으로 개인 연구의 방향성을 잃지 않도록 많은 도움이 주시는데 오늘은 세미나에서까지 많은 도움을 주셔서 또 한번 감사드린다고 말씀드리고 싶다. 오늘도 유익한 정보를 알려주신 민구형에게 감사하다.
이번 세미나는 "Towards Contrastive Learning"을 주제로 진행되었다.
기존의 Supervised Learning은 양질의 label 정보를 충분히 가지고 있어야만 최적의 model이 나올 수 있다. 하지만 양질의 label 정보를 얻는 것은 시간과 돈이 많이 필요하기 때문에 데이터에서 얻을 수 있는 정보를 사용해서 자체적인 label을 얻기 위해 고안된 방법이 Self-Supervised Learning이다. Self-Supervised Learning은 사전에 정의된 작업을 맞추도록 학습하는 방식인 Pretext-based learning과 사전 정의 없이 학습하는 방식인 Contrastive learning이 있다. 이러한 흐름에서 나온 Contrastive learning은 one-hot vector에서 벗어나 label 없이 유사성을 기반으로 객체별 구분하도록 학습한다면 좋은 representation을 얻을 수 있을 것이라는 컨셉이다. 하지만 클래스가 방대해져 원활한 학습을 해주기 어렵고, 이를 해결해주기 위해서 일부만 샘플링하여 cross entropy loss를 이용하여 해결한다.
Contrastive learning을 발전시키기 위해서는 Network design 또는 Data Augmentation을 이용하여 좋은 품질의 embbeding을 얻는 법과 Define example 또는 Sampling strategy를 활용하는 방법이 있다. 이 중 좋은 품질의 embbeding을 얻는 방법을 MoCo와 SimCLR을 통해 볼 수 있었다. MoCo는 memory 이슈를 큐를 이용해 해결하고 SimCLR은 batch size를 늘려 해결하는 방식이다. 이후 MoCo와 SimCLR을 합친 MoCo v2는 더욱더 좋은 성능을 보였다. 이렇게 발전된 모델들을 바탕으로 examples를 잘 정의하기 위해 Prototype to Support Positive와 False Negative Concellation이 있고 최근에는 더욱 semantic representation을 활용한 방식 등이 이용되고 있다.
Contrastive learning을 스토리텔링 식으로 Supervised learning부터 차근차근 쌓아서 이해할 수 있었으며 현실에서 데이터를 효율적으로 활용하기 위해 잘 알아두고 싶다는 생각을 하게 되었습니다. 좋은 내용을 전달해주신 곽민구 연구원님께 감사의 말씀을 전합니다.
이번 세미나는 "Towards Contrastive Learning"이라는 주제로 진행되었다. 지도학습은 많은 방면에서 좋은 성능을 보이지만 많은 양의 레이블 된 데이터가 필요하다는 단점이 있다. 이를 극복하기 위해 많은 연구들이 진행되고 있으며 최근에는 self-supervised learning이 많이 연구되고 있다. Self-supervised learning은 비지도 학습의 일종으로 레이블을 활용하지 않고 데이터만을 활용해 데이터의 representation을 잘 학습하는 것을 목적으로 한다. 초기의 self-supervised learning은 사용자가 사전에 정의한 문제를 잘 해결함으로써 representation을 학습했지만, 최근에는 contrastive learning을 활용한 연구들이 주를 이루고 있다. Contrastive learning이란 현재의 이미지와 매칭이 되는 이미지의 특징 벡터를 가깝게, 현재 이미지와 다른 데이터에 대해서는 특징 벡터가 멀어지도록 학습하는 것을 의미한다. 하지만 기존의 contrastive learning은 모든 데이터에 대한 특징 벡터를 저장해야 한다는 단점과 매칭되는 데이터를 어떻게 다르게 표현할까에 대한 고민이 필요하다. MoCo에서는 모든 특징 벡터를 저장하는 대신 queue 형태로 특징 벡터를 저장하여 메모리의 효율성을 높였다. SimCLR에서는 다양한 data augmentation 기법을 활용해 같은 데이터에서 다양한 형태의 데이터를 생성해 contrastive learning에 적용하였다. 세미나의 후반부에서는 최근에 많이 연구되고 있는 memory bank에서 좋은 데이터를 샘플링하는 전략에 관한 연구들이 소개되었다. 좋은 데이터를 샘플링하는 전략으로는 크게 positive sample을 잘 뽑는 것과 negative sample을 잘 뽑는 것이 존재한다. Positive sample을 잘 뽑는 연구로는 K-means clustering을 활용해 군집의 중심을 여러 이미지를 대표할 수 있는 prototype으로 활용하는 연구가 소개되었다. Negative sample을 잘 뽑는 연구로는 postive sample과 유사한 negative sample인 false negative sample을 제거하는 연구가 소개되었다. 이번 세미나를 통해 최근 많은 주목을 받고있는 contrastive learning에 대해서 전반적인 흐름을 알 수 있어 의미 있는 세미나였다. 앞으로의 연구에 이번 세미나가 많은 도움이 될 것 같다.
이번 세미나는 Self-supervised learning 중에서 contrastive learning 전반에 대해 진행되었다. Contrastive learning은 pretext 작업을 정의하지 않고 contrastive loss를 사용하는 방법이다. 레이블에 대한 정보 없이 관측치끼리의 유사성을 사용하여 이미지 전체를 잘 표현할 수 있는 representation을 얻고자 하는 것이다. class의 개수가 커지게 되면 지도학습에서 사용하는 softmax를 그대로 사용하기에는 어려움이 있기 때문에 Noise Contrastive Estimation (NCE)를 이용하여 해결한다. NCE는 anchor와 positive의 유사도를 분자로 하고 softmax를 취해서 확률을 얻는 방식이다. 현재의 이미지 임베딩 벡터인 anchor는 타겟 이미지와 매칭되는 과거의 임베딩 정보인 positive를 당기고, 타겟 이미지가 아닌 나머지 이미지의 정보인 negative는 밀어내게 된다.
성능을 더 향상시킨 방법론으로는 MoCo와 SimCLR가 있다. Moco는 memory bank의 효율성을 개선하고자 한 것인데, memory queue를 제안하여 모든 sample이 동등한 횟수로 모델 학습에 사용될 수 있도록 하고 임베딩 정보를 그때그때 산출하여 사용하는 방식으로 메모리 이슈를 해결한다는 특징이 있다. SimCLR는 batch 사이즈를 늘려서 그 안에서 충분한 양의 negative를 뽑을 수 있다는 아이디어에서 출발한다. 더 나아가 추가적으로 더 좋은 positive를 정의하기 위한 연구로 prototypical contrastive learning이 있고, negative의 관점에서는 false negative cancellation이 있다.
Contrastive learning을 처음 접하게 되어 여러 번 돌려보았는데, 차근차근 설명해 주셔서 세미나의 흐름을 놓치지 않고 집중하여 들을 수 있었다. 유익한 세미나를 진행해 주셔서 감사하다는 말씀을 전한다.
이번 세미나에서는 Self-Supervised Learning의 하나인 Contrastive learning에 대해 배울 수 있었다.
Supervised Learning은 데이터와 레이블 정보가 함께 주어졌을 때 이 사이의 관계를 학습하기 때문에 양질의 레이블 정보를 충분하게 확보해야하는데 이것이 매우 어렵다는 문제가 있었다. 반면 Self-Supervised Learning은 자기 자신으로부터 얻은 정보를 활용해 좋은 representation을 할 수 있다.
Contrastive learning은 Self-Supervised Learning의 한 종류로 레이블 정보가 없어도 관측치끼리의 유사성을 바탕으로 이들을 잘 구분하도록 학습한다. 수많은 관측치들을 구분하기에는 확률값이 너무 작아져 학습이 어려워지는 문제가 생겨 일부만 샘플링하여 cosine 유사도를 측정해 positive는 pull하고 negative는 push하는 방식으로 이루어지고 있었다.
Contrastive learning의 성능을 향상시킬 수 있는 방법들에 대해서도 언급해주셨다. Memory Bank의 단점을 개선하기 위해 Memory Queue를 사용한 Moco, Queue 사용하지 않고 batch size를 늘려 성능을 개선한 SimCLR, Moco에 SimCLR를 결합한 Moco v2, K-means 알고리즘을 통해 prototype을 정의해 positive로 사용하는 방법, False Negative를 잘 처리하는 방법 등이 있었다.
Supervised Learning과 Self-Supervised Learning의 차이점부터 Self-Supervised Learning의 종류와 방법, 최근 연구 동향까지 폭넓게 배울 수 있어 매우 의미있는 시간이었다. 좋은 세미나를 준비해주신 연구원님께 감사한 마음을 전하고 싶다.
금일은 Contrastive Learning를 주제로 세미나가 진행되었다. Contrastive Learning이란 레이블 정보 없이 관측치 레벨에서 정교하게 representation을 학습하는 방법이다. 이번 세미나에서는 Contrastive Learning에 대한 전반적인 구조와 대표적인 연구인 MoCo, SimCLR에 대해 설명 들을 수 있었다. Contrastive Learning에서는 모든 데이터의 임베딩 정보를 Memory Bank에 저장한 뒤 타겟 데이터와 Memory Bank에서 샘플링한 데이터를 가지고 cosine 유사도를 측정한다. 여기서 타겟 데이터 자신(positive)에 대한 유사도는 높이며, 타겟 데이터와 다른 샘플(negative)에 대한 유사도는 낮게 학습하도록 Loss function을 설계한다. 최종적으로 학습이 잘 된다면 semantic 정보가 유사한 관측치들끼리 모이도록 학습이 될 것이다. 이 후 MoCo 연구에 대한 소개를 들을 수 있었는데 MoCo는 Memory Bank가 지니는 단점을 해결하는 방법을 제안한 연구이다. Memory Bank는 관측치 전체에 대한 임베딩 정보를 계속 가져야하는 메모리 이슈가 있고, 랜덤 샘플링을 사용하다 보니 데이터 샘플별로 학습에 기여하는 정도가 다르다는 단점이 존재한다. 이를 Memory Queue를 활용해서 해결하고자 했다. SimCLR은 batch안에서 모든 것을 해결하려고 한 연구로 Batch가 충분히 크다면 Negative Sample도 충분히 잘 뽑을 수 있다는 것에서 시작한다. 실제로 batch 크기가 2048이 어느정도 성능이 유지된다는 것을 확인할 수 있었다. 또한 data augmentation을 다양하게 적용하고 더 좋은 feature를 뽑기 위해 embedding layer를 더 깊게 쌓아 모델의 성능을 향상시켰다. 마지막으로 최근 진행되고 있는 Contrastive Learning 연구에 대한 주요 아이디어를 설명 들을 수 있었다. 더 좋은 Positive를 정의하기 위해 군집의 중심을 positive로 활용하는 방식, Negative sample 중에서 타겟과 유사한 False Negative sample을 활용하는 방식, 관측치별 주변 density를 활용해 샘플링하는 방식 등이 있었다. 이번 세미나를 통해 Contrastive Learning에 대해 전반적인 내용을 알 수 있어서 좋았다. 요즘 공부하는 분야에 스펙트럼이 넓고 속도도 빠르게 연구들이 진행되다 보니 놓치는 부분이 많았는데, 연구실 세미나를 통해 각 분야별로 큰 줄기를 듣고 배울 수 있어서 좋은 것 같다. 데이터에 레이블링이 없는 경우 데이터가 지니는 특징을 어떻게 잘 학습해서 좋은 특징 공간을 만들 것인가가 하는 것은 정말 중요한 부분 중 하나인 것 같다. 추후에도 이런 부분을 잘 고민하며 공부를 진행할 예정이다. 좋은 세미나를 준비해준 민구에게 고마움을 표하고 싶다.
이번 세미나는 ‘Towards Contrastive Learning’이라는 주제로 label 정보 없이 매우 정교한 representation을 학습할 수 있는 학습방법인 contrastive learning에 대해 자세히 다루어졌다. Self-supervised learning은 supervised learning과 달리 input data 자체에서 쉽게 얻을 수 있는 정보를 사용해 좋은 representation을 학습하도록 한다. 이때 사전에 정의된 작업을 잘 맞추도록 하는 학습을 pretext-based learning이라고 한다. 반면 이번 세미나에서 중점적으로 다룬 contrastive learning은 pretext task를 정의하지 않고 contrastive loss를 사용한 또다른 self-supervised learning이다. 이는 NCE loss를 사용하여 학습이 되며, 대표적 모델로 Memory Bank의 단점을 개선할 수 있는 방법인 MoCo와 Queue 대신 Batch size를 늘려 개선하는 방법인 SimCLR에 대해 소개해주었다. 또한 성능 향상을 위해 example을 좀 더 잘 정의하고 샘플링해보고자 하는 최신 연구 동향에 대해서도 소개해주었다. 세미나를 들으면서 생각해볼만한 여러 질문들로 내용이 계속해서 연결되며 최신 연구동향까지 짚어볼 수 있어 의미 있는 시간이었다. Cotrastive learning이라는 컨셉을 이해하기까지 연관된 여러 흐름을 이해하기 쉽게 잘 전달해준 곽민구 연구원께 감사의 말씀을 전하고 싶다.
이번 주제는 Constrastive Learning에 대한 세미나였다. input data 사이의 관계에서의 분류 경계선을 얻기위해 다양한 모델들이 개발되어 왔는데, 여기서 기준이 되는 양질의 레이블을 얻기 위해서는 비용이 드니, 레이블 없이 모수만을 가지고 분류하기 위한 방법에 대한 내용이었다. 이문제를 해결하기위해 먼저 self supervised learning을 사용하는데, 그 방법에는 input data에 pretest task 작업을 가해 representation을 얻는 방법이 있으나, 이번 세미나에서는 이를 사용하지 않고 Contrastive Learning로, 관측치 사이의 유사성을 가지고 분류하여 레이블처럼 이용하는 것이었다.
이 때, 관측치가 너무 많을 경우 전체 모수에 대해 분류하게 되면 확률값이 매우 작아지게 되므로, 일부만 샘플링하여 손실함수를 계산하는 noise contrastive estimation 를 이용하는데, 여기서 데이터를 임베딩하여 타겟 이미지의 벡터와 다른 데이터의 벡터를 비교하여 positive는 가까워지고, negative는 멀어지도록 학습을 시키는 방법이었다.
이 분석에서 성능을 높이기 위해서는 1) 모수data를 늘리거나 2) sampling방식을 개선하거나 인데, 거기에 대한 방법론으로 MoCo와 SimCLR가 있다.
MoCo의 경우는 Memory Bank가 가지는 메모리 이슈와 랜덤샘플링에 대한 것을 개선한 것으로, 선입선출 알고리즘으로 작동하는 Memory Queue를 사용하는 방식이었고, SimCLR은 batch size자체를 크게 늘리는 방식으로 두번의 data augmentation을 사용하며, augmentation자체도 여러가지로 적용하게 되면 더 효과적으로 batch size가 크게 늘려 사용할 수 있다는 방법이었따. 다만 SimCLR는 GPU 소요가 커지는 단점은 있었다.
또한가지 성능을 높이기위해서는 positive/negative를 정확하게 분류할 수 있는 방법인데, positive의 경우는 prototype을 정의하여 군집화 알고리즘을 사용하는 방법이 있었고, negative의 경우는 anchor에 augmentation을 여러번 적용하여 유사도 점수를 통해 false negative를 줄이는 방식으로 진행했다.
결국, 모수 내에서 유사한것을 어떻게 분류해 낼 것이냐에 대한 연구인데, 반도체에서 사용하게되면, MAP 의 형태분류와 같은 영역에서는 굉장히 정형화된 크기(wafer 좌표) 내에서 움직이는 data set이기 때문에 생각보다 효과적으로 사용해볼 수 있지 않을까 싶어 흥미로운 주제였다. 차근차근 설명해주신 곽민구연구원님께 감사드립니다.
Self-Supervised Learning의 하나인 Contrastive Learning을 주제로한 세미나였다.
Supervised Learning은 데이터와 해당 데이터의 레이블의 정보가 존재해야 하지만, 레이블 된 많은 데이터 확보의 어려움으로 레이블 정보 없이도 관측치들 사이의 유사성을 바탕으로 관측치끼리 구분하도록 하는 Self-Supervised Learning 방법이 활용되고 있다. 이 때, 방대한 관측치를 클래스로 간주하고, softmax를 사용할 수 없기 때문에 관측치의 일부를 샘플링하여 손실함수을 계산하는 NCE 방식이 도입된다. 이는 데이터의 임베딩 정보를 Memory Bank에 저장하고, anchor라는 특정 이미지에 대한 positive example(유사하게 만들고 싶은 샘플), negative example(다르게 만들고 싶은 샘플)의 개념과 이들 사이의 cosine 유사도를 측정하고, 확률로 표현한다.
이후, 성능을 높이기 위해 몇가지 방식이 제안되며, Memory Bank의 효율성을 높이는 MoCo라는 모델의 선입선출 알고리즘을 적용 혹은 batch size를 늘려서 관측치별 2번의 data augmentation를 통한 SimCLR 모델을 사용할 수 있다. 관련된 최근 논문에서는 positive/negative 샘플링을 더욱 잘 정의할 수 있는 방법에 대해 연구되었고, 군집화 알고리즘을 사용하여 prototype을 정의하여 활용한 방식, False Negative 개념을 통해 Contrastive Learning 을 수행하여 성능을 높이고자 하였다.
아직 관련한 주제의 지식이 부족하여 디테일한 설명의 이해는 부족하였으나, 전체적인 흐름부터 알고리즘의 핵심 내용, 최신 연구 동향까지 살펴볼 수 있는 밀도있는 세미나였다. 좋은 세미나 강연 해주신 곽민구 연구원님께 감사의 말씀을 전합니다.
이번 세미나는 "Towards Contrastive Learning"라는 주제로 민구형이 발표해 주었다. 최근 연구실에서 Contrastive Learning에 대해 이야기를 하는데 이번 세미나를 통해 기본적인 개념을 알게 되어 많은 도움이 되었다.
Self-Supervised Learning(SSL)은 레이블이 없이 기존 인풋 데이터들간의 관계를 학습하여 좋은 Representation을 추출하고자 한다. 이 방법으로 크게 Pretask를 이용하는 것과 Contrastive Learning을 이용하는 것 두 가지가 있다. 오늘 발표한 Contrastive Learning은 pretask를 사용하지 않고 관측치 사이의 유사도를 기반으로한 Noise Contrastive Estimation(NCE) 사용하여 새로운 Loss function을 정의하고 인풋 데이터들간의 관계를 학습한다.
Contrastive Learning에서는 이를 위해 Anchor와 positive, negative sample을 정의한다. Anchor는 타겟데이터가 되고 positive는 anchor와 유사한 관측치, negative는 유사하지 않은 관측치이다. 모델은 Anchor와 positive는 서로 가깝게(Pull), negative는 서로 멀게(Push) 학습이 이루어 진다.
세미나에서는 대표적인 두 가지 모델인 MoCo와 SimCLR을 소개했는데 MoCo는 기존의 Contrastive model이 충분한 negative sample을 뽑기 위해 모든 관측치에 대한 정보를 계속 저장하고 있어야 한다는 단점(Memory Bank)을 극복하고자 Memory Queue를 사용하여 극복하였다. SimCLR은 Memory Bank나 Memory Queue 없이 batch size를 늘려서 batch 내에서 충분한 negative sample을 뽑는 방법을 사용하였다.
이번 세미나를 통해서 Contrastive Learning의 개념과 개선을 위한 방향과 연구 흐름을 쉽게 이해할 수 있었다. 좋은 세미나를 준비해준 민구형에게 감사의 말씀을 드린다.
오늘은 민구가 "Towards Contrastive Learning"라는 주제로 발표를 하였다. 크게 Constrastive Learning부터 학습하는데 Loss값인 NCE Loss에 대해 설명하고 이를 개선하기 위한 접근법들을 순서대로 설명해주었다. 지도학습에서 가지는 어려움은 레이블 부족하여 최적의 분류 경계선을 얻기가 어렵다는 점, 그래서 X 자체에서 힌트를 얻자라는 것이고 Softmax로 분류시에 별도의 semantic labeling 없이 클래스 구분을 했음에도 불구하고 치타, 호랑이가 softmax가 높게 나오는 점에서 착안이 되었다고 한다. 그리고 MNIST가 아닌 ImageNet의 데이터가 120만개인데 120만개의 클래스를 구분하는 것으로 softmax 구조는 한계가 있다고 한다. 이를 감안하여 레이블 정보 없이 관측치 레벨에서 공유하는 representation semantic structure을 만들자라는 생각을 하게 되었고 접근 방법은 크게 Pretext-based learning(jigsaw, colorization, rotation), Constrative Learning (without pretext)이 있고 오늘 세미나는 contrastrive loss로 학습하는 자기지도학습이었다. NLP에서 Negative sampling을 통해 전체 클래스를 뽑지 않고 실제 라벨과 같이 softmax 이후 cross entropy loss 하는 아이디어를 가져온다. 분포가 아닌 메모리 뱅크에 데이터를 L2정규화를 하여 스케일링 크기를 맞추고 negative sampling 하기 때문에 non-parametric이라는 논문 제목이라고 한다. 여기에서 positive는 anchor의 과거정보라고 한다. 이렇게 3개의 anchor, positive, negative samples가 정의한다. L2 유클리이디안 거리(코사인 유사도)를 통해 anchor기준으로 positive 샘플들을 당기고(pull) negative 샘플들을 밀어낸다(push). 이렇게 학습되게 하기 위해 사용되며 NCE 함수를 적용한 softmax 형태이 출력이다. 분자는 앵커와 Positive 샘플의 거리를 분모에 anchor와 negative samples또한 위치시킴으로써 이 값을 Cross entropy likelihood 최대화 negative likelihood 최소화하여 학습을 한다. 그래서 기존의 분류모델과 다르게 코사인 유사도와 소프트맥스를 통해 학습하는게 contrastive learning이다. 이 학습방법이 잘되는걸 확인하기 위해 모델 가중치를 고정하고 linear classifier로 분류 정확도 산출하여 성능이 향상된걸 확인할 수 있다고 한다. 그럼 이 초기 모델을 개선하기 위해 3가지 접근방법이 있다고 한다. ①네트워크 ②데이터 어그멘테이션 임베딩 얻고, ③ Exmaple 정의, 좋은 샘플링기법(기존 Random Sampling)이 있다.
① + ② MoCo는 Memory bank에 대한 문제점을 샘플별 기여도 다르고 Out Of Bag으로 복원 추출시 생길수 있는 문제점을 예를 들었다. 그래서 Memory Bank 대신 Queue(FIFO)를 제안하여 샘플별 기여도 동일화하고 임베딩 벡터를 계산 시점에 산출하므로써 메모리 이슈 해결하였다고 한다. 그리고 네트워크를 Stochastic gradient로 학습하고 Momentum Encoder로 Queue에서 나온 것의 네트워크를 구조는 같되 Target Network에 있는 값을 Exponential moving average 로 업데이트한다는 점이 있다. 이 값은 실험적으로 낮게 주는게 좋다고 한다. SimCLR은 배치를 크게 가져가면 그 안에서 충분한 negative sample을 구할 수 있어서 별도의 메모리 구조체가 필요없다고 한다. 대신 GPU연산이 많이 필요하다고 있다. 더 좋은 피쳐를 만들기 위해 Embedding layer를 늘리는게 좋다고 한다는 인사이트도 주었다. 그다음 MoCo v2는 SimClR처럼 임베딩 Layer를 같이 사용하고(더 쌓고) augmentation헀더니 더 좋아졌다고 한다.
③ 세번째 샘플의 질이다. Positive / Negative 정의를 어떻게 할까이다. Positive 샘플에 접근한건 Prototype to Support Positive 논문이며, K Means로 돌려서 유사한 것들을 Postiive sample로 사용하자고 하는 아이디어이며, K 값을 작게하고 크게 하면서 이미지간의 계층 구조(Hiearchical Semantic Structure)도 알수 있었다고 한다. Negative 샘플에 접근한건 False Negative Cancellation이다. Negative sampling에서 Original iamge와 유사한게 있음 곤란하다라고 보고, anchor에 augmentation을 여러번 적용하여 Support Set을 만들고 유사도가 높을경우 샘플을 제외하거나 positiive에 포함하는 후속처리를 한다고 한다고 한다. 그리고 "Sample Hard Negatives sampling"라는 접근방법은 더욱 정교한 semantic representation을 통해서 Hard 와 Easy nagatives를 나누서 Easy한것 보다는 Hard samples를 이용하여 NCE 학습을 하는게 더 유리하다는 접근이다.
이번 기회로 Contrastive Learning에 대해서 자세히 이해하는 시간을 가질 수 있었다. 똑 부러지는 설명으로 이런 배움을 준 민구에게 감사의 인사를 전한다.
이번 세미나는 Self-Supervised Learnings의 하나인 Contrastive Learning을 주제로 진행 되었다. 세미나를 통해 기본적인 개념에서부터 성능을 향상 시키기 위한 방법까지 자세하게 설명을 들을 수 있었다. 개괄적인 구조는 Contrastive Learning에서 정의하는 Anchor, Positive 그리고 Negative sample을 이용하여 각 샘플 간 유사도를 기반으로 타겟의 클래스를 구분하며 학습이 진행되는 구조이다. 세미나에서 설명해주신 성능을 향상 시키기 위한 방법론 중 MoCo와 SimCLR를 일부 결합한 MoCo v2의 성능이 단순 MoCo v1과 SimCLR 모델의 성능에 비해 눈에 띄게 현저히 높은 점이 신기 하였고, 개선의 방향을 세분화하여 단계적으로 접근하니 더 나은 솔루션을 발견할 수 있었다는 접근법 또한 배울 수 있었다. 또한 데이터의 질과 관련하여 positive 샘플을 군집화 알고리즘을 활용하여 설정하는 것, false negative를 필터링하여 성능을 향상 시키는 방법을 소개해주셨다. 실제로 데이터의 질을 높이기란 대단히 어려운 일이겠지만, 마지막으로 세미나에서 소개해주신 sample hard negatives sampling 방법까지 설명을 들을 수 있었다. 이번 기회로 contrastive learning의 전반적 학습방법을 이해할 수 있었다.