모아둔 데이터로 한 번에 학습을 끝내고, 완성된 모델을 배포해 쓰는 방식이다. batch learning 이라고도 한다. 새 데이터가 쌓이면 전체를 다시 학습시켜 모델을 교체한다.
반대는 online learning 으로, 데이터가 들어올 때마다 모델을 조금씩 갱신한다.
| offline | online | |
|---|---|---|
| 갱신 시점 | 주기적으로 전체 재학습 | 데이터가 들어올 때마다 |
| 학습 데이터 | 고정된 데이터셋 | 흐르는 스트림 |
| 운영 난이도 | 낮다. 학습과 서빙이 분리된다 | 높다. 갱신 파이프라인이 항상 돌아야 한다 |
| 변화 대응 | 재학습 주기만큼 늦다 | 빠르다 |
왜 대부분 offline 인가
학습과 서빙이 분리되어 있으면 다루기가 훨씬 쉽다. 배포 전에 검증셋으로 성능을 재보고, 문제가 있으면 이전 모델로 되돌릴 수 있다. 재현도 가능하다 — 같은 데이터와 같은 코드로 같은 모델이 나온다.
online learning 은 이 안전장치가 약하다. 나쁜 데이터가 들어오면 모델이 즉시 오염되고, 어느 시점의 모델이 어떤 데이터로 만들어졌는지 되짚기 어렵다.
추천 시스템에서의 한계
POI recommendation 을 포함한 추천 모델 대부분이 offline 으로 학습된다. 사용자-아이템 상호작용 로그를 모아 주기적으로 재학습하는 구조다.
여기서 두 가지 문제가 따라온다.
변화를 늦게 따라간다. 사용자 관심과 아이템 인기는 non-stationary 한데, 재학습 주기가 하루라면 그 사이의 변화는 반영되지 않는다.
자기가 만든 데이터로 학습한다. 로그는 지금 서비스 중인 모델이 추천한 결과에 대한 반응이다. 추천되지 않은 아이템에는 반응이 쌓이지 않으므로, 다음 모델도 같은 아이템을 계속 추천하는 쪽으로 굳는다. 로그가 무작위 노출에서 나온 것이 아니라는 이 편향을 보정하려고 IPS 같은 기법을 쓴다.
절충안으로 무거운 학습은 offline 으로 주기적으로 돌리고, 최근 행동을 반영하는 가벼운 부분만 실시간으로 갱신하는 구조를 많이 쓴다.