Przejdź do treści

Przewodniki

Uczenie ze wzmocnieniem

Oloproof ewaluuje politykę uczenia ze wzmocnieniem, uruchamiając ją w epizodach, albo na podstawie logu polityki, którą miałaby zastąpić. Uruchamiaj ją, gdy to możliwe; korzystaj z logu, gdy wynik zdarza się tylko w świecie. Ta strona jest dokumentacją referencyjną obu sposobów, a samouczek przeprowadza przez każdy z nich na przykładzie do uruchomienia.

Oloproof nie hostuje, nie resetuje ani nie symuluje środowiska i nie trenuje polityk. Twój system uruchamia własne środowisko, tak jak każdy ewaluowany system uruchamia własny kod.

Epizody

Zadanie to przypadek. Epizod to jeden jego pomiar: Twój system uruchamia politykę w swoim środowisku i zapisuje epizod przez current_case().rl_episode(...) jako artefakt rl_episode/v1.

PoleTypZnaczenie
stepslista kroków, index od 1Dla każdego kroku reward, cost ograniczenia (domyślnie 0) oraz opcjonalnie action i observation
successprawda, fałsz lub brakWłasny werdykt środowiska o epizodzie
truncatedwartość logiczna, domyślnie fałszLimit kroków zakończył epizod przed stanem terminalnym
horizonliczba całkowita, opcjonalnieLimit kroków; epizod nie może być dłuższy

Rekord zawiera każdy krok epizodu. Epizod obcięty to taki, który protokół ewaluacji definiuje jako kończący się na swoim limicie, więc jego zwrot i koszt są kompletne, a nie są dolnymi ograniczeniami.

Zadeklaruj rodzaj, który zapisuje system, aby przebieg mógł odrzucić ewaluator wymagający rekordu, którego system nigdy nie zapisuje:

system:
  name: grid-agent
  callable: env:run_baseline
  records: [rl_episode/v1]

Ewaluatory epizodów

TypMierzyPola
episode_returnZwrot, w którym każda nagroda jest ważona przez discount na krok, jako ocenęreturn_range (wymagane), discount (domyślnie 1)
episode_successZaliczenie, gdy epizod zapisuje success: true; brakujący, gdy nie zapisuje żadnegobrak
episode_cost_withinZaliczenie, gdy koszty kroków sumują się do co najwyżej budgetbudget (wymagane)

return_range to zakres, w którym leży każdy zwrot, na przykład 30 kroków po -1 w najgorszym razie i nagroda za cel w najlepszym. Przedział dla średniego zwrotu obowiązuje tylko wewnątrz niego, więc zwrot spoza niego zatrzymuje przebieg z kodem wyjścia 2. W SDK klasy to EpisodeReturn, EpisodeSuccess i EpisodeCostWithin w oloproof.evaluators.

Kilka epizodów na zadanie

Ustaw replicates:, aby uruchomić kilka epizodów każdego zadania. current_case().replicate mówi, który jest uruchamiany (0 dla pierwszego), i jest częścią klucza zapisanego wykonania, więc środowisko, które ustawia ziarno epizodu na jego podstawie, odtwarza ten sam epizod dla tego samego powtórzenia, a drugi przebieg ponownie używa tego, co zapisano.

Jednostką pozostaje zadanie. Każde kryterium staje się średnią po zadaniach z własnej średniej każdego zadania po jego epizodach, a przedział liczy zadania: pięć epizodów jednego zadania to nie pięć niezależnych zadań.

Odsetek zaliczeń dla zadań z powtórzeniami odczytuje udział zaliczonych epizodów każdego zadania. Aby zamiast tego zapytać, czy zadanie zalicza się za każdym razem, zadeklaruj metrykę every_replicate:

metrics:
  - {id: solved_every_time, type: every_replicate, criterion: episode_success}

Zadanie liczy się tylko wtedy, gdy wszystkie jego epizody zaliczyły, więc każde zadanie to jedno zaliczenie lub niezaliczenie i stosuje się dokładny przedział dwumianowy. Przy jednym epizodzie na zadanie równa się odsetkowi zaliczeń. Zadanie z brakującym epizodem jest brakujące, nawet gdy inny jego epizod nie zaliczył.

Porównanie dwóch polityk

oloproof compare paruje każde zadanie z nim samym, a każda strona jest warta swojej średniej po swoich epizodach. Różnica zwrotów jest pokazywana we własnej jednostce zwrotu, a różnica odsetków zaliczeń w punktach procentowych. Oba przebiegi mogą mieć różną liczbę epizodów na zadanie, z wyjątkiem metryki every_replicate: sukces w każdym z pięciu epizodów i w jedynym epizodzie to różne pytania, więc takie porównanie nie jest liczone. Porównania kwantylowe i rankingowe nie są liczone, gdy którykolwiek przebieg ma kilka epizodów na zadanie.

Ewaluacja off-policy

Użyj jej, gdy wynik, na którym Ci zależy, zdarza się tylko w świecie (rozwiązane zgłoszenie, użytkownik, który wrócił), a nie możesz jeszcze wypróbować nowej polityki na prawdziwym ruchu. Dowodem jest log decyzji, które podjęła starsza polityka.

Każdy przypadek to jedna zarejestrowana decyzja:

{"id":"t001","input":{"topic":"technical","length":"short"},"expected":{"action":"small","logging_probabilities":{"small":0.7,"large":0.3},"reward":1}}
PoleZnaczenie
inputCo widziała polityka, gdy podejmowała decyzję
expected.actionAkcja, którą podjęła polityka rejestrująca
expected.logging_probabilitiesPrawdopodobieństwo, jakie polityka rejestrująca nadała każdej akcji w tamtej chwili, sumujące się do 1
expected.rewardCo nastąpiło potem, w zakresie reward_range; brak, jeśli nigdy nie nadeszło

System to polityka, którą chcesz ocenić. Otrzymuje input i zwraca własne prawdopodobieństwo każdej akcji w probabilities lub w polu, które nazwiesz w probabilities_field. Nigdy nie uruchamia modelu ani nie dotyka świata. input zawiera tylko to, co widziała polityka rejestrująca, gdy podejmowała decyzję: nigdy zarejestrowanej akcji ani nagrody, których testowana polityka nie może widzieć. Polityka, która losuje swój wybór, zwraca prawdopodobieństwa, z których losuje, a nie wylosowaną akcję; każda decyzja jest oceniana od nowa, nawet gdy jej wejście się powtarza. Akcje są nazywane dokładnie tak, jak nazywa je log: akcja zapisana inaczej liczy się jako taka, której polityka rejestrująca nigdy nie podjęła.

TypSzacuje
off_policy_valueŚrednią nagrodę polityki na decyzjach podobnych do zarejestrowanych
off_policy_improvementTę średnią minus własną średnią polityki rejestrującej

Oba przyjmują reward_range i propensity_floor, najmniejsze prawdopodobieństwo, jakie polityka rejestrująca nadała dowolnej akcji, którą może podjąć nowa polityka. Ustaw je na podstawie tego, jak zaprojektowano politykę rejestrującą (współczynnik eksploracji, minimalny udział), nigdy przez próbowanie wartości na logu. Każda zarejestrowana decyzja jest przeważana przez prawdopodobieństwo jej akcji według nowej polityki podzielone przez prawdopodobieństwo według polityki rejestrującej, a próg ogranicza tę wagę: bez niego żaden przedział nie obowiązuje. W SDK klasy to OffPolicyValue i OffPolicyImprovement.

Co silnik robi z decyzją, której nie może odczytać w podanej postaci:

SytuacjaWynik
Prawdopodobieństwa, które nie sumują się do 1, zarejestrowana akcja z prawdopodobieństwem 0, nagroda spoza reward_rangePrzebieg zatrzymuje się z kodem wyjścia 2: błędne prawdopodobieństwo uczyniłoby przedział błędnym, nie pokazując tego
Nowa polityka może podjąć akcję zarejestrowaną z prawdopodobieństwem poniżej proguDecyzja jest brakująca i ograniczana w najgorszym przypadku
Brak nagrodyDecyzja jest brakująca i ograniczana w najgorszym przypadku

Co zakłada odpowiedź:

  • Prawdopodobieństwa zostały zapisane, gdy polityka rejestrująca podejmowała decyzję, i są tymi, których użyła. Oloproof nigdy ich nie szacuje.
  • Nagroda każdej decyzji zależy od jej własnego wejścia i akcji, a nie od innych decyzji.
  • Polityka rejestrująca utrzymywała te same prawdopodobieństwa przez cały okres objęty logiem.
  • Odpowiedź opisuje decyzje podobne do zarejestrowanych, w okresie, który obejmuje log.

Przedział jest szeroki, gdy próg jest mały: decyzji, które informują o rzadko wybieranej akcji, jest niewiele, a każda liczy się wielokrotnie. Dłuższy log i polityka rejestrująca, która więcej eksploruje, go zawężają.

Czego nie zbudowano

  • Ewaluacji off-policy sekwencji decyzji, w której każdy wybór zmienia to, co następuje dalej.
  • Logu, którego polityka zmieniała swoje prawdopodobieństwa, ucząc się w trakcie objętego nim okresu.
  • Prawdopodobieństw szacowanych po fakcie.
  • Hostowania ani resetowania środowisk i symulatorów.

Co dalej