Обучение с подкреплением: как ИИ учится играть, не зная правил
Можно научить машину не показывая ей правильных ответов, а просто награждая за успех и наказывая за провал — как дрессируют собаку. Именно так нейросети осваивают игры, роботов и стратегии, до которых не додумались люди.
Здесь у модели нет учителя с ответами — есть только очки за хорошие ходы и штрафы за плохие, и из этого она сама выводит, как побеждать.
Обучение с подкреплением — это обучение методом проб, ошибок и наград. Не «вот правильный ответ», а «попробуй, и я скажу, стало лучше или хуже».
Чем это отличается от обычного обучения
В большинстве задач сети показывают примеры с ответами: вот фото — это кот. Но представьте, что нужно научить ИИ играть в шахматы или управлять роботом. Правильного хода в каждый момент никто не знает — есть только итог: выиграл или проиграл, дошёл или упал. Здесь работает другой подход. Модель действует, получает награду (число: хорошо или плохо) и постепенно понимает, какие действия ведут к успеху.
Словарь из трёх слов
| Агент | Тот, кто учится и принимает решения (наш ИИ) |
| Среда | Мир, в котором он действует (игра, лабиринт, дорога) |
| Награда | Сигнал от среды: насколько хорош был ход |
Цикл прост: агент смотрит на текущее состояние среды, совершает действие, среда меняется и выдаёт награду. Цель агента — выбрать такую стратегию (политику), чтобы суммарная награда за всю игру была максимальной.
Главная сложность — отложенная награда
В шахматах за блестящий ход в начале партии очков не дают — награда (победа) приходит через сорок ходов. Как понять, что именно тот ранний ход всё решил? Это центральная трудность. Алгоритмы учатся раздавать заслугу назад во времени: если партия выиграна, ходы, которые к ней привели, чуть повышаются в ценности. Так агент постепенно начинает ценить действия, чья выгода проявится лишь в будущем.
Разведка против добычи
Есть и фундаментальная дилемма. Допустим, агент нашёл ход, дающий немного очков. Стоит ли всегда его повторять (добыча известного) или иногда пробовать новое в надежде на лучшее (разведка)? Если только эксплуатировать находку — никогда не узнаешь, нет ли пути выгоднее. Если только исследовать — растеряешь очки на бесконечных экспериментах. Хорошие алгоритмы держат баланс: чаще делают лучшее известное, но иногда рискуют.
Простейший пример награды
import random
# два игровых автомата с разной щедростью
chances = {"A": 0.3, "B": 0.7}
value = {"A": 0.0, "B": 0.0} # оценка ценности, агент её ещё не знает
for step in range(2000):
arm = random.choice(["A", "B"]) # пробуем наугад (разведка)
reward = 1 if random.random() < chances[arm] else 0
value[arm] += 0.01 * (reward - value[arm]) # подтягиваем оценку к опыту
print({k: round(v, 2) for k, v in value.items()})
# оценки сходятся к ~0.3 и ~0.7 — агент сам нащупал, что B щедрееПочему это привело к громким победам
Именно обучение с подкреплением стоит за системами, которые обыграли чемпионов в го и в сложные видеоигры. Поразительно, что они находили ходы, считавшиеся у людей ошибочными, — а те оказывались гениальными. Причина в том, что агент не копировал людей: он играл сам с собой миллионы партий и выводил стратегию с чистого листа, не скованный человеческими предрассудками.
Не только игры
Тот же принцип управляет роботами, которые учатся ходить, настраивает рекомендации и помогает дообучать языковые модели по обратной связи от людей. Везде, где нет готовых правильных ответов, но есть понятие «лучше или хуже», обучение с подкреплением оказывается на месте. По сути это самый общий способ учиться — так же, методом проб и наград, осваиваем мир и мы сами.