Многорукий бандит убирает состояния и оставляет один чистый конфликт: потратить показ на нынешнего лидера или проверить менее изученный вариант. Лучшее действие неизвестно, а каждое измерение уже влияет на результат.
Две кнопки новостной страницы
Редактор выбирает один из заголовков статьи. У варианта a есть неизвестная вероятность клика μa. После показа наблюдается Rt∈{0,1}. Если сначала провести равный эксперимент, а потом навсегда выбрать победителя, часть аудитории увидит слабый вариант. Если сразу показывать текущего лидера, случайный ранний успех может закрепить ошибку.
В стационарном K-руком бандите на каждом раунде t алгоритм выбирает At∈{1,…,K} и получает награду с математическим ожиданием μAt. Лучшее среднее
μ∗=amaxμa.
Потерю относительно всезнающего выбора измеряет накопленный regret:
RT=Tμ∗−Et=1∑TRt=a=1∑KΔaENa(T),
где Δa=μ∗−μa, а Na(T) — число выборов руки a. Последнее равенство показывает цену исследования: каждое обращение к неоптимальной руке в среднем стоит Δa.
Бандит проще MDP: нет состояния и последствий действия для динамики среды. Но он труднее обычного A/B-теста, потому что сбор данных адаптивен.
Верхняя полоса показывает выбранную руку на каждом раунде, точки — награды. Ниже идут накопленная награда алгоритма и линия идеального ожидаемого результата tμ∗. Вертикальный зазор равен реализации regret; раннее исследование создаёт зазор, но помогает выбрать лучшую руку позже.
Жадность с небольшой случайностью
ε-жадный алгоритм с вероятностью 1−ε выбирает руку с максимальным эмпирическим средним, а с вероятностью ε — случайную:
μa(t)=Na(t)∑s<tAs=aRs.
Он прост и полезен как baseline. При постоянном ε исследование никогда не прекращается, поэтому regret растёт линейно. Убывающее εt уменьшает лишние проверки, но расписание надо подбирать.
Первые выборы требуют правила: попробовать каждую руку хотя бы раз или задать оптимистичные начальные оценки. Последний вариант заставляет алгоритм проверять неопределённые действия, пока их средние не опустятся.
UCB: оптимизм с формулой
Upper Confidence Bound выбирает
At=argamax[μa(t)+cNa(t)logt].
Первое слагаемое — найденное качество, второе — бонус неопределённости. Редко выбранная рука получает большой бонус; по мере наблюдений он уменьшается. Логарифм времени заставляет иногда возвращаться к старым альтернативам.
Для ограниченных наград концентрационные неравенства объясняют форму корня. При подходящей настройке ожидаемое число выборов неоптимальной руки имеет порядок
ENa(T)=O(Δa2logT),
а её вклад в regret — O(logT/Δa). Близкие руки различить трудно: малый Δa требует много показов.
Для каждой руки точка показывает μa, вертикальный отрезок — бонус clogt/Na. У третьей руки среднее ниже, но верхняя граница выше остальных, поэтому следующий показ достаётся ей. Числа Na подписаны под осью.
Томпсоновское сэмплирование
Для кликов удобна модель Бернулли с beta-prior:
μa∼Beta(αa,βa).
После sa кликов и fa пропусков posterior:
μa∣D∼Beta(αa+sa,βa+fa).
На каждом раунде алгоритм сэмплирует μa из каждого posterior и выбирает максимальное. Неопределённая рука иногда рисует оптимистичное значение и получает показ; хорошо изученная слабая рука почти никогда.
Это probability matching: вероятность выбрать действие близка к апостериорной вероятности, что оно лучшее. Prior влияет особенно сильно в начале. Псевдосчёт Beta(1,1) равномерен, а Beta(100,100) уже выражает сильную уверенность около 0,5.
Связь с байесовским выводом здесь прямая, но корректность зависит от модели награды и стационарности.
Лаборатория бандита
Три автомата, один бюджет и накопленный regret
График шире экрана — листайте по горизонтали →
Загружается живая иллюстрация…
Зафиксируйте три близкие вероятности и сравните ε-greedy, UCB и Thompson sampling на одинаковых последовательностях потенциальных наград. Один запуск может ввести в заблуждение, поэтому смотрите медиану и диапазон regret по многим seed.
Затем в середине опыта поменяйте лучшую руку. Стационарные алгоритмы слишком доверяют старым данным. Скользящее окно или экспоненциальное забывание реагирует быстрее, но повышает шум. Это уже другая постановка: dynamic regret относительно меняющегося лидера.
Контекст: кому показать вариант
Один заголовок может лучше работать утром, другой — у постоянных читателей. Контекстный бандит наблюдает признаки xt до выбора и моделирует
E[Rt∣xt,At=a].
В LinUCB предполагают μa(x)=x⊤θa и добавляют неопределённость линейной модели. Контекст повышает персонализацию, но требует больше данных и создаёт риск дискриминации.
Журнал адаптивной политики смещён: популярные действия наблюдаются чаще, а награды альтернатив неизвестны. Для offline-оценки новой стратегии используют propensity pt=Pr(At=a∣xt) и inverse propensity weighting:
V(π)=T1t=1∑Tpt1{π(xt)=At}Rt.
Если старая политика почти никогда не выбирала нужное действие, веса огромны и оценка нестабильна. Логировать propensity необходимо во время эксперимента; восстановить их задним числом часто нельзя.
Столбцы показывают CTR вариантов A и B отдельно для новых и постоянных читателей. В общей смеси побеждает A, но внутри обеих групп — B: доли аудиторий при показах различались. Схема связывает контекстный выбор с парадоксом Симпсона.
Реальные логи и смещение
Open Bandit Dataset содержит логи рекомендательной политики интернет-магазина: контекст, выбранное действие, награду и вероятность выбора. Он создан именно для offline policy evaluation. Но даже хороший открытый набор не превращает оценку в реальный запуск: пользователи, интерфейс и каталог относятся к конкретному периоду.
При анализе сравнивайте:
среднюю награду и накопленный regret в симуляции;
дисперсию IPS-оценки;
долю контекстов, где новая политика не поддержана старой;
результат clipping больших весов и возникающее смещение;
качество по группам, а не только в среднем.
Мини-исследование: сколько стоит узнать победителя
Создайте две Bernoulli-руки со средними 0,2 и 0,2+Δ, где Δ∈{0,005;0,02;0,08}. Для каждого разрыва проведите 1000 запусков UCB на горизонтах от 102 до 105. Измерьте не только regret, но и вероятность, что к концу алгоритм чаще выбирает истинного лидера.
При малом Δ различие слабее случайного разброса на коротком горизонте. Алгоритм может потратить значительную долю бюджета на исследование и всё равно не получить уверенности. При большом разрыве несколько десятков наблюдений достаточно, и дальнейшие пробы слабой руки почти полностью становятся regret.
Добавьте режим fixed A/B: половина показов каждой руке, затем выбор лидера. Он хорошо идентифицирует разность, но не оптимизирует награду во время сбора. Bandit делает обратный обмен. Нанесите методы на плоскость «ошибка выбора финального лидера — накопленный regret». Универсального победителя нет: точка зависит от цели эксперимента.
Для связи с проверкой статистических гипотез постройте confidence sequence, действительную при адаптивной остановке, либо честно зафиксируйте горизонт заранее. Обычный p-value после многократного просмотра текущего лидера может оказаться слишком оптимистичным.
Добавьте стоимость показа: один вариант может приносить больше кликов, но чаще вызывать быстрый уход. Тогда reward задаётся вектором. Скаляризация R=click−λ⋅bounce меняет лидера при разных λ. Постройте Pareto frontier рук вместо скрытого выбора одного коэффициента.
Это связывает бандитов с многокритериальной оценкой моделей. Эксперимент не должен оптимизировать удобную мгновенную метрику, если решение принимается по более долгому результату.
Индекс и горизонт
В классическом дисконтированном бандите индекс Гиттинса присваивает каждой независимой руке число, зависящее от её состояния posterior и горизонта. Выбирается рука с наибольшим индексом. Теорема замечательна: многомерная задача распадается на отдельные индексы. Но предпосылки строгие, и в контекстных или меняющихся средах готовый индекс не переносится автоматически.
Главный урок проще конкретного алгоритма. Исследование нужно ровно потому, что данные появляются после действия. Чем меньше разрыв между руками и короче горизонт, тем дороже выяснять победителя. Чем быстрее среда меняется, тем опаснее копить старую уверенность.