가이드
강화 학습
Oloproof는 강화 학습 정책을 에피소드 단위로 실행하거나, 그 정책이 대체할 정책의 로그로 평가합니다. 실행할 수 있을 때는 실행하고, 결과가 현실 세계에서만 일어날 때는 로그를 사용하세요. 이 페이지는 두 가지 모두에 대한 참조이며, 튜토리얼은 실행 가능한 예제로 각각을 차례로 안내합니다.
Oloproof는 환경을 호스팅하거나 재설정하거나 시뮬레이션하지 않으며, 정책을 학습시키지도 않습니다. Oloproof가 평가하는 모든 시스템이 자신의 코드를 실행하듯, 여러분의 시스템이 자신의 환경을 실행합니다.
에피소드
작업 하나가 케이스 하나입니다. 에피소드는 그 케이스의 측정 한 번입니다. 여러분의 시스템이 자신의 환경에서 정책을 실행하고, current_case().rl_episode(...)로 에피소드를 rl_episode/v1 아티팩트로 기록합니다.
| 필드 | 타입 | 의미 |
|---|---|---|
| steps | 단계 리스트, index는 1부터 | 각 단계의 reward, 제약 cost(기본값 0), 그리고 선택적으로 action과 observation |
| success | true, false 또는 없음 | 에피소드에 대한 환경 자신의 판정 |
| truncated | 불리언, 기본값 false | 종료 상태에 이르기 전에 단계 한계가 에피소드를 끝냈음 |
| horizon | 정수, 선택 | 단계 한계. 에피소드는 이보다 길 수 없음 |
레코드는 에피소드의 모든 단계를 담습니다. 잘린 에피소드는 평가 프로토콜이 그 한계에서 끝난다고 정의한 에피소드이므로, 그 리턴과 비용은 하한이 아니라 완전한 값입니다.
시스템이 기록하는 종류를 선언하십시오. 그러면 시스템이 결코 쓰지 않는 레코드가 필요한 평가기를 실행이 거부할 수 있습니다.
system:
name: grid-agent
callable: env:run_baseline
records: [rl_episode/v1]에피소드 평가기
| 유형 | 측정하는 것 | 필드 |
|---|---|---|
| episode_return | 리턴, 즉 각 보상을 단계마다 discount로 가중한 값을 점수로 | return_range(필수), discount(기본값 1) |
| episode_success | 에피소드가 success: true를 기록하면 통과, 아무것도 기록하지 않으면 누락 | 없음 |
| episode_cost_within | 단계들의 비용 합이 budget 이하이면 통과 | budget(필수) |
return_range는 모든 리턴이 놓이는 범위입니다. 예를 들어 최악은 30단계 각각 -1, 최선은 목표 보상입니다. 평균 리턴의 구간은 그 범위 안에서만 성립하므로, 범위 밖의 리턴은 종료 코드 2로 실행을 멈춥니다. SDK에서 클래스는 oloproof.evaluators의 EpisodeReturn, EpisodeSuccess, EpisodeCostWithin입니다.
작업당 여러 에피소드
replicates:를 설정하면 모든 작업에서 여러 에피소드를 실행합니다. current_case().replicate는 어느 에피소드가 실행 중인지(첫 번째는 0)를 알려 주며, 저장된 실행 키의 일부입니다. 그래서 이 값으로 에피소드의 시드를 정하는 환경은 같은 반복 측정에 대해 같은 에피소드를 재현하고, 두 번째 실행은 저장된 것을 재사용합니다.
단위는 여전히 작업입니다. 각 기준은 각 작업의 에피소드에 대한 그 작업 자신의 평균을 작업들에 걸쳐 평균한 값이 되며, 구간은 작업을 셉니다. 한 작업의 에피소드 다섯 개는 독립된 작업 다섯 개가 아닙니다.
반복 측정한 작업에 대한 통과율은 각 작업에서 통과한 에피소드의 비율을 읽습니다. 대신 작업이 매번 통과하는지를 물으려면 every_replicate 지표를 선언하십시오.
metrics:
- {id: solved_every_time, type: every_replicate, criterion: episode_success}작업은 모든 에피소드가 통과했을 때만 셈에 들어가므로, 각 작업은 통과 또는 실패 하나가 되고 정확한 이항 구간이 적용됩니다. 작업당 에피소드가 하나이면 통과율과 같습니다. 누락된 에피소드가 있는 작업은, 다른 에피소드가 실패했더라도 누락입니다.
두 정책 비교하기
oloproof compare는 각 작업을 그 자신과 짝지으며, 각 쪽의 값은 그 에피소드들에 대한 평균입니다. 리턴의 차이는 리턴 자신의 단위로, 통과율의 차이는 퍼센트포인트로 표시됩니다. 두 실행은 작업당 에피소드 수가 달라도 되지만, every_replicate 지표는 예외입니다. 다섯 에피소드 모두에서 성공하는 것과 하나뿐인 에피소드에서 성공하는 것은 서로 다른 질문이므로, 그 비교는 계산되지 않습니다. 어느 한 실행이라도 작업당 에피소드가 여러 개이면 분위수와 순위 비교는 계산되지 않습니다.
오프 폴리시 평가
관심 있는 결과가 현실 세계에서만 일어나고(티켓이 해결됨, 사용자가 다시 찾아옴) 새 정책을 아직 실제 트래픽에서 시도할 수 없을 때 사용합니다. 증거는 이전 정책이 내린 결정의 로그입니다.
각 케이스는 기록된 결정 하나입니다.
{"id":"t001","input":{"topic":"technical","length":"short"},"expected":{"action":"small","logging_probabilities":{"small":0.7,"large":0.3},"reward":1}}| 필드 | 의미 |
|---|---|
| input | 결정할 때 정책이 본 것 |
| expected.action | 로깅 정책(logging policy)이 취한 행동 |
| expected.logging_probabilities | 그 순간 로깅 정책이 모든 행동에 준 확률, 합은 1 |
| expected.reward | 뒤따른 결과, reward_range 안의 값; 도착하지 않았다면 없음 |
시스템은 평가하려는 정책입니다. input을 받아 모든 행동에 대한 자신의 확률을 probabilities 아래, 또는 probabilities_field에 지정한 필드 아래에 반환합니다. 모델을 실행하거나 현실 세계에 손대는 일은 없습니다. input에는 로깅 정책이 결정할 때 본 것만 담습니다. 기록된 행동이나 보상은 절대 담지 않습니다. 테스트 대상 정책은 그것을 보아서는 안 됩니다. 선택을 샘플링하는 정책은 뽑은 행동이 아니라 샘플링의 바탕이 되는 확률을 반환합니다. 각 결정은 입력이 반복되더라도 새로 평가됩니다. 행동은 로그가 부르는 이름과 정확히 같게 부릅니다. 철자가 다른 행동은 로깅 정책이 한 번도 취하지 않은 행동으로 셉니다.
| 유형 | 추정하는 것 |
|---|---|
| off_policy_value | 기록된 것과 비슷한 결정에서 정책의 평균 보상 |
| off_policy_improvement | 그 평균에서 로깅 정책 자신의 평균을 뺀 값 |
둘 다 reward_range와 propensity_floor를 받습니다. propensity_floor는 새 정책이 취할 수 있는 행동에 로깅 정책이 준 확률 중 가장 작은 값입니다. 로깅 정책이 어떻게 설계되었는지(탐색 비율, 최소 비중)로 정하고, 로그에서 값을 시험해 보며 정하지 마십시오. 기록된 각 결정은 그 행동에 대한 새 정책의 확률을 로깅 정책의 확률로 나눈 값으로 다시 가중되며, 하한이 그 가중치를 제한합니다. 하한이 없으면 어떤 구간도 성립하지 않습니다. SDK에서 클래스는 OffPolicyValue와 OffPolicyImprovement입니다.
엔진이 주어진 그대로 읽을 수 없는 결정을 어떻게 처리하는지:
| 상황 | 결과 |
|---|---|
| 합이 1이 되지 않는 확률, 확률 0으로 기록된 행동, reward_range 밖의 보상 | 종료 코드 2로 실행이 멈춥니다. 잘못된 확률은 그것을 드러내지 않은 채 구간을 틀리게 만들기 때문입니다 |
| 새 정책이 하한보다 낮은 확률로 기록된 행동을 취할 수 있음 | 결정은 누락이 되고 최악의 값으로 경계 지어집니다 |
| 보상이 없음 | 결정은 누락이 되고 최악의 값으로 경계 지어집니다 |
답이 가정하는 것:
- 확률은 로깅 정책이 결정할 때 기록되었고, 그것이 실제로 사용한 확률입니다. Oloproof는 결코 그것을 추정하지 않습니다.
- 각 결정의 보상은 다른 결정이 아니라 그 결정 자신의 입력과 행동에 따라 달라집니다.
- 로깅 정책은 로그의 기간 동안 같은 확률을 유지했습니다.
- 답은 로그가 다루는 기간 동안의, 기록된 것과 비슷한 결정을 설명합니다.
하한이 작으면 구간이 넓습니다. 드물게 선택되는 행동에 대해 알려 주는 결정은 적고, 각각이 여러 번 셈에 들어가기 때문입니다. 더 긴 로그, 그리고 더 많이 탐색하는 로깅 정책이 구간을 좁힙니다.
구현되지 않은 것
- 각 선택이 다음에 일어날 일을 바꾸는, 일련의 결정에 대한 오프 폴리시 평가.
- 기간 중에 학습하면서 확률을 바꾼 정책의 로그.
- 사후에 추정한 확률.
- 환경과 시뮬레이터의 호스팅 또는 재설정.
다음 단계
- 튜토리얼: 강화 학습 정책 평가하기: 두 부분을 처음부터 끝까지 실행합니다.
- 스위트 작성하기: 반복 측정과 그 밖의 스위트 필드.
- 구성 참조: 이 평가기들의 모든 필드.