노이즈 대비 추정 손실이란 무엇일까? 코드와 함께 배우는 튜토리얼
Self-Supervised Learning에서 자주 사용되는 손실 함수인 Noise Contrastive Estimation Loss를 다루는 튜토리얼
이 글은 AI 번역본입니다. 오역이 의심되면 댓글로 알려주세요.
Created on September 15|Last edited on September 15
Comment
소개
노이즈 대비 추정은 분야에서 자주 등장합니다 자기 지도 학습주로 InfoNCE, InfoNCE++, NT-Xent와 같은 현대적 변형 형태로 가장 흔히 사용됩니다. 이 글에서는 그 동기, 유도 과정, 그리고 다양한 프레임워크를 활용한 구현 방법을 살펴보겠습니다.
목차
노이즈 대비 추정 손실
자기 지도 학습에 대해 알고 있지만, 일단 그 프레임워크는 떼어 놓고 생각해 봅시다. 저는 다음과 같은 접근을 더 선호합니다 Oriol Vinyals는 NeurIPS 2020 초청 강연에서 이를 설명합니다주어진 데이터와 작업 명세(어떤 방식으로든 목표 정보를 제공해야 합니다)를 바탕으로, 입력 데이터의 일부를 활용해 데이터 분포를 모델링합니다.
그런데 왜 이런 방식으로 접근할까요? 본질적으로는 학습해야 할 파라미터 수를 줄이려는 것입니다. 지도 학습에서는 목표값과 함께 전체 입력 분포를 모델링하려고 하며, 이는 결국 분포를 여러 집단으로 나누는 분할 함수(클래스로 생각할 수 있음)를 학습하는 문제로 귀결됩니다.
노이즈 대비 추정(NCE)은 입력 분포를 추정하는 것을 목표로 하지만 없이 전체 분할 함수를 학습하는 방식입니다. 이 접근법은 언어 모델링에서 매우 효과적인 것으로 입증되었습니다. 다음 단어를 추정하는 문제는 NCE를 사용해, 다음 목표 단어와 일부 노이즈 분포에서 뽑은 샘플들을 구분하는 시그모이드 이진 분류기를 학습하는 것으로 접근할 수 있습니다. 우리의 목표는 로짓을 학습해 정답 단어의 확률은 1에 가깝게, 오답 단어의 확률은 0에 가깝게 만들도록 하는 것입니다.
간단한 확률 모델링! 이제 이를 바탕으로 확장해 봅시다.
InfoNCE
간단한 NCE의 재정식화를 통해, 시그모이드 이진 분류기를 학습하는 대신 소프트맥스 비선형성을 추가하여 확률을 다음 범위로 매핑할 수 있습니다 이 간단한 재정식화는 두 데이터 포인트 간 상호정보량을 추정할 수 있게 해 주며, Self-Supervised Learning에서 대부분의 다른 손실 함수들의 골격 역할을 합니다.
원본 데이터의 표현을 가지고 있다고 가정하면 (어떤 인코더의 출력일 수도 있는) 표현을 가지고 있다고 할 때, 우리는 InfoNCE 손실을 정의할 수 있습니다 위한 대조학습 다음과 같습니다:
…여기서 표현들 사이의 유사도를 추정하는 어떤 함수입니다. 여기서, 와 관련된 표현들을 나타냅니다 .
위와 같은 형식을 유지하면서 손실 함수의 핵심 아이디어를 간단히 정리해 보겠습니다. 아이디어는 소프트맥스 분류기를 학습하는 것입니다(확률을 다음 범위로 표현할 수 있도록 해 줍니다). ) 대상 표현들 사이의 그리고 어떤 노이즈 분포에서 뽑은 몇 개의 샘플들.
어디에서 은(는) 다음으로 이루어진 집합이다 무작위 샘플 중에서 “하나의 양성 샘플을 포함하여” 그리고 “제안” 분포에서 뽑은 음성 샘플들 “
일반적인 InfoNCE 정의는 전체 소프트맥스 함수를 추정하는 로짓을 산출하며, 서로 상관된 다양한 뷰들 사이의 상호정보량에 대한 하한을 최대화하는 표현을 제공한다.
코드
import torchdef infoNCE(query, positive_key, temperature=0.1, reduction='mean') -> torch.Tensor:# Negative keys are implicitly off-diagonal positive keys.# Cosine between all combinationslogits = query @ positive_key.transpose(-2, -1)# Positive keys are the entries on the diagonallabels = torch.arange(len(query), device=query.device)return F.cross_entropy(logits / temperature, labels, reduction=reduction)
자료
요약
이것으로 Noise Contrastive Estimation 손실에 대한 간단한 튜토리얼을 마칩니다. Self-Supervised Learning과 관련된 더 많은 글을 원하시거나, 수학적 내용과 “처음부터 구현” 코드를 다루는 추가 보고서를 원하시면 아래 댓글이나 저희의 채널에서 알려주세요. 포럼 ✨!
Self-Supervised Learning : An Introduction
A Brief Introduction to Self Supervised Learning, the first in an upcoming series of reports covering Self Supervised Learning.
PAWS : Semi-Supervised Learning of Visual Features by Non-Parametrically Predicting View Assignments with Support Samples
Breakdown of Semi-Supervised Learning of Visual Features by Non-Parametrically
Predicting View Assignments with Support Samples by Mahmoud Assran, Mathilde Caron, Ishan Misra, Piotr Bojanowski, Armand Joulin, Nicolas Ballas, Michael Rabbat with Weights and Biases logging.
DINO: Emerging Properties in Self-Supervised Vision Transformers
Breakdown of Emerging Properties in Self-Supervised Vision Transformers by Mathilde Caron, Hugo Touvron, Ishan Misra, Hervé Jégou, Julien Mairal, Piotr Bojanowski and Armand Joulin with Weights and Biases logging ⭐️.
What Is Cross Entropy Loss? A Tutorial With Code
A tutorial covering Cross Entropy Loss, with code samples to implement the cross entropy loss function in PyTorch and Tensorflow with interactive visualizations.
Add a comment