사전 자기지도학습
개념

자기지도학습

gabury1고친 사람 github-actions[bot]

자기지도학습은 사람이 정답을 달지 않은 데이터로 모델을 가르칩니다. 모델은 예시를 보며 답하는 법을 배우는 프로그램입니다. 데이터의 일부를 가린 뒤 그 부분을 맞히게 합니다. 정답은 데이터가 스스로 내놓습니다. 이렇게 미리 배워 둔 모델은 나중에 적은 정답만으로 다른 일을 익힙니다.

쉽고 빠른 이해

자기지도학습은 정답 없는 데이터에서 연습 문제를 만들어 모델을 가르칩니다. 「고양이가 소파에서 잔다」에서 「소파에서」를 가리고 맞히게 하면, 가린 낱말이 곧 정답입니다.

데이터마다 사람이 정답을 달려면 시간과 돈이 많이 듭니다. 반면 정답 없는 글과 사진은 이미 많이 쌓여 있습니다. 자기지도학습은 이 쌓인 데이터를 사람 손 없이 훈련에 씁니다.

  1. 데이터의 한 부분을 가리거나 바꿉니다
  2. 모델이 가린 부분을 맞히도록 훈련합니다
  3. 그렇게 배운 모델에 정답 달린 데이터 조금을 더 보여 주어 실제로 풀 일을 익힙니다

대가는 훈련 비용입니다. 데이터가 아주 많아야 효과가 나서 계산이 오래 걸립니다. 연습 문제를 잘못 고르면 배운 것이 실제 일에 별 도움이 안 됩니다.

상세

빈칸 채우기 문제집 없이 교과서만 가진 학생을 떠올려 봅시다. 학생은 교과서 문장의 낱말 하나를 손가락으로 가리고 무엇이 들어갈지 맞혀 봅니다. 손가락을 떼면 답이 바로 보이니 채점해 줄 선생님이 필요 없습니다. 이렇게 수천 문장을 풀다 보면 교과서 내용이 머리에 남습니다.

자기지도학습(self-supervised learning)은 데이터 자신에서 정답을 만들어 컴퓨터를 가르치는 방식입니다. 문장에서 낱말 하나를 가린 뒤 그 낱말을 맞히게 하는 것이 대표적인 자기지도학습입니다.

이 방식은 머신러닝의 한 갈래입니다. 머신러닝은 판정 규칙을 사람이 적어 넣는 대신 예시에서 뽑아내는 방식입니다. 스팸을 가르는 규칙을 손으로 다 적기는 어렵지만, 스팸 메일 예시를 많이 보여 주면 규칙을 찾아낼 수 있습니다.

예시에서 뽑아낸 규칙을 담고, 입력을 받아 답을 내놓는 프로그램이 모델입니다. 메일 한 통을 넣으면 「스팸」이나 「정상」을 내놓는 식입니다.

예시를 보여 주며 모델을 고쳐 나가는 과정은 훈련입니다. 모델이 낸 답이 틀리면 덜 틀리도록 모델을 조금 바꿉니다. 이것을 예시마다 되풀이합니다.

레이블을 사람 대신 데이터가 내주는 방식

머신러닝에서는 정답을 보통 레이블이라고 부릅니다. 레이블은 예시에 붙은 답 표시입니다. 보통은 사람이 하나씩 답니다. 메일에 붙인 「스팸」과 「정상」, 사진에 붙인 「고양이」가 레이블입니다.

레이블 달린 예시로 입력과 답 사이의 관계를 배우는 방식이 지도학습입니다. 지도학습은 레이블이 많을수록 잘 배웁니다. 그런데 레이블은 사람이 하나씩 달아야 해서 모으는 데 시간과 돈이 많이 듭니다.

자기지도학습은 이 레이블을 사람이 아니라 데이터에서 뽑습니다. 문장 하나는 그 안의 낱말 하나하나를 정답으로 품고 있습니다. 사진 한 장도 가린 조각이 원래 무엇이었는지를 정답으로 품고 있습니다. 데이터만 있으면 정답이 따라 나오므로 사람이 레이블을 달 일이 없습니다.

가린 낱말을 정답으로 쓰는 문제

아래 코드는 문장 하나에서 문제와 정답 한 쌍을 만듭니다. split() 은 문장을 띄어쓰기 기준으로 잘라 낱말 목록으로 만듭니다. [MASK] 는 가린 부분을 표시하려고 넣는 기호입니다.

Python
s = "고양이가 소파에서 잔다".split()
x = s.copy()
x[1] = "[MASK]"
y = s[1]
" ".join(x)  # '고양이가 [MASK] 잔다'
y            # '소파에서'
len(s)       # 3

x 가 모델에 넣을 문제이고 y 가 맞혀야 할 정답입니다. 사람은 문장만 주었고 정답은 코드가 문장에서 꺼냈습니다. 가린 낱말을 맞히도록 훈련한 모델은 마스크 언어 모델이라고 합니다.

마지막 줄의 3 은 이 문장의 낱말 수입니다. 가릴 낱말을 하나씩 바꾸면 문장 하나에서 문제가 세 개 나옵니다. 문서 백만 편이 있으면 문제는 그보다 훨씬 많이 나옵니다. 정답을 사는 비용 없이 문제의 양을 늘릴 수 있다는 것이 이 방식의 출발점입니다.

프리텍스트 태스크

이렇게 데이터에서 만든 연습 문제를 프리텍스트 태스크(pretext task)라고 부릅니다. 「구실로 내세운 과제」라는 뜻입니다. 가린 낱말을 맞히는 일 자체가 목적이 아니기 때문에 붙은 이름입니다.

진짜 목적은 문제를 푸는 동안 모델 안에 쌓이는 지식입니다. 빈칸에 「소파에서」를 넣으려면 모델은 「잔다」 앞에 장소가 온다는 것과 고양이가 소파에 잘 올라간다는 것을 알아야 합니다. 이런 문제를 수없이 풀면 문법과 낱말의 뜻, 낱말끼리 어울리는 방식이 모델에 남습니다.

프리텍스트 태스크는 데이터 종류마다 다르게 만듭니다. 공통점은 정답을 데이터 안에서 구한다는 것입니다.

데이터 가리거나 바꾸는 것 모델이 맞히는 것
글 문장 가운데 낱말 하나 가린 낱말
글 문장의 뒷부분 바로 다음에 올 낱말
사진 사진의 조각 몇 개 가린 조각의 모습
사진 사진을 돌린 각도 몇 도 돌렸는지
소리 녹음의 한 구간 가린 구간의 소리

표의 둘째 줄처럼 앞 낱말들을 보고 다음 낱말을 맞히도록 훈련한 모델이 언어 모델입니다. 글을 써 주는 대규모 언어 모델도 이 문제를 수많은 문서에 대고 풀며 배웁니다.

문제를 풀며 생기는 표현

모델은 글이나 사진을 직접 다루지 못하고 수로 바꿔서 다룹니다. 입력 하나를 수 여러 개를 늘어놓은 목록으로 바꾼 것이 표현입니다. 「소파에서」라는 낱말 하나가 수 여러 개짜리 목록 하나로 바뀌는 식입니다.

같은 수의 목록을 임베딩이라고도 합니다. 표현과 같은 것을 가리키는 다른 이름입니다. 검색이나 추천처럼 이 목록을 꺼내 쓰는 쪽에서 흔히 쓰는 이름입니다.

프리텍스트 태스크를 잘 풀려면 모델은 비슷한 것을 비슷한 수로 바꿔야 합니다. 「소파에서」와 「침대에서」는 같은 빈칸에 들어갈 수 있으니 가까운 수로 바뀌어야 맞히기 쉽습니다. 그래서 훈련이 끝나면 뜻이 비슷한 낱말끼리 가까운 표현을 갖게 됩니다.

이 표현이 자기지도학습이 남기는 주된 결과물입니다. 표현을 데이터에서 배워 내는 일을 따로 표현 학습이라고 부릅니다. 자기지도학습은 표현 학습의 대표적인 방법입니다.

사전 학습과 파인튜닝

자기지도학습은 대개 두 단계 가운데 앞 단계로 씁니다. 그 앞 단계가 사전 학습입니다. 레이블 없는 데이터를 많이 써서 프리텍스트 태스크로 표현을 배워 두는 단계입니다.

뒤 단계는 파인튜닝입니다. 사전 학습을 마친 모델에 레이블 달린 데이터를 조금 보여 주어 실제로 풀려는 일을 익히게 합니다.

실제로 풀려는 일은 다운스트림 태스크라고 합니다. 사전 학습 다음, 흐름의 아래쪽에서 하는 일이라 붙은 이름입니다. 리뷰가 긍정인지 부정인지 가리는 일, 사진 속 물건 이름을 맞히는 일이 다운스트림 태스크입니다.

flowchart TD
    subgraph P["사전 학습"]
        P1["레이블 없는 데이터 많이"] --> P2["프리텍스트 태스크로 훈련"]
        P2 --> P3["표현을 배운 모델"]
    end
    subgraph F["파인튜닝"]
        F1["레이블 달린 데이터 조금"] --> F2["다운스트림 태스크로 훈련"]
        F2 --> F3["실제 일을 하는 모델"]
    end
    P3 --> F2

위 칸에는 사람의 손이 들지 않습니다. 아래 칸에서만 사람이 단 레이블이 쓰입니다. 위 칸에서 문법과 낱말 뜻을 이미 배웠으므로 아래 칸은 처음부터 배울 때보다 훨씬 적은 레이블로 끝납니다.

한 번 사전 학습한 모델은 여러 다운스트림 태스크에 나눠 씁니다. 같은 모델을 감정 분류에도, 질문 답하기에도 파인튜닝할 수 있습니다. 한 일에서 배운 것을 다른 일로 옮겨 쓰는 일이 전이 학습입니다.

둘을 견주어 가까이 모으는 방식

가린 부분을 맞히는 대신 두 입력을 견주는 프리텍스트 태스크도 있습니다. 이 방식이 대조 학습입니다. 사진에서 많이 씁니다.

사진 한 장을 두 번 다르게 잘라 내고 색을 조금씩 바꿉니다. 원본을 살짝 바꿔 새 예시를 만드는 일은 데이터 증강이라고 합니다. 바꾼 두 조각은 모양이 달라도 같은 고양이를 찍은 것입니다.

모델은 두 조각의 표현이 가까워지도록 훈련합니다. 다른 사진에서 나온 조각과는 표현이 멀어지도록 훈련합니다. 정답은 「같은 사진에서 나왔나」 하나입니다. 이 정답은 조각을 만든 코드가 이미 알고 있습니다.

flowchart TD
    A["고양이 사진"] --> A1["조각 1"]
    A --> A2["조각 2"]
    B["자동차 사진"] --> B1["조각 3"]
    A1 --> M["모델이 표현으로 바꾼다"]
    A2 --> M
    B1 --> M
    M --> R1["조각 1 과 조각 2 는 가깝게"]
    M --> R2["조각 1 과 조각 3 은 멀게"]

그림에서 조각 1 과 조각 2 는 같은 고양이 사진에서, 조각 3 은 자동차 사진에서 잘라 냈습니다. 훈련은 앞의 둘을 가깝게, 뒤의 하나를 멀게 만듭니다.

이 훈련을 마친 모델은 같은 물건을 찍은 사진을 가까운 표현으로 바꿉니다. 각도와 밝기가 달라도 같은 고양이면 표현이 비슷해집니다. 사진 속 물건이 무엇인지 이름은 한 번도 배우지 않았지만, 이름을 붙일 준비는 된 셈입니다.

지도학습·비지도학습과 가르는 기준

자기지도학습은 두 이웃 사이에 섭니다. 정답을 누가 만드느냐와 어떻게 훈련하느냐로 견주면 이렇습니다.

지도학습 자기지도학습 비지도학습
정답을 만드는 쪽 사람 데이터에서 코드가 뽑는다 정답이 없다
훈련하는 법 예측을 정답과 맞춰 본다 예측을 정답과 맞춰 본다 데이터 안의 무리나 규칙을 찾는다
주로 남기는 것 한 가지 일을 하는 모델 여러 일에 쓸 표현 무리·규칙 같은 구조

비지도학습은 레이블 없이 데이터 안에 숨은 무리와 규칙을 찾는 방식입니다. 자기지도학습도 사람이 단 레이블을 쓰지 않으므로 비지도학습의 한 갈래로 묶기도 합니다. 다른 점은 가린 낱말처럼 맞혀 볼 정답이 있다는 것입니다.

훈련하는 법만 보면 자기지도학습은 지도학습과 같습니다. 모델이 낸 답을 정답과 맞춰 봅니다. 그리고 틀린 만큼 모델을 고칩니다. 정답의 출처만 사람에서 데이터로 바뀌었습니다. 이름의 「자기」가 이것을 가리킵니다.

준지도학습과도 헷갈립니다. 준지도학습은 사람이 단 레이블을 조금 쓰고 레이블 없는 데이터를 많이 씁니다. 자기지도학습의 사전 학습 단계는 사람이 단 레이블을 하나도 쓰지 않습니다.

자기지도학습의 대가

첫째 대가는 계산 비용입니다. 표현을 쓸 만하게 배우려면 데이터가 아주 많아야 합니다. 그만큼 훈련이 오래 걸립니다. 큰 모델을 사전 학습하는 데에는 GPU(Graphics Processing Unit, 그래픽 처리 장치) 여러 대를 오래 돌려야 합니다.

둘째 대가는 프리텍스트 태스크를 고르는 일이 어렵다는 점입니다. 쉬운 문제는 모델이 꼼수로 풉니다. 사진을 비스듬히 돌리면 네모난 틀의 모서리에 빈 곳이 생겨 검게 채워집니다. 돌린 각도를 맞히는 문제에서 모델이 물건 대신 이 검은 모서리의 모양만 보고 답한다면 물건에 대해서는 아무것도 배우지 못합니다.

셋째 대가는 데이터의 치우침까지 함께 배운다는 점입니다. 사람이 레이블을 고르지 않으므로 무엇을 배울지도 사람이 거르지 않습니다. 훈련 문서에 특정 집단을 깎아내리는 표현이 많으면 모델의 표현에도 그 치우침이 남습니다.

넷째로 다운스트림 태스크를 하려면 결국 레이블이 조금은 필요합니다. 파인튜닝에 쓸 레이블과, 모델이 일을 잘하는지 재 볼 정답은 여전히 사람이 마련합니다.

자기지도학습을 쓰는 때

레이블 없는 데이터는 많은데 레이블은 적을 때 씁니다. 웹 문서, 사진, 녹음, 서비스 로그처럼 저절로 쌓이는 데이터가 그렇습니다. 사람이 하나하나 답을 달기에는 양이 너무 많은 데이터입니다.

한 데이터로 여러 일을 해야 할 때도 씁니다. 사전 학습한 표현 하나를 두고 다운스트림 태스크마다 파인튜닝만 따로 하면 됩니다. 일마다 모델을 처음부터 훈련하는 것보다 레이블이 적게 듭니다.

데이터가 적거나 레이블이 이미 넉넉하면 사정이 다릅니다. 예시가 몇천 건뿐이면 사전 학습으로 배울 것이 많지 않습니다. 풀 일이 하나뿐이고 그 일의 레이블이 충분하면 지도학습만으로 바로 배우는 편이 단계가 적습니다.

직접 사전 학습을 하지 않는 경우가 더 흔합니다. 다른 곳에서 이미 사전 학습해 공개한 모델을 받아 파인튜닝만 하기도 합니다. 그 모델이 내주는 임베딩을 검색과 추천에 바로 쓰기도 합니다. 이때도 받아 쓰는 모델은 자기지도학습으로 만들어진 것입니다.

관련 항목

자기지도학습이 속하는 상위 분류

머신러닝 · 딥러닝 · 인공지능 · 표현 학습

레이블을 쓰는 정도로 맞세워지는 학습 방식

지도학습 · 비지도학습 · 준지도학습 · 강화학습 · 약지도학습 · 능동 학습

자기지도학습이 만드는 연습 문제

프리텍스트 태스크 · 마스크 언어 모델 · 다음 토큰 예측 · 마스크 이미지 모델링 · 회전 예측 · 대조 학습

자기지도학습이 거치는 처리 단계

사전 학습 · 파인튜닝 · 전이 학습 · 다운스트림 태스크 · 선형 탐사

자기지도학습을 이루는 구성 요소

모델 · 레이블 · 표현 · 임베딩 · 토큰 · 데이터 증강 · 손실 함수 · 신경망

자기지도학습으로 훈련하는 모델

언어 모델 · 대규모 언어 모델 · 파운데이션 모델 · 오토인코더 · 트랜스포머

자기지도학습을 돌리는 데 드는 자원

GPU · 훈련 · 훈련 데이터 · 데이터셋 · 말뭉치

자기지도학습에서 터지는 문제

지름길 학습 · 표현 붕괴 · 데이터 편향 · 과적합

다른 이름: self-supervised learning · 자기 지도 학습 · 자기지도 학습