Chuyển đến nội dung

Hướng dẫn

Học tăng cường

Oloproof đánh giá một chính sách (policy) học tăng cường bằng cách chạy nó theo từng episode, hoặc từ log của chính sách mà nó sẽ thay thế. Hãy chạy nó khi bạn có thể; hãy dùng log khi kết quả chỉ xảy ra ngoài thế giới thực. Trang này là tài liệu tham chiếu cho cả hai, và bài hướng dẫn đi qua từng cách trên một ví dụ có thể chạy được.

Oloproof không lưu trữ, không đặt lại và không mô phỏng một môi trường, và nó không huấn luyện chính sách. Hệ thống của bạn chạy môi trường của chính nó, như mọi hệ thống mà Oloproof đánh giá đều chạy mã của chính nó.

Episode

Một tác vụ là một trường hợp. Một episode là một phép đo của tác vụ đó: hệ thống của bạn chạy chính sách trong môi trường của nó và ghi lại episode bằng current_case().rl_episode(...), dưới dạng một artifact rl_episode/v1.

TrườngKiểuÝ nghĩa
stepsdanh sách các bước, index từ 1reward (phần thưởng) của mỗi bước, cost (chi phí ràng buộc) của nó (mặc định 0), và tùy chọn action và observation
successtrue, false hoặc vắng mặtPhán quyết của chính môi trường về episode
truncatedboolean, mặc định falseGiới hạn số bước đã kết thúc episode trước một trạng thái kết thúc
horizonsố nguyên, tùy chọnGiới hạn số bước; episode không được dài hơn

Bản ghi chứa mọi bước của episode. Một episode bị cắt ngắn là episode mà giao thức đánh giá định nghĩa là kết thúc tại giới hạn của nó, nên tổng phần thưởng (return) và chi phí của nó là đầy đủ, không phải cận dưới.

Hãy khai báo loại bản ghi mà hệ thống ghi lại, để một lần chạy có thể từ chối một bộ đánh giá cần một bản ghi mà hệ thống không bao giờ viết:

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

Bộ đánh giá episode

LoạiĐoTrường
episode_returnTổng phần thưởng, mỗi phần thưởng được nhân với discount theo từng bước, dưới dạng một điểm sốreturn_range (bắt buộc), discount (mặc định 1)
episode_successĐạt khi episode ghi success: true; bị thiếu khi nó không ghi gìkhông có
episode_cost_withinĐạt khi tổng chi phí của các bước tối đa là budgetbudget (bắt buộc)

return_range là khoảng giá trị mà mọi tổng phần thưởng đều nằm trong đó, chẳng hạn tệ nhất là 30 bước với -1 mỗi bước và tốt nhất là phần thưởng khi đến đích. Khoảng tin cậy trên một tổng phần thưởng trung bình chỉ đúng bên trong khoảng đó, nên một tổng phần thưởng nằm ngoài nó sẽ dừng lần chạy với mã thoát 2. Trong SDK, các lớp là EpisodeReturn, EpisodeSuccess và EpisodeCostWithin trong oloproof.evaluators.

Nhiều episode cho mỗi tác vụ

Đặt replicates: để chạy nhiều episode cho mọi tác vụ. current_case().replicate cho biết episode nào đang chạy (0 cho episode đầu tiên), và nó là một phần của khóa của lần thực thi được lưu, nên một môi trường lấy seed cho episode từ nó sẽ phát lại cùng một episode cho cùng một lần lặp, và lần chạy thứ hai sẽ tái sử dụng những gì nó đã lưu.

Tác vụ vẫn là đơn vị. Mỗi tiêu chí trở thành trung bình trên các tác vụ của trung bình riêng của từng tác vụ trên các episode của nó, và khoảng tin cậy đếm các tác vụ: năm episode của một tác vụ không phải là năm tác vụ độc lập.

Một tỷ lệ đạt trên các tác vụ được lặp lại đọc tỷ lệ episode đạt của mỗi tác vụ. Để hỏi thay vào đó liệu một tác vụ có đạt mọi lần hay không, hãy khai báo một chỉ số every_replicate:

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

Một tác vụ chỉ được tính khi tất cả các episode của nó đều đạt, nên mỗi tác vụ là một lần đạt hoặc không đạt và khoảng nhị thức chính xác được áp dụng. Với một episode cho mỗi tác vụ, nó bằng tỷ lệ đạt. Một tác vụ có một episode bị thiếu thì bị thiếu, kể cả khi một episode khác của nó đã không đạt.

So sánh hai chính sách

oloproof compare ghép cặp mỗi tác vụ với chính nó, mỗi phía có giá trị bằng trung bình của nó trên các episode. Chênh lệch của một tổng phần thưởng được hiển thị theo đơn vị riêng của tổng phần thưởng, chênh lệch của một tỷ lệ đạt theo điểm phần trăm. Hai lần chạy có thể chạy số episode khác nhau cho mỗi tác vụ, trừ với một chỉ số every_replicate: thành công ở cả năm trên năm episode và ở episode duy nhất là hai câu hỏi khác nhau, nên phép so sánh đó không được tính. Các phép so sánh phân vị và xếp hạng không được tính khi một trong hai lần chạy có nhiều episode cho mỗi tác vụ.

Đánh giá ngoài chính sách (off-policy)

Hãy dùng nó khi kết quả bạn quan tâm chỉ xảy ra ngoài thế giới thực (một ticket được giải quyết, một người dùng quay lại) và bạn chưa thể thử chính sách mới trên lưu lượng thật. Bằng chứng là một log các quyết định mà một chính sách cũ hơn đã đưa ra.

Mỗi trường hợp là một quyết định đã được ghi log:

{"id":"t001","input":{"topic":"technical","length":"short"},"expected":{"action":"small","logging_probabilities":{"small":0.7,"large":0.3},"reward":1}}
TrườngÝ nghĩa
inputNhững gì chính sách đã thấy khi nó quyết định
expected.actionHành động mà chính sách ghi log (logging policy) đã thực hiện
expected.logging_probabilitiesXác suất mà chính sách ghi log đã gán cho mọi hành động tại thời điểm đó, cộng lại bằng 1
expected.rewardNhững gì đã xảy ra sau đó, nằm trong reward_range; vắng mặt nếu nó không bao giờ đến

Hệ thống là chính sách mà bạn muốn đánh giá. Nó nhận input và trả về xác suất của chính nó cho mọi hành động dưới probabilities, hoặc dưới trường mà bạn nêu trong probabilities_field. Nó không bao giờ chạy một mô hình hay tác động đến thế giới thực. input chỉ chứa những gì chính sách ghi log đã thấy khi nó quyết định: không bao giờ chứa hành động đã được ghi log hay phần thưởng, những thứ mà chính sách đang được kiểm thử không được thấy. Một chính sách lấy mẫu lựa chọn của nó sẽ trả về các xác suất mà nó lấy mẫu từ đó, không phải hành động mà nó đã rút ra; mỗi quyết định được đánh giá lại từ đầu kể cả khi đầu vào của nó lặp lại. Các hành động được đặt tên đúng như log đặt tên: một hành động viết khác đi được tính là một hành động mà chính sách ghi log chưa bao giờ thực hiện.

LoạiƯớc lượng
off_policy_valuePhần thưởng trung bình của chính sách trên các quyết định giống những quyết định đã được ghi log
off_policy_improvementTrung bình đó trừ đi trung bình của chính chính sách ghi log

Cả hai đều nhận reward_range và propensity_floor, xác suất nhỏ nhất mà chính sách ghi log đã gán cho bất kỳ hành động nào mà chính sách mới có thể thực hiện. Hãy đặt nó theo cách chính sách ghi log đã được thiết kế (một tỷ lệ khám phá, một tỷ lệ tối thiểu), không bao giờ bằng cách thử các giá trị trên log. Mỗi quyết định đã ghi log được gán lại trọng số bằng xác suất của chính sách mới cho hành động đó chia cho xác suất của chính sách ghi log, và ngưỡng sàn này giới hạn trọng số đó: không có nó thì không khoảng tin cậy nào đúng. Trong SDK, các lớp là OffPolicyValue và OffPolicyImprovement.

Engine làm gì với một quyết định mà nó không thể đọc như đã cho:

Tình huốngKết quả
Các xác suất không cộng lại bằng 1, một hành động đã ghi log có xác suất 0, một phần thưởng nằm ngoài reward_rangeLần chạy dừng với mã thoát 2: một xác suất sai sẽ làm khoảng tin cậy sai mà không để lộ ra
Chính sách mới có thể thực hiện một hành động được ghi log với xác suất dưới ngưỡng sànQuyết định bị thiếu và được giới hạn ở mức xấu nhất
Phần thưởng vắng mặtQuyết định bị thiếu và được giới hạn ở mức xấu nhất

Câu trả lời giả định điều gì:

  • Các xác suất được ghi lại khi chính sách ghi log quyết định, và chúng là các xác suất mà nó đã dùng. Oloproof không bao giờ ước lượng chúng.
  • Phần thưởng của mỗi quyết định phụ thuộc vào đầu vào và hành động của chính nó, không phụ thuộc vào các quyết định khác.
  • Chính sách ghi log giữ nguyên các xác suất trong suốt khoảng thời gian của log.
  • Câu trả lời mô tả các quyết định giống những quyết định đã được ghi log, trong khoảng thời gian mà log bao phủ.

Khoảng tin cậy rộng khi ngưỡng sàn nhỏ: các quyết định cung cấp thông tin về một hành động hiếm khi được chọn là ít, và mỗi quyết định được tính nhiều lần. Một log dài hơn, và một chính sách ghi log khám phá nhiều hơn, sẽ thu hẹp nó.

Những gì chưa được xây dựng

  • Đánh giá ngoài chính sách trên một chuỗi quyết định, trong đó mỗi lựa chọn thay đổi những gì xảy ra tiếp theo.
  • Một log mà chính sách của nó đã thay đổi các xác suất khi nó học trong khoảng thời gian đó.
  • Các xác suất được ước lượng sau khi sự việc đã xảy ra.
  • Lưu trữ hoặc đặt lại môi trường và trình mô phỏng.

Tiếp theo