사전 재학습
개념

재학습

gabury1고친 사람 github-actions[bot]

재학습은 운영 중인 머신러닝 모델을 최근 데이터로 다시 훈련해 새것으로 바꾸는 일입니다. 모델은 한 번 훈련한 뒤로 스스로 배우지 않습니다. 그 사이에도 세상은 바뀌어 모델의 답이 조금씩 빗나갑니다. 재학습은 그 빗나감을 따라잡으려고 되풀이하는 일입니다.

쉽고 빠른 이해

재학습은 낡아 가는 모델을 최근 데이터로 새로 만들어 바꿔 끼우는 일입니다. 배달 앱의 도착 시간 예측 모델이라면 지난 몇 달의 배달 기록으로 모델을 다시 훈련합니다.

모델은 한 번 훈련하면 그 뒤로 스스로 배우지 않습니다. 그동안 배달 지역이 넓어지면 예측이 조금씩 빗나갑니다. 오류 메시지는 뜨지 않으니 다시 훈련하지 않으면 틀린 답이 계속 나갑니다.

어떻게 도나:

  1. 운영 중인 모델의 오차와 들어오는 입력을 지켜봅니다
  2. 때가 되면 최근 데이터에 정답을 붙여 모델을 다시 훈련합니다
  3. 새 모델과 옛 모델을 같은 시험으로 견주어 나을 때만 바꿔 끼웁니다

무엇이 나빠지나 — 훈련을 되풀이하는 계산 비용이 듭니다. 새 모델을 낼 때마다 검증하고 배포하는 수고도 따릅니다. 최근 데이터만 쓰면 설 연휴 주문 몰림처럼 해마다 돌아오는 패턴을 잊기도 합니다.

입력이 거의 안 바뀌는 일에는 드물게 필요합니다. 손글씨 숫자를 읽는 모델은 한 번 만든 것을 오래 씁니다.

상세

이 절은 배달 앱의 도착 시간 예측 모델 하나로 재학습을 봅니다. 먼저 모델이 왜 저절로 낡는지 세웁니다. 다음으로 재학습 한 바퀴를 따라갑니다.

길을 다시 익히는 배달 기사

몇 해 전 동네 길을 다 외운 배달 기사가 있습니다. 그 사이 새 길이 뚫렸습니다. 단골 지름길은 공사로 막혔습니다. 외운 길대로 달리는 기사는 점점 늦게 도착합니다. 기사는 날을 잡아 동네를 다시 돌며 길을 새로 익힙니다.

한 번 배우고 멈추는 모델

머신러닝 모델은 답을 아는 예제를 많이 보며 규칙을 익힙니다. 이 과정을 훈련이라고 부릅니다. 도착 시간 예측 모델이라면 지난 주문 수십만 건이 예제입니다. 주문마다 거리, 시각, 날씨가 입력이고 배달에 걸린 시간이 답입니다.

훈련에 쓴 예제 묶음이 훈련 데이터입니다. 모델이 보고 배운 것은 이 묶음뿐입니다.

훈련이 끝나면 모델이 익힌 규칙은 숫자 묶음으로 굳어 파일에 저장됩니다. 이 숫자들이 파라미터입니다. 파라미터가 바뀌지 않는 한 모델이 아는 규칙도 바뀌지 않습니다.

모델 서빙은 굳은 모델을 서버에 띄워 새 주문마다 도착 시간을 답하게 하는 단계입니다. 주문이 들어오면 서버가 모델에 거리, 시각, 날씨를 넘깁니다. 모델이 내놓은 예상 도착 시간을 앱이 보여 줍니다.

추론은 서빙 중인 모델이 새 입력에 답을 내는 일입니다. 추론하는 동안 파라미터는 바뀌지 않습니다. 그래서 모델이 아는 세상은 훈련 데이터를 모은 시점에 멈춰 있습니다.

모델이 낡는 까닭

모델이 멈춰 있는 동안에도 세상은 움직입니다. 배달 지역이 새 동네로 넓어지면 훈련 때 드물던 먼 거리 주문이 늘어납니다. 도로 공사가 끝나면 같은 거리를 전보다 빨리 갑니다.

분포는 값이 어느 범위에 얼마나 몰려 있는지를 말합니다. 배달 거리라면 가까운 주문이 대부분이고 먼 주문은 드문 식입니다. 어느 값이 흔하고 어느 값이 드문지가 분포입니다.

분포 이동은 운영에 들어오는 데이터의 분포가 훈련 데이터와 달라지는 현상입니다. 배달 지역이 넓어져 먼 주문이 늘어난 것이 그 예입니다. 모델은 훈련 때 드물게 본 입력에서 더 자주 틀립니다.

분포 이동이 생겨도 모델은 오류를 내지 않습니다. 서버는 멀쩡히 응답하고 답의 형식도 같습니다. 답이 조금씩 빗나갈 뿐이라 일부러 재지 않으면 모릅니다.

재학습은 이 어긋남에 맞서는 기본 대응입니다. 최근 데이터로 모델을 다시 훈련합니다. 그러면 모델이 아는 세상이 지금으로 옮겨 옵니다.

앞의 배달 기사에 빗대면 기사가 모델이고 외운 길이 훈련 데이터입니다. 동네를 다시 돌며 길을 새로 익히는 일이 재학습입니다.

입력이 거의 안 바뀌는 일에서는 재학습이 드물게 필요합니다. 손글씨 숫자를 읽는 모델이 그렇습니다. 숫자의 생김새는 해마다 바뀌지 않으니 한 번 만든 모델을 오래 씁니다.

재학습 한 바퀴

재학습은 한 번 하고 끝나는 일이 아닙니다. 지켜보다가 때가 되면 다시 훈련합니다. 새 모델을 바꿔 끼운 뒤에는 다시 지켜봅니다. 아래 그림은 그 한 바퀴를 따라갑니다.

flowchart TD
    A["운영 중인 모델"] --> B["지켜보기"]
    B --> C{"다시 훈련할 때인가"}
    C -->|"아니다"| B
    C -->|"그렇다"| D["최근 데이터 모으기"]
    D --> E["다시 훈련"]
    E --> F{"검증 · 옛 모델보다 나은가"}
    F -->|"낫다"| G["바꿔 끼우기"]
    F -->|"못하다"| A
    G --> A

새 모델이 검증에서 옛 모델보다 못하면 버립니다. 그때는 옛 모델이 계속 일합니다. 아래 소절들은 이 그림의 갈림길 둘과 데이터 모으기를 하나씩 풉니다.

언제 다시 훈련하나

트리거는 바퀴를 돌릴 때를 정하는 조건입니다. 자주 쓰는 트리거는 셋입니다. 저마다 얻는 것과 치르는 것이 다릅니다.

트리거 언제 돌리나 얻는 것 치르는 것
정해진 주기 매주, 매달처럼 달력대로 단순하고 비용을 미리 안다 세상이 그대로여도 돈다. 갑자기 바뀌면 다음 차례까지 기다린다
성능 하락 오차가 기준을 넘었을 때 필요할 때만 돈다 정답이 늦게 오는 모델은 늦게 안다
분포 이동 입력 분포가 훈련 때와 크게 달라졌을 때 정답을 기다리지 않는다 분포가 바뀌어도 답은 멀쩡할 수 있어 헛돌기도 한다

성능 하락 트리거는 오차 둘을 견주는 것으로 시작합니다. 아래 코드는 출시 때의 평균 오차와 지난주 평균 오차를 분 단위로 견줍니다. 기준은 출시 때의 1.5배입니다.

Python
baseline = 4.0   # 출시 때 평균 오차(분)
recent = 6.5     # 지난주 평균 오차(분)

recent / baseline        # 1.625
recent / baseline > 1.5  # True

지난주 오차가 출시 때보다 1.625배 커져 기준을 넘었습니다. 이 값이 참이면 재학습을 시작합니다.

이 트리거는 정답이 빨리 와야 쓸 수 있습니다. 도착 시간은 배달이 끝나면 바로 정답이 나옵니다. 대출 심사 모델은 다릅니다. 빌린 돈을 갚았는지는 몇 달 뒤에야 압니다.

정답이 늦게 오는 동안에는 오차를 잴 수 없습니다. 이런 모델은 주기 트리거나 분포 이동 트리거에 기댑니다. 운영 중인 모델의 오차와 입력 분포를 계속 재는 일은 모델 모니터링이 맡습니다.

어떤 데이터로 다시 훈련하나

새 훈련 데이터를 만들려면 고를 것이 셋입니다. 정답을 어떻게 붙이나, 얼마나 오래된 데이터까지 쓰나, 어디서부터 훈련하나입니다.

앞에서 정답이라고 부른 것을 레이블이라고 합니다. 모델이 맞혀야 하는 답입니다. 도착 시간 모델의 레이블은 배달에 걸린 시간입니다. 배달이 끝나면 저절로 생기므로 최근 주문 기록에 바로 붙일 수 있습니다.

다음은 기간입니다. 최근 몇 달만 쓰는 방식이 흔합니다. 기간의 길이를 미리 정해 둡니다. 새 데이터가 들어오면 가장 오래된 데이터를 밀어냅니다. 이런 방식을 슬라이딩 윈도라고 부릅니다.

기간이 짧으면 지금의 분포를 가깝게 따라갑니다. 대신 설 연휴 주문 몰림처럼 해마다 돌아오는 패턴을 잊습니다. 석 달 치만 본 모델은 작년 설 연휴를 본 적이 없습니다. 기간을 늘리면 그 반대가 됩니다. 훈련에 드는 시간도 늘어납니다.

마지막은 출발점입니다. 하나는 빈 모델에서 새 훈련 데이터로 처음부터 훈련하는 방식입니다. 다른 하나는 지금 모델의 파라미터에서 출발해 최근 데이터만 더 보여 주는 방식입니다. 이 편은 앞의 것을 처음부터 훈련, 뒤의 것을 이어서 훈련이라고 부릅니다.

이어서 훈련하면 시간과 계산이 적게 듭니다. 대가는 옛 데이터에서 익힌 것을 덮어쓰기 쉽다는 점입니다. 새 데이터에 맞추느라 앞서 배운 것을 크게 잃는 현상을 파국적 망각이라고 합니다.

처음부터 훈련하면 이 걱정은 덜합니다. 대신 매번 비용을 다 치릅니다.

새 모델을 믿기 전에

새로 훈련했다고 새 모델이 더 낫다는 보장은 없습니다. 모은 데이터에 잘못된 레이블이 섞였을 수 있습니다. 훈련 설정이 어긋났을 수도 있습니다.

그래서 바꿔 끼우기 전에 검증을 거칩니다. 훈련에 안 쓴 최근 데이터를 떼어 두고 새 모델과 옛 모델이 같은 문제를 풀게 합니다. 새 모델의 오차가 더 작을 때만 다음으로 넘어갑니다.

검증을 통과해도 모든 요청을 한 번에 넘기지 않는 경우가 많습니다. 요청의 일부만 새 모델로 보내며 지켜보는 방식을 카나리 배포라고 합니다. 검증 데이터에서 안 보이던 문제가 드러나도 피해가 일부 요청에 그칩니다.

문제가 보이면 옛 모델로 되돌립니다. 이 일을 롤백이라고 부릅니다. 롤백하려면 옛 모델이 있어야 하므로 옛 모델 파일을 지우지 않고 남겨 둡니다.

사람 손을 덜 타는 재학습

바퀴를 사람이 매번 손으로 돌리면 자주 돌리기 어렵습니다. 데이터 모으기부터 바꿔 끼우기까지를 정해진 순서로 이어 둔 프로그램을 만들어 두면 이 수고가 줍니다. 이렇게 여러 처리 단계를 차례로 이어 둔 구조가 파이프라인입니다.

재학습 파이프라인을 트리거에 묶어 사람 손 없이 돌게 하는 일을 지속 훈련이라고 부르기도 합니다. 트리거가 켜지면 파이프라인이 데이터 모으기부터 검증까지 혼자 마칩니다.

MLOps(Machine Learning Operations, 머신러닝 운영)는 훈련, 서빙, 지켜보기, 재학습을 한 바퀴로 굴리는 운영 방식 전체입니다. 재학습은 그 바퀴의 한 부분입니다.

자동으로 돌면 잘못된 데이터도 자동으로 들어옵니다. 앞단 시스템이 거리를 미터 대신 킬로미터로 보내기 시작하면, 그 데이터로 훈련한 모델은 엉뚱한 규칙을 익힙니다. 그래서 훈련 전에 데이터부터 검사합니다. 값의 범위나 빈 칸의 비율이 평소와 크게 다르면 그 회차를 멈춥니다.

재학습이 키우는 쏠림

모델의 답이 다음 훈련 데이터를 바꾸는 경우가 있습니다. 도착 시간 모델에는 드물지만 상품 추천 모델에서는 흔합니다. 추천 모델은 자기가 보여 준 상품의 클릭만 기록으로 남깁니다. 보여 주지 않은 상품은 클릭될 기회가 없습니다.

이 기록으로 재학습하면 모델은 원래 추천하던 상품을 더 좋아하게 됩니다. 이렇게 모델의 출력이 다음 입력으로 돌아와 쏠림을 키우는 현상을 피드백 루프라고 부릅니다. 재학습을 자주 할수록 이 고리가 빨리 돕니다.

막는 방법의 하나는 일부 요청에 모델과 무관하게 고른 상품을 섞어 보여 주는 것입니다. 그 반응까지 모으면 모델이 안 보여 주던 상품의 기록도 쌓입니다.

이웃한 학습 방식과 가르기

모델을 새 데이터에 맞추는 방법은 재학습 말고도 있습니다. 가르는 기준은 둘입니다. 언제 얼마나 자주 고치나, 그리고 같은 일을 계속하나입니다.

방법 언제 고치나 하는 일 쓰는 때
재학습 데이터를 모아 두었다가 트리거마다 같은 일 분포 이동을 따라잡을 때
온라인 학습 데이터가 한 건 들어올 때마다 같은 일 데이터가 쉼 없이 흘러들 때
미세 조정 새 일에 맞출 때 대개 한 번 새 일이나 좁은 분야 이미 훈련된 모델을 내 데이터에 맞출 때

온라인 학습은 데이터가 들어올 때마다 파라미터를 조금씩 고칩니다. 재학습은 데이터를 묶음으로 모았다가 한꺼번에 훈련합니다. 둘 다 같은 일을 하는 모델을 지금에 맞춘다는 점은 같습니다.

미세 조정은 다른 데이터로 이미 훈련된 모델을 가져와 새 일이나 좁은 분야에 맞게 조금 더 훈련합니다. 실무에서는 이것도 재학습이라고 부르는 경우가 많습니다.

재학습과 미세 조정을 가르는 기준은 훈련을 어디서 시작하느냐가 아닙니다. 재학습이 새로 만드는 것은 결과물인 새 모델입니다. 앞에서 본 이어서 훈련도 재학습에 듭니다.

기준은 같은 일을 같은 서비스에서 계속 쌓이는 데이터로 이어 가느냐입니다. 도착 시간 모델을 최근 주문 기록으로 다시 훈련하면 이어서 훈련이어도 재학습입니다. 다른 일에 쓰던 모델을 가져와 내 일에 맞추면 미세 조정입니다.

관련 항목

재학습이 따라잡으려는 변화

분포 이동 · 데이터 드리프트 · 개념 드리프트 · 공변량 이동 · 레이블 이동

재학습 한 바퀴가 거치는 단계

데이터 수집 · 레이블링 · 데이터 검증 · 훈련 · 모델 검증 · 모델 배포 · 모델 모니터링

재학습을 시작하는 트리거와 지표

트리거 · 모니터링 · 평균 절대 오차 · 레이블 지연 · 모집단 안정성 지수 · KL 발산

재학습한 모델을 바꿔 끼우는 배포 방법

모델 레지스트리 · 카나리 배포 · 섀도 배포 · 블루-그린 배포 · 롤백

재학습을 자동으로 굴리는 운영 방식

MLOps · 지속 훈련 · 파이프라인 · 워크플로 오케스트레이션 · 모델 서빙 · 피처 스토어

재학습과 견주는 다른 학습 방식

온라인 학습 · 미세 조정 · 전이 학습 · 지속 학습 · 증분 학습

재학습이 부르는 위험

파국적 망각 · 피드백 루프 · 데이터 누수 · 과적합 · 훈련-서빙 스큐

재학습이 기대는 머신러닝 기초

머신러닝 · 모델 · 훈련 데이터 · 파라미터 · 추론 · 레이블 · 분포 · 슬라이딩 윈도

다른 이름: retraining · model retraining · 모델 재학습 · 재훈련 · 모델 재훈련