Машинное обучение
Введение в Reinforcement Learning
В 2016 году AlphaGo победил чемпиона мира по Go - игре, в которой возможных позиций больше, чем атомов во Вселенной. Ни один человек не программировал выигрышную стратегию. ИИ выучил её сам, сыграв миллионы партий против себя, через пробы и ошибки. Это reinforcement learning - обучение с подкреплением.
- **Робототехника** - роботы Boston Dynamics и дроны учатся ходить, бегать и летать через RL, адаптируясь к неровностям поверхности и порывам ветра без явного программирования каждого движения
- **RLHF для LLM** - ChatGPT, Claude и другие языковые модели используют Reinforcement Learning from Human Feedback: модель генерирует ответы, люди их оценивают, и RL-алгоритм (PPO) обучает модель давать лучшие ответы
- **Оптимизация дата-центров** - DeepMind применил RL для управления охлаждением серверов Google, снизив энергопотребление на 40%, что сэкономило миллионы долларов и тонны CO2
Предварительные знания
- Основы вероятности: математическое ожидание, условная вероятность, случайные величины
- Уверенность в работе с функциями и рекурсией, ведь уравнение Беллмана задано рекурсивно
- Нейросети на общем уровне: достаточно, чтобы понимать, как Deep RL аппроксимирует функции ценности
Долгий путь к обучению через вознаграждение
Обучение с подкреплением началось вовсе не с нейросетей. Его математический хребет заложил Ричард Беллман, который в 1957 году формализовал динамическое программирование и марковский процесс принятия решений (MDP), дав нам рекурсивное уравнение ценности, до сих пор носящее его имя. В том же году он ввёл выражение 'проклятие размерности' для объяснения, почему эти методы взрываются в больших пространствах состояний. В 1961 году Марвин Минский в работе 'Steps Toward Artificial Intelligence' связал воедино обучение методом проб и ошибок, распределение заслуг и разумное поведение, очертив задачи, которые RL будет решать десятилетиями. Современная область оформилась вокруг Ричарда Саттона и Эндрю Барто. Работа Саттона 1988 года о temporal-difference (TD) обучении показала, как агент может учиться из чистого опыта через бутстрэппинг, обновляя оценки на основе более поздних оценок, не дожидаясь финального исхода. Их учебник 1998 года 'Reinforcement Learning: An Introduction' (существенно переработанный в 2018) стал каноническим справочником области. Так что когда в 2016 году AlphaGo поразил мир, он опирался на теорию, которая создавалась почти шестьдесят лет.
Агент и среда
Reinforcement Learning (RL) - третья парадигма машинного обучения, после supervised и unsupervised learning. В supervised learning модель учится по размеченным примерам: "вот картинка кошки, вот - собаки". В unsupervised - ищет структуру в неразмеченных данных. В RL **агент** взаимодействует со **средой** (environment): принимает **действия** (actions), наблюдает **состояние** (state) среды и получает **награды** (rewards). Цель агента - научиться действовать так, чтобы **суммарная награда за всю игру** была максимальной.
Формально взаимодействие агента и среды описывается **Марковским процессом принятия решений** (Markov Decision Process, MDP). MDP определяется набором (S, A, P, R, gamma), где S - множество состояний, A - множество действий, P(s'|s, a) - вероятность перехода в состояние s' при действии a в состоянии s, R(s, a) - функция награды, gamma - коэффициент дисконтирования. **Марковское свойство** означает, что будущее зависит только от текущего состояния, а не от всей истории: P(s_{t+1} | s_t, a_t) - полная информация для предсказания.
На практике RL-среды реализуются через библиотеку **Gymnasium** (ранее OpenAI Gym). Gymnasium предоставляет единый интерфейс для сотен сред: от простых задач (CartPole - удержи палку вертикально, FrozenLake - пройди по льду) до сложных (Atari-игры, робототехника в MuJoCo). Интерфейс прост: `env.reset()` инициализирует среду и возвращает начальное состояние, `env.step(action)` выполняет действие и возвращает новое состояние, награду и флаг завершения.
**Ключевые отличия RL от Supervised Learning:** - **Нет учителя.** Агент не получает правильных ответов. Он получает только числовую награду и сам должен понять, какие действия к ней привели. - **Отложенная награда.** Действие может дать награду через 100 шагов. Шахматный ход в дебюте может определить исход партии через 50 ходов. - **Последовательные решения.** Текущее действие влияет на будущие состояния. В supervised learning примеры независимы. - **Дилемма exploration vs exploitation.** Агент должен балансировать между исследованием новых действий (exploration) и использованием уже известных хороших действий (exploitation).
В чём суть Марковского свойства в контексте MDP?
Награда и return
На каждом шаге агент получает **немедленную награду** (immediate reward) r_t - скалярное число, которое говорит, насколько хорошо текущее действие. Но агент оптимизирует не отдельную награду, а **суммарный return** (доход) G_t - накопленную награду от момента t до конца эпизода. Ключевая идея: будущие награды ценнее, если они ближе по времени. Для этого используется **коэффициент дисконтирования gamma** (0 <= gamma <= 1).
Зачем дисконтировать? Три причины. **Неопределённость:** будущее менее предсказуемо - награда через 100 шагов может и не случиться. **Математическая корректность:** без дисконтирования (gamma=1) бесконечная сумма наград может расходиться. **Предпочтение настоящего:** награда сейчас объективно ценнее, потому что агент может её использовать раньше. Удобное рекурсивное свойство: G_t = r_t + gamma * G_{t+1}. Это позволяет вычислять return пошагово, не дожидаясь конца эпизода.
Проектирование функции награды - **reward shaping** - одна из самых сложных частей RL. Награды бывают **dense** (на каждом шаге) и **sparse** (только в конце или при достижении цели). Dense rewards облегчают обучение: агент постоянно получает обратную связь. Sparse rewards ближе к реальным задачам, но агент долго блуждает вслепую, пока случайно не достигнет цели. Пример: в шахматах sparse reward (+1 за победу, -1 за поражение) даёт сигнал только в конце партии из 80 ходов.
**Типичные значения gamma:** - **gamma = 0** - агент полностью жадный, оптимизирует только немедленную награду r_t. Не планирует вперёд. - **gamma = 0.9** - стандартный выбор для задач с коротким горизонтом (десятки шагов). Награда через 10 шагов = 0.35 от текущей. - **gamma = 0.99** - для задач с длинным горизонтом (сотни шагов). Награда через 100 шагов = 0.37 от текущей. Используется в Atari-играх. - **gamma = 0.999** - для очень длинных эпизодов (тысячи шагов). Обучение стабильнее, но медленнее. - **gamma = 1** - нет дисконтирования. Работает только если эпизоды всегда конечны (иначе G_t может быть бесконечным).
Эпизод длится 4 шага с наградами [0, 0, 5, 0]. При gamma = 0.5, чему равен return G_0 (с начала эпизода)?
Политика (Policy)
**Политика (policy)** - это стратегия агента, правило, по которому он выбирает действия. Формально, политика - это отображение из состояний в действия. Различают два типа: **детерминированная** политика a = mu(s) всегда выбирает одно действие в данном состоянии, а **стохастическая** политика pi(a|s) задаёт распределение вероятностей по действиям. Цель RL - найти **оптимальную политику** pi*, которая максимизирует ожидаемый суммарный return.
Главная дилемма RL - **exploration vs exploitation**. Exploitation - использовать лучшее известное действие для максимизации награды прямо сейчас. Exploration - пробовать новые действия, которые могут привести к ещё большей награде в будущем. Если агент только эксплуатирует, он застрянет на локально хорошей стратегии, не обнаружив глобально лучшую. Если только исследует, он никогда не воспользуется найденными знаниями.
**Epsilon-greedy** - простейшая стратегия балансировки exploration и exploitation. С вероятностью (1-epsilon) агент выбирает лучшее известное действие (exploitation), а с вероятностью epsilon - случайное действие (exploration). Типичные значения: epsilon = 0.1 (10% exploration). Часто epsilon **уменьшают** со временем: в начале обучения epsilon = 1.0 (чистое исследование), постепенно снижается до epsilon = 0.01 (почти чистая эксплуатация). Так агент сначала изучает среду, а потом использует знания.
**Softmax exploration - альтернатива epsilon-greedy:** Вместо выбора случайного действия с фиксированной вероятностью, softmax назначает каждому действию вероятность пропорционально его ценности: pi(a|s) = exp(Q(s,a) / tau) / SUM_b exp(Q(s,b) / tau) - **tau (температура) высокая** - все действия почти равновероятны (exploration) - **tau низкая** - лучшее действие доминирует (exploitation) - **tau -> 0** - вырождается в greedy (всегда лучшее действие) Преимущество перед epsilon-greedy: softmax учитывает *насколько* одно действие лучше другого. Epsilon-greedy выбирает случайное действие равномерно, даже если одно из них явно плохое.
В табличных методах (когда состояний и действий немного) политика хранится как таблица: для каждого состояния - вероятности действий. В реальных задачах состояний слишком много (Atari - 256^(210*160*3) пикселей), поэтому политику аппроксимируют нейросетью: pi_theta(a|s), где theta - веса сети. Это называется **policy-based** методом. Альтернатива - **value-based** метод, где политика выводится из функции ценности (о которой далее).
Агент использует epsilon-greedy с epsilon = 0.2. У него 5 возможных действий, и по его оценке действие #3 - лучшее. С какой вероятностью агент выберет действие #3?
Функция ценности
**Функция ценности состояния** V_pi(s) - ожидаемый return, если агент стартует из состояния s и следует политике pi. Формально: V_pi(s) = E_pi[G_t | s_t = s]. Она отвечает на вопрос: "насколько хорошо находиться в этом состоянии?". Высокое V(s) означает, что из этого состояния агент ожидает получить много наград в будущем. **Q-функция** (action-value function) Q_pi(s, a) - ожидаемый return, если агент в состоянии s выполнит действие a и далее будет следовать политике pi.
Центральная формула RL - **уравнение Беллмана** - связывает ценность текущего состояния с ценностями следующих состояний. Для V: V_pi(s) = SUM_a pi(a|s) * SUM_{s'} P(s'|s,a) * [R(s,a) + gamma * V_pi(s')]. Интуитивно: ценность состояния = ожидаемая немедленная награда + дисконтированная ценность следующего состояния. Это рекурсивное определение: V выражается через V. Уравнение Беллмана - основа для вычисления V и Q через динамическое программирование.
Существует два классических алгоритма на основе уравнения Беллмана. **Value Iteration** итеративно обновляет V(s) для всех состояний, пока значения не сойдутся. Затем из V* извлекается оптимальная политика: pi*(s) = argmax_a [R(s,a) + gamma * V*(s')]. **Policy Iteration** чередует два шага: 1. policy evaluation - вычисление V_pi для текущей политики 2. policy improvement - обновление политики жадно по V_pi. Policy Iteration сходится за меньшее число итераций, но каждая итерация дороже.
**Value Iteration vs Policy Iteration:** - **Value Iteration:** обновляет V на каждой итерации, пока не сойдётся. Каждая итерация - O(|S|^2 * |A|). Может потребовать сотни итераций, но каждая быстрая. - **Policy Iteration:** на каждой итерации полностью вычисляет V_pi (решая систему |S| линейных уравнений), затем улучшает политику. Обычно сходится за 3-10 итераций, но каждая дороже. - Оба требуют знания модели среды (P и R) - это **model-based** подход. - Когда модель неизвестна (агент не знает P и R, а может только взаимодействовать со средой) - нужны **model-free** методы: Q-learning, SARSA, Policy Gradient. Их изучим в следующих уроках.
Функция ценности - мост между задачей RL и её решением. Зная оптимальную Q*(s,a), оптимальная политика выводится напрямую: всегда выбирай действие с максимальным Q*. Поэтому большинство алгоритмов RL (Q-learning, DQN, DDPG) фокусируются на *оценке* функции ценности. Современные методы используют нейросети для аппроксимации Q(s,a) - это **Deep RL**, который позволил решить Atari-игры, обыграть чемпионов в Go и научить роботов ходить.
Reinforcement Learning - это когда модель играет в компьютерные игры
Игры - лишь удобный тестовый полигон. RL используется в робототехнике (управление роботами и беспилотниками), рекомендательных системах, оптимизации портфелей, управлении трафиком, системах охлаждения дата-центров (Google снизил энергопотребление на 40%), и RLHF для обучения LLM (ChatGPT, Claude)
Игры стали иконой RL благодаря ярким достижениям: Atari (DQN), Go (AlphaGo), StarCraft (AlphaStar), Dota 2 (OpenAI Five). Но это лишь benchmarks - среды с чётким reward, быстрой симуляцией и понятными правилами, идеальные для тестирования алгоритмов. В реальности RL применяется везде, где есть последовательное принятие решений с обратной связью: от управления плазмой в термоядерных реакторах (DeepMind) до оптимизации компиляторов (MLIR).
Итоги
- **Агент и среда:** RL строится на цикле взаимодействия - агент наблюдает состояние, выполняет действие, получает награду, среда переходит в новое состояние. MDP формализует это через (S, A, P, R, gamma) с Марковским свойством
- **Return и дисконтирование:** агент максимизирует не мгновенную награду, а дисконтированный return G_t = r_t + gamma*r_{t+1} + gamma^2*r_{t+2}... Gamma определяет, насколько далеко агент "смотрит" в будущее. Reward shaping - проектирование наград - критически влияет на успех обучения
- **Политика:** стратегия агента pi(a|s) - отображение состояний в действия. Epsilon-greedy и softmax балансируют exploration (поиск нового) и exploitation (использование известного). Без exploration агент застрянет на локальном оптимуме
- **Функция ценности и уравнение Беллмана:** V(s) и Q(s,a) оценивают ожидаемый return, а уравнение Беллмана связывает ценности соседних состояний рекурсивно. Зная Q* - оптимальную Q-функцию - агент просто выбирает argmax, как AlphaGo выбирал ходы, обыгравшие чемпиона мира
Связанные темы
Reinforcement Learning открывает целое направление алгоритмов для обучения через взаимодействие со средой:
- Q-Learning — Первый model-free алгоритм RL: учит Q(s,a) без знания модели среды, используя уравнение Беллмана и epsilon-greedy exploration. Табличный Q-learning для небольших сред, Deep Q-Network (DQN) - для сложных задач с нейросетевой аппроксимацией
- Policy Gradient — Альтернативный подход: вместо оценки Q-функции напрямую оптимизирует параметры политики pi_theta(a|s) через градиентный подъём. REINFORCE, Actor-Critic и PPO - ключевые алгоритмы, используемые в RLHF для обучения LLM
Вопросы для размышления
- Почему exploration необходим для нахождения оптимальной политики? Представьте, что агент в лабиринте нашёл путь с наградой +5. Как без exploration он узнает о пути с наградой +100 через другой коридор?
- Как выбор gamma влияет на поведение агента? В каких задачах нужен gamma близкий к 1 (шахматы, инвестиции), а в каких подойдёт gamma = 0.5 (игра с быстрым feedback)?
- Reward shaping может ускорить обучение, но неправильно спроектированная награда ведёт к нежелательному поведению. Как бы вы спроектировали reward для робота-уборщика? Какие подводные камни возможны?
Связанные уроки
- ml-47-model-monitoring — Продолжает последовательность курса
- ml-49-q-learning — Value-методы строятся на основах RL
- ml-50-policy-gradient — Policy-методы строятся на основах RL
- prob-04-bayes — Переходы MDP - условные вероятности
- alg-21-dp — Уравнения Беллмана используют динамическое программирование
- aie-17-agent-fundamentals
- aie-19-multi-agent