Выборка Томпсона для задачи о многоруком бандите

В этой статье мы рассмотрим выборку Томпсона, ее алгоритм и реализацию. Также будет обсуждаться бета-распределение, используемое в алгоритме выборки Томпсона.

Проблема многорукого бандита в двух словах

Задача многорукого бандита — это классическая задача обучения с подкреплением, в которой игрок заходит в казино и ставит свои деньги на несколько игровых автоматов с одной рукой. Сначала он пытается исследовать машины, чтобы найти лучшую машину, дающую вознаграждение, и после некоторого начального раунда он использует машину, которая дает максимальные награды.

Томпсон Сэмплинг

Выборка Томпсона — это рандомизированный алгоритм, который наиболее эффективно используется для решения этой классической задачи о многоруком бандите. Он выполняет исследование, выбирая машину с лучшим средним значением выборки (сгенерированным из бета-распределения) среди других машин. Бета-распределение становится все более и более сконцентрированным вокруг эмпирического среднего по мере увеличения количества раундов азартных игр.

Если вы мало что поняли, просто помните, что основная идея состоит в том, чтобы выбрать машину в соответствии с вероятностью того, что она будет лучшей машиной, дающей вознаграждение.

Если вы уже знакомы с бета-версией, вы можете пропустить эту часть, в противном случае продолжайте.

Бета-распределение

Бета-распределение — это непрерывное распределение, которое определяется с точки зрения
тета θ, которая является функцией двух параметров a и b.

Математически
P(θ | a, b) = (θ ^(a-1)) *((1 — θ)^(b-1)) / B(a, b)

Здесь B(a, b) – константа нормализации, представляющая собой бета-функцию
от a и b. Этот знаменатель не является функцией переменной θ.
Он просто гарантирует, что распределение вероятностей интегрируется до 1.

Итак, мы можем сказать, что P(θ | a, b) ∝ θ ^(a-1) * (1-θ) ^ (b-1)где θ ∈ [0,1].

Как бета-распределение зависит от параметров a и b?

Случай 1: когда a = 0,5 и b = 0,5

P(θ | a, b) = (θ ^(a -1)) *((1 — θ)^(b-1)) / B( a, b )
=> P(θ | 0.5,0.5) θ ^(0.5–1) * (1-θ) ^ (0.5–1)
=> P(θ |0.5,0.5) θ ^ (-0.5) * (1-θ)^(-0.5)
=> P(θ |0.5,0.5) 1 / θ ^ (0.5) * (1-θ)^(0.5)

Мы можем ясно видеть, что для θ = 0 или 1 бета-распределение стремится к ∞ (бесконечность).

Случай 2: когда a = 0,5 и b = 1

P(θ | a, b) = (θ ^(a -1)) *((1 — θ)^(b-1)) / B( a, b )
=> P(θ | 0.5,1) θ ^(0.5–1) * (1-θ) ^ (1–1)
=> P(θ |0.5,1) θ ^ (-0.5) * 1
=> P(θ |0.5,1) 1 / θ ^ (0.5)

Мы можем ясно видеть, что если θ = 0, бета-распределение стремится к ∞ (бесконечность), а если тета = 1, бета-распределение пропорционально константе 1.

Случай 2: когда a = 1 и b = 1

P(θ | a, b) = (θ ^(a -1)) *((1 — θ)^(b-1)) / B( a, b )
=> P(θ | 1,1) θ ^(1–1) * (1-θ) ^ (1–1)
=> P(θ |1,1) 1 * 1
=> P(θ |1,1) 1

Мы можем ясно видеть, что для любого значения θ бета-распределение пропорционально константе 1.

Случай 4: когда a › 1,b › 1 и a = b

P(θ | a, b) = (θ ^(a-1)) *((1 — θ)^(b-1)) / B(a, b)
Распределение имеет максимальное значение 0,5. Даже если мы еще больше увеличим a и b еще
, то распределение будет ближе к 0,5.

Случай 5: когда a › 1,b › 1 и a != b

P(θ | a, b) = (θ ^(a-1)) *((1 — θ)^(b-1)) / B(a, b)
Нам не нужно увеличивать и a, и b. Если мы вычислим среднее
бета-распределение, то ожидаемое значение тета,

E[тета] = а / (а + b)

Итак, если мы увеличим b, то распределение сдвинется влево. Если мы увеличим
a, то распределение сдвинется вправо.

Алгоритм выборки Томпсона

Шаг 1: В каждом раунде n рассмотрим два числа для каждой машины m
→ Nᵢ¹(n) — количество раз, когда машина m получала вознаграждение 1 до раунда n
→ Nᵢ⁰(n) — сколько раз машина m получала вознаграждение от 0 до раунда n

Шаг 2: Для каждой машины m мы выбираем случайным образом из следующего распределения:
θᵢ(n) = β( Nᵢ¹(n) + 1, Nᵢ⁰(n) + 1)

Шаг 3: Выберите машину с наибольшим значением θᵢ(n).

Реализация алгоритма выборки Томпсона для решения проблемы многорукого бандита

Предположим, что в казино есть 5 игровых автоматов, и игрок приходит со 100 монетами, чтобы играть и максимизировать вознаграждение от автоматов.

Я использовал этот набор данных MultiArmedBandit.csv и следующий код:

Я получил следующую визуализацию:

Хорошо видно, что если игрок поставит свои деньги на Автомат 5, то он получит максимальное вознаграждение.

Как это произошло на самом деле?

Разбираемся шаг за шагом. Перед этим я хочу, чтобы вы открыли шаги алгоритма в другой вкладке.

  1. Метод __init__:
    В этом методе мы выполнили шаг 1 алгоритма и определили определенные атрибуты.
    self.__N → общее количество раундов
    self.__m → общее количество машин
    self.__machine_selected → список из 100 машин, выбранных по одной в каждом раунде
    self.__number_of_rewards_0→ количество раз, когда машина m получала вознаграждение 1 до раунда n.
    self.__number_of_rewards_1 →сколько раз машина m получила вознаграждение 1 до раунда n.
  2. Метод implement_thompson_sampling.
    В этом методе мы объединили шаги 2 и 3.

В строке 21 будет сгенерировано значение бета от 0 до 1. Это шаг 2.

В строке 22 мы выбираем машину с самым высоким значением бета, что является шагом 3.

Так реализуется сэмплинг Томпсона. Может быть несколько способов реализации. Не стесняйтесь поделиться, если вы решите другим способом.

Ссылки:

  1. https://www.udemy.com/course/machinelearning/learn/lecture/19875776#questions
  2. http://eurekastatistics.com/beta-distribution-pdf-grapher/
  3. https://web.stanford.edu/~bvr/pubs/TS_Tutorial.pdf
  4. https://www.youtube.com/watch?v=v1uUgTcInQk