추천시스템 공부를 하니 Contextual Bandit 이라는 용어가 자주 보인다. 강화학습과 비슷하지만, 또 미묘하게 다르다.
Contextual Bandit
한 문장으로 요약하자면, Contextual Bandit은 지금 이 순간 보이는 정보(context)를 보고, 여러 행동(action) 중 하나를 골라서, 그 결과(reward)를 최대화하려는 의사결정 문제라고 할 수 있다.
미래 여러 단계까지 고려하지 않는 것이 강화학습과의 핵심 차이다. 좀 더 깊게 얘기하자면, 강화학습은 내가 했던 행동(action)이 다음 상태(state)에 영향을 미치는데, Bandit에서는 영향을 주지 않는다고 가정한다.
핵심 용어들
Bandit
Bandit이라는 말은 원래 카지노 슬롯머신에서 왔다고 한다. 여러 개의 레버가 있고, 어떤 레버를 당기면 돈이 나오는지 모르는 상황인데, 어느 레버가 좋은지 모르기 때문에 시도(explore)와 활용(exploit) 사이에서 균형을 잡아야 한다.
유저가 넷플릭스에 접속했다고 해보자. 넷플릭스는 그 유저에게 어떤 영화를 노출해야 클릭할지 모른다. 오징어게임을 보여줄지, 진격의 거인을 보여줄지가 레버인 셈이고, 유저의 취향을 파악하기 위해서 여러 영화 중에서 일부를 실험적으로 노출하는 것이 Explore, 잘 먹히는 선택지를 보여주는 것은 Exploit이라고 볼 수 있다.
Contextual Bandit은 여기에 상황 정보(Context)가 추가된 버전이다.
Context
아까의 넷플릭스 비유를 들자면, 유저가 누구인지, 어떤 상태인지 등을 설명해주는 정보이다. 나이, 성별, 최근 시청 이력 같은 것들이 될 수 있을 것 같다.
Action
Context를 보고 알고리즘이 내리는 선택. 넷플릭스에서는 어떤 영화를 추천할지, 몇 개를 노출할지, 또 어떤 순서로 나열할지가 모두 액션이 될 수 있다.
Reward
선택(Action)을 내린 결과, 얼마나 잘했는지를 상징하는 것이다. 만약 유저에게 영화를 보여줬을 때, 클릭하면 1, 클릭이 없으면 0 이런 식으로 설계할 수 있을 것 같다. (물론 실제로는 시청시간이나 좋아요 같이 더 정교하게 설계하겠지만)
Policy (정책)
Policy는 어떤 Context가 들어왔을 때, 어떤 Action을 선택할지 결정하는 규칙이나 함수 같은 것을 의미한다. 수학적으로는
와 같이 분포의 형식으로 나타나고, Policy는 결국 우리가 최종적으로 훈련해서 배우고 싶은 대상이다.
그러면 좋은 정책이란 어떤 상황, 유저가 오더라도 높은 reward(시청시간, 클릭률)를 기대할 수 있는 전략이 되겠다.
Regret
Policy를 학습할 때Regret Minimization 이라는 방법을 많이 사용한다. 후회를 최소화한다는 것인데,, 무슨 말일까? 먼저 수식을 살펴보자.
Regret이란 상황, 문맥()이 주어졌을 때 이론적으로 가장 최선이었던 행동()을 했을 때의 보상()과, 현재 정책()이 선택한 행동의 보상 차이를 의미한다. 오.. 나름 직관적이다. 이 Regret을 최소화하는 방향으로 학습하면 결과적으로 우리 모델은 최적의 행동()을 선택하도록 수렴하게 된다고 한다.
Online vs Offline
온라인 밴딧은 알고리즘이 실시간으로 유저와 상호작용하면서 데이터를 만들어내는 방식이고,
오프라인 밴딧은 과거에 어떤 정책(Logging Policy)이 이미 유저에게 추천했던 기록, 데이터를 통해서 다음 Policy를 학습하거나 평가하는 설정이다.
금융, 의료 같은 도메인에서는 실험을 하기가 위험한 경우가 많고, 과거 로그에 의존해서 정책을 학습해야 한다. 이 때문에 Off-Policy Evaluation(OPE) 가 등장한다. 그래서 오프라인은 안전하긴 하지만, 관측된 데이터가 갖는 편향(bias) 때문에 정책을 잘 평가하고 좋은 정책을 찾는 것이 온라인에 비해 어렵다.