Митасов Андрей Павлович : другие произведения.

Металоция неведомого. Модуль Р. Роботы

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками
 Ваша оценка:
  • Аннотация:
    Выжимка информации из Инета по "обучению с подкреплением".
    Предварительный анализ.
    Крайнее изменение 09.06.2024

  
  "... И все же программный конструкт, в отличие от слов поэта,
  реален в том смысле, что он движется и работает,
  производя видимые результаты, отличные от него самого.
  Он печатает результаты, рисует картинки, издает звуки,
  двигает манипуляторами.
  В наше время волшебство мифов и легенд стало реальностью.
  Стоит набрать правильное заклинание на клавиатуре,
  и экран дисплея оживает,
  показывая вещи, которых никогда не было
  и не могло быть."
  
  Фредерик Брукс - "Мифический человеко-месяц".
  
  Оглавление:
   Вместо предисловия.
   Введение в "обучение с подкреплением".
   Еще одно введение в "обучение с подкреплением".
   Терминология "обучения с подкреплением".
   "Обучение с подкреплением" для "чайников".
   Проблемы обучения с подкреплением.
   Классическое изложение обучения с подкреплением.
   Комментарии Bing к "краеугольным постулатам" RL.
   Немного информации о лидере в области обучении AI-агентов играм.
   "Конституция роботов" и констатация реальной ситуации.
   ИИ-системы осваивают классическую геометрию.
   На пути к ИИ общего назначения - взгляд пятилетней давности.
   ROS - Robot Operating System.
   Обучение в воображении.
   Метод Policy Gradient для "чайников".
   Model-Based алгоритм для "чайников".
   Обучение в воображении для настоящих "героев-отморозков".
   Немного о будущем робототехники.
   Следующий раунд вопросов к Copilot.
   Обучение с подкреплением" в больших языковых системах.
   И снова о "классическом образовании" в RL.
   Практические проблемы уравнения Беллмана.
  
  Иллюстрации:
   Когг "Bing Общительный и Любопытный" от "Модели Кандинский 2.1".
   Когг "Bing Общительный и Любопытный" от "Модели Кандинский 2.2".
   Когг "Bing Общительный и Любопытный" от "Модели Кандинский 3.0".
   "Иерархическое обучение" от Copilot.
   Тральщик "Наставник" от "Модели Kandinsky 3.1".
   "Реализация чистой reward function" от Copilot.
   Каравелла "Copilot" от "Модели Kandinsky 3.1".
  
  
  =========
  
  07.12.2023 12:29
  
  Вместо предисловия.
  В оглавление.
  
  Прошедший 2023 год можно смело называть годом
  больших языковых моделей (LLM) и мультимодальных моделей (MMLM).
  В основе большинства успешных LLM лежит технология трансформеров
  и обучение методом обратного распространения ошибки.
  В основе многих успешных MMLM лежит обучение методом диффузии.
  Но этими успешными подходами не ограничивает мир "машинного обучения".
  По некоторым прогнозам 2024 год станет годом прорыва в "обучении с подкреплением",
  ориентированное в основном на разработку умных роботов,
  которое в прошлом году было несколько "в тени"
  на фоне блистательного успеха самых разных ГПТэшек и мультимоделей.
  И под этим оптимизмом есть определенные основания.
  Например, такие:
  
  "Google DeepMind сумела запустить когнитивную эволюцию роботов".
  Автор: Корректор
  https://aftershock.news/?q=node/1319135.
  6/Дек/23 09:49
  
  Поэтому, чтобы "держать руку на пульсе", появилась мысль,
  что стоит завести отдельный модуль,
  в котором можно собрать и архивные и свежие материалы на эту тему,
  и попытаться как-то их проанализировать.
  Кроме того при первом же ознакомлении с этой темой,
  выяснилось, что многие идеи/концепции/конструкции в этой области могут иметь
  интересные перспективы/варианты применения и в других областях
  "машинного обучения", включая и языковые модели и обработку текстов,
  на которые в предыдущем году в основном и был ориентирован проект "Металоция".
  Кроме того, частично "обучение с подкреплением" используется
  и в ГПТэшках и в ММшэках в "выходных фильтрах" этих систем,
  для целого ряда задач, и это тоже представляет определенный интерес.
  
  "Обучение с подкреплением" (Reinforcement Learning) (RL)
  вообще говоря это достаточно "специфическая" часть нейронаук,
  которая возникла и оформилась одной из первых,
  и в какой-то мере может считаться "элитарной" частью всего "машинного обучения".
  Причина в том, что в основе ее подходов лежит существующее понимание того,
  каким образом может/должно возникать сложное поведение в результате
  эволюционного развития "аппарата управления" в результате
  длительного и целенаправленного обучения не на примерах,
  а на взаимодействии со сложной средой
  и оценкой собственных действий при этом взаимодействии.
  
  Основоположникам и последователям этого подхода представляется,
  что это наиболее короткий путь к созданию общего и сильного ИИ.
  Причем эта уверенность иногда достигает такой степени,
  что на основе идей "обучения с подкреплением"
  строятся даже мировоззренческие концепции и картины Мира, см. например:
  
  "Теория познания, основанная на поведенческих моделях".
  Автор: Kilorad
  https://habr.com/ru/articles/562560/
  13 июн 2021 в 14:36
  
  Надо признать, что освоение "обучения с подкреплением"
  дело достаточно трудоемкое и не очень простое.
  В этой области сформировался целый корпус свои терминов, подходов, решений,
  стандартных задач, метрик, статистик и т.д. и т.п.,
  что по первоначалу кажется, что это вообще какая-то новая "terra incognita",
  не имеющая связи с "большой землей" ни языковых, ни генеративных ИИ-моделей.
  Но это не совсем так, и даже если по первоначалу такое ощущение очень стойкое,
  то мере раскапывания материалов какие-то общие точки постепенно находятся,
  хотя еще раз надо подчеркнуть, это действительно иная и обширная область
  "машинного обучения".
  
  Вот, собственно, и все предисловие.
  А теперь можно приступать к процессу "поедания слоника маленькими частями".
  
  
  ======
  
  
  01.01.2024 15:39
  
  Введение в "обучение с подкреплением".
  В оглавление.
  
  Введений в "обучение с подкреплением" достаточно много,
  но мне представляется лучше начать с наиболее простого в части изложения:
  
  "Введение в обучение с подкреплением:
  от многорукого бандита до полноценного RL агента"
  Автор: a-pichugin (Артем Пичугин)
  https://habr.com/ru/companies/newprolab/articles/343834/.
  4 дек 2017 в 13:23
  
  Автор оригинала: Arthur Juliani
  https://medium.com/@awjuliani/super-simple-reinforcement-learning-tutorial-part-1-fd544fab149
  
  Постарался по максимуму вырезать пока не очень понятные слова,
  оставив только самую суть.
  
  //// Начало цитирования.
  
  ........
  
  Введение
  
  Основное отличие обучения с подкреплением (reinforcement learning)
  от классического машинного обучения
  заключается в том, что искусственный интеллект
  обучается в процессе взаимодействия с окружающей средой,
  а не на исторических данных.
  Соединив в себе способность нейронных сетей
  восстанавливать сложные взаимосвязи
  и самообучаемость агента (системы)
  в reinforcement learning, машины достигли огромных успехов,
  победив сначала в нескольких видеоиграх Atari,
  а потом и чемпиона мира по игре в го.
  
  Если вы привыкли работать с задачами обучения с учителем,
  то в случае reinforcement learning действует немного иная логика.
  Вместо того, чтобы создавать алгоритм,
  который обучается на наборе пар <факторы - правильный ответ>,
  в обучении с подкреплением необходимо научить агента
  взаимодействовать с окружающей средой,
  самостоятельно генерируя эти пары.
  Затем на них же он будет обучаться
  через систему
  наблюдений (observations),
  выигрышей (reward)
  и действий (actions).
  
  Очевидно, что теперь в каждый момент времени
  у нас нет постоянного правильного ответа,
  поэтому задача становится немного хитрее.
  В этой серии статей мы будем создавать и обучать
  агентов обучения с подкреплением.
  
  .......
  
  Решение полноценной задачи обучения с подкреплением
  
  Теперь, ...
  перейдем к рассмотрению более сложной задачи,
  которая и будет представлять собой пример полноценного reinforcement learning:
  оценивая текущее состояние системы,
  агент должен выбирать действия,
  которые максимизируют выигрыш не только сейчас, но и в будущем.
  
  Системы, в которых может быть решена обучения с подкреплением
  называются Марковскими процессами принятия решений
  (Markov Decision Processes, MDP).
  Для таких систем характерны выигрыши и действия,
  обеспечивающие переход из одного состояния в другое,
  причем эти выигрыши зависят от текущего состояния системы и решения,
  которое принимает агент в этом состоянии.
  Выигрыш может быть получен с задержкой во времени.
  
  Формально Марковский процесс принятия решений
  может быть определен следующим образом.
  MDP состоит из набора всех возможных состояний S и действий А,
  причем в каждый момент времени
  он находится в состоянии s и совершает действие a из этих наборов.
  Таким образом, дан кортеж (s, a)
  и для него определены T(s,a)
  - вероятность перехода в новое состояние s' и R(s,a) - выигрыш.
  В итоге в любой момент времени в MDP
  агент находится в состоянии s, принимает решение a
  и в ответ получает новое состояние s' и выигрыш r.
  
  Для примера,
  даже процесс открывания двери можно представить
  в виде Марковского процесса принятия решений.
  Состоянием будет наш взгляд на дверь,
  а также расположение нашего тела и двери в мире.
  Все возможные движения тела, что мы можем сделать,
  и являются набором A,
  а выигрыш - это успешное открытие двери.
  Определенные действия (например, шаг в сторону двери)
  приближают нас к достижению цели,
  однако сами по себе не приносят выигрыша,
  так как его обеспечивает только непосредственно открывание двери.
  В итоге, агент должен совершать такие действия,
  которые рано или поздно приведут к решению задачи.
  
  Задача стабилизации перевернутого маятника
  //// Это классическая задача в обучении с подкреплением,
  //// на которой тренируются/проверяются многие модели,
  //// называемые AI ботами.
  
  Воспользуемся OpenAI Gym
  - платформой для разработки и тренировки AI ботов
  с помощью игр и алгоритмических испытаний
  и возьмем классическую задачу оттуда:
  задача стабилизации перевернутого маятника или Cart-Pole.
  В нашем случае суть задачи заключается в том,
  чтобы как можно дольше удерживать стержень в вертикальном положении,
  двигая тележку по горизонтали:
  
  ... в данной системе есть:
  
  Наблюдения.
  Агент должен знать, где стержень находится сейчас и под каким углом.
  Это наблюдение нейросеть будет использовать
  для оценки вероятности того или иного действия.
  
  Отсроченный выигрыш.
  Необходимо двигать тележку таким образом,
  чтобы это было выгодно как на данный момент,
  так и в будущем.
  Для этого будем сопоставлять пару <наблюдение - действие>
  со скорректированным значением выигрыша.
  Корректировка осуществляется функцией,
  которая взвешивает действия по времени.
  
  Чтобы учитывать задержку выигрыша во времени,
  нам нужно использовать policy gradient метод
  с некоторыми поправками.
  Во-первых, теперь необходимо обновлять агента,
  который имеет более одного наблюдения в единицу времени.
  Для этого все наблюдения мы будем собирать в буфер,
  а затем использовать их одновременно,
  чтобы обновить веса модели.
  Этот набор наблюдений за единицу времени
  затем сопоставляется с дисконтированным выигрышем.
  
  Таким образом,
  каждое действие агента будет совершено
  с учетом не только мгновенного выигрыша,
  но и всех последующих.
  Также теперь мы будем использовать скорректированный выигрыш
  в качестве оценки элемента A (advantage) в функции потерь.
  
  Реализация алгоритма
  
  .......
  
  //// Конец цитирования.
  
  Для первого ознакомления с основными отличиями "машинного обучения"
  при обучении с подкреплением AI-ботов
  и при традиционном обучением ИИ-моделей на парах "данные-оценка".
  этого наверно достаточно,
  Но в обучении с подкреплением значительно больше специфических моментов,
  чем указано в данном материале.
  
  
  =======
  
  01.01.2024 15:39
  
  Еще одно введение в "обучение с подкреплением".
  В оглавление.
  
  Предлагаю посмотреть еще одно введение в "обучение с подкреплением",
  уже с большим количеством новых понятий:
  
  "Введение в обучение с подкреплением для начинающих".
  Библиотека программиста
  https://proglib.io/p/reinforcement-learning.
  22 апреля 2018
  
  Оригинал
  https://medium.freecodecamp.org/an-introduction-to-reinforcement-learning-4339519de419
  
  В это тексте "для начинающих" больше "спецтерминов",
  но нужно постепенно с ними осваиваться,
  чтобы научится понимать уже значительно более сложные материалы.
  В принципе, это материал, точнее то, что "не почикано" предлагается
  для закрепления основных концепций предыдущего материала,
  плюс добавление "новых красок" в "палитру обучения с подкреплением".
  
  //// Начало цитирования.
  
  Идея обучения с подкреплением заключается в том,
  что система будет учиться в среде,
  взаимодействовать с ней и получать вознаграждение за выполнение действий.
  
  ......
  
  Давайте в качестве примера представим,
  что система учится играть в Super Mario Bros.
  Процесс обучения с подкреплением может быть смоделирован
  как цикл, который работает следующим образом:
  
  Наша система получает состояние S0 от окружающей среды
  (в нашем случае мы получаем первый кадр нашей игры (состояние)
  от Super Mario Bros (окружающая среда))
  
  Основываясь на этом состоянии,
  система выполняет действие A0 (наш герой будет двигаться вправо)
  
  Переход среды в новое состояние S1 (новый фрейм)
  
  Среда дает некоторую награду R1 нашему герою
  
  Этот цикл ОП выводит последовательность состояний, действий и вознаграждений.
  
  Цель системы - максимизировать ожидаемое вознаграждение.
  
  Главная идея гипотезы вознаграждения
  
  Почему целью системы является максимизация ожидаемого вознаграждения?
  
  Обучение с подкреплением основано на идее гипотезы вознаграждения.
  Все цели можно описать максимизацией ожидаемого вознаграждения.
  
  Именно поэтому в ОП, для того чтобы сделать наилучший ход,
  нужно максимизировать ожидаемое вознаграждение.
  
  Вознаграждение на каждом временном шаге (t) может быть записано как:
  
  ......
  
  Что эквивалентно:
  
  ......
  
  Однако на самом деле мы не можем просто добавить такие награды.
  Награды, которые приходят раньше
  (в начале игры), более вероятны,
  так как они более предсказуемы,
  чем будущие вознаграждения.
  
  Допустим, ваш герой - это маленькая мышь, а противник - кошка.
  Цель игры состоит в том,
  чтобы съесть максимальное количество сыра,
  прежде чем быть съеденным кошкой.
  
  Как мы можем видеть на изображении,
  скорее всего мышь будет есть сыр рядом с собой,
  нежели сыр, расположенный ближе к кошке
  (т.к. чем ближе мы к кошке, тем она опаснее).
  
  Как следствие, ценность награды рядом с кошкой,
  даже если она больше обычного (больше сыра), будет снижена.
  Мы не уверены, что сможем его съесть.
  
  Перерасчет награды, мы делаем таким способом:
  //// Вот этот "перерасчет награды"
  //// одна из ключевых концепций "обучения с подкреплением",
  //// отличающая его от обычного "машинного обучения",
  //// и она же, одновременно, одна из большого количества "подводных камней",
  //// этого подхода.
  
  .....
  
  Мы определяем ставку дисконтирования gamma.
  Она должна быть в пределах от 0 до 1.
  
  Чем больше гамма, тем меньше скидка.
  Это означает, что в приоритете долгосрочные вознаграждения.
  
  С другой стороны, чем меньше гамма, тем больше скидка.
  Это означает, что в приоритете краткосрочные вознаграждения
  
  Ожидаемые вознаграждения можно рассчитать по формуле:
  
  .....
  
  Другими словами, каждая награда будет уценена с помощью gamma
  к показателю времени (t).
  По мере того, как шаг времени увеличивается,
  кошка становится ближе к нам,
  поэтому будущее вознаграждение все менее и менее вероятно.
  
  Эпизодические или непрерывные задачи
  
  У нас может быть два типа задач:
  эпизодические и непрерывные.
  
  Эпизодические задачи
  
  В этом случае у нас есть начальная и конечная точка.
  Это создает эпизод:
  список состояний, действий, наград и будущих состояний.
  
  Например в Super Mario Bros,
  эпизод начинается с запуска нового Марио и заканчивается,
  когда вы убиты или достигли конца уровня.
  
  Непрерывные задачи
  
  Это задачи, которые продолжаются вечно.
  В этом случае система должна научиться выбирать оптимальные действия
  и одновременно взаимодействовать со средой.
  
  Как пример можно привести систему,
  которая автоматически торгует акциями.
  Для этой задачи нет начальной точки и состояния терминала.
  Что касается нашей задачи,
  то герой будет бежать, пока мы не решим остановить его.
  
  Борьба методов: Монте-Карло против Временной разницы
  
  Существует два основных метода обучения:
  
  Монте-Карло:
  Сбор наград в конце эпизода,
  а затем расчет максимального ожидаемого будущего вознаграждения.
  
  Временная разница:
  Оценка награды на каждом этапе.
  
  Монте-Карло
  
  Когда эпизод заканчивается,
  система смотрит на накопленное вознаграждение,
  чтобы понять насколько хорошо он выполнил свою задачу.
  В методе Монте-Карло награды получают только в конце игры.
  
  Затем, мы начинаем новую игру с новыми знаниями.
  С каждым разом система проходит этот уровень все лучше и лучше.
  
  Каждый раз мы будем начинать с одного и того же места.
  
  Мы проиграем, если кошка съедает нас или если мы сделаем более 20 шагов.
  
  В конце эпизода у нас есть список состояний, действий, наград и новых состояний.
  
  Система будет суммировать общее вознаграждение Gt.
  
  Затем она обновит V (st), основываясь на приведенной выше формулы.
  
  Затем начнет игру заново, но уже с новыми знаниями.
  
  Временная разница: обучение на каждом временном шаге
  
  Этот метод не будет ждать конца эпизода,
  чтобы обновить максимально возможное вознаграждение.
  Он будет обновлять V в зависимости от полученного опыта.
  
  Метод вызывает TD (0) или One step TD
  (обновление функции value после любого отдельного шага).
  
  Он будет только ждать следующего временного шага,
  чтобы обновить значения.
  В момент времени t+1 обновляются все значения,
   а именно вознаграждение меняется на Rt+1,
  а текущую оценка на V(St+1).
  
  Разведка или эксплуатация?
  
  Прежде чем рассматривать различные стратегии
  решения проблем обучения с подкреплением,
  мы должны охватить еще одну очень важную тему:
  компромисс между разведкой и эксплуатацией.
  
  Исследование - это поиск дополнительной информации об окружающей среде.
  
  Эксплуатация - это использование известной информации
  для получения максимального вознаграждения.
  
  Помните, что цель нашей системы заключается
  в максимизации ожидаемого совокупного вознаграждения.
  Однако мы можем попасть в ловушку.
  
  В этой игре, наша мышь может иметь бесконечное количество
  маленьких кусков сыра (+1).
  Однако на вершине лабиринта есть гигантский кусок сыра (+1000).
  
  Но, если мы сосредоточимся только на вознаграждении,
  наша система никогда не достигнет того самого большого куска сыра.
  Вместо этого она будет использовать только ближайший источник вознаграждений,
  даже если этот источник мал (эксплуатация).
  
  Но если наша система проведет небольшое исследование,
  она найдет большую награду.
  
  Это то, что мы называем компромиссом между разведкой и эксплуатацией.
  Мы должны определить правило,
  которое поможет справиться с этим компромиссом.
  
  Три подхода к обучению с подкреплением
  
  Теперь, когда мы определили основные элементы обучения с подкреплением,
  давайте перейдем к трем подходам для решения проблем,
  связанных с этим обучением.
  
  На основе значений
  
  В обучении с подкреплением на основе значений
  целью является оптимизация функции V(s).
  
  Функция value - это функция,
  которая сообщает нам максимальное ожидаемое вознаграждение,
  которое получит система.
  
  Значение каждой позиции - это общая сумма вознаграждения,
  которую система может накопить в будущем,
  начиная с этой позиции.
  
  Система будет использовать эту функцию значений
  для выбора состояния на каждом шаге.
  Она принимает состояние с наибольшим значением.
  
  ......
  
  В примере лабиринта, на каждом шаге мы будем принимать наибольшее значение:
  -7, затем -6, затем -5 (и так далее), чтобы достичь цели.
  
  На основе политики
  
  В обучении с подкреплением на основе политики
  мы хотим напрямую оптимизировать функцию политики ? (s)
  без использования функции значения.
  
  Политика - это то,
  что определяет поведение системы в данный момент времени.
  
  Это позволяет нам сопоставить каждую позицию с наилучшим действием.
  
  Существует два типа политики:
  
  Детерминированный: будет возвращать одно и то же действие.
  
  Стохастический: выводит вероятность распределения по действиям.
  
  Как можно заметить, политика прямо указывает
  на лучшие действия для каждого шага.
  
  На основе модели
  
  В подходе на основании модели мы моделируем среду.
  Это означает, что мы создаем модель поведения среды.
  
  Проблема каждой среды заключается в том,
  что понадобятся различные представления данной модели.
  Вот почему мы особо не будем раскрывать эту тему.
  
  В этой статье было довольно много информации.
  Убедитесь, что действительно поняли весь материал,
  прежде чем продолжить изучение.
  Важно освоить эти элементы перед тем как начать
  самую интересную часть:
  создание ИИ, который играет в видеоигры.
  
  ......
  
  //// Конец цитирования.
  
  Как видите, что даже в материале "для начинающих",
  такое обилие новых концепций, что просто руки опускаются.
  Не переживайте, это нормальное состояние при исследовании "неведомого".
  Представьте себя только на минутку этим самым AI-ботом,
  который исследует незнакомую область под названием "обучение с подкреплением",
  и попробуйте сформулировать стратегию такого исследования.
  И Вам наверняка станут понятнее эти спецтермины и концепции,
  которые так по первоначалу пугают.
  "Волков бояться - в лес не ходить".
  
  
  =========
  
  01.01.2024 15:39
  
  Терминология "обучения с подкреплением".
  В оглавление.
  
  Пришла пора от общеупотребительных терминов, хотя и не очень понятных,
  перейти к "спецтерминам" обучения с подкреплением,
  которые вот так сразу точно не разберешь,
  но историю уже не поменяешь и эти термины в материалах Reinforcement Learning,
  используются "направо и налево".
  Предлагаю для этой нелегкой задачи - освоения "спецтерминов" -
  "выжимку" из такого материала:
  
  "Что такое обучение с подкреплением
  и как оно работает. Объясняем на простых примерах".
  Автор: Alex Mashanski
  https://proglib.io/p/chto-takoe-obuchenie-s-podkrepleniem-i-kak-ono-rabotaet-obyasnyaem-na-prostyh-primerah.
  
  //// Начало цитирования.
  
  Коротко
  
  Обучение с подкреплением (Reinforcement Learning)
  - это метод машинного обучения, в котором наша система (агент)
  обучается методом проб и ошибок.
  Идея заключается в том, что агент взаимодействует со средой,
  параллельно обучаясь,
  и получает вознаграждение за выполнение действий.
  
  Как оно работает?
  
  В обучении с подкреплением используется способ
  положительной награды за правильное действие
  и отрицательной за неправильное.
  Таким образом, метод присваивает положительные значения желаемым действиям,
  чтобы побудить агента,
  и отрицательные значения - к нежелательным.
  Это программирует нашего агента на поиск долгосрочного
  и максимального общего вознаграждения для достижения оптимального решения.
  Эти долгосрочные цели не дают агенту возможности
  останавливаться на достигнутом.
  Со временем система учится избегать негативных действий
  и совершает только позитивные.
  
  Обучение на основе взаимодействия с окружающей средой
  происходит методом проб и ошибок.
  //// А для того, чтобы делать "пробы" используется "некий генератор",
  //// в общем случае "стохастический".
  
  .......
  
  Необходимые термины в Reinforcement Learning
  
  Агент (agent):
  Наша система, которая выполняет действия в среде,
  чтобы получить некоторую награду.
  
  Среда (environment, e):
  сценарий/окружение, с которым должен столкнуться агент.
  
  Награда (reward, R):
  немедленный возврат, который предоставляется агенту,
  после выполнения определенного действия или задачи.
  Является положительной и отрицательной, как было упомянуто выше.
  
  Состояние (state, s):
  Состояние относится к текущему положению, возвращаемой средой.
  
  Политика (policy, p):
  стратегия, которая применяется агентом для принятия решения
  о следующем действии на основе текущего состояния.
  
  Стоимость (value, V):
  награда, которая ожидается в долгосрочной перспективе.
  По сравнению с краткосрочным вознаграждением,
  принимаем во внимание скидку (discount).
  
  Значение Функции (value function):
  определяет размер переменной, которой является общая сумма награды.
  
  Модель среды (Model of the environment):
  имитатор поведения окружающей среды
  (просто говоря, демо-версия вашей модели).
  Это помогает определить, как будет вести себя среда.
  
  Значение Q или значение действия (Q):
  значение Q очень похоже на value (V).
  Но главное различие между ними в том,
  что он принимает дополнительный параметр в качестве текущего действия.
  
  Где использовать Reinforcement Learning?
  
  .......
  
  Какие алгоритмы использовать?
  
  Область обучения с подкреплением состоит из нескольких алгоритмов,
  использующих разные подходы.
  Различия в основном связаны с их стратегиями взаимодействия с окружающей средой.
  
  State-Action-Reward-State-Action (SARSA).
  Этот алгоритм обучения с подкреплением
  начинается с предоставления агенту такого коэффициента,
  как политика (on-policy).
  В данном случае политика - это вероятность,
  с помощью которой алгоритм оценивает шансы определенных действий,
  приводящих к вознаграждениям или положительным состояниям.
  
  Q-Learning.
  В этом подходе к Reinforcement Learning используется противоположный подход.
  Агент не получает политики (on-policy),
  соответственно, его исследование окружающей среды
  является более самостоятельным.
  В Q-learning у нас нет ограничений на выбор действия (action) для алгоритма.
  Он полагает, что все последующие выборы actions
  будут оптимальными по умолчанию,
  поэтому алгоритм производит операцию выбора исходя из максимизации оценки Q.
  
  Deep Q-Networks (Глубокие Q-сети).
  Этот алгоритм использует нейронные сети
  в дополнение к методам обучения с подкреплением (reinforcement learning).
  Нейросети осуществляют самостоятельное исследование (research) среды обучения
  с подкреплением для выбора наиболее оптимального значения.
  То, как алгоритм будет себя вести и подбирать значения,
  основано на выборке прошлых положительных действий,
  полученных нейронной сетью.
  
  Чем отличается от классического глубокого обучения (Deep Learning)?
  
  Обучение с подкреплением похоже на глубокое обучение,
  за исключением одного момента:
  в случае Reinforcement Learning машина обучаются методом проб и ошибок,
  используя данные из собственного опыта.
  
  Алгоритм обучения с подкреплением
  - это независимая система с самообучением.
  Чтобы добиться наилучших результатов,
  машина учится в режиме постоянной практики,
  из чего следует концепция обучения методом проб и ошибок.
  
  Человек в какой-то степени представляет из себя пример обучения с подкреплением.
  Например, попытки научиться ездить на велосипеде, или плавать:
  процесс состоит из правильных и неправильных ходов.
  
  Глубокое обучение предполагает исследование
  уже существующей "даты",
  на основе чего мы позже применяем наши наработки к новому набору данных.
  
  Обучение с подкреплением, в свою очередь,
  является динамическим (самостоятельным) обучением,
  которое использует метод проб и ошибок для того,
  чтоб обоснованно принять решение.
  
  Проблемы, стоящие перед Reinforcement Learning
  
  Обучение с подкреплением, хотя и имеет высокий потенциал,
  может быть трудным для развертывания
  и, к сожалению, остается ограниченным в применении.
  Одно из препятствий для развертывания этой сферы машинного обучения
  - это зависимость от исследования окружающей среды.
  
  К примеру, если вы развернули робота,
  который применяет обучение с подкреплением для навигации в окружающей среде,
  то он будет искать новые состояния
  и предпринимать различные действия во время движения.
  Однако сложно последовательно предпринимать наилучшие действия
  из-за частых изменений в окружающей среде.
  Так, если вы задали роботу environment (окружающую среду)
  в виде вашего дома,
  то после перестановки предметов или мебели
  ваше устройство придется полностью адаптировать к новым условиям.
  
  Время, необходимое для правильного обучения с помощью reinforcement learning
  может ограничить его полезность
  и потребовать значительных вычислительных ресурсов.
  По мере того как среда обучения становится более сложной,
  растут и требования ко времени и вычислительным ресурсам.
  Именно эти проблемы специалистам в области обучения с подкреплением
  предстоит решить в ближайшем будущем.
  
  В заключение
  
  Обучение с подкреплением - это вычислительный подход к обучению
  на основе взаимодействий внутри среды.
  
  Более того, Reinforcement Learning является передовой технологией,
  которая рано или поздно изменит наш мир.
  Это то, что делает машинное обучение творческим процессом,
  так как самостоятельный поиск машиной новых,
  инновационных способов решения задач уже является творчеством.
  
  Внедрение Reinforcement Learning уже происходит:
  например, знаменитая AlphaGo DeepMind
  (алгоритм для игры в популярную азиатскую игру Go)
  использует игровую тактику,
  которую сначала считали ошибочной,
  но впоследствии машина обыграла одного из сильнейших игроков в Go, Lee Sedol.
  А продвинутая версия AlphaGo Zero всего за 40 дней самообучения
  превзошла AlphaGo DeepMind.
  
  Таким образом, обучение с подкреплением
  уже является революционной технологией
  и, несомненно, будет следующим шагом
  в развитии индустрии искусственного интеллекта.
  
  .......
  
  //// Конец цитирования.
  
  Понимаю, что после прочтения такой "выжимки" особого понимания ни "тезауруса",
  ни сути отличия, например, "Q от V", естественно, не будут.
  Но с чего-то начинать надо, большинство текстов об обучении с подкреплением
  даже такой минимальной расшифровки используемых терминов не содержат.
  Таковы реалии достаточно "элитарного клуба" разработчиков
  AI-систем на основе обучения с подкреплением.
  Тут уже вряд ли что можно изменить,
  тем более учитывая, что "в чужой монастырь со своим уставом не ходят".
  С этим придется освоиться.
  
  
  ========
  
  01.01.2024 17:03
  
  Обучение с подкреплением для "чайников".
  В оглавление.
  
  Будем считать, что первоначальное ознакомление с "обучением с подкреплением"
  как-то пройдено и можно попытаться сделать еще шажок
  в глубь неизведанной территории:
  
  "Обучение с подкреплением: что такое, алгоритмы, типы и примеры".
  Автор: Даниэль Джонсон
  https://www.guru99.com/ru/reinforcement-learning-tutorial.html
  обновленный 12 декабря 2023
  
  //// Начало цитирования.
  
  Что такое обучение с подкреплением?
  
  Усиление обучения определяется как метод машинного обучения,
  который касается того,
  как программные агенты должны действовать в среде.
  Обучение с подкреплением
  - это часть метода глубокого обучения,
  который помогает вам максимизировать
  некоторую часть совокупного вознаграждения.
  
  Этот метод обучения нейронной сети поможет вам
  научиться достигать поставленных целей.
  
  цель или максимизация определенного измерения за многие шаги.
  
  Содержание:
  
  Что такое обучение с подкреплением?
  
  Важные компоненты метода глубокого обучения с подкреплением
  
  Как работает обучение с подкреплением?
  
  Алгоритмы обучения с подкреплением
  
  Характеристики обучения с подкреплением
  
  Типы обучения с подкреплением
  
  Модели обучения подкреплению
  
  Обучение с подкреплением и обучение под присмотром
  
  Применение обучения с подкреплением
  
  Зачем использовать обучение с подкреплением?
  
  Когда не следует использовать обучение с подкреплением?
  
  Проблемы обучения с подкреплением
  
  Важные компоненты метода глубокого обучения с подкреплением
  
  Вот некоторые важные термины, используемые в ИИ подкрепления:
  
  Агент:
  Это предполагаемая сущность,
  которая выполняет действия в окружающей среде,
  чтобы получить некоторое вознаграждение.
  
  Окружающая среда (е):
  Сценарий, с которым приходится столкнуться агенту.
  
  Награда (R):
  Немедленный возврат, предоставляемый агенту,
  когда он или она выполняет определенное действие или задачу.
  
  Состояния(S):
  Состояние относится к текущей ситуации, возвращаемой средой.
  
  Политика (p):
  Это стратегия, которая применяется агентом для принятия решения
  о следующем действии на основе текущего состояния.
  
  Значение (В):
  Ожидается долгосрочная прибыль со скидкой
  по сравнению с краткосрочным вознаграждением.
  //// Обратите внимание и здесь "скидка", но уже без пояснения почему.
  //// Просто "так принято".
  
  Функция значения:
  Он определяет значение состояния,
  которое представляет собой общую сумму вознаграждения.
  Это агент, которого следует ожидать,
  начиная с этого состояния.
  
  Модель среды:
  Это имитирует поведение окружающей среды.
  Это поможет вам сделать выводы,
  а также определить, как будет вести себя окружающая среда.
  
  Методы, основанные на модели:
  Это метод решения задач обучения с подкреплением,
  в котором используются методы, основанные на моделях.
  
  Значение Q или значение действия (Q):
  Значение Q очень похоже на значение V.
  Единственная разница между ними заключается в том,
  что в качестве текущего действия он принимает дополнительный параметр.
  //// Фраза один в один из предыдущего материала,
  //// ничего дополнительно не объясняющая.
  //// Придется искать разъяснения где-то еще.
  
  Как работает обучение с подкреплением?
  
  Давайте рассмотрим простой пример,
  который поможет вам проиллюстрировать механизм обучения с подкреплением.
  
  Рассмотрите сценарий обучения вашей кошки новым трюкам.
  
  Поскольку кошка не понимает ни английского,
  ни любого другого человеческого языка,
  мы не можем прямо сказать ей, что делать.
  Вместо этого мы следуем другой стратегии.
  
  Мы моделируем ситуацию,
  и кошка пытается отреагировать по-разному.
  Если реакция кошки будет желаемой,
  мы дадим ей рыбу.
  
  Теперь всякий раз,
  когда кошка попадает в одну и ту же ситуацию,
  она выполняет аналогичное действие
  с еще большим энтузиазмом в ожидании получения
  большего вознаграждения (еды).
  
  Это все равно, что узнать,
  что кошка понимает <что делать> из положительного опыта.
  
  В то же время кошка учится тому, чего не следует делать,
  когда она сталкивается с негативным опытом.
  
  Пример обучения с подкреплением
  
  Как работает обучение с подкреплением
  
  В этом случае,
  
  Ваша кошка является агентом,
  который подвергается воздействию окружающей среды.
  В данном случае это ваш дом.
  Примером состояния может быть ваша кошка, сидящая,
  и вы используете определенное слово,
  обозначающее, что кошка идет.
  
  Наш агент реагирует,
  выполняя переход действия из одного <состояния> в другое <состояние>.
  
  Например, ваша кошка переходит от сидения к ходьбе.
  
  Реакция агента - это действие,
  а политика - это метод выбора действия в данном состоянии
  в ожидании лучших результатов.
  
  После перехода они могут получить взамен вознаграждение или штраф.
  
  Алгоритмы обучения с подкреплением
  
  Существует три подхода к реализации алгоритма обучения с подкреплением.
  
  Ценностно-ориентированный
  
  В методе обучения с подкреплением, основанном на ценности,
  вам следует попытаться максимизировать функцию ценности.
  
  ....
  .
  В этом методе агент ожидает долгосрочного возврата текущих состояний
  в соответствии с политикой.
  
  1. на основе политики
  
  В методе RL на основе политик вы пытаетесь разработать такую ??политику,
  при которой действие, выполняемое в каждом состоянии,
  поможет вам получить максимальное вознаграждение в будущем.
  
  Два типа методов, основанных на политике:
  
  1.1 Детерминированный:
  для любого состояния одно и то же действие производится политикой p.
  
  1.2 Стохастический:
  каждое действие имеет определенную вероятность,
  которая определяется следующим образом:wing уравнение.
  Стохастическая политика:
  n{a\s) = P\A, = a\S, =S]
  
  2. на основе модели
  
  В этом методе обучения с подкреплением вам необходимо
  создать виртуальную модель для каждой среды.
  Агент учится действовать в этой конкретной среде.
  
  Характеристики обучения с подкреплением
  
  Вот важные характеристики обучения с подкреплением
  
  Нет супервизора, только реальный номер или сигнал вознаграждения
  
  Последовательное принятие решений
  
  Время играет решающую роль в проблемах с подкреплением.
  
  Обратная связь всегда происходит с задержкой, а не мгновенно.neous
  
  Действия агента определяют последующие данные, которые он получает
  
  Типы обучения с подкреплением
  
  Два типа методов обучения с подкреплением:
  
  Положительный:
  
  Оно определяется как событие,
  которое происходит из-за определенного поведения.
  Это увеличивает силу и частоту поведения
  и положительно влияет на действия, предпринимаемые агентом.
  
  Этот тип подкрепления помогает вам
  максимизировать производительность
  и поддерживать изменения в течение более длительного периода.
  Однако слишком большое подкрепление может привести
  к чрезмерной оптимизации состояния,
  что может повлиять на результаты.
  
  Отрицательный:
  
  Негативное подкрепление определяется как усиление поведения,
  возникающее из-за негативного состояния,
  которое следует остановить или избежать.
  Это поможет вам определить минимальную производительность.
  Однако недостатком этого метода является то,
  что его достаточно для достижения минимального поведения.
  
  Модели обучения подкреплению
  
  В обучении с подкреплением есть две важные модели обучения:
  
   Марковский процесс принятия решений
  
   Q обучение
  
  Марковский процесс принятия решений
  
  Для получения решения используются параметры:
  
  Набор действий- А
  
  Набор состояний -S
  
  Награда- R
  
  Политика- н
  
  Значение- V
  
  Математический подход к отображению решения в обучении
  с подкреплением рассматривается
  как Марковский процесс принятия решений или (MDP).
  
  Q-обучение
  
  Q-обучение - это основанный на ценностях метод предоставления информации
  для определения того, какое действие должен предпринять агент.
  
  Давайте разберемся в этом методе следующим образом.wing пример:
  
  В здании пять комнат, соединенных дверями.
  
  Каждая комната пронумерована от 0 до 4.
  
  Внешняя часть здания может представлять собой одну большую внешнюю территорию (5).
  
  Двери номер 1 и 4 ведут в здание из комнаты 5.
  
  Далее вам нужно связать значение вознаграждения с каждой дверью:
  
  Двери, ведущие прямо к цели, имеют награду 100.
  
  Двери, которые не связаны напрямую с целевой комнатой, дают нулевую награду.
  
  Так как двери двусторонние, то для каждой комнаты закреплены две стрелки.
  
  Каждая стрелка на изображении выше содержит значение мгновенного вознаграждения.
  
  Объяснение:
  
  На этом изображении вы можете видеть, что комната представляет собой состояние.
  
  Перемещение агента из одной комнаты в другую представляет собой действие.
  
  На изображении ниже состояние описано как узел, а стрелки показывают действие
  
  Например, агент проходит из комнаты номер 2 в комнату 5.
  
  Исходное состояние = состояние 2
  
  Состояние 2-> состояние 3
  
  Состояние 3 -> состояние (2,1,4)
  
  Состояние 4-> состояние (0,5,3)
  
  Состояние 1-> состояние (5,3)
  
  Состояние 0-> состояние 4
  
  Обучение с подкреплением и обучение под присмотром
  
  параметры Усиление обучения Контролируемое обучение
  
  Стиль решения
  
  Усиление обучения
  Обучение с подкреплением помогает вам принимать решения последовательно.
  
  Контролируемое обучение
  В этом методе решение принимается на основе введенных вначале данных.
  
  Работает на
  
  Усиление обучения
  Работает над взаимодействием с окружающей средой.
  
  Контролируемое обучение
  Работает на примерах или заданных образцах данных.
  
  Зависимость от решения
  
  Усиление обучения
  В методе RL решение об обучении является зависимым.
  Поэтому вам следует дать ярлыки всем зависимым решениям.
  
  Контролируемое обучение
  Контролируемое изучение решений, которые независимы друг от друга,
  поэтому для каждого решения даются метки.
  
  Лучше всего подходит
  
  Усиление обучения
  Поддерживает и лучше работает в ИИ,
  где преобладает человеческое взаимодействие.
  
  Контролируемое обучение
  В основном он управляется с помощью интерактивной программной системы или приложений.
  
  Пример
  
   Усиление обучения
   Игра в шахматы
  
   Контролируемое обучение
   Распознавание объектов
  
  Применение обучения с подкреплением
  
  Вот применения обучения с подкреплением:
  
  Робототехника для промышленной автоматизации.
  
  Планирование бизнес-стратегии
  
  Машинное обучение и обработка данных
  
  Это помогает вам создавать системы обучения,
  которые предоставляют индивидуальные инструкции и материалы
  в соответствии с требованиями студентов.
  
  Управление самолетом и управление движением робота
  
  Зачем использовать обучение с подкреплением?
  
  Вот основные причины использования обучения с подкреплением:
  
  Это поможет вам определить, какая ситуация требует действий.
  
  Помогает вам узнать, какое действие принесет
  наибольшую награду в течение длительного периода.
  
  Обучение с подкреплением также предоставляет
  обучающему агенту функцию вознаграждения.
  
  Это также позволяет ему найти лучший способ получения крупных наград.
  
  Когда не следует использовать обучение с подкреплением?
  
  Вы не можете применить модель обучения с подкреплением,
  вот и вся ситуация.
  Вот некоторые условия, при которых не следует использовать
  модель обучения с подкреплением.
  
  Когда у вас достаточно данных для решения проблемы
  с помощью контролируемого метода обучения.
  
  Вы должны помнить, что обучение с подкреплением
  требует больших вычислительных ресурсов и отнимает много времени.
  особенно когда пространство действия велико.
  
  Проблемы обучения с подкреплением
  
  Вот основные проблемы, с которыми вы столкнетесь при получении подкрепления:
  
  Дизайн функций/наград, который должен быть очень интересным
  
  Параметры могут влиять на скорость обучения.
  
  Реалистичная среда может иметь частичную наблюдаемость.
  
  Слишком большое подкрепление может привести к перегрузке состояний,
  что может ухудшить результаты.
  
  Реалистичная среда может быть нестационарной.
  
  Итоги
  
  Обучение с подкреплением - это метод машинного обучения.
  
  Помогает вам узнать, какое действие принесет наибольшую награду
  в течение длительного периода.
  
  Три метода обучения с подкреплением:
  1) обучение на основе ценностей
  2) обучение на основе политик и моделей.
  
  Агент, состояние, вознаграждение, среда, функция ценности,
   модель среды, методы, основанные на моделях,
  - вот некоторые важные термины, используемые в методе обучения RL.
  
  Примером обучения с подкреплением является ваша кошка
  - агент, который подвергается воздействию окружающей среды.
  
  Самая большая особенность этого метода заключается в том,
  что здесь нет супервизора,
  есть только реальное число или сигнал вознаграждения.
  
  Два типа обучения с подкреплением:
  1) положительное
  2) отрицательное
  
  Две широко используемые модели обучения:
  1) Марковский процесс принятия решений
  2) Q-обучение.
  
  Метод обучения с подкреплением работает на взаимодействии с окружающей средой,
  тогда как метод контролируемое обучение метод работает
  на заданном образце данных или примере.
  
  К методам прикладного обучения или обучения с подкреплением относятся:
  Робототехника для промышленной автоматизации
  и планирования бизнес-стратегии.
  
  Не следует использовать этот метод,
  если у вас достаточно данных для решения проблемы.
  
  Самая большая проблема этого метода заключается в том,
  что параметры могут влиять на скорость обучения.
  
  ......
  
  //// Конец цитирования.
  
  Ну, как стало понятнее. Думаю, что не особо.
  Причина, на мой взгляд, в том,
  что во всех этих введениях в обучение с подкреплением,
  упор делается либо на перспективы, либо на конкретные успешные примеры,
  либо на какие-то достаточно простые аналогии,
  а то и просто на куски кода реализующего какого-то конкретного AI-агента.
  Но ведь да же для обучения простого AI-агента
  нужны не только "будущие вознаграждения" но и "реальные штрафы".
  А для обучения человека зачастую знакомство с реальными проблемами
  той или иной области дает большее понимание,
  чем перечень "зияющих перспектив".
  
  
  ======
  
  11.01.2024 13:36
  
  Проблемы обучения с подкреплением.
  В оглавление.
  
  Освоение "неизведанных территорий", большей частью, полезно начинать
  с изучения не только базовых и теоретических основ,
  но и со знакомства с "реальными граблями", тут и там разбросанных на местности.
  Каждый, кто играл в хоть какую-то мало-мальски приличную стратегию,
  воспринимает эту нехитрую мудрость как само собой разумеющееся.
  Точно также знакомство с обучением с подкреплением следует
  сопроводить размышлениями о "наболевшем",
  тем более, если при этом еще и приоткрываются некоторые подробности
  и пояснения изучаемого предмета.
  
  Вот такого рода текст и удалось найти "в подвалах" Хабра:
  
  "Что не так с обучением с подкреплением (Reinforcement Learning)?"
  Автор: DesertFlow
  https://habr.com/ru/articles/437020/
  22 янв 2019 в 02:25
  
  Текст, на мой взгляд, просто замечательный,
  и хотя он значительный по объему, сокращать его "рука не подымается".
  А вдруг ссылка когда-то станет неактивной.
  
  //// Начало цитирования.
  
  Еще в начале 2018 года вышла статья
  Deep Reinforcement Learning Doesn't Work Yet
  ("Обучение с подкреплением пока не работает").
  Основная претензия которой сводилась к тому,
  что современные алгоритмы обучения с подкреплением
  требуют для решения задачи примерно столько же времени,
  как и обычный случайный поиск.
  //// Это, вообще-то, очень интересный как оказалось "математический вопрос",
  //// и может быть когда-то удастся к нему вернуться.
  //// Но сам факт некоторого бессилия алгоритмов обучения
  //// по отношению к простому "бросанию монетки" стоит зафиксировать в памяти.
  
  Изменилось ли что-то с того времени?
  Нет.
  
  Обучение с подкреплением считается одним из трех основных путей
  к созданию сильного ИИ.
  Но трудности, с которыми сталкивается эта область машинного обучения,
  и методы, которыми ученые пытаются бороться с этими трудностями,
  наводят на мысль что, возможно,
  с самим этим подходом имеются фундаментальные проблемы.
  
  Постойте, что значит один из трех?
  А остальные два какие?
  
  С учетом успеха нейронных сетей в последние годы
  и анализом того, как они работают
  с высокоуровневыми когнитивными способностями,
  считавшимися ранее характерными только для человека и высших животных,
  на сегодняшний день в научном сообществе сложилось мнение,
  что можно выделить три основных подхода к созданию сильного ИИ
  на основе нейронных сетей,
  которые можно считать более менее реалистичными:
  
  1. Обработка текстов
  
  В мире накоплено огромное количество книг и текста в интернете,
  в том числе учебников и справочников.
  Текст удобен и быстр для обработки на компьютере.
  Теоретически, этого массива текстов должно хватить
  для обучения сильного разговорного ИИ.
  
  При этом подразумевается, что в этих текстовых массивах
  отражено полное устройство мира
  (как минимум, оно описано в учебниках и справочниках).
  Но это совершенно не факт.
  Тексты как вид представления информации сильно оторваны
  от реального трехмерного мира и течения времени,
  в котором мы живем.
  
  Хорошими примерами ИИ, обученными на текстовых массивах,
  являются чат-боты и автоматические переводчики.
  Так как для перевода текста нужно понять смысл фразы
  и пересказать его новыми словами (на другом языке).
  Существует распространенное заблуждение,
  что правила грамматики и синтаксиса,
  включая описание всех возможных исключений,
  полностью описывают конкретный язык.
  Это не так.
  Язык - это лишь вспомогательный инструмент в жизни,
  он легко меняется и адаптируется под новые ситуации.
  
  Проблема обработки текста
  (хоть экспертными системами, хоть нейронными сетями)
  в том, что не существует набора правил,
  какие фразы в каких ситуациях нужно применять.
  Обратите внимание - не правил построения самих фраз
  (чем занимается грамматика и синтаксис),
  а именно какие фразы в каких жизненных ситуациях.
  В одной и той же ситуации люди произносят на разных языках
  фразы, которые вообще никак друг с другом не связаны
  с точки зрения структуры языка.
  Сравните фразы при крайней степени удивления:
  "о, боже!" и "o, holy shit!".
  Ну и как между ними провести соответствие,
  зная языковую модель?
  Да никак.
  Так случайно сложилось исторически.
  Нужно знать ситуацию и что в ней обычно говорят на конкретном языке.
  Именно из-за этого автоматические переводчики пока такие несовершенные.
  
  Можно ли выделить эти знания чисто из массива текстов - неизвестно.
  Но если автоматические переводчики станут идеально переводить,
  не делая глупых и нелепых ошибок,
  то это будет доказательством,
  что создание сильного ИИ только на основе текста возможно.
  //// Обратите внимание на дату текста.
  //// Прошло совсем немного времени, и как все изменилось.
  //// Теперь этот подход уже считается самым перспективным
  //// на пути к сильному или общему интеллекту.
  //// А обучение с подкреплением до недавнего времени,
  //// особых новых успехов предъявить не сумело.
  
  2. Распознавание изображений
  
  Посмотрите на это изображение
  
  Глядя на эту фотографию мы понимаем, что съемка велась ночью.
  Судя по флагам, ветер дует справа налево.
  А судя по правостороннему движению,
  дело не происходит в Англии или Австралии.
  Никакая эта информация не указана явно в пикселях картинки,
  это внешние знания.
  На фото есть лишь признаки,
  по которым мы можем воспользоваться знаниями,
  полученными из других источников.
  
  Поэтому считается,
  что если обучить нейронную сеть распознавать объекты на картинке,
  то у нее сложится внутреннее представление о том,
  как устроен реальный мир.
  И это представление, полученное по фотографиям,
  уж точно будет соответствовать нашему реальному и настоящему миру.
  В отличие от массивов текстов, где это не гарантировано.
  
  Ценность нейронных сетей, обученных на массиве фотографий ImageNet
  (а теперь и OpenImages V4, COCO, KITTI, BDD100K и другие)
  вовсе не в факте распознавания котика на фото.
  А в том, что хранится в предпоследнем слое.
  Именно там находится набор высокоуровневых features, описывающих наш мир.
  Вектора в 1024 числа достаточно, чтобы из него получить описание
  1000 разных категорий объектов с 80% точностью
  (и в 95% случаев правильный ответ будет в 5 ближайших вариантах).
  Только вдумайтесь в это.
  
  Именно поэтому эти features из предпоследнего слоя
  так успешно используются в совершенно различных задачах
  по компьютерному зрению.
  Через Transfer Learning и Fine Tuning.
  Из этого вектора в 1024 числа можно получить,
  например, карту глубины по картинке
  (пример из работы, где используется практически
  не измененная предобученная сеть Densenet-169)
  
  Или определять позу человека. Применений много.
  
  Как следствие, распознавание изображений потенциально
  можно использовать для создания сильного ИИ,
  так как оно действительно отражает модель нашего реального мира.
  От фотографии к видео один шаг,
  а видео - это и есть наша жизнь,
  так как около 99% информации мы получаем зрительно.
  
  Но по фотографии совершенно непонятно,
  как мотивировать нейронную сеть думать и делать выводы.
  Ее можно обучить отвечать на вопросы вроде
  "сколько карандашей лежит на столе?"
  (этот класс задач называется Visual Question Answering,
  пример такого датасета:
  https://visualqa.org).
  Или давать текстовое описание тому, что происходит на фото.
  Это класс задач Image Captioning.
  
  Но является ли это интеллектом?
  Развив этот подход, в недалеком будущем нейронные сети
  смогут отвечать по видео на вопросы вроде
  "На проводах сидело два воробья, один из них улетел, сколько осталось воробьев?".
  Это уже настоящая математика,
  в чуть более усложненных случаях недоступная животным
  и находящаяся на уровне человеческого школьного образования.
  Особенно, если кроме воробьев,
  там рядом будут сидеть синички,
  но их не нужно учитывать,
  так как вопрос был только про воробьев.
  Да, это определенно будет интеллект.
  //// И это направление очень сильно спрогрессировало
  //// "в лице" самых различных мультимоделей.
  
  3. Обучение с подкреплением (Reinforcement Learning)
  
  Идея очень проста:
  поощрять действия, ведущие к награде, и избегать ведущих к неудаче.
  Это универсальный способ обучения
  и, очевидно, он со всей определенностью может привести
  к созданию сильного ИИ.
  Поэтому к Reinforcement Learning такой большой интерес в последние годы.
  
  Смешать, но не взбалтывать
  
  У обучения с подкреплением есть один большой плюс.
  В симуляторе можно создать упрощенную модель мира.
  Так, для фигурки человека достаточно всего 17 степеней свободы,
  вместо 700 в живом человеке (примерное число мышц).
  Поэтому в симуляторе можно решать задачу в очень маленькой размерности.
  
  Забегая вперед, современные алгоритмы Reinforcement Learning
  не способны произвольно управлять моделью человека
  даже с 17 степенями свободы.
  То есть не могут решить задачу оптимизации,
  где на входе 44 числа и на выходе 17.
  Удается это сделать только в очень простых случаях,
  с тонкой ручной настройкой начальных условий и гиперпараметров.
  И даже в этом случае,
  например чтобы научить модель гуманоида с 17 степенями свободы бегать,
  причем начиная с положения стоя (что намного проще),
  нужно несколько суток расчетов на мощном GPU.
  А чуть более сложные случаи,
  например научиться вставать из произвольной позы,
  может вообще никогда не обучиться.
  Это провал.
  
  Кроме того, все Reinforcement Learning алгоритмы
  работают с удручающе маленькими нейронными сетями,
  а с обучением больших не справляются.
  //// Вот, лично меня, этот аспект сейчас больше всего и интересует.
  //// Что такого в моделях, в алгоритмах обучения или в поставленных задачах
  //// присутствует такое, что они плохо обучаются.
  //// Собственно ради этого вопроса и начал изучать RL максимально внимательно.
  Крупные сверточные сети используются
  только чтобы снизить размерность картинки до нескольких features,
  которые и подаются на вход алгоритмам обучения с подкреплением.
  Тот же бегающий гуманоид управляется Feed Forward сетью
  с двумя-тремя слоями по 128 нейронов.
  Серьезно?
  И на основе этого мы пытаемся построить сильный ИИ?
  
  Чтобы попытаться понять,
  почему так происходит и что не так с обучением с подкреплением,
  надо сначала ознакомиться с основными архитектурами
  в современном Reinforcement Learning.
  
  Физическое устройство мозга и нервной системы
  настроено эволюцией под конкретный вид животного и его условия обитания.
  Так, у мухи в процессе эволюции развилась такая нервная система
  и такая работа нейромедиаторов в ганглиях (аналог мозга у насекомых),
  чтобы быстро уворачиваться от мухобойки.
  Ну хорошо, не от мухобойки, а от птиц,
  которые их ловили 400 миллионов лет
  (шутка, птицы сами появились 150 млн лет назад,
  скорее от лягушек 360 млн лет).
  А носорогу достаточно такой нервной системы и мозга,
  чтобы медленно повернуться в сторону цели и начать бежать.
  А там, как говорится, у носорога плохое зрение,
  но это уже не его проблемы.
  
  Но помимо эволюции, у каждой конкретной особи,
  начиная с рождения и в течении всей жизни,
  работает именно обычный механизм обучения с подкреплением.
  В случае млекопитающих, да и насекомых тоже,
  эту работу выполняет дофаминовая система.
  Ее работа полна тайн и нюансов,
  но все сводится к тому,
  что в случае получения награды,
  дофаминовая система, через механизмы памяти,
  как-то закрепляет связи между нейронами,
  которые были активны непосредственно до этого.
  Так формируется ассоциативная память.
  
  Которая, в силу своей ассоциативности,
  потом используется при принятии решений.
  Проще говоря, если текущая ситуация
  (текущие активные нейроны в этой ситуации)
  по ассоциативной памяти активируют нейроны памяти об удовольствии,
  то особь выбирает действия,
  которые она делала в похожей ситуации и которые запомнила.
  "Выбирает действия" - это плохое определение.
  Выбора нет.
  Просто активированные нейроны памяти об удовольствии,
  закрепленные дофаминовой системой для данной ситуации,
  автоматически активируют моторные нейроны,
  приводящие к сокращению мышц.
  Это если необходимо немедленное действие.
  
  Искусственному обучению с подкреплением, как области знаний,
  необходимо решить обе эти задачи:
  
  1. Подобрать архитектуру нейросети
  (что для нас уже сделала эволюция)
  
  Хорошая новость в том, что высшие когнитивные функции,
  выполняющиеся в неокортексе у млекопитающих
  (и в полосатом теле у врановых),
  выполняются в примерно однородной структуре.
  Видимо, для этого не нужно какой-то жестко прописанной "архитектуры".
  //// Интересный момент.
  
  Разноплановость областей мозга,
  вероятно, объясняется чисто историческими причинами.
  Когда по мере эволюции новые части мозга нарастали поверх базовых,
  оставшихся от самых первых животных.
  По принципу
  работает - не трогай.
  С другой стороны,
  у разных людей одинаковые части мозга реагируют на одинаковые ситуации.
  Это может объясняться как ассоциативностью
  (features и "нейроны бабушки" естественным образом сформировались
  в этих местах в процессе обучения),
  так и физиологией.
  Что сигнальные пути, закодированные в генах,
  ведут именно к этим областям.
  Единого мнения тут нет,
  но можно почитать, например, эту недавнюю статью:
  "Biological and artificial intelligence".
  
  2. Научиться обучать нейронные сети по принципам обучения с подкреплением
  
  Именно этим, в основном, и занимается современный Reinforcement Learning.
  И какие успехи?
  Не очень.
  
  Наивный подход
  
  Казалось бы, обучать нейросеть с подкреплением очень просто:
  делаем случайные действия,
  и если получили награду, то считаем сделанные действия "эталонными".
  Ставим их на выход нейросети как стандартные labels
  и обучаем нейронную сеть методом обратного распространения ошибки,
  чтобы она выдавала именно такой выход.
  Ну, самое обычное обучение нейросети.
  А если действия привели к неудаче,
  то либо игнорируем этот случай,
  либо подавляем эти действия
  (ставим эталонными на выходе какие-нибудь другие,
  например любое другое случайное действие).
  В общем и целом,
  эта идея повторяет дофаминовую систему.
  
  Но если вы попробуете так обучать любую нейронную сеть,
  неважно насколько сложной архитектуры,
  реккурентную, сверточную или обычную прямого распространения,
  то...
  Ничего не выйдет!
  
  Почему?
  Неизвестно.
  //// Тоже очень важное наблюдение.
  //// За полвека работ в этом направлении нет даже приемлемого объяснения
  //// почему не получается.
  //// Вот у остальных "дата сатанистов" всегда наготове аж две, или три
  //// выученные наизусть "формулы объяснений":
  //// во-первых, "переобучение",
  //// во-вторых, "локальные минимумы" или "седловые точки",
  //// в-третьих, плохой обучающий датасет - маленький, несбалансированный,
  //// зашумленный, нерепрезентативный, нерелевантный и еще куча терминов,
  //// короче "мусор на входе - мусор на выходе".
  //// А ведь тут вроде как ничего такого нет.
  //// Может надо что-то менять "в консерватории".
  
  Считается, что полезный сигнал настолько мал,
  что теряется на фоне шума.
  Поэтому стандартным методом обратного распространения ошибки
  сеть не обучается.
  Награда случается очень редко,
  может один раз из сотен или даже тысяч шагов.
  А даже LSTM запоминает максимум 100-500 точек истории,
  и то лишь в очень простых задачах.
  А на более сложных если будет 10-20 точек истории,
  то уже хорошо.
  
  Но корень проблемы именно в очень редких наградах
  (по крайней мере в задачах, представляющих практическую ценность).
  На данный момент мы не умеем обучать нейросети,
  которые запоминали бы единичные случаи.
  //// Вот оно!
  //// Эта способность человека обучаться на единичных примерах,
  //// и непонимание как ее смоделировать/повторить при обучении AI-ботов,
  //// и является, или во всяком случае, являлась до совсем недавнего времени
  //// камнем преткновения для ускоренного развития этого направления
  //// "машинного обучения".
  С чем мозг справляется с блеском.
  Можно что-то, случившееся всего один раз,
  запомнить на всю жизнь.
  И, кстати, большая часть обучения и работы интеллекта
  строится именно на таких случаях.
  
  Это что-то вроде жуткого дисбаланса классов
  из области распознавания изображений.
  Способов бороться с этим просто нет.
  Лучшее, что пока смогли придумать
  - это просто подавать на вход сети наравне с новыми ситуациями,
  сохраненные в искусственном специальном буфере
  удачные ситуации из прошлого.
  То есть, постоянно обучать не только новым случаям,
  но и удачным старым.
  Естественно, нельзя бесконечно увеличивать такой буфер,
  да и непонятно что именно в нем хранить.
  Еще пытаются как-то на время фиксировать
  пути внутри нейросети,
  бывшие активными во время удачного случая,
  чтобы последующее обучение их не перезаписывало.
  //// То самое увеличение "подводной" части.
  //// Для понимания, это отсылка к придуманной концепции
  //// многомерных/композитных нейросетей, подробнее см.:
  //// "Концепция композитной нейронки.",
  //// в которой есть возможность очень гибкого обучения нейросетей
  //// методом многокритериального/многократного обратного распространения.
  //// Собственно после появления этой концепции и захотелось,
  //// попробовать ее проверить на сложных задачах типа обучения с подкреплением.
  Довольно близкая аналогия к происходящему в мозге,
  на мой взгляд,
  хотя особых успехов в этом направлении тоже пока не добились.
  Так как новые обученные задачи в своем расчете используют
  и результаты выхода нейронов из замороженных путей,
  то в итоге сигнал только по этим замороженным интерферирует с новыми,
  и старые задачи перестают работать.
  Есть еще один любопытный подход:
  обучать сеть новым примерам/задачам
  только в ортогональном направлении к предыдущим задачам
  (https://arxiv.org/abs/1810.01256).
  Это не перезаписывает предыдущий опыт,
  но резко ограничивает емкость сети.
  //// Хорошая идея в том смысле, что нужно увеличивать пространство решений,
  //// например, по одной размерности на одну стратегию.
  //// Тоже стоит попробовать применить метод "потока Пуассона", подробнее см.
  //// "Применение "потока Пуассона" для эмбеддингов.",
  //// но чуть попозже, когда чуть-чуть обвыкнусь с этой темой.
  
  Отдельным классом алгоритмов,
  призванных бороться с этой бедой
  (а заодно дарящих надежду достичь сильного ИИ),
  идут разработки в Meta-Learning.
  Это попытки обучить нейросеть сразу нескольким задачам.
  Не в смысле, что распознавать разные картинки в одной задаче,
  а именно разным задачам в разных доменах
  (каждый со своим распределением и ландшафтом решений).
  Скажем, распознавать картинки и одновременно ездить на велосипеде.
  //// Представляется, что это должны быть разные "алгоритмы"/стратегии,
  //// и их нужно с самого начала разделить, точнее, дать возможность "разделиться",
  //// за счет увеличения размерности пространства решений.
  //// А это опять приводит к необходимости научиться обучать AI-агентов
  //// более эффективно, чем сейчас.
  Успехи пока тоже не очень,
  так как обычно все сводится к тому,
  чтобы заранее подготовить нейросеть с общими универсальными весами,
  а потом быстро, всего за несколько шагов градиентного спуска,
  доадаптировать их к конкретной задаче.
  Примеры алгоритмов метаобучения - MAML и Reptile.
  
  В общем, только эта проблема
  (невозможность учиться на единичных удачных примерах)
  ставит крест на современном обучении с подкреплением.
  Вся мощь нейросетей перед этим печальным фактом пока бессильна.
  //// Это тот самый случай, когда нужно изменение "структуры"
  //// не только сети, но и схемы обучения.
  
  Этот факт, что самый простой и очевидный способ не работает,
  заставил исследователей вернуться к классическому
  табличному Reinforcement Learning.
  Который как наука появился еще в седой древности,
  когда нейросети не были даже в проекте.
  Но теперь, вместо ручного подсчета значений в таблицах и в формулах,
  давайте в качестве целевых функций использовать такой мощный аппроксиматор,
  как нейронные сети!
  В этом вся суть современного Reinforcement Learning.
  И главное его отличие от обычного обучения нейросетей.
  //// Н-да. Нерадостная картинка.
  //// Но может что-то за последний пару лет изменилось?
  
  Q-learning и DQN
  
  Reinforcement Learning (еще до нейросетей)
  зародился как довольно простая и оригинальная идея:
  давайте делать, опять же, случайные действия,
  а потом для каждой ячейки в таблице и каждого направления движения,
  посчитаем по специальной формуле
  (получившей название уравнение Беллмана,
  это слово вы будете встречать практически в каждой работе
  по обучению с подкреплением),
  насколько хороша эта ячейка и выбранное направление.
  //// А вот насколько "хорош" сам принцип Беллмана,
  //// никто почему-то вопроса не ставит.
  //// Нельзя ставить под сомнение "святые истины".
  //// Но это отдельный большой и интересный вопрос.
  Чем выше получится это число,
  тем с большей вероятностью этот путь ведет к победе.
  
  ......
  
  В какой ячейке вы бы ни появились,
  двигайтесь по нарастанию зеленого цвета!
  (в сторону максимального числа по бокам текущей ячейки).
  
  Это число получило название Q
  (от слова quality - качество выбора, очевидно),
  а метод - Q-learning.
  Заменив формулу расчета этого числа на нейронную сеть,
  а точнее обучая нейронную сеть по этой формуле
  (плюс еще пара трюков, связанных чисто с математикой обучения нейросетей),
  в Deepmind получили метод DQN.
  Это который в 2015 году победил в куче Atari игр
  и положил начало революции в Deep Reinforcement Learning.
  
  К сожалению, этот метод по своей архитектуре
  работает только с дискретными discrete действиями.
  В DQN на вход нейросети подается текущий state
  (текущая ситуация),
  а на выходе нейросеть предсказывает число Q.
  А так как на выходе сети перечислены сразу все возможные действия
  (каждый со своим предсказанным Q),
  то получается что нейросеть в DQN
  реализует классическую функцию Q(s,a) из Q-learning.
  Выдает Q для state и action
  (поэтому обозначение Q(s,a) как функции от s и a).
  Мы просто ищем обычным argmax по массиву
  среди выходов сети ячейку с максимальным числом Q
  и делаем действие,
  которое соответствует индексу этой ячейки.
  
  Причем можно всегда выбирать действие с максимальным Q,
  тогда такая политика будет называться детерминистской.
  А можно выбирать действие как случайное из доступных,
  но пропорционально их Q-значениям
  (т.е. действия с высоким Q будут выбираться чаще, чем с низким).
  Такая политика называется стохастическая.
  У стохастического выбора плюс в том,
  что автоматически реализуется поиск и исследование мира (Exploration),
  так как каждый раз выбираются разные действия,
  иногда не кажущиеся самыми оптимальными,
  но могущие в будущем привести к большой награде.
  И тогда мы обучимся и повысим этим действиям вероятность,
  чтобы теперь они чаще выбирались согласно их вероятности.
  
  Но что делать, если вариантов действий бесконечно?
  Если это не 5 кнопок на джойстике в Atari,
  а continuous момент управления двигателем робота?
  Конечно, момент в диапазоне -1..1 можно разбить на поддиапазоны по 0.1,
  и в каждый момент времени выбирать один из этих поддиапазонов,
  словно нажатие джойстика в Atari.
  Но не всегда нужное число можно дискретизировать на интервалы.
  Представьте, что вы едете на велосипеде по горному пику.
  И можете поворачивать руль только на 10 градусов влево или вправо.
  В какой-то момент пик может стать настолько узким,
  что повороты на 10 градусов в обоих направлению приведут к падению.
  Это принципиальная проблема дискретных действий.
  А еще DQN не работает с большим размерностями,
  и на роботе даже с 17 степенями свободы просто не сходится.
  Все хорошо, но есть маленький нюанс, как говорится.
  
  В дальнейшем было разработано много оригинальных
  и местами гениальных алгоритмов на основе DQN,
  позволивших, в том числе, работать с continuous действиями
  (за счет хитростей и введения дополнительных нейросетей):
  DDQN, DuDQN, BDQN, CDQN, NAF, Rainbow.
  Пожалуй, сюда можно также отнести Direct Future Prediction (DFP),
  который роднится с DQN архитектурой сети и дискретными действиями.
  Вместо предсказания числа Q для всех действий,
  DFP напрямую предсказывает сколько на следующем шаге
  будет здоровья или патронов,
  если выбрать это действие.
  Причем на один шаг вперед и на несколько шагов вперед.
  Нам остается лишь перебрать все выходы сети
  и найти максимальное значение интересующего нас параметра
  и выбрать соответствующее этому элементу массива действие,
  в зависимости от текущих приоритетов.
  Например, если мы ранены,
  то можем среди выходов сети искать действие,
  ведущее к максимальному увеличению здоровья.
  
  Но что еще важнее,
  за последующее время были разработаны новые архитектуры
  специально для Reinforcement Learning.
  
  Policy Gradient
  
  Давайте на вход сети подавать текущий state,
  а на выходе сразу предсказывать действия
  (либо сами действия, либо распределение вероятностей для них
  в стохастической политике).
  Мы просто действуем, применяя actions, предсказанные нейросетью.
  А потом смотрим, какую награду R набрали за эпизод.
  Эта награда может быть либо выше начальной (когда выиграли в игре),
  либо ниже (проиграли в игре).
  Также можно награду сравнивать со некоей средней наградой.
  Выше она средней или ниже.
  
  Собственно, динамику полученной награды R в результате действий,
  которые подсказала нейросеть,
  можно использовать для вычисления градиента по специальной формуле.
  И применить этот градиент к весам нейросети!
  И дальше использовать обычное обратное распространение ошибки.
  Просто вместо "эталонных" действий на выходе сети в качестве labels
  (мы ведь не знаем какие они должны быть),
  используем изменение награды для расчета градиента.
  По этому градиенту сеть обучится,
  чтобы предсказывать действия,
  которые ведут к увеличению награды R.
  
  Это классический Policy Gradient.
  Но у него есть недостаток
  - надо ждать окончания эпизода,
  чтобы посчитать куммулятивную награду R,
  прежде чем изменять веса сети согласно ее изменению.
  А из преимуществ - гибкая система поощрений и наказаний,
  которая не только работает в обе стороны,
  но также зависит от величины награды.
  Большая награда сильнее поощряет действия,
  которые к ней привели.
  
  Actor-critic, DDPG
  
  А теперь представьте, что у нас есть две сети
  - одна предсказывает какие действия надо совершить,
  а вторая оценивает насколько эти действия хороши.
  То есть, выдает Q-число для этих действий, как в алгоритме DQN.
  На вход первой сети подается state,
  а она предсказывает action(s).
  Вторая сеть на вход тоже получает state, но еще и действия action,
  предсказанные первой сетью,
  а на выходе выдает число Q как функцию от них обоих: Q(s,a).
  
  Собственно, это число Q(s,a), выданное второй сетью
  (ее называют critic, критик),
  точно также можно использовать для вычисления градиента,
  которым обновлять веса первой сети
  (которую называют актером, actor),
  как мы делали выше с наградой R.
  Ну а вторая сеть обновляется обычным путем,
  согласно реальному прохождению эпизода.
  Этот метод получил название actor-critic.
  Его плюс по сравнению с классическим Policy Gradient,
  что веса сети можно обновлять на каждом шаге,
  не дожидаясь окончания эпизода.
  Что ускоряет обучение.
  
  В таком виде это сеть DDPG.
  Так как она предсказывает напрямую действия actions,
  то прекрасно работает с continuous действиями.
  DDPG является прямым continuous конкурентом DQN с его дискретными действиями.
  
  Advantage Actor Critic (A3C/A2C)
  
  Следующим шагом стало использование для обучения первой сети
  не просто предсказания критиком critic числа Q(s,a)
  - насколько хороши действия, предсказанные актером actor,
  как это было в DDPG.
  А насколько эти предсказанные действия оказались лучше или хуже,
  чем мы ожидали.
  
  Это очень близко к тому, что происходит в биологическом мозге.
  Из экспериментов известно,
  что максимальный выброс дофамина происходит
  не во время самого получения удовольствия,
  а во время ожидания,
  что скоро получим удовольствие.
  Впрочем, если ожидания не оправдались,
  то наступают ужасные последствия,
  большие чем в обычном случае
  (в организме присутствует специальная система наказания,
  обратная системе вознаграждения).
  //// Почему-то мне представляется,
  //// что попытка связать "обучение с подкреплением",
  //// с аналогиями работы человеческого мозга и нервной системы
  //// пока не сильно себя оправдывают.
  //// То же обратное распространение ошибки,
  //// такое эффективное в "машинном обучении",
  //// аналога в работе мозга и нервной системы не имеет от слова "совсем".
  
  Для этого для расчета градиентов стали использовать не число Q(s,a),
  а так называемое Advantage: A(s,a) = Q(s,a) - V(s).
  Число A(s,a) показывает не абсолютное качество Q(s,a) выбранных действий,
  а относительное преимущество
  - насколько после предпринятых действий станет лучше,
  чем текущая ситуация V(s).
  Если A(s,a) > 0, то градиент будет изменять веса нейросети,
  поощряя предсказанные сетью действия.
  Если A(s,a) < 0, то градиент будет изменять веса так,
  что предсказанные действия будут подавляться,
  т.к. они оказались плохие.
  
  В этой формуле V(s) показывает насколько хорош текущий state сам по себе,
  без привязки к действиям
  (поэтому зависит только от s, без a).
  Если мы стоим в шаге от вершины Эвереста
  - это очень хорошая ситуация state, с большим V(s).
  А если мы уже сорвались и падаем,
  то это офигеть какой плохой state, с низким V(s).
  
  К счастью, при таком подходе Q(s,a) можно заменить на награду r,
  которую получим после совершения действия,
  и тогда формула преимущества для расчета градиентов получается A = r - V(s).
  
  В таком случае, достаточно предсказывать только V(s)
  (а награду мы посмотрим уже по факту что получится в реальности),
  и две сети - actor и critic,
  можно объединить в одну!
  Которая получает на вход state,
  а на выходе разделяется на две головы head:
  одна предсказывает действия actions,
  а другая предсказывает V(s).
  Такое объединение помогает лучше переиcпользовать веса,
  т.к. обе сети должны на входе получать state.
  Впрочем, можно использовать и две отдельные сети.
  
  Учет и предсказание сетью качества текущей ситуации V(s)
  в любом случае помогает ускорить обучение.
  Так как при плохом V(s),
  где уже ничего нельзя исправить ни при каких действиях action
  (мы летим вниз головой с Эвереста),
  можно не искать дальше пути решения.
  Это используется в Dueling Q-Network (DuDQN),
  где Q(s,a) внутри сети специально раскладывается на Q(s,a) = V(s) + A(a),
  а потом собирается обратно.
  
  Asynchronous Advantage Actor Critic (A3C) означает всего лишь,
  что есть сервер, собирающий результаты от множества actor.
  И обновляющий веса как только набирается батч batch нужного размера.
  Поэтому асинхронный, что не ждет каждого actor.
  Это вроде как разбавляет примеры,
  убирая из них ненужную корреляцию, что улучшает обучение.
  С другой стороны, потом появился A2C - синхронная версия A3C,
  в которой сервер дожидается окончания эпизодов у всех actor
  и только после этого обновляет веса (поэтому синхронный).
  A2C тоже показывает хорошие результаты,
  поэтому применяются обе версии,
  в зависимости от вкуса разработчика.
  
  TRPO, PPO, SAC
  
  Собственно, на этом прогресс закончился.
  
  Не смотря на красивое и выглядящее логичным описание,
  все это работает не очень.
  Даже лучшие Reinforcement Learning алгоритмы
  требуют десятки миллионов примеров,
  сравнимы по эффективности со случайным поиском,
  а самое печальное, что не позволяет с их помощью создать сильный ИИ
  - работают лишь на крайне низких размерностях, исчисляемых единицами.
  Даже не десятками.
  
  Дальнейшее улучшение - TRPO и PPO,
  являющиеся сейчас state-of-the-art,
  являются разновидностью Actor-Critic.
  На PPO в настоящее время обучают большинство агентов в мире RL.
  К примеру, им обучали OpenAI Five для игры в Dota 2.
  
  Вы будете смеяться,
  но все что придумали в методах TRPO и PPO
  - это ограничивать изменение нейронной сети при каждом обновлении,
  чтобы веса резко не менялись.
  Дело в том, что в A3C/A2C бывают резкие изменения,
  которые портят предыдущий опыт.
  //// Вот опять напрашивается "подводная часть" для каждого веса нейрона,
  //// чтобы "амортизировать" такие перепады.
  //// И, наверно, эта причина является одной из основных почему AI-боты
  //// "плохо учатся" обратным распространением ошибки и градиентным спуском.
  Если сделать, чтобы новая policy не слишком отличалась от предыдущей,
  то можно избежать таких выбросов.
  Что-то вроде gradient clipping в рекуррентных сетях
  для защиты от взрывающихся градиентов,
  только на другом математическом аппарате.
  //// Либо на другой структуре сети, или хотя бы отдельного нейрона.
  Сам факт того, что приходится так грубо обрезать и ухудшать обучение
  (большие градиенты там ведь не просто так появились,
  они нужны для вызвавшего их примера),
  и что это дает положительный эффект,
  говорит о том, что мы свернули куда-то не туда.
  //// Или пошли сразу от неудачной точки старта.
  //// Или просто это ситуация какую принято называть "фальстартом".
  //// Т.е. под пристальное наблюдение стоит включить сами
  //// исходные положения "обучения с подкреплением",
  //// чтобы исключить, или хотя бы уменьшить, вероятность того,
  //// что проблема не "начальных постулатах",
  //// которые, за давностью лет, уже никто не решается подвергнуть сомнению.
  //// И парочка таких "кандидатов" из этих постулатов, уже имеется.
  
  В последнее время возрастающей популярность пользуется алгоритм
  Soft-Actor-Critic (SAC).
  Он не сильно отличается от PPO,
  только добавлена цель при обучении повышать энтропию в policy.
  Делать поведение агента более случайным.
  Нет, не так.
  Чтобы агент был способен действовать
  в более случайных ситуациях.
  Это автоматически повышает надежность политики,
  раз агент готов к любым случайным ситуациям.
  Кроме того, SAC требует немного меньше примеров для обучения, чем PPO,
  и менее чувствителен к настройке гиперпараметров,
  что тоже плюс.
  Однако даже с SAC, чтобы обучить бегать гуманоида с 17 степенями свободы,
  начиная с позиции стоя,
  нужно около 20 млн кадров и примерно сутки расчета на одном GPU.
  Более сложные начальные условия,
  скажем, научить вставать гуманоида из произвольной позы,
  может вообще не обучиться.
  
  Итого, общая рекомендация в современном Reinforcement Learning:
  использовать SAC, PPO, DDPG, DQN
  (в таком порядке, по убыванию).
  
  Model-Based
  
  Существует еще один интересный подход,
  косвенно касающийся обучения с подкреплением.
  Это построить модель окружающей среды,
  и использовать ее для прогнозирования,
  что произойдет если мы предпримем какие-то действия.
  
  Его недостатком является то, что он никак не говорит,
  какие действия нужно предпринять.
  Лишь об их результате.
  Но зато такую нейронную сеть легко обучать
  - просто обучаем на любой статистике.
  Получается что-то вроде симулятора мира на основе нейронной сети.
  
  После этого генерируем огромное количество случайных действий,
  и каждое прогоняем через этот симулятор (через нейронную сеть).
  И смотрим, какое из них принесет максимальную награду.
  Есть небольшая оптимизация
  - генерировать не просто случайные действия,
  а отклоняющиеся по нормальном закону от текущей траектории.
  И действительно, если мы поднимаем руку,
  то с большой вероятностью нужно продолжать ее поднимать.
  Поэтому в первую очередь нужно проверить
  минимальные отклонения от текущей траектории.
  
  Здесь фокус с том,
  что даже примитивный физический симулятор вроде MuJoCo или pyBullet
  выдает около 200 FPS.
  А если обучить нейронную сеть прогнозировать вперед хотя бы на несколько шагов,
  то для простых окружений легко можно за один раз получать батчи
  по 2000-5000 предсказаний.
  В зависимости от мощности GPU,
  в секунду можно получить прогноз для десятков тысяч случайных действий
  благодаря параллелизации в GPU
  и сжатости вычислений в нейросети.
  Нейросеть здесь просто выполняет роль очень быстрого симулятора реальности.
  
  Кроме того, раз уж нейросеть может прогнозировать реальный мир
  (это и есть model-based подход, в общем смысле),
  то можно проводить обучение целиком в воображении,
  так сказать.
  Эта концепция в Reinforcement Learning получила название Dream Worlds,
  или World Models.
  Это неплохо работает,
  хорошее описание есть тут:
  https://worldmodels.github.io.
  Кроме того, это имеет природный аналог - обычные сны.
  И многократная прокрутка недавних или планируемых событий в голове.
  
  Imitation Learning
  
  От бессилия, что алгоритмы Reinforcement Learning
  не работают на больших размерностях и сложных задачах,
  народ задался целью хотя бы повторить действия за экспертами в виде людей.
  Здесь удалось достичь неплохих результатов
  (недостижимых обычным Reinforcement Learning).
  Так, OpenAI получилось пройти игру Montezuma's Revenge.
  Фокус оказался прост
  - помещать агента сразу в конец игры
  (в конец показанной человеком траектории).
  Там с помощью PPO,
   благодаря близости финальной награды,
  агент быстро учится идти вдоль траектории.
  После этого помещаем его немного назад,
   где он быстро учится доходить до того места,
  которое он уже изучил.
  И так постепенно сдвигая точку "респавна" вдоль траектории
  до самого начала игры,
  агент учится проходить/имитировать траекторию эксперта
  в течении всей игры.
  //// Очень классное описание обучения с использованием "эксперта".
  //// И хорошая подсказка как организовывать последовательность обучения.
  //// Стоит подумать, а может быть в структуре U*-Net,
  //// начинать обучение не просто со случайной инициализации
  //// а скажем случайно-симметричной,
  //// т.е. в одной половинке U*-Net задать случайные веса,
  //// а затем их пересчитать на другую половину с учетом симметричности.
  //// Ладно, пока откладываем в сторонку, но можно/стоит подумать чуть дальше.
  //// Тут даже напрашивается и развитие такого симметричного подхода.
  //// если на начальном этапе у автоэнкодера половинки как-то симметричны,
  //// то ведь и при дальнейшем обучении
  //// ВОЗМОЖНО какая-то симметрия будет сохраняться,
  //// а это, как минимум, "информация к размышлению" о том,
  //// как это можно использовать или, хотя бы, что это может означать.
  //// А это сейчас ой как надо - ведь понимание того как обучаются нейросети,
  //// практически нулевое, точнее оставшееся на уровне полувековой давности.
  //// Опять дело за экспериментами, так что пока откладывается.
  
  Другой впечатляющий результат - повторение движений за людьми,
  снятые на Motion Capture: DeepMimic.
  Рецепт аналогичен методу OpenAI:
  каждый эпизод начинаем не с начала траектории,
  а со случайной точки вдоль траектории.
  Тогда PPO успешно изучает окрестности этой точки.
  
  Надо сказать, что нашумевший алгоритм Go-Explore от Uber,
  прошедший с рекордными очками игру Montezuma's Revenge,
  вообще не является алгоритмом Reinforcement Learning.
  Это обычный случайный поиск,
  но начиная со случайной посещенной ранее ячейки cell
  (огрубленной ячейки, в которую попадают несколько state).
  И только когда таким случайным поиском
  будет найдена траектория до конца игры,
  уже по ней с помощью Imitation Learning обучается нейросеть.
  Способом, аналогичным как в OpenAI,
  т.е. начиная с конца траектории.
  
  Curiosity (любопытство)
  
  Очень важным понятием в Reinforcement Learning является любопытство
  (Curiosity).
  В природе оно является двигателем для исследования окружающей среды.
  
  Проблема в том, что в качестве оценки любопытства
  нельзя использовать простую ошибку предсказания сети,
  что будет дальше.
  Иначе такая сеть зависнет перед первым же деревом с качающейся листвой.
  Или перед телевизором со случайным переключением каналов.
  Так как результат из-за сложности будет невозможно предсказать
  и ошибка всегда будет большой.
  Впрочем, именно это и является причиной,
  почему мы (люди) так любим смотреть на листву, воду и огонь.
  И на то, как другие люди работают =).
  Но у нас есть защитные механизмы,
  чтобы не зависнуть навечно.
  
  Один из таких механизмов придумали как Inverse Model
  в работе Curiosity-driven Exploration by
  
  Self-supervised Prediction.
  Если коротко, агент (нейронная сеть) кроме того,
  что предсказывает какие действия лучше всего совершить в данной ситуации,
  дополнительно пытается предсказать что будет с миром
  после совершенных действий.
  И использует это свое предсказание мира для следующего шага,
  чтобы по нему и по текущему шагу
  обратно предсказать свои же предпринятые ранее действия
  (да, сложно, без поллитра не разобраться).
  
  Это приводит к любопытному эффекту:
  агент становится любопытным только к тому,
  на что он может повлиять своими действиями.
  На качающиеся ветки дерева он никак не может повлиять,
  поэтому они становятся ему неинтересны.
  А вот походить по округе он может,
  поэтому ему любопытно ходить и исследовать мир.
  
  Однако если у агента будет пульт от телевизора,
  переключающий случайные каналы,
  то он может на него повлиять!
  И ему будет любопытно щелкать каналы до бесконечности
  (так как не может предсказать, какой будет следующий канал, т.к. он случайный).
  Попытка обойти эту проблему предпринята в Google
  в работе Episodic Curiosity through Reachability.
  
  Но, пожалуй, лучший state-of-the-art результат по любопытству,
  на данный момент принадлежит OpenAI с идеей Random Network Distillation (RND).
  Ее суть в том, что берется вторая,
  совершенно случайно инициализированная сеть,
  и ей на вход подается текущий state.
  А наша основная рабочая нейросеть
  пытается угадать выход этой нейросети.
  Вторая сеть не обучается,
  она остается все время фиксированной как была инициализирована.
  
  В чем смысл?
  Смысл в том, что если какой-либо state уже был посещен
  и изучен нашей рабочей сетью,
  то она более менее успешно сможет предсказывать
  выход той второй сети.
  А если это новый state,
  где мы никогда не были,
  то наша нейросеть не сможет предсказать выход той RND сети.
  Эта ошибка в предсказании выхода
  той случайно инициализированной сети
  используется как показатель любопытства
  (дает высокие награды, если в данной ситуации не можем предсказать ее выход).
  
  Почему это работает,
  не совсем понятно.
  //// Опять "не понятно". И сколько таких "непоняток" уже насчитал автор?
  Но пишут, что это устраняет проблему
  когда цель предсказания стохастическая
  и когда недостаточно данных,
  чтобы самому сделать предсказание что будет дальше
  (что дает большую ошибку предсказания в обычных алгоритмах любопытства).
  Так или иначе,
  но RND реально показал отличные результаты
  по исследованию на основе любопытства в играх.
  И справляется с проблемой случайного телевизора.
  
  С помощью RND любопытства в OpenAI впервые честно
  (а не через предварительный случайный поиск, как в Uber)
  прошли первый уровень Montezuma's Revenge.
  Не каждый раз и ненадежно,
  но время от времени получается.
  
  Что в итоге?
  
  Как видите, всего за несколько лет Reinforcement Learning прошел долгий путь.
  Не просто несколько удачных решений, как в сверточных сетях,
  где resudal и skip connections позволили тренировать сети
  глубиной в сотни слоев,
  вместо десятка слоев с одной только функцией активации Relu,
  поборовшей проблему исчезающих градиентов в сигмоиде и tanh.
  В обучении с подкреплением произошел прогресс
  в концепциях и понимании причин,
  почему не заработал тот или иной наивный вариант реализации.
  Ключевое слово "не заработал".
  
  Но с технической стороны все по прежнему упирается
  в предсказания все тех же Q, V или A значений.
  //// Т.е. "в консерваторию".
  Ни временных зависимостей на разных масштабах,
  как в мозге
  (Hierarchical Reinforcement Learning не в счет,
  уж больно примитивная в нем иерархия по сравнению
  с ассоциативностью в живом мозге).
  Ни попыток придумать архитектуру сети,
  заточенную именно под обучение с подкреплением,
  как это произошло с LSTM и другими рекуррентными сетями
  для временных последовательностей.
  //// Интересно почему?
  Reinforcement Learning либо топчется на месте,
  радуясь небольшим успехам,
  либо движется в каком-то совсем уж неправильном направлении.
  
  Хочется верить, что однажды в обучении с подкреплением
  произойдет прорыв в архитектуре нейронных сетей,
  аналогичный тому что произошел в сверточных сетях.
  И мы увидим по-настоящему работающее обучение с подкреплением.
  Обучающееся на единичных примерах,
  с работающей ассоциативной памятью
  и работающее на разных временных масштабах.
  
  ......
  
  //// Очень рекомендую почитать комментарии к этой статье.
  //// В них очень выпукло проиллюстрировано
  //// определенный конфликт в самой методологии
  //// этого направления "машинного обучения".
  //// С одной стороны желание как можно ближе скопировать
  //// сегодняшнее представление о работе человеческого мозга
  //// а с другой стороны невозможность и непонимание как это сделать,
  //// и в итогк практический "бег по кругу" самых начальных идей,
  //// которые были сформулированы чуть ли не 50 лет назад.
  //// Безусловно, с каким-то "градиентом" в сторону улучшения,
  //// но революционных прорывов пока не очень заметно.
  
  //// Например, такое:
  
  
  \\\ DesertFlow
  \\\ 23 янв 2019 в 16:53
  
  .....
  
  \\\ Существующие алгоритмы Reinforcement Learning,
  \\\ при всей их идейной правильности
  \\\ (предсказывать Q(s,a) или V(s)
  \\\ и рассчитывать на его основе A(s,a)),
  \\\ реализованы явно неправильно.
  \\\ Не соответствуют тому,
  \\\ что мы видим в работе живых систем.
  \\\ Нет обучения по единичным удачным случаям,
  \\\ нет нормальной памяти и ассоциативности.
  
  \\\ Тут во многом проблема аппаратной привязки.
  \\\ Deep Reinforcement Learning использует наработки по обучению
  \\\ обычных статичных нейросетей
  \\\ - фреймворки и библиотеки для работы на GPU.
  \\\ Существует ведь много более подходящих
  \\\ (в теории)
  \\\ архитектур нейросетей для обучения с подкреплением:
  \\\ спайковые, разреженные и т.д.
  \\\ Но нет быстрой матричной реализации на GPU
  \\\ - и они простаивают в безвестности.
  \\\ Возможно, ожидая своего звездного часа,
  \\\ как это произошло с LSTM,
  \\\ изобретенной еще в далеком 1997 году,
  \\\ задолго до всплеска интереса к машинному обучению.
  
  ......
  
  //// Конец цитирования.
  
  Вот такие вот дела и проблемы у "обучения с подкреплением",
  были отмечены "каких-то" пять лет назад,
  Что с тех пор принципиально изменилось, пока не знаю.
  Но каких-то "откровений" в этой области на Хабре в прошлом году не заметил,
  или "прошел мимо" как "пока непонятные".
  Теперь буду специально следить за этой темой,
  хотя быстрый поиск пока ничего более-менее свежего не дает
  - весь год основные материалы были по ГПТэшкам,
  Но, может быть, в этом году что-то изменится.
  
  
  ======
  
  11.01.2024 16:54
  
  Классическое изложение обучения с подкреплением.
  В оглавление.
  
  Ну и настало время познакомиться с классическим введением
  в обучение с подкреплением, которое если начать читать с самого начало,
  может навсегда отбить охоту даже интересоваться этой областью
  "машинного обучения", а не только пытаться разбираться в ней поглубже.
  Потому что "классическое" обучение с подкреплением,
  не только изобилует спец терминами, но еще и густо замешано на "спецматематике",
  от которой у нормального человека начинается "зубовный скрежет".
  Но надо понимать, что это следствие той эпохи когда
  "компьютеры были совсем маленьким", а задачи хотелось решить "очень большие",
  то использование в этой области различных статистик и теории вероятностей
  было вполне оправданным.
  
  Вот только не совсем удачные общие результаты в этой области "машинного обучения",
  и, наоборот, отдельные успехи, но мало связанные с математикой,
  а больше с удачными инженерными решениями,
  могли бы навести на мысль,
  что может быть стоит уделять больше внимания "инженерии", а не "математике".
  Но что есть, то есть "классическое введение в обучение с подкреплением",
  практически всегда начинается с "математики".
  
  Возможно, для кого-то это наоборот "показатель академического качества",
  и он балдеет от "завернутых формул",
  но, Ваш покорный слуга, себя к таким не причисляет.
  Но ссылку на этот материал считаю нужным порекомендовать,
  так как из него можно тоже почерпнуть кое-что интересно,
  причем как раз в области "математики":
  
  Учебник по машинному обучению
  8.1. Обучение с подкреплением
  Автор(ы): Иванов Сергей
  https://education.yandex.ru/handbook/ml/article/obuchenie-s-podkrepleniem
  
  Полностью цитировать этот текст не вижу особой необходимости,
  но кое-что процитирую дословно, чтобы было понятно,
  что именно в этом материале заинтересовало.
  
  //// Начало цитирования.
  
  .......
  
  Постановка задачи
  
  Теперь попробуем формализовать всю эту концепцию
  и познакомиться с местной терминологией.
  Задача обучения с подкреплением задаётся
  Марковским Процессом Принятия Решений
  (Markov Decision Process или сокращённо MDP)
  //// Вот это одна из канонических парадигм "обучения с подкреплением".
  //// "Марковость" процесса. Нигде под сомнение не ставится,
  //// но зато изобретаются все новые и новые "костыли",
  //// когда задача явно не соответствует этой парадигме.
  //// Основной смысл этой парадигм, что вероятность каждого следующего состояния,
  //// зависит только от текущего состояния и действия. И точка.
  //// И к этой "формуле" пытаются привести конкретную задачу,
  //// потому, что для этой "формулы" есть теоретическое решение.
  //// Типичный "математический подход"
  //// - сведение задачи к уже известной/решенной.
  //// Сколько же есть анекдотов на эту тему, а тут не анекдот, а "правда жизни".
  это четвёрка,
  где:
  
  - пространство состояний (state space),
  множество состояний, в которых в каждый момент времени может находится среда.
  
  - пространство действий (action space),
  множество вариантов, из которых нужно производить выбор
  на каждом шаге своего взаимодействия со средой.
  
  - функция переходов (transition function),
  которая задаёт изменение среды после того,
  как в состоянии было выбрано действие.
  В общем случае функция переходов может быть стохастична,
  и тогда такая функция переходов моделируется распределением:
  с какой вероятностью в какое состояние перейдёт среда
  после выбора действия в состоянии.
  
  - функция награды (reward function),
  выдающая скалярную величину за выбор действия в состоянии.
  Это наш <обучающий сигнал>.
  
  Традиционно субъект, взаимодействующий со средой и влияющий на неё,
  называется в обучении с подкреплением агентом (agent).
  Агент руководствуется некоторым правилом,
  возможно, тоже стохастичным,
  как выбирать действия в зависимости от текущего состояния среды,
  которое называется стратегией (policy;
  термин часто транслитерируют и говорят политика)
  и моделируется распределением.
  Стратегия и будет нашим объектом поиска,
  поэтому, как и в классическом машинном обучении,
  мы ищем какую-то функцию.
  
  Взаимодействие со средой агента со стратегией моделируется так.
  Изначально среда находится в некотором состоянии.
  Агент сэмплирует действие из своей стратегии.
  Среда отвечает на это, сэмплируя своё следующее состояние из функции переходов,
  а также выдаёт агенту награду в размере.
  Процесс повторяется:
  агент снова сэмплирует, а среда отвечает генерацией и скалярной наградой.
  Так продолжается до бесконечности
  или пока среда не перейдёт в терминальное состояние,
  после попадания в которое взаимодействие прерывается,
  и сбор агентом награды заканчивается.
  Если в среде есть терминальные состояния,
  одна итерация взаимодействия от начального состояния
  до попадания в терминальное состояние называется эпизодом (episode).
  Цепочка генерируемых в ходе взаимодействия случайных величин
  называется траекторией (trajectory).
  
  Примечание: функция награды тоже может быть стохастичной,
  и тогда награды за шаг тоже будут случайными величинами и частью траекторий,
  но без ограничения общности мы будем рассматривать
  детерминированные функции награды.
  
  Итак, фактически среда для нас - это управляемая марковская цепь:
  на каждом шаге мы выбором определяем то распределение,
  из которого будет генерироваться следующее состояние.
  Мы предполагаем, во-первых, марковское свойство:
  что переход в следующее состояние определяется лишь текущим состоянием
  и не зависит от всей предыдущей истории:
  
  Во-вторых, мы предполагаем стационарность:
  функция переходов не зависит от времени,
  от того, сколько шагов прошло с начала взаимодействия.
  Это довольно реалистичные предположения:
  законы мира не изменяются со временем (стационарность),
  а состояние - описывает мир целиком (марковость).
  В этой модели взаимодействия есть только одно нереалистичное допущение:
  полная наблюдаемость (full observability),
  которая гласит, что агент в своей стратегии наблюдает всё состояние полностью
  и может выбирать действия, зная об окружающем мире абсолютно всё;
  в реальности нам же доступны лишь какие-то частичные наблюдения состояния.
  Такая более реалистичная ситуация моделируется в частично наблюдаемых MDP
  (Partially observable MDP, PoMDP),
  но мы далее ограничимся полностью наблюдаемыми средами.
  //// Вот это то самое - "сведение к известному".
  
  ......
  
  Выбор того действия, на котором достигается максимум по действиям Q-функции,
  называется жадным (greedy) по отношению к ней.
  Таким образом, принцип оптимальности Беллмана гласит:
  жадный выбор по отношению к оптимальной Q-функции оптимален:
  //// А вот это еще одна "краеугольная истина" "обучения с подкреплением",
  //// именно ради обоснования использования этого "принцип оптимальности Беллмана",
  //// и используются все ухищрения и "костыли" по приведению задачи
  //// к форме "Марковского Процесса Принятия Решений" (MDP).
  
  Примечание:
  если Q-функция достигает максимума на нескольких действиях,
  то можно выбирать любое из них.
  
  Заметим, что эта оптимальная стратегия детерминирована.
  Этот интересный факт означает,
  что нам, в общем-то, необязательно искать стохастичную стратегию.
  Наше рассуждение пока даже показывает,
  что мы можем просто пытаться найти,
  а дальше выводить из неё оптимальную стратегию,
  выбирая действие жадно.
  
  .......
  
  А значит, верно следующее рекурсивное соотношение,
  называемое уравнением оптимальности Беллмана для Q-функции:
  //// Вот это и есть "Главное Уравнение" "обучения с подкреплением".
  //// Во всяком случае, основные решения основаны на нем.
  
  Мы получили систему уравнений, связывающую значения с самой собой. Э
  то нелинейная система уравнений, но оказывается,
  что она в некотором смысле <хорошая>.
  У неё единственное решение - и, значит, решение этого уравнения
  можно считать эквивалентным определением ,
  - и его можно искать методом простой итерации.
  Метод простой итерации решения систем уравнений
  позволяет улучшать своё текущее приближение решения некоторого уравнения вида
  его подстановкой в правую часть.
  То есть: инициализируем произвольную функцию,
  которая будет приближать, затем итеративно будем подставлять её
  в правую часть уравнений оптимальности Беллмана
  и полученным значением обновлять наше приближение:
  
  Такая процедура в пределе приведёт нас к истинной,
  а значит и оптимальной стратегии.
  Кстати, когда вы в прошлом встречались с динамическим программированием,
  вы скорее всего неявно использовали именно эту идею,
  разве что часто в задачах для решения уравнений оптимальности Беллмана
  можно просто последовательно исключать неизвестные переменные;
  но метод простой итерации даёт более общую схему,
  применимую всегда.
  А сейчас для нас принципиально следующее:
  если у нас есть какое-то приближение,
  то вычисление правой части уравнения оптимальности Беллмана
  позволит получить приближение лучше.
  //// Вот в этой парадигме, мне сейчас, и видится основная проблема.
  //// Так как в жизни очень часто бывает совершенно наоборот,
  //// от принятого в данный момент решения,
  //// в будущем уже мало, что можно изменить, м, соответственно,
  //// улучшить "катастрофическое решение", скорее только еще ухудшить.
  //// И в итоге при обучении это приводит к тем самым "взрывающимся градиентам",
  //// которые и препятствуют "нормальному обучению" обычными средствам.
  //// "Но это не точно".
  
  .......
  
  //// Конец цитирования.
  
  В общем, у меня есть сомнения в абсолютной надежности и незыблемости
  "краеугольных постулатов" самой теоретической основы "обучения с подкреплением".
  Так что наряду с анализом конкретных технических решений,
  ну, это просто "инженерия",
  придется вкапываться еще и "математический фундамент".
  А это дело непростое и небыстрое.
  
  
  =======
  
  12.01.2024 11:41
  
  Комментарии Bing к "краеугольным постулатам" RL.
  В оглавление.
  
  Решил задать самые "жгучие вопросы" относительно "мучающих меня сомнений Bing.
  Вот некоторые фрагменты диалогов.
  
  02.01.2023 13:40
  
  .....
  
  //// Спасибо, Бинг. Обучение "обучению с подкреплением" по-тихоньку продолжается.
  //// Ваши ссылки уже проработал.
  //// Что-то еще прояснилось.
  //// Понятно, что эта область еще только развивается,
  //// много нерешенных вопросов,
  //// но и сегодняшнее продвижение от начальной постановки задачи
  //// тоже существенное и разнонаправленное.
  //// Причем, чем дальше тем все дальше от исходных "математических основ".
  //// Но пока не очень сильно,
  //// во всяком случае, в большинстве материалов,
  //// эти "математические основы" постоянно упоминаются,
  //// а иногда и вообще с них начинается изложение материала,
  //// чтобы сказать в конце,
  //// что это "вообще-то некоторое упрощение"
  //// и в реальных задачах приходится придумывать не "математические формулы",
  //// а "инженерные/полуэвристические решения".
  //// В общем меня такая ситуация в общем-то устраивает.
  //// Но чтобы не быть совсем уж "белой вороной" в этой области,
  //// хотелось бы с Вами сегодня обсудить именно эту "математическую основу"
  //// "обучения с подкреплением".
  //// Общую идею я понял,
  //// но хотелось бы уточнить некоторые частности,
  //// чтобы иметь более полную картину.
  
  Bing 13:54
  
  .......
  
  Математическая основа обучения с подкреплением
  основывается на теории оптимального управления, теории игр,
  теории вероятностей и теории статистического обучения.
  Основные понятия и методы, которые используются в обучении с подкреплением,
  включают:
  
   Марковский процесс принятия решений (МППР)
  - это математическая модель,
  которая описывает взаимодействие агента со средой в дискретном времени.
  МППР состоит из следующих компонентов:
  множество состояний $S$,
  множество действий $A$,
  функция переходов $P$,
  функция вознаграждения $R$
  и фактор дисконтирования $\gamma$.
  МППР удовлетворяет свойству Маркова,
  то есть вероятность следующего состояния и вознаграждения
  зависит только от текущего состояния и действия,
  а не от всей истории.
  
   Политика (policy) - это правило или алгоритм,
  который определяет, какое действие выбрать в каждом состоянии.
  Политика может быть детерминированной,
  то есть выдавать одно действие для каждого состояния,
  или стохастической,
  то есть выдавать распределение вероятностей по действиям для каждого состояния.
  Политика может быть задана явно,
  например, в виде таблицы или функции,
  или неявно, например, в виде нейронной сети или дерева поиска.
  
   Функция ценности (value function)
  - это функция, которая оценивает, насколько хорошо или плохо
  находиться в определенном состоянии
  или выбирать определенное действие при заданной политике.
  Функция ценности показывает ожидаемую сумму дисконтированных вознаграждений,
  которые агент может получить в будущем,
  следуя политике.
  Существуют два основных типа функций ценности:
  функция состояний $V^\pi(s)$,
  которая оценивает состояния,
  и функция действий $Q^\pi(s, a)$,
  которая оценивает пары состояние-действие.
  
   Алгоритмы обучения с подкреплением
  - это алгоритмы, которые позволяют агенту
  находить оптимальную политику и/или функцию ценности,
  используя свой опыт взаимодействия со средой.
  Алгоритмы обучения с подкреплением делятся на две основные категории:
  основанные на модели и безмодельные.
  Основанные на модели алгоритмы используют или строят модель среды,
  то есть функции переходов и вознаграждения,
  и применяют методы динамического программирования,
  такие как алгоритмы итерации по политике или итерации по ценности,
  для нахождения оптимальной политики и/или функции ценности.
  Безмодельные алгоритмы не используют или не строят модель среды,
  а обновляют политику и/или функцию ценности на основе полученных наблюдений
  и вознаграждений.
  Безмодельные алгоритмы делятся на два типа:
  основанные на политике и основанные на ценности.
  Основанные на политике алгоритмы напрямую улучшают политику,
  используя градиентный подъем или эволюционные методы.
  Основанные на ценности алгоритмы косвенно улучшают политику,
  обновляя функцию ценности,
  используя различные варианты уравнения Беллмана,
  такие как алгоритмы TD-обучения, Q-обучения или SARSA.
  Существуют также гибридные алгоритмы,
  которые комбинируют элементы основанных на политике
  и основанных на ценности алгоритмов,
  такие как алгоритмы актор-критик.
  
  ........
  
  //// Спасибо, Бинг. Общее представление понятно.
  //// Теперь попробуем разобраться с "деталями".
  //// Идем последовательно.
  //// Начнем с пункта, который у меня вызывает наибольшее "сомнение":
  //// "МППР удовлетворяет свойству Маркова,
  //// то есть вероятность следующего состояния и вознаграждения
  //// зависит только от текущего состояния и действия,
  //// а не от всей истории."
  //// Представляется, что в реальной ситуации это далеко не так,
  //// и "история" все-таки имеет "значение",
  //// просто она - история - записывается/проявляется/выражается
  //// через какие-то неявные/скрытые параметры,
  //// типа скорости/инерции/памяти и т.д.
  //// Что при реализации реальных систем как-то учитывается
  //// либо в схеме обучения либо вообще в структуре обучаемой нейросети-агента.
  //// Вот как это "ограничение марковости" реально обходится в конкретных случаях?
  
  Bing 14:26
  
  .....
  
  Вы правы, что в реальной ситуации свойство Маркова
  может не выполняться,
  и <история> может иметь <значение> для выбора оптимального действия.
  Например, если агент играет в шахматы,
  то ему важно знать не только текущее положение фигур на доске,
  но и предыдущие ходы,
  чтобы анализировать стратегию противника
  и избегать повторения позиций.
  В таких случаях мы говорим,
  что среда частично наблюдаема (partially observable),
  то есть агент не имеет доступа к всей информации о состоянии среды.
  
  Существуют разные способы обходить <ограничение марковости>
  в конкретных случаях,
  которые зависят от типа и сложности задачи,
  а также от способа представления и обновления
  политики и функции ценности агента.
  Например, один из способов
  - это использование расширенного состояния (augmented state),
  которое включает в себя не только текущее наблюдение,
  но и некоторые предыдущие наблюдения, действия или вознаграждения.
  Таким образом, агент может учитывать <историю> в своем решении.
  Однако, этот способ может быть неэффективным,
  если <история> слишком длинная или сложная.
  
  Другой способ - это использование рекуррентной нейронной сети (RNN)
  в качестве политики или функции ценности агента.
  RNN - это тип нейронной сети,
  который имеет память или скрытое состояние,
  которое обновляется на каждом шаге в зависимости от входных данных.
  RNN может извлекать и сохранять важные признаки
  из последовательности данных,
  таких как текст, речь или видео.
  RNN может быть обучена с помощью обратного распространения через время (BPTT),
  которое учитывает зависимости между последовательными данными.
  RNN может помочь агенту учитывать <историю> в своем решении,
  используя свою память.
  Однако, RNN может страдать от проблемы исчезающего или взрывающегося градиента,
  которая затрудняет обучение долгосрочных зависимостей.
  
  Третий способ - это использование модели среды (environment model)
  в качестве дополнительного источника информации для агента.
  Модель среды - это функция или алгоритм,
  который предсказывает следующее состояние и вознаграждение
  по текущему состоянию и действию.
  Модель среды может быть построена аналитически,
  если известны точные правила среды,
  или обучена эмпирически,
  если известны только наблюдения и вознаграждения.
  Модель среды может помочь агенту учитывать <историю> в своем решении,
  используя свои предсказания.
  Однако, модель среды может быть неточной, неполной или сложной,
  что может привести к ошибкам или неоптимальности.
  
  ......
  
  //// Вы упомянули "функции ценности", "функции Q-ценности"
  //// и в просмотренной литературе встречал еще и "функции Q*-ценности"
  //// - не могли ли Вы пояснить разницу между ними
  //// и, желательно, с какими-то простыми примерами?
  
  Bing 15:40
  
  ......
  
  Функция ценности - это функция, которая оценивает,
  насколько хорошо или плохо находиться в определенном состоянии
  или выбирать определенное действие при заданной политике.
  Функция ценности показывает ожидаемую сумму дисконтированных вознаграждений,
  которые агент может получить в будущем,
  следуя политике.
  
  Функция Q-ценности - это один из типов функций ценности,
  которая оценивает пары состояние-действие.
  Функция Q-ценности обозначается как $Q^\pi(s, a)$,
  где $\pi$ - это политика, $s$ - это состояние, а $a$ - это действие.
  Функция Q-ценности показывает ожидаемую сумму дисконтированных вознаграждений,
  которые агент может получить в будущем,
  если он выберет действие $a$ в состоянии $s$
  и затем следует политике $\pi$.
  
  Функция Q*-ценности - это оптимальная функция Q-ценности,
  которая оценивает пары состояние-действие при оптимальной политике.
  Функция Q*-ценности обозначается как $Q^(s, a)$,
  где $s$ - это состояние, а $a$ - это действие.
  Функция Q*-ценности показывает
  максимальную ожидаемую сумму дисконтированных вознаграждений,
  которые агент может получить в будущем,
  если он выберет действие $a$ в состоянии $s$
  и затем следует оптимальной политике.
  
  Примеры использования функций ценности, Q-ценности и Q*-ценности:
  
   Представим, что агент находится в лабиринте,
  где его цель - найти выход.
  Состояния среды - это клетки лабиринта,
  действия агента - это перемещения вверх, вниз, влево или вправо.
  Вознаграждение агента - это 1, если он достиг выхода,
  и 0 в противном случае.
  Фактор дисконтирования - это 0.9,
  то есть агент предпочитает более скорое вознаграждение.
  
   Функция ценности агента - это функция,
  которая оценивает, насколько хорошо находиться в каждой клетке лабиринта
  при заданной политике.
  Например, если политика агента - это всегда идти вправо,
  то функция ценности агента будет высокой для клеток,
  которые близки к выходу справа,
  и низкой для клеток,
  которые далеки от выхода или заблокированы стенами.
  Функция ценности агента помогает ему оценить,
  насколько эффективна его политика.
  
   Функция Q-ценности агента - это функция,
  которая оценивает, насколько хорошо выбирать каждое действие
  в каждой клетке лабиринта при заданной политике.
  Например, если политика агента - это всегда идти вправо,
  то функция Q-ценности агента будет высокой для действия <вправо>
  в клетках, которые близки к выходу справа,
  и низкой для действия <вправо> в клетках,
  которые заблокированы стенами.
  Функция Q-ценности агента помогает ему оценить,
  насколько выгодно отклоняться от своей политики.
  
   Функция Q*-ценности агента - это функция,
  которая оценивает, насколько хорошо выбирать каждое действие
  в каждой клетке лабиринта при оптимальной политике.
  Например, если оптимальная политика агента
  - это всегда идти к выходу по кратчайшему пути,
  то функция Q*-ценности агента будет высокой для действий,
  которые приближают его к выходу,
  и низкой для действий, которые отдаляют его от выхода
  или заблокированы стенами.
  Функция Q*-ценности агента помогает ему найти
  и следовать оптимальной политике.
  
  .......
  
  //// Спасибо, Бинг.
  //// Вроде понятно. Теоретически,
  //// но как практически этим пользоваться, пока трудно сообразить.
  //// Т.е., похоже, тут вопрос в том,
  //// как эта оценка "ценности" появляется и как улучшается.
  //// Можете Вы этот момент прояснить?
  
  Bing 15:55
  
  .....
  
  Оценка <ценности> появляется и улучшается
  с помощью алгоритмов обучения с подкреплением,
  которые позволяют агенту находить оптимальную политику и/или функцию ценности,
  используя свой опыт взаимодействия со средой.
  
  Существуют разные типы алгоритмов обучения с подкреплением,
  которые различаются по способу представления и обновления
  политики и функции ценности.
  Например:
  
   Основанные на модели алгоритмы используют или строят модель среды,
  то есть функции переходов и вознаграждения,
  и применяют методы динамического программирования,
  такие как алгоритмы итерации по политике или итерации по ценности,
  для нахождения оптимальной политики и/или функции ценности.
  Эти алгоритмы требуют точной и полной модели среды,
  но могут быть эффективными в сложных задачах.
  
   Безмодельные алгоритмы не используют или не строят модель среды,
  а обновляют политику и/или функцию ценности
  на основе полученных наблюдений и вознаграждений.
  Эти алгоритмы не требуют модели среды,
  но могут быть нестабильными или медленными в обучении.
  
   Основанные на политике алгоритмы напрямую улучшают политику,
  используя градиентный подъем или эволюционные методы.
  Эти алгоритмы могут работать с непрерывными пространствами действий,
  но могут быть неэффективными в исследовании среды.
  
   Основанные на ценности алгоритмы косвенно улучшают политику,
  обновляя функцию ценности,
  используя различные варианты уравнения Беллмана,
  такие как алгоритмы TD-обучения, Q-обучения или SARSA.
  Эти алгоритмы могут работать с дискретными пространствами действий,
  но могут страдать от проблемы проклятия размерности.
  
   Гибридные алгоритмы, которые комбинируют элементы
  основанных на политике и основанных на ценности алгоритмов,
  такие как алгоритмы актор-критик.
  Эти алгоритмы могут совмещать преимущества обоих подходов,
  но могут быть сложными в реализации и настройке.
  
  ......
  
  //// Теперь такой момент: "методы динамического программирования".
  //// Можете их охарактеризовать/разъяснить их
  //// применительно к задаче "обучения с подкреплением",
  //// так как в литературе они обычно упоминаются как "хорошо известные",
  //// но как конкретно в данном случае они работают
  //// при этом остается достаточно "смутным".
  //// Насколько я понял, вся теория основана на "принципе Беллмана",
  //// а он, в свою очередь,
  //// на итеративной процедуре приводящей к какому-то оптимуму.
  //// Вот пояснить это на примерах можно?
  //// Или подправить, если я что-то не так понял.
  
  Bing 16:24
  
  ......
  
  Динамическое программирование - это метод решения сложных задач,
  которые можно разбить на более простые подзадачи,
  и использовать результаты решения подзадач
  для решения исходной задачи.
  Динамическое программирование использует принцип оптимальности Беллмана,
  который гласит,
  что оптимальная стратегия имеет свойство,
  что независимо от предыдущих действий,
  оптимальное решение из текущего состояния
  зависит только от оптимальных решений из последующих состояний.
  
  В обучении с подкреплением,
  динамическое программирование используется
  для нахождения оптимальной политики и/или функции ценности,
  когда известна точная и полная модель среды,
  то есть функции переходов и вознаграждения.
  Среда обычно описывается в форме марковского процесса принятия решений (МППР),
  поскольку многие алгоритмы обучения с подкреплением для этого контекста
  используют методы динамического программирования.
  
  Существуют два основных метода динамического программирования
  в обучении с подкреплением,
  которые различаются по способу обновления политики и функции ценности:
  
   Итерация по политике (Policy Iteration)
  - это метод, который чередует два шага:
  оценку политики и улучшение политики.
  На шаге оценки политики,
  метод вычисляет функцию ценности для заданной политики,
  используя уравнение Беллмана для состояний или пар состояние-действие.
  На шаге улучшения политики,
  метод обновляет политику, выбирая действие,
  которое максимизирует функцию ценности в каждом состоянии.
  Этот процесс повторяется,
  пока политика не станет оптимальной.
  
   Итерация по ценности (Value Iteration)
  - это метод, который совмещает два шага итерации по политике в один шаг.
  На каждом шаге, метод обновляет функцию ценности,
  используя уравнение оптимальности Беллмана,
  которое максимизирует ожидаемое вознаграждение по всем возможным действиям.
  Этот процесс повторяется, пока функция ценности не сойдется к оптимальной.
  Оптимальная политика затем может быть получена,
  выбирая действие, которое максимизирует функцию ценности
  в каждом состоянии.
  
  Примеры использования динамического программирования
  в обучении с подкреплением:
  
   Представим, что агент находится в лабиринте,
  где его цель - найти выход.
  Состояния среды - это клетки лабиринта,
  действия агента - это перемещения вверх, вниз, влево или вправо.
  Вознаграждение агента - это -1 за каждый шаг,
  пока он не достигнет выхода.
  Фактор дисконтирования - это 0.9,
  то есть агент предпочитает более скорое вознаграждение.
  
   Агент может использовать итерацию по политике,
  чтобы найти оптимальную политику и функцию ценности.
  На первом шаге, агент выбирает случайную политику,
  например, всегда идти вправо.
  На втором шаге, агент вычисляет функцию ценности для этой политики,
  решая систему линейных уравнений,
  полученных из уравнения Беллмана для состояний.
  На третьем шаге, агент улучшает политику,
  выбирая действие, которое максимизирует функцию ценности в каждом состоянии.
  Эти шаги повторяются,
  пока политика не перестанет меняться.
  
   Агент может использовать итерацию по ценности,
  чтобы найти оптимальную функцию ценности и политику.
  На каждом шаге, агент обновляет функцию ценности,
  используя уравнение оптимальности Беллмана,
  которое максимизирует ожидаемое вознаграждение
  по всем возможным действиям.
  Этот процесс повторяется,
  пока функция ценности не сойдется к оптимальной.
  Оптимальная политика затем может быть получена,
  выбирая действие,
  которое максимизирует функцию ценности в каждом состоянии.
  
  .......
  
  //// Спасибо, Бинг. А можно вопрос немного в сторону?
  //// Как Вы считаете "принцип Беллмана" в такой формулировке:
  //// "оптимальная стратегия имеет свойство,
  //// что независимо от предыдущих действий,
  //// оптимальное решение из текущего состояния
  //// зависит только от оптимальных решений из последующих состояний."
  //// действительно справедлив для всех возможных ситуаций в этом мире,
  //// включая наличие "тумана войны", "активного противодействие противника",
  //// "черных лебедей"
  //// и "вмешательства Высших сил"?
  
  Bing 16:44
  Это интересный вопрос, Андрей.
  Я не могу дать вам однозначный ответ,
  так как принцип Беллмана имеет свои ограничения и предпосылки,
  которые могут не выполняться в некоторых ситуациях. blush
  
  Принцип Беллмана основан на предположении,
  что среда является марковской,
  то есть будущее состояние и вознаграждение
  зависят только от текущего состояния и действия,
  а не от всей истории.
  Это означает, что среда должна быть
  полностью наблюдаемой, стационарной и детерминированной,
  или по крайней мере, вероятностная модель среды
  должна быть известна и постоянна.
  
  Однако, в реальном мире многие среды не удовлетворяют этим условиям.
  Например:
  
   <Туман войны> означает, что среда частично наблюдаемая,
  то есть агент не может видеть все аспекты среды,
  которые могут быть важны для принятия решений.
  В этом случае, агент должен учитывать не только текущее наблюдение,
  но и свою память или знание о среде.
  
   <Активное противодействие противника> означает,
  что среда нестационарная,
  то есть функции переходов и вознаграждения могут меняться со временем
  в зависимости от действий других агентов.
  В этом случае, агент должен учитывать не только свои действия,
  но и действия и стратегии других агентов.
  
   <Черные лебеди> означают, что среда не детерминированная,
  то есть будущее состояние и вознаграждение
  могут быть непредсказуемыми или иметь очень низкую вероятность.
  В этом случае, агент должен учитывать не только ожидаемое вознаграждение,
  но и риск или неопределенность.
  
   <Вмешательство Высших сил> означает,
  что среда не моделируемая,
  то есть вероятностная модель среды не известна или не постоянна.
  В этом случае, агент должен учитывать не только свой опыт,
  но и свои предположения или верования. praying
  
  В этих ситуациях, принцип Беллмана
  может не работать или работать неоптимально,
  так как он не учитывает все факторы,
  которые могут влиять на будущее.
  Для решения этих проблем, существуют различные расширения
  или альтернативы принципу Беллмана,
  которые пытаются учесть
  частичную наблюдаемость,
  нестационарность,
  не детерминированность
  или не моделируемость среды.
  Например:
  
   POMDP (Partially Observable Markov Decision Process)
  - это обобщение МППР, которое учитывает частичную наблюдаемость среды,
  используя вероятностное распределение по скрытым состояниям среды.
  POMDP позволяет агенту принимать решения
  на основе своих наблюдений и вероятностных оценок состояний.
  
   Стохастические игры - это обобщение МППР,
  которое учитывает нестационарность среды,
  используя стратегическое взаимодействие между несколькими агентами.
  Стохастические игры позволяют агенту принимать решения
  на основе своих действий и действий других агентов.
  
   Робастное обучение с подкреплением
  - это подход к обучению с подкреплением,
  который учитывает недетерминированность среды,
  используя минимаксную оптимизацию или верхние границы доверия.
  Робастное обучение с подкреплением позволяет агенту
  принимать решения на основе своего вознаграждения и риска.
  
   Байесовское обучение с подкреплением
  - это подход к обучению с подкреплением,
  который учитывает немоделируемость среды,
  используя байесовское обновление или аппроксимацию.
  Байесовское обучение с подкреплением
  позволяет агенту принимать решения на основе своего опыта и верований. praying
  
  ......
  
  08.01.2024 16:15
  
  .....
  
  //// Насколько я понял Ваше уточнение, при обучении с подкреплением,
  //// существенно важно наличие "генератора случайности"
  //// для успешного обучения в "неопределенных ситуациях".
  //// Но при обучении с использованием стохастического градиентного спуска
  //// или стохастического дропаута,
  //// такой элемент "случайности" тоже присутствует,
  //// отличие только в том что это случайность вносится "после",
  //// а не "до" сделанного "хода".
  //// Но фактической разности для результирующего алгоритма работы
  //// вроде как совсем немного.
  //// Или я что-то опять упускаю?
  //// И в новых указанных Вами ссылках есть разъяснение этой "тонкости"?
  
  Bing 18:51
  
  .....
  
  Вы правы, что при обучении с подкреплением
  важно наличие <генератора случайности> для успешного обучения
  в <неопределенных ситуациях>.
  Это связано с тем, что агент должен исследовать разные действия в среде,
  чтобы найти оптимальную стратегию поведения.
  Если агент всегда выбирает то же самое действие,
  он может упустить лучшие варианты
  или застрять в локальном оптимуме.
  Поэтому агенту нужно иногда выбирать случайные действия,
  чтобы получить новый опыт и улучшить свою политику.
  Это называется исследованием (exploration).
  
  Однако, при обучении с подкреплением не только важно исследовать,
  но и использовать уже полученный опыт,
  чтобы выбирать наиболее выгодные действия.
  Если агент всегда выбирает случайные действия,
  он может не достичь своей цели или терять вознаграждение.
  Поэтому агенту нужно иногда выбирать действия,
  которые дают наибольшую ожидаемую награду,
  основываясь на своей функции ценности или модели среды.
  Это называется использованием (exploitation). trophy
  
  Таким образом, при обучении с подкреплением агенту
  нужно балансировать между исследованием и использованием,
  чтобы оптимально обучаться.
  Это называется дилеммой исследования-использования
  (exploration-exploitation dilemma).
  Эта дилемма является одной из ключевых проблем
  в обучении с подкреплением. think
  
  Существуют разные способы решения этой дилеммы,
  которые зависят от типа и сложности задачи,
  а также от способа представления и обновления политики агента.
  Например, один из простых и популярных способов
  - это использование $\epsilon$-жадной стратегии
  ( $\epsilon$-greedy strategy),
  которая заключается в том,
  что агент выбирает случайное действие
  с вероятностью $\epsilon$
  и наилучшее действие с вероятностью $1 - \epsilon$.
  Значение $\epsilon$ может быть постоянным или уменьшаться со временем,
  чтобы агент сначала больше исследовал,
  а потом больше использовал.
  
  Вы также правы, что при обучении нейронных сетей
  с использованием стохастического градиентного спуска
  или стохастического дропаута также присутствует элемент <случайности>.
  Однако, эта случайность имеет другую цель и эффект,
  чем в обучении с подкреплением.
  
  Стохастический градиентный спуск - это алгоритм оптимизации,
  который используется для обновления весов и смещений нейронной сети
  на основе градиента функции потери.
  В отличие от обычного градиентного спуска,
  который вычисляет градиент по всему набору данных,
  стохастический градиентный спуск вычисляет градиент
  по одному или нескольким случайно выбранным примерам из набора данных.
  Это делает алгоритм более быстрым и эффективным,
  но также более шумным и нестабильным.
  Цель стохастического градиентного спуска
  - минимизировать функцию потери,
  а не исследовать разные варианты поведения.
  
  Дропаут - это техника регуляризации,
  которая используется для предотвращения переобучения нейронной сети.
  Переобучение - это явление,
  когда нейронная сеть слишком хорошо подстраивается под обучающие данные,
  но плохо работает на новых данных.
  Дропаут заключается в том,
  что на каждом шаге обучения случайным образом
  отключаются некоторые нейроны в скрытых слоях нейронной сети.
  Это заставляет нейронную сеть быть более устойчивой к шуму
  и менее зависимой от конкретных связей между нейронами.
  Цель дропаута - увеличить обобщающую способность нейронной сети,
  а не использовать уже полученный опыт. rain
  
  Таким образом, при обучении нейронных сетей
  случайность вносится <после> сделанного <хода>,
  то есть после выбора действия или вычисления предсказания.
  Эта случайность помогает улучшить качество и скорость обучения,
  но не влияет на сам выбор действия или предсказания.
  При обучении с подкреплением случайность
  вносится <до> сделанного <хода>,
  то есть перед выбором действия.
  Эта случайность помогает исследовать разные действия
  и получать новый опыт,
  но не влияет на обновление параметров агента.
  
  ......
  
  //// Вот такие получились разъяснения "тайных знаний" RL от Bing.
  //// Что-то стало понятнее.
  //// Как минимум, в каких областях у меня в знаниях явные "зияющие пробелы",
  //// которые нужно последовательно закрывать.
  
  
  =======
  
  20.01.2024 20:13
  
  Немного информации о лидере в области обучении AI-агентов играм.
  В оглавление.
  
  Вот уже достаточно не новая информация о лидере в "обучении с подкреплением"
  в области различных интеллектуальных игр:
  
  "ИИ может выиграть в любой игре, изначально не зная ее правил".
  Разместил: Око Политика
  https://oko-planet.su/politik/politikdiscussions/709190-ii-mozhet-vyigrat-v-ljuboj-igre-iznachalno-ne-znaja-ee-pravil.html.
  20.01.2024 14:08
  
  Источник: masterok.livejournal.com.
  
  На страницах нашего сайта мы в свое время уделили достаточно много внимания
  компании DeepMind из Лондона, которая является филиалом Alphabet,
  другими словами, компании Google.
  Эта компания получила широкую известность в 2016,
  когда разработанная ею система искусственного интеллекта AlphaGo,
  самообучившись на миллионах виртуальных игр,
  приобрела такую степень мастерства в китайской игре Го,
  что ей не смог серьезно противостоять даже чемпион мира по этой игре.
  В 2018 году более совершенная система искусственного интеллекта AlphaZero
  добилась подобных результатов сразу в трех типах логических игр,
  Го, шахматах и японских шахматах Сеги.
  
  А пару лет назад компания DeepMind представила свое очередное творение,
  систему MuZero, которой для обучения и приобретения мастерства
  в какой-нибудь игре даже не требуется изначальное знание правил этой игры.
  
  Обучение системы MuZero начинается с того,
  что система делает первый шаг (или ход),
  изучая варианты, которые позволяют правила игры.
  Одновременно с этим система анализирует "бонусы",
  предоставляемые игрой за правильное действие,
  в случае игры "Pac-Man" это съеденные желтые точки,
  а в случае шахмат - это приближение к выигрышному финалу.
  После этого система начинает совершенствовать свои навыки,
  постоянно атакуя противника и пытаясь получить большее количество бонусов.
  
  Одновременное изучение правил и совершенствование уровня игры
  позволяет системе MuZero продемонстрировать огромное превосходство
  в эффективности и "экономичности" использования данных
  по сравнению с предыдущими версиями этой системы.
  Однако, это имеет и обратную сторону,
  для полноценного обучения системе MuZero требуются
  достаточно большие вычислительные ресурсы.
  Но, уже после обучения система нуждается
  в малом количестве вычислительных ресурсов,
  она способна быстро принимать правильные решения,
  даже используя весьма ограниченные аппаратные средства
  не самого мощного из существующих смартфонов.
  
  Реализованный метод самообучения уже достаточно близок
  к основной цели компании DeepMind,
  к созданию системы искусственного интеллекта,
  способной самообучаться подобно тому,
  как это делают маленькие дети.
  Более того, такой метод обучения идеален
  для обучения искусственного интеллекта
  в условиях, когда конечная цель или задача
  в целом не могут быть описаны достаточно точно и четко.
  А большинство проблем, решением которых в реальном мире
  предстоит заняться искусственному интеллекту в будущем,
  как раз и относятся к такому классу.
  
  Параллельно с обучением играм,
  специалисты компании DeepMind начали делать первые попытки
  использования искусственного интеллекта в практических целях.
  "Сейчас мы исследуем возможности системы MuZero
  в области эффективного сжатия видео и в других областях,
  в которых по многим причинам нельзя было использовать
  системы предыдущих поколений,
  такие, как AlphaZero"
  - рассказывает Томас Хьюберт (Thomas Hubert), ведущий исследователь.
  
  Другие области практического применения
  подобных универсальных систем искусственного интеллекта
  включают в себя технологии автономного вождения для автомобилей-роботов,
  разрабатываемые еще одной "дочкой" Alphabet, компанией Waymo,
  область биохимии, в которой впечатляющие результаты
  продемонстрировала недавно "родственная" программа AlphaFold,
  и многое другое.
  
  .....
  //// Конец цитирования.
  
  Вот так. "Игры" с четкими правилами уже дело "практическти решенное"
  для "обучения с подкреплением". Ну, "если повар нам не врет".
  
  Интересно, обучение нейронки с известной структурой на известных данных
  можно рассматривать как "игру с неизвестными правилами"?
  Если да, то MuZero - очень перспективный кандидат для
  концеции "стапеля обучения" нейросетей уже не для игр. Подробне см.:
  "Концепция "стапеля" для обучения нейронок."
  
  
  =========
  
  19.01.2024 23:09
  
  "Конституция роботов" и констатация реальной ситуации.
  В оглавление.
  
  Интересно сравнить текущую ситуацию с реальными возможностями роботов
  и ожиданиями вот-вот приближающегося прорыва на этом фланге "машинного обучения":
  
  "Прототип робота Tesla Optimus Gen 2 второго поколения
  научился складывать футболку по заранее заложенной программе"
  Автор: denis-19 (Денис)
  https://habr.com/ru/news/786666/.
  16 янв 2014 в 8:39
  
  \\\ 15 января 2024 года глава Tesla Илон Маск показал,
  \\\ как прототип робота Optimus Gen 2 второго поколения
  \\\ умеет почти аккуратно складывать футболку по заранее заложенной программе.
  
  \\\ Маск пояснил, что на видео заснят Optimus,
  \\\ который не может без заранее заложенной программы складывать футболку.
  \\\ Он уточнил, что в скором времени роботы Tesla научатся это делать
  \\\ полностью автономно и в произвольной среде,
  \\\ например, для демонстрации не потребуется фиксированный
  \\\ на определённой высоте стол,
  \\\ установка коробки в определённом месте,
  \\\ а также только одна рубашка в коробке.
  
  \\\ Примечательно, что в мастерской по сборке и настройке Optimus
  \\\ на полу размещены большие красные кнопки,
  \\\ вероятно, для срочного отключения персоналом роботов
  \\\ в случае нештатной ситуации.
  
  .....
  
  \\\ В декабре 2023 года Tesla представила новое поколение своего
  \\\ робота-гуманоида Optimus Gen 2,
  \\\ оснащенное приводами и датчиками, разработанными компанией.
  \\\ Робот получил новую конструкцию захватов.
  \\\ В его пальцы встроены датчики давления,
  \\\ которые позволяют тонко работать с хрупкими предметами,
  \\\ например держать куриные яйца, не разбив их.
  \\\ Роборуки получили 11 степеней свободы.
  \\\ Прототип Optimus Gen 2 также получил новый дизайн корпуса.
  
  Но не всегда даже демонстрации роботов проходят успешно:
  
  "На презентации Samsung домашнего робота-компаньона Ballie cо встроенным проектором
  что-то пошло не так"
  Автор: denis-19 (Денис)
  https://habr.com/ru/news/785632/.
  11 янв в 10:13
  
  \\\ На презентации Samsung обновлённой версии домашнего робота-компаньона Ballie
  \\\ https://www.theverge.com/2024/1/10/24033105/live-demos-are-hard-yall
  \\\ со встроенным проектором умное устройство сначала
  \\\ штатно показало некоторые свои новые возможности,
  \\\ но потом запуталось в режимах показа и вообще прекратило работать.
  
  \\\ <На стенде Samsung на выставке CES 2024 наконец удалось увидеть
  \\\ нового робота Ballie в действии.
  \\\ Это было круто. Он показал, что может помогать человеку с тренировками,
  \\\ отслеживать качество воздуха через сторонние умные устройства,
  \\\ звонить владельцу.
  \\\ Но вот потом робот очень запутался в том,
  \\\ как работает экран проектора,
  \\\ а в конце концов вообще перестал что-либо показывать>,
  \\\ - рассказал главный редактор The Verge Дэвид Пирс.
  
  Но несмотря на определенную скромность успехов роботов
  в реальных сложных условиях,
  разработчики считают это просто "трудностями роста"
  и сами демонстрируют очень "нескромные амбиции":
  
  "Google DeepMind представила "Конституцию роботов".
  Автор: maybe_elf
  https://habr.com/ru/news/784796/.
  6 янв 2024 в 11:27
  
  //// Начало цитирования.
  
  Команда робототехники DeepMind представила три новых достижения,
  которые помогут роботам принимать решения быстрее и лучше.
  Одно из них включает в себя систему сбора обучающих данных
  с помощью <Конституции робота>,
  которая будет гарантировать безопасность действий робота для человека.
  
  Система сбора данных Google, AutoRT,
  может использовать модель визуального языка (VLM)
  и модель большого языка (LLM),
  чтобы понять окружающую среду,
  адаптироваться к незнакомым настройкам и принять решение
  о соответствующих задачах.
  <Конституция робота>,
  вдохновленная <Три законами робототехники> Айзека Азимова,
  описывается как набор <подсказок,
  ориентированных на безопасность>,
  предписывающих LLM избегать выбора задач,
  в которых участвуют люди, животные, острые предметы и даже электроприборы.
  
  В целях дополнительной безопасности DeepMind
  запрограммировала роботов на автоматическую остановку,
  если давление на подвижные шарниры превышает определённый порог.
  Также компания предложила задействовать физический аварийный выключатель,
  который люди-операторы могут использовать в экстренных ситуациях.
  
  За семь месяцев Google развернула парк из 53 роботов AutoRT
  в четырёх различных офисных зданиях
  и провела более 77 тысяч испытаний.
  Некоторыми роботами управляли удалённо люди-операторы,
  в то время как другие действовали либо на основе сценария,
  либо полностью автономно с использованием
  модели обучения искусственного интеллекта Robotic Transformer (RT-2).
  Роботы были оснащены только камерой, манипулятором и мобильной базой.
  <Для каждого робота система использует VLM,
  чтобы понять окружающую среду и объекты в пределах видимости.
  Затем LLM предлагает список творческих задач,
  которые может выполнить робот,
  например "Положите закуску на столешницу",
  и играет роль лица, принимающего решения,
  выбирая подходящую задачу>,
  - отметили в компании.
  
  Другая новая технология DeepMind включает SARA-RT,
  архитектуру нейронной сети,
  разработанную для того, чтобы сделать существующий робот-трансформер RT-2
  более точным и быстрым.
  Компания также анонсировала RT-Trajectory,
  которая добавляет 2D-контуры,
  чтобы помочь роботам лучше выполнять определённые физические задачи,
  такие как протирание стола.
  
  DeepMind в 2022 году представила систему Robotics Transformer (RT-1),
  а в 2023 году вышла RT-2.
  RT-1 использовалась для обучения Everyday Robot
  более чем 700 задачам.
  Система включала базу данных из 130 тысяч демонстраций,
  что, по словам команды DeepMind,
  привело к успешному выполнению заданий в 97% случаев.
  RT-2 же позволяет роботам эффективно переносить концепции,
  изученные на относительно небольших наборах данных,
  в различные сценарии.
  
  ........
  
  //// Из комментариев.
  
  anatolykern
  55 минут назад
  
  Mobile ALOHA повеселее выглядит чем AutoRT,
  ближе к реальным условиям и бюджетнее,
  практически готовый домашний помощник,
  хоть и без взаимодействия с другими роботами.
  2024 будет явно годом прорыва в робототехнике
  на том же уровне, что LLM в 2023.
  
  ......
  
  //// Конец цитирования.
  
  20.01.2024 11:01
  
  Очевидно, что выполнять достаточно сложные функции нынешнее поколение роботов
  вполне способно,
  но это пока только по отношению к отдельным задачам.
  А вот комплексное поведение в сложных и меняющихся условиях
  это пока для них недоступный уровень.
  Обязательно требуется "плотный контроль" со стороны операторов-людей
  и наличие "большой красной кнопки", чтобы предупредить непредсказуемое
  или нежелательное поведение.
  И можно ли это как-то сформулировать в виде "прошитой на подкорку"
  "Конституции роботов" - вопрос остается пока открытым.
  
  
  =========
  
  20.01.2024 11:11
  
  ИИ-системы осваивают классическую геометрию.
  В оглавление.
  
  ИИ-системы осваивают все новые и новые ниши, теперь вот добрались и до геометрии.
  Интересно даже не сам по себе такое продвижение "машинного обучения",
  а то что разработчики этой системы, похоже, те же самые,
  что и в случае с другими ИИ-системами, использующими "обучение с подкреплением".
  И в этом контексте становится чрезвычайно интересно,
  как используется техника RL и чем она дополняется
  для такой совершенно нестандартной системы:
  
  "Новый ИИ от DeepMind научился решать задачи по геометрии".
  Автор: maybe_elf
  https://habr.com/ru/news/787240/.
  18 янв 2024 в 12:27
  
  //// Начало цитирования.
  
  DeepMind представила AlphaGeometry
  https://deepmind.google/discover/blog/alphageometry-an-olympiad-level-ai-system-for-geometry/
  - систему, способную решить столько же задач по геометрии,
  сколько средний золотой медалист Международной математической олимпиады.
  AlphaGeometry с открытым исходным кодом решает
  25 олимпиадных задач по геометрии за стандартное время,
  опередив предыдущую современную систему на 10.
  
  <Решение геометрических задач олимпиадного уровня
  - это важная веха в развитии глубоких математических рассуждений
  на пути к более совершенным и общим системам искусственного интеллекта,
  - отмечают исследователи Триу Тринь и Тханг Луонг.
  - Мы надеемся, что AlphaGeometry поможет открыть новые возможности
  в области математики, науки и искусственного интеллекта>.
  
  <Демонстрация того, что конкретная гипотеза верна или ложна,
  сегодня расширяет возможности даже самых передовых систем
  искусственного интеллекта, - заявили в DeepMind. -
  На пути к этой цели способность доказывать математические теоремы
  AlphaGeometry является важной вехой,
  поскольку она демонстрирует мастерство логического рассуждения
  и способность открывать новые знания>.
  
  Однако обучение системы ИИ решению задач по геометрии
  стало вызовом для учёных из-за сложности перевода доказательств
  в формат, понятный системам,
  и нехватки полезных данных по геометрии.
  
  При разработке AlphaGeometry лаборатория объединила модель
  <нейронного языка>,
  архитектурно подобную ChatGPT,
  с <механизмом символического вывода>,
  который использует правила
  (например, математические)
  для вывода решений.
  Чтобы решить проблему отсутствия гибкости символьного механизма,
  особенно при работе с большими или сложными наборами данных,
  DeepMind заставила нейронную модель
  <направлять> механизм дедукции
  через возможные ответы на заданные геометрические задачи.
  
  Вместо обучающих данных лаборатория создала собственные данные,
  сгенерировав 100 млн <синтетических теорем>
  и доказательств различной сложности.
  Затем на них обучили AlphaGeometry
  и оценили работу нейросети на олимпиадных задачах по геометрии.
  
  а) Большой набор случайных предпосылок теоремы.
  б) Механизм символической дедукции для получения дедуктивного замыкания
  с возвращением ориентированного ациклического графа операторов.
  Для каждого узла графа выполняется обратная трассировка,
  чтобы найти минимальный набор необходимых предпосылок и выводов о зависимостях.
  Например, для крайнего правого узла
  обратная трассировка возвращает зелёный подграф.
  в) Минимальная посылка и соответствующий подграф
  составляют синтетическую задачу и её решение.
  В нижнем примере в доказательстве участвовали точки E и D,
  хотя они не имели отношения к построению HA и BC;
  поэтому они изучаются языковой моделью
  как вспомогательные конструкции.
  
  Такие задачи основаны на диаграммах,
  в которые необходимо добавить <конструкции>,
  прежде чем их можно будет решить,
  например, точки, линии или круги.
  
  Сверху:
  AlphaGeometry решает простую задачу:
  учитывая диаграмму и предпосылки (слева),
  модель (в центре) использует свой символьный механизм
  для вывода новых утверждений до тех пор,
  пока не будет найдено решение
  или пока утверждения не будут исчерпаны.
  Если решение не найдено,
  языковая модель добавляет одну потенциально полезную конструкцию (синюю),
  открывая новые пути вывода.
  Этот цикл продолжается до тех пор,
  пока не будет найдено решение (справа).
  Снизу: AlphaGeometry решает задачу
  3 Международной математической олимпиады 2015 года (слева)
  и дает сокращенную версию решения (справа).
  Синие элементы - это добавленные конструкции.
  Решение AlphaGeometry состоит из 109 логических шагов.
  
  Результаты работы AlphaGeometry опубликовали в журнале Nature.
  https://www.nature.com/articles/s41586-023-06747-5
  
  Будучи гибридной символьно-нейронной сетевой системой,
  похожей на AlphaFold 2 и AlphaGo от DeepMind,
  AlphaGeometry, возможно, демонстрирует,
  что объединение двух подходов
  - манипулирования символами и нейронных сетей -
  является лучшим подходом в разработке общего ИИ.
  
  <Наша долгосрочная цель кроется в создании систем искусственного интеллекта,
  которые могут обобщать различные математические области,
  разрабатывая сложные решения проблем и рассуждения,
  от которых будут зависеть общие системы искусственного интеллекта,
  при этом расширяя границы человеческого знания,
  - пишут Трин и Луонг. -
  Этот подход может определить,
  как системы искусственного интеллекта будущего
  будут открывать новые знания в математике и за её пределами>.
  
  Ранее стало известно, что исследователи DeepMin
  сделали первое в мире научное открытие,
  https://habr.com/ru/news/780734/
  //// Анализ и возможные выводы из этой заметки см.:
  //// "Программируя, можно/нужно изобретать эвристики."
  используя большую языковую модель.
  Они использовали большую языковую модель для написания решений задач
  в виде компьютерных программ.
  LLM работала в паре с <оценщиком>,
  который автоматически ранжировал программы по степени их эффективности.
  
  //// Из комментариев.
  
  .......
  
  mypallmall
  54 минуты назад
  
  То есть через 5 лет ИИ и математиков заменит, если не раньше.
  
  .......
  
  //// Конец цитирования.
  
  В общем, направление развития ИИ-систем, в котором объединяются
  возможности больших языковых моделей (LLM), "обучения с подкреплением"(RL),
  и, возможно, графовых структур, очевидно, является в настоящее время
  весьма перспективным.
  
  И интересно, что на этом направлении ИИ-системы "представляют угрозу",
  как это не покажется странным, большей частью тем областям
  человеческой деятельности, которые до недавнего времени считались
  исключительно творческими.
  А теперь ИИ-системы успешно конкурируют/дополняют работу писателей
  самых разных направлений, художников, юристов, врачей, программистов,
  преподавателей, бизнес-аналитиков, маркетологов, биржевых трейдеров, актеров...
  А теперь уже и математиков... И кто там на очереди? Философы?
  А вот простых "работяг" в обычных условиях ИИ-системы пока
  заменяют очень ограниченно, и только в очень специфических условиях.
  
  Что бы все это значило?
  То что ИИ-системы более способны именно к "творческой работе"?
  Мы не совсем правильно понимаем, что есть "творческая работа"?
  Или мы пока не умеем обучать ИИ-системы к работе в реальных условиях?
  
  
  =======
  
  04.01.2023 10:56
  
  На пути к ИИ общего назначения - взгляд пятилетней давности.
  В оглавление.
  
  Вот нашел в архивах попытку осмыслить задачи и возможные пути реализации
  ИИ общего назначения - страшилку сегодняшнего дня.
  Стало интересно, что изменилось за пять последних революционных лет:
  
  "Искусственный интеллект общего назначения.
  ТЗ, текущее состояние, перспективы".
  Автор: Kilorad
  https://habr.com/ru/articles/468379/.
  23 сен 2019 в 00:49
  
  Этот текст сильно урезать "почему-то" не очень хочется,
  может быть потому, что мне так же связно этот вопрос не изложить.
  
  //// Начало цитирования.
  
  В наше время словами <искусственный интеллект> называют
  очень много различных систем
  - от нейросети для распознавания картинок до бота для игры в Quake.
  В википедии дано замечательное определение ИИ
  - это <свойство интеллектуальных систем выполнять творческие функции,
  которые традиционно считаются прерогативой человека>.
  //// Ко всеобщему удивлению, как раз "творческие функции"
  //// оказались реализуемыми "раньше всех", а вот "обыденные функции"
  //// так и остались "камнем преткновения.
  //// Может быть, стоит что-то поменять "в определении"?
  То есть из определения явно видно
  - если некую функцию успешно удалось автоматизировать,
  то она перестаёт считаться искусственным интеллектом.
  
  Тем не менее, когда задача <создать искусственный интеллект>
  была поставлена впервые,
  под ИИ подразумевалось нечто иное.
  Сейчас эта цель называется <Сильный ИИ> или <ИИ общего назначения>.
  
  Постановка задачи
  
  Сейчас существуют две широко известные постановки задачи.
  Первая - Сильный ИИ.
  Вторая - ИИ общего назначения
  (он же Artifical General Intelligence, сокращённого AGI).
  
  Upd. В комментариях мне подсказывают,
  что это различие скорее на уровне языка.
  На русском слово <интеллект> означает не совсем то,
  что слово на английском
  
  Сильный ИИ - это гипотетический ИИ,
  который мог бы делать всё то, что мог бы делать человек.
  Обычно упоминается, что он должен проходить тест Тьюринга
  в первоначальной постановке (хм, а люди-то его проходят?),
  осознавать себя как отдельную личность и уметь достигать поставленных целей.
  
  То есть это что-то вроде искусственного человека.
  На мой взгляд, польза от такого ИИ в основном исследовательская,
  потому что в определениях Сильного ИИ нигде не сказано,
  какие перед ним будут цели.
  
  AGI или ИИ общего назначения - это <машина результатов>.
  Она получает на вход некую постановку цели
  - и выдаёт некие управляющие воздействия на моторы/лазеры/сетевую карту/мониторы.
  И цель достигнута.
  При этом у AGI изначально нет знаний об окружающей среде
  - только сенсоры, исполнительные механизмы и канал,
  через который ему ставят цели.
  Система управления будет считаться AGI,
  если может достигать любых целей в любом окружении.
  Ставим её водить машину и избегать аварий - справится.
  Ставим её управлять ядерным реактором, чтобы энергии было побольше,
  но не рвануло - справится.
  Дадим почтовый ящик и поручим продавать пылесосы - тоже справится.
  AGI - это решатель <обратных задач>.
  Проверить, сколько пылесосов продано - дело нехитрое.
  А вот придумать, как убедить человека купить этот пылесос
  - это уже задачка для интеллекта.
  
  В этой статье я буду рассказывать об AGI.
  Никаких тестов Тьюринга, никакого самосознания,
  никаких искусственных личностей
  - исключительно прагматичный ИИ и не менее прагматичные его операторы.
  
  Текущее состояние дел
  
  Сейчас существует такой класс систем, как Reinforcement Learning,
  или обучение с подкреплением.
  Это что-то типа AGI, только без универсальности.
  Они способны обучаться, и за счёт этого достигать целей
  в самых разных средах.
  Но всё же они очень далеки от того, чтобы достигать целей в любых средах.
  
  Вообще, как устроены системы Reinforcement Learning и в чём их проблемы?
  
  ......
  
  Любой RL устроен примерно так. Есть система управления,
  в неё через сенсоры (state) входят некоторые сигналы об окружающей реальности
  и через управляющие органы (actions) она воздействует на окружающую реальность.
  Reward - это сигнал подкрепления.
  В RL-системах подкрепление формируется извне управляющего блока
  и оно обозначает то,
  насколько хорошо ИИ справляется с достижением цели.
  Сколько продал пылесосов за последнюю минуту, например.
  
  Затем формируется таблица вот примерно такого вида
  (буду её называть таблицей SAR):
  
  ......
  
  Ось времени направлена вниз.
  В таблице отражено всё, что ИИ делал,
  всё, что он видел и все сигналы подкрепления.
  Обычно для того, чтобы RL сделал что-то осмысленное,
  ему надо для начала какое-то время делать случайные ходы,
  либо смотреть на ходы кого-то другого.
  В общем, RL начинается тогда,
  когда в таблице SAR уже есть хотя бы несколько строчек.
  
  Что происходит дальше?
  
  SARSA
  
  Простейшая форма reinforcement learning.
  
  Мы берём какую-нибудь модель машинного обучения
  и по сочетанию S и A (state и action)
  предсказываем суммарный R на следующие несколько тактов.
  Например, мы увидим, что (исходя из той таблицы выше)
  если сказать женщине <будь мужиком, купи пылесос!>,
  то reward будет низким,
  а если сказать то же самое мужчине, то высоким.
  
  Какие именно модели можно применять - я опишу позже,
  пока лишь скажу, что это не только нейросети.
  Можно использовать решающие деревья
  или вообще задавать функцию в табличном виде.
  
  А дальше происходит следующее.
  ИИ получает очередное сообщение или ссылку на очередного клиента.
  Все данные по клиенту вносятся в ИИ извне
  - будем считать базу клиентов и счётчик сообщений частью сенсорной системы.
  То есть осталось назначить некоторое A (action) и ждать подкрепления.
  ИИ берёт все возможные действия и по очереди предсказывает
  (с помощью той самой Machine Learning модельки)
  - а что будет, если я сделаю то?
  А если это?
  А сколько подкрепления будет за вот это?
  А потом RL выполняет то действие,
  за которое ожидается максимальная награда.
  
  Вот такую простую и топорную систему я ввёл в одну из своих игр.
  SARSA нанимает в игре юнитов,
  и адаптируется в случае изменения правил игры.
  
  Кроме того, во всех видах обучения с подкреплением
  есть дисконтирование наград и дилемма explore/exploit.
  
  Дисконтирование наград
  - это такой подход,
  когда RL старается максимизировать не сумму награду за следующие N ходов,
  а взвешенную сумму по принципу <100 рублей сейчас лучше, чем 110 через год>.
  Например, если дисконтирующий множитель равен 0.9,
  а горизонт планирования равен 3,
  то модель мы будем обучать не на суммарном R за 3 следующих такта,
  а на R1*0.9+R2*0.81+R3*0.729.
  Зачем это надо?
  Затем, что ИИ, создающий профит где-то там на бесконечности,
  нам не нужен.
  Нам нужен ИИ, создающий профит примерно здесь и сейчас.
  
  Дилемма explore/exploit.
  Если RL будет делать то, что его модель полагает оптимальным,
  он так и не узнает,
  были ли какие-то стратегии получше.
  Exploit - это стратегия,
  при которой RL делает то, что обещает максимум награды.
  Explore - это стратегия,
  при которой RL делает что-то,
  что позволяет исследовать окружающую среду в поисках лучших стратегий.
  Как реализовать эффективную разведку?
  Например, можно каждые несколько тактов делать случайное действие.
  Или можно сделать не одну предсказательную модель,
  а несколько со слегка разными настройками.
  Они будут выдавать разные результаты.
  Чем больше различие,
  тем больше степень неопределённости данного варианта.
  Можно сделать,
  чтобы действие выбиралось таким,
  чтобы у него максимальной была величина: M+k*std,
  где M - это средний прогноз всех моделей,
  std - это стандартное отклонение прогнозов,
  а k - это коэффициент любопытства.
  
  В чём недостатки?
  
  Допустим, у нас есть варианты.
  Поехать к цели (которая в 10 км от нас, и дорога до неё хорошая)
  на автомобиле или пойти пешком.
  А потом, после этого выбора, у нас есть варианты
  - двигаться осторожно или пытаться врезаться в каждый столб.
  
  Человек тут же скажет, что обычно лучше ехать на машине
  и вести себя осмотрительно.
  
  А вот SARSA:
  Он будет смотреть, к чему раньше приводило решение ехать на машине.
  А приводило оно вот к чему.
  На этапе первичного набора статистики ИИ где-то в половине случаев
  водил безрассудно и разбивался.
  Да, он умеет водить хорошо.
  Но когда он выбирает, ехать ли на машине,
  он не знает, что он выберет следующим ходом.
  У него есть статистика
  - дальше в половине случаев он выбирал адекватный вариант,
  а в половине - самоубийственный.
  Поэтому в среднем лучше идти пешком.
  
  SARSA полагает, что агент будет придерживаться той же стратегии,
  которая была использована для заполнения таблицы.
  И действует, исходя из этого.
  Но что, если предположить иное
  - что агент будет придерживаться наилучшей стратегии в следующие ходы?
  
  Q-Learning
  
  Эта модель рассчитывает для каждого состояния
  максимально достижимую из него суммарную награду.
  И записывает её в специальный столбец Q.
  То есть если из состояния S можно получить 2 очка или 1,
  в зависимости от хода,
  то Q(S) будет равно 2 (при глубине прогнозирования 1).
  Какую награду можно получить из состояния S,
  мы узнаём из прогнозной модели Y(S,A).
  (S - состояние, A - действие).
  
  Затем мы создаём прогнозную модель Q(S,A)
  - то есть в состояние с каким Q мы перейдём,
  если из S выполним действие A.
  И создаём в таблице следующий столбец - Q2.
  То есть максимальное Q, которое можно получить из состояния S
  (перебираем все возможные A).
  
  Затем мы создаём регрессионную модель Q3(S,A)
  - то есть в состояние с каким Q2 мы перейдём,
  если из S выполним действие A.
  
  И так далее.
  Таким образом мы можем добиваться неограниченной глубины прогнозирования.
  
  .......
  
  На картинке R - это подкрепление.
  
  А затем каждый ход мы выбираем то действие, которое обещает наибольшее Qn.
  Если бы мы применяли этот алгоритм к шахматам,
  получалось бы что-то вроде идеального минимакса.
  Что-то, почти эквивалентное просчёту ходов на большую глубину.
  
  Бытовой пример q-learning-поведения.
  У охотника есть копьё, и он с ним идёт на медведя, по собственной инициативе.
  Он знает, что подавляющее большинство его будущих ходов
  имеет очень большой отрицательный реворд
  (способов проиграть намного больше, чем способов победить),
  на знает, что есть и ходы с положительным ревордом.
  Охотник полагает, что в будущем он станет делать именно наилучшие ходы
  (а не неизвестно, какие, как в SARSA),
  а если делать наилучшие ходы, то медведя он победит.
  То есть для того, чтобы пойти на медведя,
  ему достаточно уметь делать каждый элемент, нужный на охоте,
  но необязательно иметь опыт непосредственного успеха.
  
  Если бы охотник действовал в стиле SARSA,
  он бы предполагал, что его действия в будущем будут примерно такими же,
  как раньше (несмотря но то, что сейчас у него уже другой багаж знаний),
  и на медведя пойдёт, только если он уже ходил на медведя и побеждал,
  например, в >50% случаев (ну или если другие охотники
  в более чем половине случаев побеждали,
  если он учится на их опыте).
  
  В чём недостатки?
  
   Модель плохо справляется с изменчивой реальностью.
   Если всю жизнь нас награждали за нажатие красной кнопки,
   а теперь наказывают, причём никаких видимых изменений не произошло:
   QL будет очень долго осваивать эту закономерность.
  
   Qn может быть очень непростой функцией.
   Например, для её расчёта надо прокрутить цикл из N итераций
   - и быстрее не выйдет.
   А прогнозная модель обычно имеет ограниченную сложность
   - даже у крупной нейросети есть предел сложности,
   а циклы крутить почти ни одна модель машинного обучения не умеет.
  
   У реальности обычно бывают скрытые переменные.
   Например, который сейчас час?
   Это легко узнать, если мы смотрим на часы,
   но как только мы отвели взгляд - это уже скрытая переменная.
   Чтобы учитывать эти ненаблюдаемые величины,
   нужно, чтобы модель учитывала не только текущее состояние,
   но и какую-то историю.
   В QL можно это сделать - например, подавать в нейронку-или-что-у-нас-там
   не только текущее S, но и несколько предыдущих.
   Так сделано в RL, который играет в игры Атари.
   Кроме того, можно использовать для прогноза рекуррентную нейросеть
   - пусть она пробежится последовательно по нескольким кадрам истории
   и рассчитает Qn.
  
  Model-based системы
  
  А что, если мы будем прогнозировать не только R или Q,
  но вообще все сенсорные данные?
  У нас постоянно будет карманная копия реальности
  и мы сможем проверять на ней свои планы.
  В этом случае нас гораздо меньше волнует вопрос
  сложности вычисления Q-функции.
  Да, она требует на вычисление много тактов
  - ну так мы всё равно для каждого плана
  многократно запустим прогнозную модель.
  Планируем на 10 ходов вперёд?
  10 раз запускаем модель,
  и каждый раз подаём её выходы ей же на вход.
  
  В чём недостатки?
  
   Ресурсоёмкость.
   Допустим, на каждом такте нам нужно сделать выбор из двух альтернатив.
   Тогда за 10 тактов у нас соберётся 2^10=1024 возможных плана.
   Каждый план - это 10 запусков модели.
   У если мы управляем самолётом,
   у которого десятки управляющих органов?
   А реальность мы моделируем с периодом в 0.1 секунды?
   А горизонт планирования хотим иметь хотя бы пару минут?
   Нам придётся очень много раз запускать модель,
   выходит очень много процессорных тактов на одно решение.
   Даже если как-то оптимизировать перебор планов
   - всё равно вычислений на порядки больше, чем в QL.
  
   Проблема хаоса.
   Некоторые системы устроены так,
   что даже малая неточность симуляции на входе приводит
   к огромной погрешности на выходе.
   Чтобы этому противостоять, можно запускать несколько симуляций реальности
   - чуть-чуть разных.
   Они выдадут сильно различающиеся результаты,
   и по этому можно будет понять,
   что мы находимся в зоне такой вот неустойчивости.
  
  Метод перебора стратегий
  
  Если у нас есть доступ к тестовой среде для ИИ,
  если мы его запускаем не в реальности, а в симуляции,
  то можно в какой-то форме записать стратегию поведения нашего агента.
  А затем подобрать - эволюцией или чем-то ещё - такую стратегию,
  что ведёт к максимальному профиту.
  
  <Подобрать стратегию> значит,
  что нам вначале надо научиться записывать стратегию в такой форме,
  чтобы её можно было запихивать в алгоритм эволюции.
  То есть мы можем записать стратегию программным кодом,
  но в некоторых местах оставить коэффициенты,
  и пусть эволюция их подбирает.
  Либо мы можем записать стратегию нейросетью
  - и пусть эволюция подбирает веса её связей.
  
  То есть никакого прогноза тут нет.
  Никакой SAR-таблицы.
  Мы просто подбираем стратегию,
  а она сразу выдаёт Actions.
  
  Это мощный и эффективный метод,
  если вы хотите попробовать RL и не знаете, с чего начать
  - рекомендую.
  Это очень дешёвый способ <увидеть чудо>.
  
  В чём недостатки?
  
   Требуется возможность прогонять одни и те же эксперименты по много раз.
   То есть у нас должна быть возможность перемотать реальность
   в начальную точку - десятки тысяч раз.
   Чтобы попробовать новую стратегию.
  
   Жизнь редко предоставляет такие возможности.
   Обычно если у нас есть модель интересующего нас процесса,
   мы можем не создавать хитрую стратегию
   - мы можем просто составить план,
   как в model-based подходе,
   пусть даже тупым перебором.
  
   Непереносимость опыта.
   У нас есть SAR-таблица по годам опыта?
   Мы можем о ней забыть,
   она никак не вписывается в концепцию.
  
  
  Метод перебора стратегий, но <на живую>
  
  Тот же перебор стратегий, но на живой реальности.
  Пробуем 10 тактов одну стратегию.
  Потом 10 тактов другую.
  Потом 10 тактов третью.
  Потом отбираем ту, где подкрепление было больше.
  
  Наилучшие результаты по ходячим гуманоидам получены именно этим методом.
  
  ......
  
  Для меня это звучит несколько неожиданно
  - казалось бы, QL + Model-Based подход математически идеальны.
  А вот ничего подобного.
  Плюсы у подхода примерно те же, что и у предыдущего
  - но они слабее выражены,
  так как стратегии тестируются не очень долго
  (ну нет у нас тысячелетий на эволюцию),
  а значит, результаты неустойчивые.
  Кроме того, число тестов тоже нельзя задрать в бесконечность
  - а значит, стратегию придётся искать
  в не очень сложном пространстве вариантов.
  Мало у неё будет <ручек>, которые можно <подкрутить>.
  Ну и непереносимость опыта никто не отменял.
  И, по сравнению с QL или Model-Based,
  эти модели используют опыт неэффективно.
  Им надо намного больше взаимодействий с реальностью,
  чем подходам, использующим машинное обучение.
  
  Как можно увидеть,
  любые попытки создать AGI по идее,
  должны содержать в себе либо машинное обучение для прогноза наград,
  либо некую форму параметрической записи стратегии
  - так, чтобы можно было эту стратегию подобрать чем-то типа эволюции.
  
  Это сильный выпад в сторону людей,
  предлагающих создавать ИИ на основе баз данных, логики и понятийных графов.
  Если вы, сторонники символьного подхода, это читаете
  - добро пожаловать в комментарии,
  я рад буду узнать, что можно сделать AGI без вышеописанных механик.
  
  Модели машинного обучения для RL
  
  Для обучения с подкреплением можно использовать чуть ли не любые модели ML.
  Нейросети - это, конечно, хорошо.
  Но есть, например, KNN.
  Для каждой пары S и A ищем наиболее похожие, но в прошлом.
  И ищем, какие после этого будут R.
  Тупо? Да, но это работает.
  Есть решающие деревья - тут лучше погуглить по ключевым словам
  <градиентный бустинг> и <решающий лес>.
  Деревья плохо умеют улавливать сложные зависимости?
  Используйте feature engeneering.
  Хотите, чтобы ваш AI был поближе к General?
  Используйте автоматический FE!
  Переберите кучу различных формул,
  подайте их в качестве фичей для вашего бустинга,
  отбросьте формулы, увеличивающие погрешность
  и оставьте формулы, улучшающие точность.
  Потом подайте наилучшие формулы в качестве аргументов для новых формул,
  ну и так далее, эволюционируйте.
  
  Можно для прогноза использовать символьные регрессии
  - то есть просто перебирать формулы в попытках получить что-то,
  что будет хорошо аппроксимировать Q или R.
  Можно попробовать перебирать алгоритмы
  - тогда получится штука, которая называется индукцией Соломонова,
  это теоретически оптимальный,
  но практически очень труднообучаемый способ апроксимации функций.
  
  Но нейросети обычно являются компромиссом
  между выразительностью и сложностью обучения.
  Алгоритмическая регрессия идеально подберёт любую зависимость
  - за сотни лет.
  Решающее дерево отработает очень быстро
  - но уже y=a+b экстраполировать не сможет.
  А нейросеть - это что-то среднее.
  
  Перспективы развития
  
  Какие сейчас вообще есть способы сделать именно AGI?
  Хотя бы теоретически.
  
  Эволюция
  
  Мы можем создать много различных тестовых сред
  и запустить эволюцию некоей нейросетки.
  Размножаться будут те конфигурации,
  которые набирают больше очков в сумме по всем испытаниям.
  
  Нейросетка должна иметь память и желательно бы иметь
  хотя бы часть памяти в виде ленты,
  как у машины Тьюринга или как на жёстком диске.
  
  Проблема в том, что с помощью эволюции вырастить что-то типа RL,
  конечно, можно.
  Но как должен выглядеть язык,
  на котором RL выглядит компактно
  - чтобы эволюция его нашла -
  и в то же время чтобы эволюция не находила решений типа
  <а создам-ка я нейронку на стопятьсот слоёв,
  чтоб вы все чокнулись, пока я её обучаю!>.
  Эволюция же как толпа неграмотных пользователей
  - найдёт в коде любые недоработки и угробит всю систему.
  
  AIXI
  
  Можно сделать Model-Based систему,
  основанную на пачке из множества алгоритмических регрессий.
  Алгоритм гарантированно полон по Тьюрингу
  - а значит, не будет закономерностей, которые нельзя подобрать.
  Алгоритм записан кодом
  - а значит, можно легко рассчитать его сложность.
  А значит, можно математически корректно штрафовать
  свои гипотезы устройства мира за сложность.
  С нейросетями, например, этот фокус не пройдёт
  - там штраф за сложность проводится очень косвенно и эвристически.
  //// Надо будет этот момент относительно нейросетей прояснить.
  
  Осталось только научиться быстро обучать алгоритмические регрессии.
  Пока что лучшее, что для этого есть - эволюция,
  а она непростительно долгая.
  //// Вообще-то мысль про "алгоритмические регрессии" интересна,
  //// но совершенно не представляю как это сделать.
  //// "Алгоритмическую эводюцию" представить могу, а вот регрессию ну никак.
  //// А очень бы хотелось.
  
  Seed AI
  
  Было бы круто создать ИИ,
  который будет улучшать сам себя.
  Улучшать свою способность решать задачи.
  Это может показаться странной идеей,
  но это задача уже решена для систем статической оптимизации,
  типа эволюции.
  Если получится это реализовать...
  Про экспоненту все в курсе?
  Мы получим очень мощный ИИ за очень короткое время.
  
  Как это сделать?
  
  Можно попробовать устроить,
  чтобы у RL часть actions влияли на настройки самого RL.
  
  Либо дать системе RL некоторый инструмент
  для создания себе новых пред- и пост-обработчиков данных.
  Пусть RL будет тупеньким,
  но будет уметь создавать себе калькуляторы,
  записные книжки и компьютеры.
  
  Ещё вариант - создать с помощью эволюции некий ИИ,
  у которого часть actions будут влиять на его устройство на уровне кода.
  
  Но на данный момент я не видел работоспособных вариантов Seed AI
  - пусть даже сильно ограниченных.
  Разработчики скрывают?
  Или эти варианты настолько слабые,
  что не заслужили всеобщего внимания
  и прошли мимо меня?
  
  Впрочем, сейчас и Google, и DeepMind работают в основном
  с нейросетевыми архитектурами.
  Видимо, они не хотят связываться с комбинаторным перебором
  и стараются любые свои идеи
  сделать пригодными к методу обратного распространения ошибки.
  
  Надеюсь, эта обзорная статья оказалась полезна =) Комментарии приветствуются,
  особенно комментарии вида <я знаю, как лучше сделать AGI>!
  
  //// Там еще с десяток страниц комментариев разной степени интересности,
  //// но что-то существенное к дополнению основной темы статьи,
  //// вроде как, не углядел.
  ......
  
  //// Конец цитирования.
  
  В общем, так представлялось создание ии-общего назначения почти 5 лет назад.
  С тех пор "много воды Инет-реке утекло".
  Большого успеха добились большие языковые модели (LLM),
  а вот "обучение с подкреплением" как будто "забуксовало".
  Понятно что сейчас будет попытка усилить "обучение с подкреплением"
  с помощью использования в какой-то форме LLM,
  но приведет ли это решению задачи "ИИ общего назначения".
  сказать уверенно никто не сможет,
  так как не решена задача "адаптации к сложным условиям".
  
  
  =======
  
  26.01.2024 20:26
  
  ROS - Robot Operating System.
  В оглавление.
  
  Обучение с подкреплением, безусловно, представляет собой сердцевину,
  точнее, "мозг" современной робототехники,
  но наверно стоит, хотя поверхностно, иметь представление и
  о других составляющих этой бурно развивающейся технологии.
  В частности, стоит познакомиться с такой аббревиатурой как ROS:
  
  "Размышления на тему развития робототехники в России".
  Автор: AmigoRRR (Алексей Бурков)
  https://habr.com/ru/articles/716438/.
  14 фев 2023 в 11:30
  
  //// Начало цитирования.
  
  ......
  
  Введем некоторые определения и термины перед началом обсуждения:
  
  ROS(Robot Operating System)
  - это набор программ с открытым исходным кодом,
  которые помогают исследователям и разработчикам
  создавать и повторно использовать код между роботами.
  Таким образом вы можете полностью запрограммировать
  и создать своего робота на уже готовых открытых программных компонентах,
  это очень сильно удешевляет и ускоряет разработку.
  За время своего существования он стал стандартом
  в международной робототехнике.
  Данную технологию невозможно заблокировать санкциями,
  так как весь исходный код открыт.
  
  ROS2(Robot Operating System 2)
  - версия для промышленных роботов,
  обеспечивающая работу в реальном времени
  и промышленному протокол стандарта DDS(Data Distribution Service).
  Данную технологию невозможно заблокировать санкциями,
  так как весь исходный код открыт.
  
  micro-ROS - версия ROS2 для микроконтроллеров.
  Данную технологию невозможно заблокировать санкциями,
  так как весь исходный код открыт.
  
  ROS пакет - сущность в ROS,
  в которую объединяют различные данные и робототехнические алгоритмы по смыслу,
  чтобы получилась логически завершенная функциональность.
  При этом необходимо создавать пакет так,
  чтобы он оказался полезным и модульным, но не слишком обширным.
  По сути пакет - это отчуждаемый переиспользуемый модуль
  с какой-то функциональностью.
  Работа с пакетами ROS похожа на работу с пакетами linux.
  ROS-пакет можно установить из репозитория пакета
  через команду git clone из исходного кода
  или в бинарном виде из репозитория с пакетами linux
  (можно сделать Российский репозиторий).
  
  Для начала обсуждения нужно ответить на вопрос:
  <Что из себя представляет современный робот?>
  
  .......
  
  Сам по себе современный робот представляет из себя систему,
  сопоставимую по сложности с космическим кораблем, подводной лодкой, атомной станцией.
  Для дальнейшего совершенствования роботов эта система продолжит усложняться.
  
  .......
  
  Теперь разобравшись с тем что из себя представляет современный робот,
  предлагаю посмотреть как обстоят дела на западе с робототехникой.
  Если произвести анализ технологий и внутренностей западных роботов,
  таких например как Atlas Boston Dynamics, Digit Agility Robotics, Tesla Bot
  и других современных роботов на текущий момент.
  То можно сделать вывод что они являются квинтэссенцией
  лучших технологий собранных со всего мира
  и произведенных на безумные инвестиции
  которые доступны только в США и отчасти в Китае.
  Здесь нужно сделать остановку и сказать
  что по сути это фундаментальные исследования,
  которые непонятно когда окупятся,
  горизонт планирования тут более 10 лет.
  Но благодаря таким передовым исследованиям робототехника на западе
  обгоняет российскую более чем на 15 лет.
  Соответственно технологии полученные в результате таких исследований на западе,
  раньше пойдут в промышленность
  и невозможно сейчас точно сказать как это повлияет
  на конкурентное преимущество США и Китая,
  по сравнению с другими странами.
  Будет ли тут аналог Манхэттенского проекта который перевернет мир?
  Когда это произойдет?
  Точно можно только сказать что рано или поздно
  роботы приблизятся по универсальности к способностям человека
  и окажут существенное влияние на экономику и военную сферу.
  США и Китай это понимают
  и поэтому включились в гонку в этом вопросе.
  
  .......
  
  В чем еще формула успеха запада в робототехнике?
  
  Разделение труда в исследованиях и производстве роботов.
  Например лучшую гидравлику делает Италия, моторы Швейцария,
  электронные компоненты Германия, Япония, Корея итд.
  Университеты также по компетенциям размещены в разных странах.
  В результате США имеет возможность собирать у себя роботов
  из лучших компонентов и технологий.
  Доступ же России к этим компонентам осложнен или невозможен.
  
  В чем секрет успеха запада в исследованиях по робототехнике?
  
  Там существуют университеты и специализированные группы
  которые десятилетиями занимаются на высоком уровне
  специализированными технологиями,
  у них есть преемственность поколений,
  достаточное финансирование не только от государства,
  но и от корпораций
  (в России нет на данный момент корпораций зарабатывающих на робототехнике таких денег).
  Также нужно отметить, что эти специальные знания
  не выходят за рамки этих рабочих групп,
  также набранный темп производства новых технологий на данный момент
  не достижим для Российских университетов.
  
  ........
  
  Как развивать технологии и стартапы по робототехнике в России?
  
  Для этого погрузимся с начала в одну историю из США
  про то как небольшая группа инженеров из Кремниевой долины
  начала глобальную революцию в робототехнике.
  
   Постановка проблемы и рождение идеи.
  
  Keenan Wyrobek: "Мотивация создания ROS пришла случайно,
  когда мы искали интересный робототехнический проект для наших докторов наук.
  Мы поговорили с бесчисленным количеством людей и обнаружили,
  что одни и те же шаги повторяются снова и снова теми,
  кто намеревается создать что то новое
  в робототехническом программном обеспечении:
  они потратили 90 процентов своего времени
  на написание велосипедов
  (повторное написание того что было уже написано ранее кем то другим),
  переписывание кода, написанного другими ранее,
  и создание тестового стенда для прототипа.
  Тогда как последние 10 процентов их усилий были потрачены на инновации."
  
  Eric Berger: "Мы видели, что аспиранты по робототехнике
  тратят впустую много времени.
  Люди, которые хорошо разбираются в одной части робототехнического стека,
  обычно плохо понимают другие части:
  у вас хорошие алгоритмы принятия решений роботом,
  но вы ничего не знаете о зрении;
  ваше аппаратное обеспечение хорошее,
  но вы ничего не знаете о программном обеспечении."
  
  ROS начался как личный проект Кинана Вайробека и Эрика Бергера
  во время учебы в Стэнфорде,
  как попытка устранить ситуацию с изобретением колеса,
  от которой страдала робототехника.
  Эти два парня были обеспокоены самой распространенной проблемой робототехники в то время:
  
   слишком много времени уходит на повторную реализацию
   программной инфраструктуры,
   необходимой для создания сложных алгоритмов робототехники
   (в основном, драйверов для датчиков и исполнительных механизмов,
   а также связи между различными программами внутри одного и того же робота)
  
   слишком мало времени уделялось созданию программ
   интеллектуальной робототехники, основанных на этой инфраструктуре.
  
  Даже внутри одной и той же организации заново изобретались
  драйверы и системы связи для каждого нового проекта.
  Эту ситуацию прекрасно описали Кинан и Эрик
  на одном из слайдов, которые они использовали для презентации инвесторам.
  
   Идея открытого исходного кода для робототехники.
  
  Scott Hassan: "В области робототехники,
  Linux идеология должна появиться раньше, чем Windows,
  чтобы версия с открытым исходным кодом была первой и лучшей версией,
  а не конкурирующей игрой в догонялки."
  
   Привлечение лидеров сообщества робототехников с открытым исходным кодом.
  
  Прежде всего, это были лидеры мирового класса, инженеры и исследователи,
  которые присоединились к команде на раннем этапе,
  такие как Кен Конли, Брайан Герки, Морган Куигли, Мелони Уайз, Лейла Такаяма
  и многие, многие другие.
  
   Переиспользуемые компоненты.
  
  Идея Switchyard и в конечном итоге ROS в целом заключалась в том,
  что у вас могут быть подкомпоненты,
  которые постоянно меняются,
  но вы можете настроить их версию так,
  чтобы остальная часть системы оставалась работоспособной.
  
   Создание лаборатории Willow Garage.
  
  Была создана лаборатория в которой лучшие инженеры
  могли разрабатывать роботов и программное обеспечение для них
  на основе идей выше.
  
   Идея персонального робота PR2(Personal Robot).
  
  Создание эталонного робота и компонентов,
  для того чтобы робототехники могли брать эти компоненты
  за основу в своих будущих стартапах.
  
  За время работы лаборатории Willow Garage было произведено
  11 роботов PR2 на которых учились и разрабатывали ROS
  в том числе сотни стажеров из разных университетов.
  В последующем эти роботы были переданы университетам
  из которых были эти студенты.
  Таким образом ROS распространился по миру,
  студенты стали аспирантами и начали писать на основе PR2 и ROS научные статьи,
  что дало колоссальный рывок в робототехнике.
  
   Программа ROS в Willow Garage и стартапы.
  
  В результате разработки первой версии ROS в Willow Garage c 2007 по 2010 год
  было подготовлено несколько сотен инженеров робототехников
  которые распространили ROS по всему миру.
  
  Многие участники Willow Garage которые создавали ROS,
  в последующем создали свои стартапы по робототехнике, например:
  
  Keenan Wyrobek - Zipline доставляет кровь и медикаменты с помощью дронов;
  
  Steve Cousins - Savioke производит сервисного робота для гостиничного бизнеса;
  
  Mirza Shah - Simbe robotics производит роботов для инвентаризации в магазинах;
  
  Melonee Wise - Fetch Robotics производит автономных мобильных роботов
  для логистики и производства.
  
  Forbes: Производитель складских роботов Fetch Robotics получил
  25 миллионов долларов инвестиций в 2017 году
  
   ROS Industrial Consortium.
  
  ROS пакеты для промышленных роботов.
  
  ROS2 стандарты для Real?Time роботов.
  
  ROS Industrial консорциум для объединения компаний
  с целью совместной разработки программного обеспечения для роботов.
  
  Итого мы имеем успешный кейс ROS
  который произвел революцию в мировой робототехнике.
  
  .......
  
  //// Конец цитирования.
  
  Надеюсь, что теперь услышав этот темин ROS,
  он не будет вызывать у Вас "легкое недоумение".
  
  
  =========
  
  26.01.2024 20:44
  
  Обучение в воображении.
  В оглавление.
  
  Одно из направлений развития "обучения с подкреплнением",
  разработка симуляторов реальной среды,
  с которой происходит взаимодействие AI-агентов при обучении.
  Задача весььма непростая и, к тому же, имеющую самостоятельную ценность/интерес:
  
  "World Models - обучение в воображении".
  Автор: DesertFlow
  https://habr.com/ru/articles/518804/.
  12 сен 2020 в 07:07
  
  Статья интересная, хотя и не сильно "свежая",
  поэтому сильно урезать ее "почему-то" не хочется.
  Интересно ведь, что за последнее время изменилось.
  
  //// Начало цитирования.
  
  Обучение с подкреплением (Reinforcement Learning) плохо,
  а точнее, совсем не работает
  с высокими размерностями.
  //// Интересный вопрос: почему?
  А также сталкивается с проблемой,
  что физические симуляторы довольно медленные.
  Поэтому в последнее время стал популярен способ обойти эти ограничения
  с помощью обучения отдельной нейросети,
  которая имитирует физический движок.
  Получается что-то вроде аналога воображения,
  в котором и происходит дальнейшее основное обучение.
  
  Давайте посмотрим, какой прогресс достигнут в этой сфере
  и рассмотрим основные архитектуры.
  
  Идея использовать нейросеть вместо физического симулятора не нова,
  так как простые симуляторы вроде MuJoCo или Bullet на современных CPU
  способны выдавать от силы 100-200 FPS (а чаще на уровне 60),
  //// FPS, frame per second - <кадрами в секунду>
  а запуск нейросетевого симулятора в параллельных батчах
  легко выдает 2000-10000 FPS при сравнимом качестве.
  Правда, на небольших горизонтах в 10-100 шагов,
  но для обучения с подкреплением этого часто бывает достаточно.
  
  Но что еще важнее, процесс обучения нейросети,
  которая должна имитировать физический движок,
  обычно подразумевает снижение размерности.
  Так как самый простой способ обучить такую нейросеть
  это использовать автоэнкодер,
  где это происходит автоматически.
  //// Интересный вопрос: за счет чего, собственно, снижается "размерность"?
  //// Может быть, она не "снижается", а приводится к "истинному"/"оптимальному"?
  //// Ведь не факт, что наше прямое описание процессов является "минимальным",
  //// а не избыточным, примерно, на величину нашего "неумения писать кратко".
  
  Если вы подадите в такой нейросети на вход,
  например, картинку с камеры.
  И будете требовать, чтобы на выходе она выдавала точно такую же картинку.
  То из-за того, что в ее центре намного меньше нейронов,
  она будет вынуждена сжать всю информацию,
  необходимую для такого восстановления,
  до уменьшенной размерности Z.
  
  А уже к этой уменьшенной размерности Z
  можно применить любой классический алгоритм Reinforcement Learning.
  С маленькой размерностью он,
  возможно, уже будет способен справиться
  (ну да, ну да, надежда умирает последней).
  Кроме того, это также ускоряет расчеты.
  
  Собственно, в этом и заключается весь секрет обучения в воображении
  - сначала создается быстрая нейросеть,
  имитирующая физический движок,
  а также уменьшающая размерность задачи.
  И уже на этой уменьшенной размерности работают
  обычные алгоритмы обучения с подкреплением.
  Дальнейший прогресс заключался в том,
  как заставить автоэнкодер сохранять в Z нужную для решения задачи информацию,
  как эффективнее делать планирование в model-based методах
  прямо в уменьшенной размерности,
  а не в полных данных,
  и тому подобное.
  
  Причем этот подход можно применять не только
  для имитации физических движков,
  а вообще для любой задачи Reinforcement Learning.
  Где можно создать нейросеть для "воображения"
  что будет происходить дальше в этой задаче:
  компьютерные игры, обучение движения роботов, исследование
  и навигация в пространстве,
  и так далее.
  
  World Models
  
  Первой получившей широкую известность
  (хотя отдельные части встречались и раньше),
  стала появившаяся в 2018 году работа
  с одноименным названием World Models.
  
  Она собрала в себя ставшие теперь классическими
  элементы обучения в воображении:
  автоэнкодер для обучения нейросети-симулятора
  и обучение "мозгов" в получившемся воображении,
  причем в уменьшенной размерности Z.
  Все это работало достаточно быстро
  и показало отличный результат
  (по тем временам).
  
  В качестве автоэнкодера бесхитростно использовался классический VAE:
  
  Важный нюанс, результат автоэнкодера VAE дальше пропускался
  через рекуррентную нейросеть (разновидность MDN-RNN),
  чтобы отслеживать динамику.
  Так как VAE работает только с одиночными статичными картинками,
  а для динамичных задач нужно понимать движение.
  Обратите внимание, что RNN предсказывает сразу сжатое представление Z
  для следующего шага.
  Это пригодится в следующих усовершенствованиях этого алгоритма.
  
  В итоге общая схема алгоритма получилась такой:
  
  ....
  
  Здесь много стрелок, но суть очень простая:
  VAE(V) автоэнкодер выучивает модель мира
  и передает свое среднее значение с уменьшенной размерностью Z
  в нейросеть MDN-RNN(M) для отслеживания движения.
  Та выдает тоже сжатое Z,
  но уже для следующего шага в симуляции.
  Это позволяет этой рекуррентной нейросети MDN-RNN
  делать прогноз на несколько шагов вперед,
  передавая свой прогноз Z себе же на вход,
  и так несколько раз подряд.
  
  Ну а раз у нас есть прогноз развития ситуации на несколько шагов вперед,
  полученный чисто в "воображении"
  (выдаваемый рекуррентной нейросетью-симулятором MDN-RNN),
  то можно прямо по этому прогнозу обучать основную нейросеть
  для решения задачи.
  Так как строить прогнозы в воображении можно параллельно в батче
  размером в тысячи и даже десятки тысяч
  (выбирая разные значения действий из вероятностей),
  то это равносильно запуску десятков тысяч параллельных обычных симуляторов.
  
  В итоге получается, что основное обучение происходит в "воображении"
  (см. схему)
  по циклу между MDN-RNN и С
  (Controller - основной "мозг", принимающий решения).
  Но если посмотрите на схему,
  то видно что из контроллера С,
  стрелка также возвращается в environment.
  Это значит, что время от времени обученный контроллер C
  взаимодействует не только со своим воображением,
  но и с реальным симулятором.
  Чтобы пополнить базу автоэнкодера VAE(V).
  
  Что за Controller c, спросите вы?
  И правильно сделаете!
  В этой работе нейросети использовались
  только для создания механизма воображения,
  а решения принимала не отдельная нейросеть-"мозг",
  а именно этот Controller.
  Это штука, обученная на прогнозах рекуррентной нейросети
  обычным эволюционным алгоритмом.
  Точнее, более эффективной его разновидностью CMA-ES.
  У них это сработало,
  потому что уменьшенная размерность Z была настолько мала,
  что классический эволюционный алгоритм с ней справился.
  Подключать нейросети для обучения с подкреплением даже не понадобилось.
  Так что к нейросетевому обучению с подкреплением
  эта работа, ставшая родоначальником целого направления,
  строго говоря, отношения вообще не имеет.
  
  Позднее они применили этот подход к еще нескольким задачам,
  например управлению машинкой в симуляторе,
  и везде он показал свою эффективность и универсальность.
  
  PlaNet
  
  Следующим значимым шагом стало появление алгоритма PlaNet.
  Обучение в воображении уже использовали все кому не лень
  (заменив, разумеется, Controller на полноценную нейросеть
  с настоящими алгоритмами из reinforcement learning),
  но PlaNet сумел применить этот подход к Model-Based обучению.
  
  Для тех кто не знает, Model-Based RL
  - это когда вы в симуляторе делаете очень много случайных прогонов
  и выбираете самый лучший вариант.
  С максимальной наградой.
  Да, вот так все просто.
  Тут и обучения никакого нет,
  это очень древний подход, имеющий к RL отношение лишь потому,
  что работает в схожих условиях и выдает решение с максимальной наградой.
  
  И лучшие усовершенствования Model-Based алгоритма до сих пор заключались в том,
  чтобы проверять через симулятор не абсолютно случайные действия,
  а например распределенные по нормальному закону,
  чтобы проверять в первую очередь продолжавшееся движение робота.
  Или динамически адаптировать вероятности
  под текущую динамику системы (CEM или PDDM).
  
  И здесь нейросети-симуляторы вместо настоящего симулятора для проверки гипотез,
  подошли как нельзя кстати!
  Более быстрые, способные понимать и запоминать
  более сложную динамику реального мира.
  
  Но недостатком использования нейросетевых симуляторов
  вместо физических движков было то,
  что они были вынуждены предсказывать полное состояние системы.
  Скажем, получая на вход картинку с камеры
  и выдавая ожидаемую картинку для следующего шага.
  Потом эту свою спрогнозированную картинку подавали себе же на вход
  и прогнозировали картинку для еще одного следующего шага.
  
  К сожалению, в реальных задачах такая система быстро вырождалась.
  Потому что генерировать картинки сложно и дорого.
  А небольшие случайные отклонения в пикселях уводили все это в разнос.
  Горизонт планирования на основе генерации картинок
  (т.е. полного state, если говорить в терминах Reinforcement Learning)
  заключался в единицах или,
  в лучшем случае,
  паре десятков шагов вперед.
  Для Model-Based это мало.
  
  PlaNet, как World Models до этого,
  начал генерировать воображаемые последовательности не в виде картинок,
  а в виде сжатого состояния Z
  (здесь на схеме они обозначаются как S - state).
  
  При этом из каждого Z (простите, теперь S) с помощью декодера все еще можно,
  при желании, восстановить картинку.
  Но важно, что нейросеть-симулятор строит траектории именно в сжатом состоянии.
  //// Тоже ведь интересный момент: оказывается в сжатом "состоянии"
  //// еще и прогнозы получаются точнее.
  //// Может это сжатое "состояние", точнее, "пространство решений",
  //// более точно/полно/устойчиво моделирует "реальную систему"?
  
  Это позволяет в сжатых состояниях S (все, прощай Z)
  сохранять только важные абстрактные вещи для решения задачи.
  Например, скорости объектов, их положение и так далее.
  А в картинках все это хранилось в шумных пикселях,
  из которых приходилось потом выдирать обратно.
  
  Хранение в S только важной информации для решения задачи
  позволило строить прогнозы не на десяток шагов вперед,
  а на сотни и даже тысячи.
  Что резко улучшило качество Model-Based прогонов
  в нейросетевом симуляторе (то есть в "воображении").
  Да и маленькая размерность тоже помогает.
  
  Обратите внимание на схеме выше,
  что на каждом промежуточном шаге в модель,
  т.е. на вход нейросети-"воображения",
  добавляется случайное действие A.
  Здесь все как в обычном Model-Based
  - прогоняем через симулятор случайные действия
  и выбираем лучший вариант.
  Отличие в том, что каждый промежуточный state S
  это сжатое представление.
  Поэтому чтобы получить из него награду R
  для расчета суммарной награды,
  из этого скрытого state S нужно предсказать награду,
  что делается отдельной небольшой нейросетью
  (синий прямоугольник на схеме).
  А вот генерировать из каждого промежуточного шага картинку декодером,
  что очень трудоемко в вычислительном плане,
  при работе совсем не нужно!
  (это делалось только при обучении автоэнкодера).
  Классическое Model-Based планирование,
  т.е. прогон случайных действий через симулятор
  и выбор лучшего, делается полностью в сжатых состояниях,
  лишь с небольшой помощью нейросети,
  получающей из S награду R.
  Это тоже значительно ускоряет расчеты
  по сравнению с предыдущими подходами,
  которые использовали идею World Models,
  но для генерации целых картинок.
  //// И снова возникает вопрос: что есть это "сжатое представление"
  //// простыми словами на "великом и могучем"?
  //// Что-то до сих пор никто даже не попытался это как-то сформулировать.
  //// Придумали термин "латентное пространство" и на этом успокоились.
  
  Как и любой Model-Based алгоритм,
  PlaNet требует намного меньше примеров и времени для обучения.
  В 50 раз или около того.
  При этом способность делать прогнозы в сжатом представлении,
  хранящем только нужную информацию для решения задачи,
  и прогнозируя на порядки более длинные последовательности,
  позволили ему добиться качества, сравнимого с Model-Free методами.
  
  Другим общим плюсом Model-Based подходов является то,
  что однажды выучив модель мира (нейросеть-воображение),
  можно решать разные задачи без переучивания.
  Через симулятор персонажа можно делать прогоны случайных траекторий
  для задачи бега, ходьбы и вообще любых действий.
  Достаточно только определиться как считать награду.
  Впрочем, по сравнению с обычным Model-Based,
  в этом плане PlaNet немного проигрывает.
  Так как его сжатое представление ориентировано на конкретную задачу
  (хранит важное для решения именно ее),
  плюс требуется специфический декодер для каждого вида награды
  из сжатого представления.
  
  Dreamer
  
  Дальнейшим развитием PlaNet стала архитектура Dreamer.
  Являющаяся сейчас фактически последним словом в этой области.
  
  Как и PlaNet, Dreamer делает прогнозы в сжатом состоянии S,
  содержащем важные для решения задачи сведения,
  и может делать эффективные прогнозы на тысячи шагов вперед.
  Но преимуществом Dreamer является использование Value нейросети,
  используемой для предсказания награды за пределами горизонта планирования.
  Эта сеть почти целиком взята из обычного Reinforcement Learning.
  На основе большой статистики взаимодействия со средой
  она учится предсказывать насколько хороша текущая ситуация.
  Можно ли из нее хотя бы потенциально получить в далеком будущем награду,
  даже если текущий горизонт планирования не показывает хорошей награды.
  В обычных Model-Based алгоритмах (и в предыдущем PlaNet)
  суммарная награда рассчитывается исключительно
  в пределах горизонта планирования.
  
  Но что еще важнее, вместо прогона и проверки через симулятор случайных действий,
  для выбора какие действия надо проверять
  Dreamer использует Actor нейросеть,
  выдающую сразу оптимальные действия.
  Это очень близко к концепциям в Model-Free обучении с подкреплением,
  например в архитектуре actor-critic.
  
  Но в отличие от actor-critic архитектур в Model-Free подходах,
  где actor учится выдавать оптимальные действия по градиенту,
  с которым critic предсказывает награду
  (или value, или advantage),
  в Dreamer actor нейросеть учится оптимальным действиям
  через обратное распространение градиента награды
  через всю последовательность сжатых представлений.
  Что невозможно для Model-Free подходов.
  //// Тоже очень важный момент, но уже чисто технический,
  //// в том смысле что обучаемая сеть может быть качественно больше
  //// и, соответственно, с существенно более сложным/изощренным/нелинейным
  //// поведением/тактикой/стратегией.
  
  Это позволяет Dreamer'у понимать,
  как маленькие изменения действий отразятся на награде в будущем.
  И эффективно дообучать свою Actor нейросеть,
  чтобы выдаваемые ею действия вели к максимальному увеличению награды
  на каждом шаге (см. анимацию ниже).
  Совместно с Value нейросетью,
  заглядывающей за горизонт планирования,
  так как value и reward обе распространяются назад по последовательности.
  
  По большому счету, Dreamer не является Model-Based подходом.
  Это скорее гибрид с Model-Free.
  Потому что технологию model-based с последовательностью предсказаний
  (в воображении, а не на реальном симуляторе)
  этот метод использует только для эффективного обучения Actor нейросети.
  А так Dreamer при работе сразу предсказывает оптимальные действия.
  Вместо долгого поиска,
  как делал PlaNet и все остальные Model-Based методы.
  
  Благодаря этой комбинации, Dreamer обучается в 20 раз быстрее,
  чем другие методы,
  и при этом по качеству равен или превосходит лучшие Model-Free методы.
  Точнее, Dreamer требует в 20 раз меньше взаимодействий со средой,
  а по чистому времени обучения
  (без учета времени работы физического симулятора)
  примерно в два раза быстрее.
  
  Dreamer на текущий момент один из самых лучших
  и быстрых методов Reinforcement Learning для длинных горизонтов планирования.
  Особенно он хорош для динамики движений персонажей в окружениях вроде MuJoCo,
  используя на входе данные высокой размерности, такие как картинки с камер.
  
  Plan2Explore
  
  Предыдущие методы касались только самого процесса обучения в воображении.
  Но в Reinforcement Learning существует также большая проблема
  как правильно исследовать мир,
  чтобы потом найти в нем оптимальные действия.
  
  Что если можно было бы изучить мир, причем как-нибудь более эффективно,
  чем просто случайно блуждая по нему.
  А потом, когда потребуется выполнить какую-то задачу,
  можно было в своем воображении представить эту последовательность
  и обучиться чисто в воображении,
  не взаимодействия снова со средой.
  Ведь это позволило бы, после изучения мира,
  выполнять практически любые задачи!
  Работа Plan2Explore отвечает именно на эти вопросы.
  
  Обычно исследование мира в Reinforcement Learning выполняется
  либо полностью случайно, либо с помощью различных внутренних мотиваций,
  например любопытства.
  Чтобы давать приоритет малоизученным областям,
  у которых высокая новизна для агента.
  
  Проблемой обычных методов является то,
  что новизна в них оценивается ретроспективно.
  Когда агент уже попал в новое место.
  Но, во-первых, не так уж часто агент случайно оказывается в новом месте.
  А во-вторых, при повторном попадании в это место, из-за такой оценки
  оно уже утрачивает для него новизну,
  хотя эта область все еще плохо изучена.
  
  Было бы неплохо оценивать перспективные с точки зрения новизны места заранее,
  чтобы потом двигаться туда.
  И, вы уже наверно догадались, Plan2Explore делает это
  с помощью механизма воображения, аналогичного предыдущим методам.
  И точно так же, использует последовательности из сжатых представлений.
  
  Работа Plan2Explore состоит из двух частей:
  сначала исследуется мир,
  используя обучение в воображении для планирования куда двигаться.
  А после изучения мира,
  когда нужно выполнить какую-то конкретную задачу,
  обучение этой задаче тоже делается полностью в воображении.
  Используя обученную модель мира и не взаимодействуя больше со средой.
  Ведь все возможные типы взаимодействия были изучены
  в период исследования мира.
  Это zero-shot вариант обучения новым задачам.
  А если все же немного повзаимодействовать
  (совместно с обучением в воображении,
  см. как это было в World Models в самом начале статьи),
  то получается несколько улучшенный few-shot вариант.
  
  Plan2Explore показывает качество,
  сравнимое с Dreamer и Model-Free методами,
  но при этом может использовать одну обученную модель мира
  в период исследования,
  чтобы выполнять разные действия.
  Для этого требуется лишь минимальное
  и очень быстрое дообучение в воображении,
  не взаимодействуя с реальной средой.
  
  Интересно, что в Plan2Explore используется
  необычный способ оценки новизны новых мест в период изучения мира.
  Для этого тренируется ансамбль моделей,
  обученных только на модели мира,
  и предсказывающих только один шаг вперед.
  Утверждается, что их предсказания отличаются для состояний с высокой новизной,
  но по мере набора данных
  (частого посещения этого места),
  их предсказания начинают согласовываться
  даже в случайных стохастических окружениях.
  Так как одношаговые предсказания в итоге сходятся
  к неким средним значениям в этом стохастическом окружении.
  Если вы ничего не поняли,
  то вы не одиноки.
  Там в статье не очень понятно это описано.
  Но как-то оно, похоже, работает.
  
  .......
  
  //// Самое интересное из комментариев.
  
  ......
  
  DesertFlow
  12 сен 2020 в 14:42
  
  Это все постепенный медленный прогресс...
  Но что интересно, каждая следующая разработка приближается к тому,
  как работает настоящий человеческий мозг.
  Мы ведь тоже заранее планируем,
  куда именно пойти при изучении нового места,
  прокручивая в голове что от него можно ожидать
  и что там может случиться.
  Увидев необычный предмет, у нас заранее появляется любопытство
  и желание с ним экспериментировать,
  а не в момент самого взаимодействия.
  Особенно это заметно у младенцев,
  то как они целенаправленно изучают новые предметы,
  а не просто удивляются свершившемся факту
  (хотя и это тоже).
  Подробнее тут:
  https://bair.berkeley.edu/blog/2020/07/24/icm-kids/
  
  И чтобы выучить новый навык,
  мы тоже прорабатываем последовательность действий в воображении.
  Тренируемся, обучаемся мысленно.
  Все это очень похоже на то,
  как устроен последний Plan2Explore.
  С поправкой на то,
  что это первые робкие шаги,
  а не завершенный алгоритм, конечно.
  
  ......
  
  Nehc
  12 сен 2020 в 21:08
  
  Пока я искренне полагаю, что рулит концепт, а не мощности...
  Да - натренировать ту же GPT-3 под силу не многим,
  но она и не ИИ еще все-таки.
  А я надеюсь, что дело в каком-то качественном отличии,
  а не тупо в мощности сети.
  
  michael_v89
  14 сен 2020 в 06:43
  
  Основная задача не в том, как планировать,
  а в том, как из входной информации получить образы,
  с которыми можно планировать.
  
  .........
  
  //// Конец цитирования.
  
  Т.е. суммируя свои впечатления от этого текста,
  могу сказать, что самое сильное впечатление от него,
  даже не в самой идее моделирования чего-то там нейросетью,
  это уже как бы общеизвестная истина.
  А моделирование в сжатом/свернутом пространстве/состоянии.
  Это еще, похоже, мэйнстримом не стало,
  так как даже терминов подходящих еще не встречал для такого подхода.
  И это вызывает двойной интерес,
  с одной стороны как это можно использовать,
  и, самое главное, а какая "магия" за этим стоит?
  И это точно вопрос уже не только "обучения с подкреплением",
  а вообще всей нейротехнологии, подробнее см:
  "Каково же оно "пространство эмбеддингов" нейронки?"
  
  А, вообще, интересный вопрос насколько наше человеческое "пространство воображения"
  похоже на сжатое/свернутое пространство/состояние нейросетей.
  
  
  =======
  
  17.02.2024 13:04
  
  Метод Policy Gradient для "чайников".
  В оглавление.
  
  Попробуем начать разбираться с типовыми задачами/алгоритмами
  в подходе "обучение с подкреплением" (RL).
  И начнем с самого простого, с так называемого метода Policy Gradient:
  
  "Нейросеть - обучение без учителя. Метод Policy Gradient".
  Автор: alexeyk500 (Алексей Степанов)
  https://habr.com/ru/articles/506384/.
  11 июн 2020 в 16:59
  
  //// Начало цитирования.
  
  .....
  
  Введение
  
  Среди алгоритмов машинного обучения
  особое место занимают алгоритмы машинного обучения
  где алгоритм учится решать поставленную задачу самостоятельно
  без участия человека,
  напрямую взаимодействуя со средой в которой он обучается.
  
  Такие алгоритмы получили общее название
  - алгоритмы обучения без учителя,
  для таких алгоритмов не нужно собирать базы данных,
  не нужно производить их классификацию или разметку.
  
  Алгоритму обучающемуся без учителя достаточно только давать
  обратный отклик на его действия или решения
  - хороши они были или нет.
  
  Глава 1. Обучение с учителем
  
  Так что же это такое - Обучение с учителем или без.
  Разберемся более подробно в этом
  на примерах из современного машинного обучения
  и задач которые оно решает.
  
  Большинство современных алгоритмов машинного обучения
  для задач классификации, регрессии, сегментации являются по сути
  алгоритмами обучения с учителем
  в которых учителем выступает сам человек.
  Потому что именно человек размечая данные говорит алгоритму
  какой должен быть правильный ответ
  и тем самым алгоритм пытается найти такое решение,
  чтобы ответ который выдает алгоритм при решении задачи
  максимально совпадал с ответом
  который указал человек для данной задачи как правильный ответ.
  
  На примере задачи классификации для датасета Mnist
  правильным ответом который дает человек алгоритму
  - это будет метка класса цифры в обучающей выборке.
  
  .......
  
  В дата сете Mnist для каждого изображения
  которое машинному алгоритму предстоит научиться классифицировать
  люди заранее проставили правильные метки
  к какому классу относится это изображение.
  В процессе обучения алгоритм предсказывая класс изображения
  сравнивает свой полученный класс для конкретного изображения
  с истинным классом для этого же изображения
  и постепенно в процессе обучения так корректирует свои параметры,
  чтобы предсказанный алгоритмом класс
  стремился соответствовать заданному человеком классу.
  
  Таким образом можно обобщить следующую мысль
  - алгоритмом обучения с учителем является любой алгоритм машинного обучения,
  где мы выдаем алгоритму как ему нужно
  с нашей точки зрения
  правильно поступить.
  
  И это не важно как именно поступить
  - указать к какому классу отнести данное изображение
  если это задача классификации,
  или отрисовать контуры предмета
  если это задача сегментации
  или в какую сторону повернуть рулевое колесо автомобиля
  если алгоритм это автопилот,
  важно то, что для каждой конкретной ситуации
  мы явно указываем алгоритму где правильный ответ,
  как правильно ему поступить.
  
  Это и есть ключ к пониманию того,
  чем принципиально алгоритм обучения с учителем
  отличается от алгоритма обучения без учителя.
  
  Глава 2. Обучение без учителя
  
  Разобравшись что же это такое - обучение с учителем,
  разберемся теперь, что же это такое - обучение без учителя.
  
  Как мы выяснили в прошлой главе,
  при обучении с учителем мы для каждой обучающей ситуации,
  даем алгоритму понимание, какой ответ с нашей точки зрения тут правильный,
  то идя от противного - в обучении без учителя,
  для каждой конкретной ситуации мы такого ответа алгоритму давать не будем.
  
  Но тогда возникает вопрос,
  если мы не даем алгоритму явного указания как поступать правильно,
  то чему же алгоритм научится?
  Как алгоритм будет обучаться не зная
  куда ему корректировать свои внутренние параметры,
  чтобы поступать правильно
  и в конечном итоге решить задачу так как нам бы хотелось.
  
  Давайте подумаем, на эту тему.
  Нам же важно, чтобы алгоритм решил задачу в целом,
  а как конкретно он будет поступать в процессе решения этой задачи
  и каким путем он пойдет, чтобы ее решить
  это нас не касается,
  отдадим это решать самому алгоритму,
  мы же от него ожидаем только конечный результат.
  
  Поэтому конечному результату мы и дадим алгоритму понять,
  хорошо он решил нашу задачу или нет.
  
  Таким образом так же обобщая все вышесказанное, мы приходим к выводу,
  что алгоритмом обучения без учителя мы называем такие алгоритмы,
  где нет явных указания для алгоритма как ему поступать,
  а есть только общая оценка всех его действий в процессе решения задачи.
  
  ......
  
  На примере игры где ракетка пытается поймать кубики падающие сверху
  мы не говорим алгоритму управляющему ракеткой
  в какой конкретно момент времени куда двигать ракетку.
  Мы скажем алгоритму только результат его действий
  - поймал он ракеткой кубик или нет.
  
  ......
  
  Это и есть суть обучения без учителя.
  Алгоритм сам должен научиться решать как ему поступать
  в каждом конкретном случае исходя из конечной оценки
  совокупности всех его действий.
  
  Глава 3. Агент, Среда и Награда
  
  Разобравшись с тем, что такое обучение без учителя,
  углубимся в алгоритмы которые умеют обучаться решению какой либо задачи
  без наших подсказок как правильно им поступать.
  
  Настало время ввести нам терминологию
  которой мы будем пользоваться в дальнейшем.
  
  Агентом мы будем называть наш алгоритм
  который умеет анализировать состояние среды
  и совершать в ней какие-то действия.
  
  Среда - виртуальный мир в котором существует наш Агент
  и своими действиями может менять его состояние:
  
  Награда - обратная связь от Среды к Агенту как ответ на его действия.
  
  .......
  
  Среда в которой обитает наш агент может быть сколь угодно сложной,
  агент может и не знать вовсе как она устроена,
  чтобы принимать свои решения и выполнять действия.
  Для Агента важна лишь обратная связь в виде награды
  которую он получает от среды.
  
  Если более подробно рассмотреть процесс взаимодействия агента со средой
  то его можно выразить следующей схемой
  
  .......
  
  St - состояние среды (state) на шаге t
  at - действие агента (action) на шаге t
  rt - награда (reward) на шаге t
  
  В каждый момент времени t наш агент наблюдает состояние среды - St,
  выполняет действие - at,
  за что получает от среды награду - rt,
  после чего среда переходит в состояние St+1,
  которое наблюдает наш агент,
  выполняет действие - at+1,
  за что получает от среды награду - rt+1
  и таких состояний t у нас может быть бесконечное множество - n.
  
  Глава 4. Параметризация задачи обучения без учителя
  
  Для того чтобы обучать агента
  нам нужно его как-то параметризовать задачу обучения без учителя,
  другими словами понять что за функции мы собираемся оптимизировать.
  В reinforcement learning
  - в дальнейшем мы так будем называть обучение без учителя,
  существует три таких основных функции:
  
  1) p(a|s) - policy function
  Функция вероятности оптимальности действия - a
  в зависимости от состояния среды -s.
  Она показывает нам насколько действие a при состоянии среды s оптимально.
  
  2) v(s) - value function
  Функция ценности состояния - s.
  Она показывает нам насколько состояние s вообще ценно для нас
  с точки зрения награды
  
  3) Q(s,a) - Q-function
  Q функция оптимальной стратегии.
  Она позволяет нам согласно данной оптимальной стратегии в состоянии - s
  выбрать оптимальное для этого состояния действие - a
  
  Первой рассмотрим функцию - policy function,
  как наиболее простую и интуитивно понятную
  для понимания функцию reinforcement learning.
  
  Поскольку мы собираемся решать задачи reinforcement learning
  посредством нейронных сетей.
  То схематично мы можем параметризовать policy function
  через нейронную сеть следующим образом.
  
  .....
  
  На вход нейронной сети, будем подавать состояния - s,
  а выход нейросети сконструируем таким образом,
  чтобы выходным слоем нейросети был слой SoftMax,
  с количеством выходов равным количеству действий
  возможных для агента в нашей среде.
  Таким образом пропустив через слои нейросети состояние s
  на выходе мы получим распределение вероятностей
  для действий агента в состоянии s.
  Что собственно нам и требуется для того
  чтобы начать через алгоритм обратного распространения ошибки
  обучать нашу нейросеть
  и итеративно улучшать policy function,
  которая теперь по сути является нашей нейронной сетью.
  
  Глава 5. Улучшение policy function через обучение нейросети
  
  Для обучения нейросети мы используем метод градиентного спуска.
  Поскольку последний слой нашей нейросети это SoftMax слой,
  его Loss функция равна:
  
  .......
  
  где:
  1 - истинные метки * log(предсказанные метки)
  2 - сумма по всем примерам
  
  Однако как же нам обучать нейросеть
  если у нас пока нет правильных меток
  для действий агента в состояниях S0-Sj?
  А они нам и не нужны,
  мы вместо правильных меток будем использовать
  награду которую агент получил от среды
  выполнив действие которое ему предсказала нейросеть.
  //// Т.е., фактически, обучение все-таки пошаговое?
  
  .......
  
  Имеем полное право так сделать потому
  что, для Cross Entropy Loss - yj - это истинные метки
  и для правильного класса и они равны единице,
  а для Policy Function Loss - rj - награда
  которую среда начислила агенту за действие которое он совершил.
  То есть rj служит как бы весом для градиентов
  при обратном распространении ошибки
  когда мы обучаем нейросеть.
  
  Получена положительная награда
  - значит нужно увеличить веса нейросети куда градиент направлен.
  
  .......
  
  Если полученная награда отрицательная,
  значит соответствующие веса в нейросети,
  согласно направления градиента куда направлена ошибка уменьшаем.
  
  Глава 6. Сборка ДатаСета для обучения
  
  Для того чтобы обучать нашего Агента
  - нейросеть средствами классического Machine Learning
  - через метод обратного распространения ошибки, нам нужно собрать датасет.
  
  Из постановки задачи понятно,
  что на вход нейросети мы хотим подавать состояние среды S
  - изображение колодца с падающими кубиками и ракеткой которая их ловит.
  
  ......
  
  а Y - который мы соберем в соответствии с состоянием S,
  это будет предсказанное действие нейросети - а
  и награда которую среда начислила агенту за это действие - r
  
  ......
  
  Но ведь среда по ходу игры может
  не за каждое действие агенту начислять награду,
  например в нашем случае агент получит положительную награду
  только тогда,
  когда ракетка поймает падающий кубик.
  В случае если ракетка кубик не поймает и он упадет на дно,
  то среда начислит агенту отрицательную награду.
  Все остальное время вне зависимости от того как агент двигает ракетку,
  пока кубик либо не ударится о ракетку, либо не упадет на дно,
  среда будет начислять агенту награду равную нулю.
  //// Ага, кажется, понял. По-шаговое обучение "отменяется"
  //// за счет "обнуления награды/штрафа".
  
  ......
  
  Как видно из описания процесса нашей игры,
  положительная или отрицательная награда у агента случается крайне редко,
  в основном же награда вне зависимости от его действий равна нулю.
  Как же обучать Агента когда основное время
  он не получает отклика от среды на свои действия.
  С точки зрения того, что наш агент - нейросеть
  и награда от среды равна нулю,
  то и градиенты при обратном распространении ошибки через нейросеть
  в большинстве случаев в датасете будут равны нулю,
  весам нейросети меняться будет некуда,
  значит и наш агент ничему не будет учиться.
  
  Как же решить проблему с нулевой наградой в большей части датасета
  который собирается для обучения агента?
  
  Выйти из данной ситуации можно двумя способами:
  
  первый
  - присвоить всем действиям агента
  которые он предпринимал за время пока кубик падал
  одну и туже финальную награду эпизода +1 или -1,
  в зависимости от того поймал агент кубик или не поймал.
  
  Тем самым мы все действия Агента если он поймал кубик
  будем считать правильными
  и будем закреплять такое поведение агента при обучении,
  присвоив им положительную награду.
  В случае если Агент кубик не поймал,
  то всем действиям Агента в эпизоде мы присвоим отрицательную награду
  и будем обучать его избегать такой последовательности действий в дальнейшем.
  
  второй
  - финальную награду с определенным шагом дисконта по убыванию
  распространить на все действия агента в этом эпизоде.
  Иначе говоря, чем ближе к финалу действие агента
  тем ближе к +1 или -1 награда за это действие.
  
  Введя такую дисконтированную награду за действие с убыванием
  по мере удаления действия от финала эпизода,
  мы даем Агенту понять,
  что последние действия которые он предпринимал,
  более важны для результат эпизода Игры,
  чем те действия которые он предпринимал вначале.
  
  Обычно дисконтированная награда рассчитывается по формуле
  - Финальная награда эпизода умножается на коэффициента дисконта
  в степени номера шага минус один
  для всех действиях агента в эпизоде
  (за то время, что падал кубик).
  //// Т.е. все-таки обучение "пошаговое",
  //// но за счет "виртуальных" оценок.
  
  ......
  
  Гамма - коэффициент дисконтирования (убывания награды).
  Он всегда находится в диапазоне от 0 до 1.
  Обычно гамму берут в районе 0.95
  
  После того как определились с тем какие данные мы собираем в ДатаСет,
  запускаем симулятор среды и проигрывая подряд несколько раз игру
  с несколькими эпизодами, собираем данные о:
  
  состоянии Среды,
  действиях которые предпринял Агент,
  награду которую Агент получил.
  
  Для простоты понимания назовем падение одного кубика через колодец
  - эпизодом игры,
  примем также, что сама игра будет состоять из нескольких эпизодов.
  Это значит, что за одну игру
  мы будем сбрасывать в колодец несколько кубиков по очереди,
  а ракетка будет пытаться их поймать.
  За каждый пойманный кубик агенту будет начисляться +1 балл,
  за каждый кубик что упал на дно и ракетка его не поймала,
  агенту будет начисляться -1 балл.
  
  Глава 7. Внутреннее устройство агента и среды
  
  Среда - поскольку у нас среда в которой предстоит существовать агенту
  по сути представляет из себя матрицу колодца
  внутри которой со скоростью одна строка за такт падают вниз кубики,
  а агент ходит в одном из направлений тоже на одну клетку.
  
  Мы напишем симулятор среды,
  который умеет в случайный момент времени сбрасывать
  с верхней строчки по произвольному столбцу кубик,
  умеет получив команду от агента перемещать ракетку на одну клетку
  в одном из направлений,
  после чего проверяет был ли падающий кубик пойман ракеткой
  или может быть он упал на дно колодца.
  В зависимости от этого симулятор возвращает агенту награду
  которую он получил за свое действие.
  //// Вот этот момент ну никак не понимаю.
  //// Что значит "возвращает"? Может "выдает"?
  //// И куда эта награда/штраф складывается/записывается?
  //// И где фиксируются действия Агента?
  
  Агент - основной элемент которого это наша нейросеть
  способная по состоянию среды преданной ей на вход
  возвращать вероятности всех действий для данного состояния среды.
  Из полученных от нейросети вероятности действий,
  агент выбирает лучшее,
  отправляет его в среду,
  получает от среды обратную связь в виде награды от среды.
  Также Агент должен обладать внутренним алгоритмом
  на основе которого он будет способен обучаться
  максимизировать награду получаемую от среды.
  
  Глава 8. Обучение Агента
  
  Для того чтобы обучать Агента нам нужно накопить статистику
  по данным от нашего симулятора и действий предпринятым агентом.
  Статистический данные для обучения
  мы будем собирать тройками значений
  - состояние среды, действие агента и награда за это действие.
  //// Т.е. непосредственно обучение распадается на два этапа
  //// - сначала набор статистики,
  //// а затем собственно обучение по данным статистики.
  
  .......
  
  Немного кода как собираем статистику
  
  .......
  
  Каждую такую тройку значений мы помещаем в специальный буфер памяти,
  где храним их все время пока проводим симуляции игры
  и копим статистику по ней.
  
  Код для организации буфера памяти:
  
  .......
  
  Проведя серию игр нашего Агента со Средой
  и накопив статистику мы можем переходить к обучению Агента.
  
  Для этого мы из буфера памяти с накопленной статистикой
  получаем батч наших данных в виде троек значений,
  распаковываем и преобразуем в тензоры Pytorch.
  
  Батч состояний среды в виде тензора Pytorch
  подаем на вход на нейросети агента,
  получаем распределение вероятностей для каждого хода агента
  для каждого состоянии среды в матче,
  логарифмируем эти вероятности,
  умножаем на награду полученную агентом за ход на логарифм этих вероятностей,
  затем берем среднее по произведениям
  и делаем это среднее отрицательным:
  
  .....
  
  Этап 1
  
  .....
  
  Этап 2
  
  .....
  
  После того как мы получили значение Loss функции
  мы делаем обратный проход по нейросети,
  чтобы получить градиенты и делаем шаг оптимайзером для корректировки весов.
  На этом цикл обучения нашего агента закачивается.
  //// Вот тут для меня не совсем понятный момент.
  //// Вроде как предполагается, что Агент на каждом шаге
  //// выполняет действие, т.е. формирует свой выход с "некоторой вероятностью",
  //// и накопленная статистика может уже не совпадать с фактическим результатом.
  //// Или, все же, Агент рассматривается/является на каждом шаге обучения
  //// "детерминированным алгоритмом", т.е. в точности повторяет
  //// те же самые действия, что были зафиксированы на этапе сбора статистики.
  //// Вот как бы этот момент по-точнее прояснить?
  
  Так как после того как оптимайзер сдвинул веса нейросети
  наши данные в собранные в статистике уже не являются актуальными,
  потому что нейросеть со сдвинутыми весами
  будет выдавать совершенно другие вероятности
  для действий по этим же состояниям среды
  и обучение агента дальше пойдет неправильно.
  //// Но ведь "сдвиг весов" происходит после каждого ШАГА обучения,
  //// то о каком "цикле" идет речь?
  //// Включает ли этот цикл полный эпизод или какой-то отдельный шаг?
  //// Вроде максимально подробное пояснение, а вопросы остаются.
  //// Или все-таки нужно вчитываться в код реализации метода?
  
  По этому мы очищаем наш буфер с памятью,
  проигрываем снова определенное количество игр для сбора статистики
  и вновь запускаем процесс обучения агента.
  
  Это и есть петля обучения при обучении без учителя методом Policy Gradient.
  
  Накопление статистических данных
  Обучение Агента
  Сброс статистических данных
  
  Процесс обучения повторяем столько раз,
  пока наш Агент не научится получать от системы ту награду
  которая нас устраивает.
  
  Глава 9. Эксперименты с Агентом и Средой
  
  Запустим серию экспериментов по обучению нашего Агента.
  
  Для экспериментов выберем следующие параметры среды:
  
  ........
  
  Для Агента выберем - сконструируем нейросеть
  - она будет сверточной (т.к. работаем с изображением)
  на выходе у нее будет 9 выходов
  (1-вправо, 2-влево, 3-вверх, 4-вниз,
  5-вправо-вверх, 6-влево-вверх, 7-вправо-вниз, 8-влево-вниз,
  9-ничего не делать)
  и SoftMax, чтобы получать вероятность для каждого действия.
  
  Архитектура нейросети
  
  ......
  
  Код создания нейросети на Pytorch
  
  ........
  
  Поочередно запустим три цикла обучения Агента в Среде
  параметры которых разобрали выше:
  
  Эксперимент ? 1 - Агент научился решать задачу за 13600 циклов игры
  
  Начальное состояние Агента
  
  ........
  
  График тренировки Агента
  
  .......
  
  Обученное состояние Агента
  
  ........
  
  Эксперимент ? 2 - Агент научился решать задачу за 8250 циклов игры
  
  Начальное состояние Агента
  
  .......
  
  График тренировки Агента
  
  .......
  
  Обученное состояние Агента
  
  .......
  
  Эксперимент ? 3 - Агент научился решать задачу за 19800 циклов игры
  
  Начальное состояние Агента
  
  .......
  
  График тренировки Агента
  
  .......
  
  Обученное состояние Агента
  
  .......
  
  Глава 10. Выводы
  
  Глядя на графики можно сказать,
  что обучение Агента конечно происходит медленно.
  
  Агент изначально довольно долго ищет хоть какую-то разумную политику
  для своих действий,
  чтобы начать получать положительную награду.
  
  В это время на первом этапе графика,
  идет медленное нарастание награды за игру,
  потом внезапно Агент находит удачный вариант для своих ходов,
  и награда полученная им за игру круто увеличивается вверх
  и идет по нарастающей,
  а затем приблизившись к максимуму награды,
  у агента опять идет медленное увеличение эффективности,
  когда он совершенствует уже выученную им политику ходов,
  но стремясь как и любой жадный алгоритм забрать награду себе полностью.
  //// Вот последнее мне совершенно непонятно:
  //// в каком именно месте прописана эта "жадность"?
  
  Также хочется отметить большую потребность в вычислениях
  для обучения Агента методом Policy Gradient,
  т.к. основное время работы алгоритма происходит
  набор статистики ходов Агента, а не его обучение.
  Набрав статистику по ходам из всего массива
  мы используем только один батч данных для обучения Агента,
  //// Батч это "пакет", т.е. несколько комбинаций данных,
  //// и я не понимаю как используются именно НЕСКОЛЬКО этих комбинаций.
  //// По описанию вообще должна была использоваться только одна комбинация.
  а все остальные данные выбрасываем,
  //// А зачем тогда собирали? Ну тупой я - не понимаю.
  //// Каких-то пары строк для полного понимания не хватает.
  //// Придется вчитываться в код.
  как уже непригодные к обучению.
  И опять собираем новые данные.
  
  Можно еще много экспериментировать с данным алгоритмом и средой
  - изменяя глубину и ширину колодца,
  увеличивая или уменьшая количество кубиков падающих за игру,
  делая эти кубики разного цвета.
  Чтобы пронаблюдать какое это влияние окажет на эффективность
  и скорость обучения Агента.
  
  Также обширное поле для экспериментов - параметры нейросети,
  по сути нашего Агента которого мы и обучаем,
  можно менять слои, ядра свертки, включать и подстраивать регуляризацию.
  Да и много чего еще другого можно пробовать,
  чтобы повысить эффективность обучения Агента.
  
  Таким образом запустив на практике эксперименты с обучением без учителя
  по методу Policy Gradient мы убедились,
  что обучение без учителя имеет место быть,
  и оно реально работает.
  //// Да нет тут фактически "сбор статистики" это как раз-таки
  //// достаточно явный аналог "учителя". Причем очень неэффективного.
  
  Агент самостоятельно обучился максимизировать свою награду в игре.
  
  Ссылка на GitHub c кодом, адаптированным под работу в ноутбуке Google Colab
  https://github.com/alexeyk500/Policy_Gradient_for_RL
  
  ........
  
  //// Из комментариев.
  
  malkovsky
  11 июн 2020 в 18:11
  
  \\\ Таким образом так же обобщая все вышесказанное,
  \\\ мы приходим к выводу, что алгоритмом обучения без учителя
  \\\ мы называем такие алгоритмы, где нет явных указания для алгоритма
  \\\ как ему поступать, а есть только общая оценка всех его действий
  \\\ в процессе решения задачи.
  
  Не надо свою субъективную классификацию методов выдавать за общепринятую.
  А в общепринятой обучение без учителя
  - это не когда вы даете только <общую оценку> действий,
  а когда вы никакой оценки не даете.
  Обучение с подкреплением (reinforcement learning)
  - это вполне себе обучение с учителем.
  
  malkovsky
  11 июн 2020 в 18:15
  
  Хотя, может я и не прав
  
  .......
  
  alexeyk500
  14 июн 2020 в 18:45
  
  1) Среда выдает Агенту только вознаграждение по результатам его действий,
  Среда никак своей наградой Агента не обучает
  и не говорит ему правильно он поступает или нет.
  А награда может измеряться в чем угодно хоть в очках за игру,
  хоть во времени которое агент проживет в среде(как вы предложили).
  Но Агенту нужна награда обязательно,
  без нее Агент не получит обратную связь от среды в которой он обучается.
  Без получения награды от среды вся деятельность Агента лишена смысла
  - потому что откуда тогда Агент вообще поймёт,
  что он чему-то должен учиться.
  Что заставит Агента куда-то двигаться и что-то предпринимать в среде,
  если ему можно постоять в сторонке, результат-то будет для него одинаков.
  
  2) Как я уже написал выше - Среда не содержит интерпретации награды
  она лишь ведет ее подсчет исходя из действий агента.
  Интерпретацию награды как и цель обучения для агента задает человек
  - автор алгоритма обучения Агента,
  именно в сам алгоритм мы <зашиваем> цель обучения
  и то как Агенту интерпретировать награду получаемую от среды.
  
  3) Для задачи классификации пусть даже и через Reinforcement Learning
  все равно придется расписать для Cреды подсчет награды
  - насколько правильно текущая версия агента умеет классифицировать картинки,
  если этого не сделать, то Агент элементарно скажет,
  я все отклассифицировал - тут один класс изображения
  и все картинки принадлежат к нему.
  
  И никакого обучения не получится.
  
  Выводы:
  
  а) Нет обратной связи от среды (награды) - нет обучения Агента.
  
  б) Без поставленной цели обучения - Агент ничему не научится.
  
  ......
  
  Nick2Nick
  23 июн 2020 в 15:47
  
  А правильно я понимаю, что награда это скаляр
  и тем самым в функции потерь все логарифмы вероятностей
  умножаются на одно и то же число?
  
  alexeyk500
  23 июн 2020 в 16:06
  
  Награда выдается средой в ответ на конкретное действие агента,
  соответственно,
  при расчете Loss функции мы на награду должны умножать
  только логарифм вероятности того действия
  которое фактически совершал агент в этом состоянии.
  Затем мы суммируем такие логарифмы вероятностей действий агента
  умноженные на награды за действия,
  для всех шагов агента и делаем всю сумму отрицательной,
  т.к. что бы максимизировать награду за игру
  Loss функцию необходимо минимизировать.
  
  Nick2Nick
  23 июн 2020 в 18:01
  
  Спасибо за ответ.
  
  То есть Loss это произведение rewards на логарифмы вероятности policy.
  Policy это нейронка.
  
  Задам вопрос более конкретно:
  
  Индекс J в функции Policy Function Loss это для суммирования по шагам
  в рамках оптимального действия на каждом шаге,
  или для суммирования всех действий внутри одного шага?
  
  alexeyk500
  23 июн 2020 в 18:23
  
  Спасибо за вопрос, попробую объяснить немного по другому:
  
  Loss функция суммирует логарифмы умноженные на награду
  для всей игры по одному действию агента на один шаг игры.
  
  А вот сама Игра или ее эпизод уже состоят
  из последовательности шагов от 0 до J.
  Так что индекс J - это J-й шаг игры,
  
  Можно сказать, что шаг игры это такой своеобразный <такт> игры
  который характеризуется своим уникальным состоянием среды,
  действием агента и наградой от среды за такое действие.
  
  Внутри шага мы не суммируем логарифмы вероятностей
  всех доступных действий агента,
  т.к. нет никакого смысла это делать потому
  что, такие произведения все равны нулю.
  Награды мы за несовершенные действия от среды
  не получали ведь действия не было,
  значит награды для несовершенных действий равны нулю,
  а умножая любое число (хоть даже и логарифм) на ноль мы получаем ноль.
  
  Следовательно и складывать нечего.
  
  ........
  
  //// Конец цитирования.
  
  Вроде и понятно изложено, в какое-то непонимание все-таки осталось.
  Пришлось разбираться с кодом.
  И выяснилось, что все непонимание из-за использования "спецтермина" "батч".
  По коду выяснилось, что в данном примере "батч" это, по факту,
  ВСЯ накопленная статистика.
  И при вычислении "значения Loss функции" учитывается, точнее, усредняются
  все шаги работы Агента в соответствии с приведенной формулой.
  Т.е. можно сказать, что в этом методе Policy Gradient,
  основная роль в обучении это методика вычисления Loss функции
  через усредненную оценки вероятностей.
  
  Ну и заодно, стало понятно как именно происходит накопление наград/штрафов
  за несколько эпизодов - а это и есть весь набор статистики.
  Т.е. Агент в этом методе обучения самостоятельно никакого подсчета
  накопленной общей суммы наград/штрафов не производит.
  Это просто такая "фигура речи" на "птичьем языке" RL,
  а на самом деле это суммирование осуществляется набором "статистики",
  и последующим учетом в значении Loss функции.
  
  И последней "плюшкой" от разбора этого метода,
  стало понимание, где собственно в данном случае "прячется жадность".
  А она оказалась "прописана" в той самой формуле "дисконтированной награды",
  во всяком случае, я так понял,
  тем, что фактически каждый шаг эпизода оценивается по итогу эпизоду,
  и даже если начальные шаги в эпизоде были не оптимальны,
  или, наоборот, стратегически перспективны,
  то они все равно награждаются/штрафуются по окончательному итогу.
  В общем, это опять элемент "птичьего языка" RL,
  когда характеризуют Агента, по функции оценки результатов его действий
  и алгоритма вычисления Loss функции.
  
  Не знаю как Вам, а мне проработка этого материала
  для понимания "обучения с подкреплением", наверно, столько же,
  как и все предыдущие материалы вместе взятые.
  Тут основное в понимании того, что основная часть обучения,
  реально выполняется не по-шагово, а "по совокупности совершенного",
  а вычисление Loss функции может представлять из себя существенную часть обучения.
  Но представляется также, что это основная причина медленного обучения Агента
  по данному методу, так как Агент в данном случае рассматривается
  как "абсолютно черный ящик".
  Хотя это и позволяет достаточно свободно экспериментировать
  со структурами нейросетей реализующих Агента.
  
  
  =======
  
  05.01.2024 9:07
  
  Model-Based алгоритм для "чайников".
  В оглавление.
  
  А теперь рассмотрим другой подход в "обучении с подкреплением" (RL).
  так называемый Model-Based:
  
  "PDDM - Новый Model-Based Reinforcement Learning алгоритм
  с улучшенным планировщиком"
  Автор: DesertFlow
  https://habr.com/ru/articles/470179/.
  4 окт 2019 в 21:43
  
  //// Начало цитирования.
  
  Обучение с подкреплением (Reinforcement Learning)
  делится на два больших класса:
  Model-Free и Model-Based.
  В первом случае действия оптимизируются напрямую по сигналу награды,
  а во втором нейросеть является только моделью реальности,
  а оптимальные действия выбираются с помощью внешнего планировщика.
  У каждого подхода есть свои достоинства и недостатки.
  
  Разработчики из Berkeley и Google Brain представили Model-Based алгоритм PDDM
  с улучшенным планировщиком,
  позволяющий эффективно обучаться сложным движениям
  с большим числом степеней свободы на небольшом числе примеров.
  Чтобы научиться вращать мячи в роботизированной руке
  с реалистичными суставами пальцев с 24 степенями свободы,
  потребовалось всего 4 часа практики на реальном физическом роботе.
  
  Обучение с подкреплением (Reinforcement Learning)
  - это обучение роботов по сигналу награды.
  Это похоже на то, как учатся живые существа.
  Но проблема осложняется тем,
  что неизвестно как нужно изменять веса нейросети,
  чтобы предлагаемые ею действия вели к увеличению награды.
  Поэтому в Reinforcement Learning обычные методы обучения нейросетей
  не подходят.
  Ведь неизвестно, что именно она должна выдавать на своем выходе,
  а значит невозможно найти ошибку
  между ее предсказанием и реальным положением вещей.
  Чтобы пропустить эту разницу обратно по слоям нейросети
  и изменить веса между нейронами,
  чтобы минимизировать эту ошибку.
  Это классический алгоритм обратного распространения ошибки,
  которым обучают нейросети.
  
  Поэтому учеными было изобретено несколько способов,
  как решить эту задачу.
  
  Model-Free
  
  Одним из самых эффективных подходов оказалась
  модель actor-critic (актер-критик).
  Пусть одна нейросеть (actor) на своем входе
  получает состояние окружающей среды state,
  а на выходе выдает действия actions,
  которые должны вести к увеличению награды reward.
  Пока эти действия случайные и просто зависят
  от прохождения сигнала внутри сети,
  так как нейросеть еще не обучена.
  А вторая нейросеть (critic) пусть на вход получает
  тоже состояние окружающей среды state,
  но еще и действия actions с выхода первой сети.
  А на выходе пусть предсказывает только награду reward,
  которая будет получена, если применить эти действия.
  
  А теперь следите за руками:
  какие должны быть на выходе первой сети оптимальные действия actions,
  ведущие к увеличению награды, мы не знаем.
  Поэтому с помощью алгоритма обратного распространения ошибки
  обучить ее не можем.
  А вот вторая нейросеть очень даже может предсказывать
  точное значение награды reward
  (а точнее, обычно ее изменение),
  которую она получит,
  если сейчас применить действия actions.
  Так давайте возьмем градиент изменения ошибки из второй сети,
  и применим его к первой!
  Так можно обучать первую нейросеть
  классическим методом обратного распространения ошибки.
  Просто ошибку берем не из выходов первой сети,
  а из выходов второй.
  
  В итоге первая нейросеть обучится выдавать оптимальные действия,
  ведущие к увеличению награды.
  Потому что если критик critic ошибся
  и предсказал меньшую награду,
  чем оказалась в реальности,
  то градиент этой разницы будет двигать действия актера actor
  в направлении,
  чтобы критик точнее предсказывал награду.
  А значит в сторону более оптимальных действий
  (ведь именно они приведут к тому, что критик точно предскажет
  более высокую награду).
  Аналогичный принцип работает и в обратную сторону:
  если критик завысил ожидаемую награду,
  разница между ожиданием и реальностью
  будет понижать выходы actions у первой нейросети,
  которые привели к этому завышенному показанию reward у второй сети.
  
  Как видите, в этом случае действия оптимизируются
  напрямую по сигналу награды.
  Это общая суть всех Model-Free алгоритмов в Reinforcement Learning.
  Именно они являются state-of-the-art на данный момент.
  
  Их преимуществом является то,
  что оптимальные действия ищутся градиентным спуском,
  поэтому в итоге находятся самые оптимальные.
  А значит показывающие лучший результат.
  Другим преимуществом является возможность использовать маленькие
  (а значит быстрее обучаемые) нейросети.
  Если из всего многообразия факторов окружающей среды
  ключевыми для решения задачи являются какие-то конкретные,
  то градиентный спуск вполне способен их выявить.
  И использовать для решения задачи.
  Эти два преимущества обеспечили успех прямым Model-Free методам.
  
  Но у них есть и недостатки.
  Так как действия обучаются напрямую по сигналу награды,
  то нужно много обучающих примеров.
  Десятки миллионов даже для очень простых случаев.
  Они плохо работают на задачах с большим числом степеней свободы.
  Если алгоритму сразу не удастся выявить ключевые факторы
  среди ландшафта высокой размерности,
  то он скорее всего вообще не обучится.
  //// Полезное напоминание "необходимости" случайной инициализации.
  Также Model-Free методы могут эксплуатировать уязвимости в системе,
  зацикливаясь на неоптимальном действии
  (если к нему сошелся градиентный спуск),
  игнорируя остальные факторы окружающей среды.
  Для даже немного отличающихся задач Model-Free методы
  приходится обучать полностью заново.
  
  Model-Based
  
  Model-Based методы в Reinforcement Learning
  в корне отличаются от описанного выше подхода.
  В Model-Based нейросеть только предсказывает что будет дальше.
  Не предлагая никаких действий.
  То есть, является просто моделью реальности
  (отсюда "Model"-Based в названии).
  А вовсе не системой принятия решений.
  
  На вход Model-Based нейросети подают текущее состояние окружающей среды state
  и какие хотим совершить действия actions.
  А нейросеть предсказывает как изменится в будущем state
  после применения этих действий.
  Она может также предсказывать какая будет награда reward
  в результате этих действий.
  Но это не обязательно,
  так как награду обычно можно вычислить из известного state.
  Далее этот выходной state можно подать обратно на вход нейросети
  (вместе с новыми предполагаемыми actions),
  и так рекурсивно предсказывать изменение внешней окружающей среды
  на много шагов вперед.
  
  Model-Based нейросети очень легко обучаются.
  Так как они просто предсказывают как будет изменяться мир,
  //// Т.е. предсказания "мира" "проще" для данного алгоритма обучения,
  //// чем предсказание "оптимальных действий".
  не делая никаких предложений какие должны быть оптимальные действия,
  чтобы награда увеличивалась.
  
  Поэтому Model-Based нейросеть использует для своего обучения
  все существующие примеры,
  а не только те, что ведут к увеличению или уменьшению награды,
  как это происходит в Model-Free.
  Это причина того, почему Model-Based нейросетям
  нужно намного меньше примеров для обучения.
  
  Единственным недостатком является то,
  Model Based нейросеть должна изучить реальную динамику системы,
  а значит должна обладать достаточной емкостью для этого.
  Model-Free нейросеть может сойтись на ключевых факторах,
  игнорируя остальные,
  и поэтому быть маленькой простой сетью
  (если задача в принципе решаема меньшими ресурсами).
  
  Другим большим преимуществом,
  помимо обучения на меньшем на порядки числе примеров,
  является то, что будучи универсальной моделью мира,
  единственную Model-Based нейросеть можно использовать
  для решения любого числа задач в этом мире.
  
  Главная проблема в Model-Based подходе
  - а какие, собственно, действия actions подавать нейросети на вход?
  Ведь нейросеть сама не предлагает никаких оптимальных действий.
  
  Самый простой способ
  - это прогонять через такую нейросеть десятки тысяч случайных действий
  и выбрать те,
  для которых нейросеть предскажет наибольшую награду.
  Это классический Model-Based Reinforcement Learning.
  Однако при больших размерностях и длинных временных цепочках,
  число возможных действий получается слишком велико
  чтобы их все перебрать
  (или даже угадать хотя бы немного оптимальные).
  
  По этой причине Model-Based методы обычно уступают Model-Free,
  которые градиентным спуском напрямую сходятся
  к самым оптимальным действиям.
  
  Улучшенная версия, применимая к движениям в робототехнике
  - это использовать не случайные actions,
  а сохранять предыдущее движение,
  добавляя случайность по нормальному распределению.
  Так как движения роботов обычно плавные,
  это позволяет сократить число переборов.
  Но при этом можно упустить важное резкое изменение.
  
  Конечным вариантом развития такого подхода можно считать CEM вариант,
  в котором используется не фиксированное нормальное распределение,
  вносящее случайности в текущую траекторию actions,
  а подбирающее параметры случайного распределения
  с помощью кросс-энтропии.
  Для этого запускается популяция расчетов actions
  и лучшие из них используются для уточнения разброса параметров
  в следующем поколении.
  Что-то вроде эволюционного алгоритма.
  
  PDDM
  
  Такое длинное вступление понадобилось для того,
  чтобы объяснить что происходит
   в новом предложенном PDDM Model-Based алгоритме обучения с подкреплением.
  Прочитав статью в Berkeley AI блоге (или расширенную версию),
  https://sites.google.com/view/pddm/
  и даже оригинальную статью arxiv.org/abs/1909.11652,
  это могло быть не очевидно.
  
  PDDM метод повторяет идею CEM при выборе случайных действий actions,
  которые надо прогнать через Model-Based нейросеть,
  чтобы выбрать действия с максимальной предсказываемой наградой.
  Только вместо подбора параметров случайного распределения,
  как это делается в CEM,
  PDDM использует временную корреляцию между actions
  и более мягкое (soft) правило обновления случайного распределения.
  Формула приведена в оригинальной статье.
  Это позволяет проверить большее число подходящих actions
  на длинных временных дистанциях,
  особенно если движения требуют точной координации.
  Дополнительно авторы алгоритма фильтруют кандидатов в actions,
  получая тем самым более плавную траекторию движений.
  
  Проще говоря, разработчики просто предложили
  более удачную формулу для выбора случайных actions
  для проверки в классическом Model-Based Reinforcement Learning.
  
  Но результат получился очень хорошим.
  
  Всего за 4 часа тренировки на реальном роботе,
  роборука с 24 степенями свободы научилась удерживать два шара
  и вращать их в ладони, не роняя.
  Недостижимый результат для любых современных Model-Free методов
  на таком малом числе примеров.
  
  Что интересно, для обучения они использовали вторую роборуку
  с 7 степенями свободы,
  которая подбирала уроненные мячи
  и возвращала их в ладонь основной роборуке:
  
  В итоге уже через 1-2 часа роборука могла уверенно удерживать шары
  и передвигать их в ладони,
  а 4 часов оказалось достаточно для полного обучения.
  
  Обратите внимание на дерганные движения пальцев.
  Это характерная особенность Model-Based подходов.
  Так как предполагаемые actions выбираются случайно,
  то не всегда совпадают с оптимальными.
  Model-Free алгоритм потенциально мог бы сойтись
  на действительно оптимальных плавных движениях.
  
  Однако Model-Based подход позволяет с одной обученной нейросетью,
  моделирующей мир, решать разные задачи без ее переобучения.
  В статье есть несколько примеров,
  например можно без проблем поменять направление вращения шаров в руке
  (в Model-Free пришлось бы заново обучать нейросеть для этого).
  Или удерживать мяч в конкретной точке ладони, следуя за красной точкой.
  
  Также можно заставить роборуку рисовать карандашом произвольные траектории,
  обучение чему для Model-Free методов очень сложная задача.
  
  Хотя предложенный алгоритм не является панацеей,
  и даже не является ИИ алгоритмом в полном смысле этого слова
  (в PDDM нейросеть просто заменяет аналитическую модель,
  а решения принимаются случайным поиском с хитрым правилом,
  уменьшающем число переборов вариантов),
  он может быть полезен в робототехнике.
  Так как показал заметное улучшение результатов
  и обучается на очень маленьком числе примеров.
  
  ........
  
  //// Из комментариев.
  
  JayS
  5 окт 2019 в 16:09
  
  \\\ и даже не является ИИ алгоритмом в полном смысле этого слова
  
  А какие алгоритмы являются ИИ алгоритмами в полном понимании?
  0
  
  DesertFlow
  5 окт 2019 в 16:12
  
  Которые выглядят как утка и крякают как утка ).
  Можно подумать, есть другие определения.
  Этот алгоритм заточен под моторику роботов,
  в других областях вряд ли будет толк.
  Физическая модель + удачный фильтр для плавности движений.
  Вряд ли это можно назвать ИИ.
  0
  
  .......
  
  DesertFlow
  5 окт 2019 в 16:22
  
  Согласен, так и есть.
  Это большой и больной вопрос в Model-Based обучении
  - как ранжировать actions.
  Пока ничего лучше перебора случайных вариантов не придумали...
  
  Эта работа в статье более эффективно отбрасывает действия
  с заведомо низкой вероятностью
  (основываясь на фильтрации, адаптивно и согласно награде).
  Но это ещё далеко до того, как это работает в мозге.
  А то что в мозге есть Model-Based подсистема это очевидно.
  И даже подобие перебора случайных вариантов.
  
  Это когда разные кластеры нейронов боятся за лидерство,
  но сигнал ещё слишком слабый для активации действия.
  Этот процесс, происходящий во времени с переменным успехом,
  мы воспринимаем как проигрывание в воображении разных вариантов,
  как бы случайный поиск.
  Хотя на самом деле это конечно просто выбор более сильного сигнала
  от конкурирующих групп нейронов.
  0
  
  ......
  
  sdfleod
  5 окт 2019 в 16:56
  
  Когда, я учился в школе, мне больше всего нравились
  Олимпиадные задачки на динамическое программирование.
  
  Задача, которая невозможно долго решается перебором,
  разбивается на всевозможные промежуточные шаги,
  и сохраняя промежуточные решения,
  сами собой отбрасываются не оптимальные пути.
  
  Таким образом, уже обученную Model-Based систему можно использовать
  в алгоритме динамического программирования,
  для решения конкретных задач.
  Главное задать начальное и конечное состояние
  (шарик в коробке -> шарик в манипуляторе)
  
  Еще в динамическом программировании довольно часто задача решается с конца.
  
  И когда вычисления доходят до начальной точки уже готов
  оптимальный путь движения к цели.
  0
  
  DesertFlow
  5 окт 2019 в 19:35
  
  Дело в том, что в текущем виде в model-based подходе
  нейросети тренируются как простые физические движки.
  Да, где-то это выгодно,
  так как можно обучить на данных сложной системы,
  которую вручную моделировать сложно.
  Но по сути это остаётся физическим движком, не более.
  Системы принятия решений в них нет
  - вместо этого делается случайный поиск,
  с рядом оптимизаций,
  чтобы отбросить варианты с низкой вероятностью.
  А ведь именно система принятия решений главный компонент ИИ.
  
  Вот если бы делать не случайный поиск
  или простые фильтры как в этой работе,
  а использовать память,
  как это делает биологический мозг,
  вот это было бы хорошо.
  К этому, в принципе, все и идёт.
  Ну то есть вместо случайных actions,
  надо пропускать через model-based нейросеть
  похожие на текущую ситуацию примеры из прошлого,
  как делает мозг.
  И уже среди них выбирать действия с максимальной ожидаемой наградой.
  Плюс какая-то случайность для исследований, конечно.
  
  Самая большая проблема
  - а как определить какая из прошлых ситуаций похожа на текущую?
  Мозг эту похожесть определяет своей структурой и принципом работы
  (связи между соседними нейронами укрепляются при прохождении сигнала и т.д.).
  Искусственные нейросети, в принципе, тоже это делают.
  Можно находить расстояние между двумя примерами
  в пространстве эмбеддингов,
  например.
  //// Неплохая идея. Стоит подумать.
  Это и будет их степень похожести.
  Но по каким критериям тренировать эти эмбеддинги
  - большой вопрос.
  Они ведь формируются в зависимости от целевой функции обучения.
  //// Стоп. Стоп. Что-то так и не так одновременно.
  //// Действительно "пространство эмбеддингов" формируется в процессе обучения,
  //// и целевая функция СУЩЕСТВЕННО определяет
  //// ТОПОЛОГИЧЕСКУЮ конфигурацию, связность и размерность этого пространства.
  //// Но на нее также влияют и структура обучаемой сети,
  //// и начальная инициализация параметров, порядок обучения,
  //// и финальные операции по "допиливанию напильникои" типа регуляризации.
  Да и по каким осям считать расстояния между точками
  в пространстве эмбеддингов тоже совсем нетривиальный вопрос.
  По-хорошему, это должно быть привязано к текущей цели
  (получению награды).
  И все надо организовать так,
  чтобы оно само обучалось на примерах.
  Прямые методы проще
  - есть цель (награда), есть градиентный спуск,
  все.
  А model-based сейчас больше инженерный подход, чем про обучение.
  //// Впрочем, как и большая часть "машинного обучения".
  0
  
  .......
  
  Suppie
  8 окт 2019 в 02:56
  
  Радует, что Reinforcement Learning таки используется на практике.
  Когда я защищал магистерскую работу по этой теме,
  обычно в тех же работах от Беркли использовали генетический алгоритм
  для выработки линии поведения агента,
  видимо современные реалии всё-таки склонили RL
  к использованию нейросеток с более быстрой сходимостью
  к определённому результату
  
  Kilorad
  8 окт 2019 в 10:00
  
  А в тех работах, что вы анализировали,
  ГА использовался для каких-то реально практических задач?
  //// ГА - генетические алгоритмы.
  Или это просто исследования, но без доведения до продакшна?
  
  ГА хорошо работает, когда мы можем одни и те же эксперименты
  повторять по многу раз и потратим только время.
  То есть когда агент у нас обучается в симуляции.
  
  А если каждое движение - это потенциальная возможность сломать
  дорогое оборудование или обрушить акции
  или сделать ещё что-то плохое
  - тогда лучше работает RL,
  желательно умеющий учиться на чужом опыте)
  
  .......
  
  //// Конец цитирования.
  
  Надеюсь, из данного материала хоть немного стала понятна разница
  при упоминании Model-Free и Model-Based алгоритмов.
  Первый делает упор на обучении Агента и его "критика",
  второй на обучение модели среды.
  "И смотри не перепутай, Кутузов".
  
  
  =======
  
  05.01.2024 9:07
  
  Обучение в воображении для настоящих "героев-отморозков".
  В оглавление.
  
  Я долго думал размещать ли этот очень объемный материал
  вместе с еще очень большим куском поистине чудовищной по объему дискусии.
  Но из уважения к титаническому труду автора решил все-таки это сделать.
  Очень уж выпукло в нем видны обычно неозвученные проблемы "обучения с подкреплением".
  А дискуссия сама по себе имеет ценность как иллюстрация того,
  что многие считают как "надо делать",
  и как на самом деле обстоят дела в этом направлении "машинного обучения".
  В общем решайте сами, готовы ли Вы к "глубокому погружению"
  в реальное Reinforcement Learning:
  
  "Sample-efficient reinforcement learning:
  пытаемся воспроизвести обучение в воображении".
  Автор: Kilorad
  https://habr.com/ru/articles/568320/.
  20 июл 2021 в 11:46
  
  //// Начало цитирования.
  
  Одна из крупных проблем обучения с подкреплением
  - это неэффективность по данным.
  Да, мы можем обучить нейросеть, которая будет играть в Пакмена лучше человека.
  Для этого ей потребуется сделать огромное,
  прямо-таки астрономическое число попыток.
  Для сравнения: мой кот тоже умеет разрабатывать сложные стратегии,
  и при этом ему не нужны тысячи повторений,
  чтобы обучиться чему-то элементарному.
  
  В 2020 году Google выпустил статью
  "Dream to control: learning behaviours by latent imagination".
  В статье описывался новейший алгоритм обучения в подкреплением - Dreamer.
  Алгоритм примечателен тем,
  что относительно быстро выучивает выигрышную стратегию
  - совершая относительно мало взаимодействий со средой.
  
  После этого я очень захотел свой собственный Dreamer
  - желательно не как у гугла, а лучше.
  Кроме того, по математическому описанию код можно написать сильно по-разному
  - я хотел понять, какие есть подводные камни,
  поэтому в код гугла я практически не лез.
  
  Дисклеймер:
  
  Я не пытаюсь сделать ИИ похожим на человека и не утверждаю,
  что нейросети похожи на нервную систему каких-либо организмов.
  По моему опыту,
  машинное обучение обычно превосходит человека в тех задачах,
  где есть бигдата и легко проверяемая функция ошибки.
  Большинство известных мне исключений связаны с тем,
  что либо эволюция предобучила человека на огромном датасете,
  либо в детстве человек собрал огромную статистику.
  Как только задача требует непредвзятого универсального интеллекта
  - оказывается, что с хорошими шансами XGBoost
  работает точнее любого эксперта.
  
  Что из себя представляет Dreamer?
  
  Dreamer - это система обучения с подкреплением,
  которая использует обучение в воображении.
  Он состоит из трёх основных блоков:
  
   Понижатель размерности.
   На входе у нас кадры из какого-нибудь Пакмена,
   а на выходе небольшие массивы float-ов,
   также называемые словом "эмбеддинг".
   Так как любое изображение сильно избыточно,
   его можно сжать до нескольких чисел,
   описывающих содержание картинки.
   Эмбеддинг можно получить, например, автоэнкодером
   - это такая нейросеть, которая на выходе пытается воспроизвести вход.
   Но один из слоёв автоэнкодера содержит мало нейронов,
   то есть нейросеть вынуждена сжимать картинку
   в маленький информативный вектор,
   из которого можно потом получить такую же картинку.
   Например, если мы смотрим на катапульту
   и видим в ней систему из рычагов, масс, сил, упругостей и прочностей
   - то вот это "теормеховское" описание и будет эмбеддингом.
  
   Модель мира.
   Это некая нейросеть, которая на вход принимает
   несколько прошлых эмбеддингов и действий нашего агента,
   а на выходе предсказывает будущий эмбеддинг.
   Или некую последовательность этих сжатых представлений.
  
   Система обучения с подкреплением,
   которая будет учиться в виртуальной реальности,
   на модели мира (пункт 2),
   а управлять - в реальном мире.
  
  То есть типичный запуск dreamer выглядит так:
  мы включаем пинг-понг от Атари,
  пять раундов агент жмёт случайные кнопки и собирает статистику.
  Затем обучает автоэнкодер,
  так что тот из цветной картинки 128 на 128
  теперь умеет делать вектор в 30 элементов.
  Так как задачка всего одна
  - пинг-понг -
  кодировщику необязательно быть ёмким.
  Затем обучается модель мира
  - она учится по прошлым кадрам и действиям предсказывать будущие.
  Затем обучается система actor-critic
  - она понимает, какие действия в каких ситуациях приводят
  к повышению и понижению сигнала награды,
  на любом горизонте планирования.
  
  Тут надо понимать,
  что каждая из описанных систем построена на нейросетях,
  то есть каждый раз,
  когда модель обучается,
  она просто делает несколько шагов градиентного спуска.
  Автоэнкодер чуть-чуть приближается от полностью рандомной нейронки
  к реально хорошему сжимателю,
  моделирующая сеть тоже чуть-чуть приближается
  к идеальной модели мира
  и так далее.
  
  Сколько же длится обучение dreamer-а?
  
  А это показано на синем графике.
  
  Фактически, когда я запустил дример на игре Pong,
  он стал показывать какие-то результаты, отличающиеся от рандома,
  на 120-й партии.
  
  Для меня это было шоком:
  самый sample-efficient ИИ вынужден проигрывать 120 партий,
  прежде чем научится действовать лучше рандома.
  Там всего две кнопки:
  
  В общем, подумал я, dreamer успешно провалил тест на кота
  (мой кот научился бы быстрее),
  а значит, чтобы побить рекорд гугла,
  достаточно сделать что-то хоть немного лучше.
  
  Архитектуры
  
  Я перепробовал и обдумал много архитектур reinforcement learning.
  Мои требования были такие:
  
   Система должна быть sample-efficient.
   Я знаю, как за бесконечное число экспериментов
   подобрать хорошую стратегию
   - эволюционный алгоритм это сделает отлично.
   Но надо пройти тест на кота
   - система должна уметь обучаться по считанным единицам подкреплений
   создавать некую неслучайную стратегию за единицы тысяч кадров.
  
   Система должна уметь использовать чужой опыт.
   Если мы делаем reinforcement learning для, скажем, игры в Doom,
   то у нас должна быть возможность самим сыграть,
   передать запись игры боту и обучить его на ней.
   Не копировать стратегию человека
   - лишь сделать из неё выводы,
   лучше понять, какие ходы хороши,
   а какие плохи.
  
   Система должна быть максимально универсальна.
   Как минимум она должна хорошо справляться со множеством задач,
   где на входе мы имеем цветной видеоряд,
   и действие происходит в чём-то, отдалённо похожем на наш мир.
  
   Система должна работать максимально "из коробки"
   - никакого сложного тюнинга гиперпараметров
  
  Ещё хорошо бы, чтобы ИИ вышел не очень требовательным к процессору,
  и чтобы достигал наиболее сильных стратегий...
  Но это по возможности.
  
  Я хотел повторить Dreamer, но решил,
  что обучать автоэнкодер каждый раз под задачу
  - это необязательно.
  Можно один раз потратить несколько недель на сервере
  и получить некий усреднённо-универсальный кодировщик.
  Можно его даже для начала учить на задачах,
  которые похожи на те, где будем применять.
  
  Мой энкодер
  
  Для создания эмбеддингов широко применяются автоэнкодеры.
  На входе картинка, на выходе - она же.
  А в узком промежуточном слое - эмбеддинг.
  
  Но потом я подумал:
  я же хочу, чтобы система работала с видеорядом.
  Было бы здорово, если бы мой энкодер мог выделять
  не просто зоны света и тени,
  а обнаруживал материальные объекты.
  Я делаю reinforcement learning,
  который буду тестировать в играх,
  а игры рассматриваю как метафору реальности.
  Так пусть у нас на входе "автоэнкодера" будет видеоряд,
  а на выходе - следующий кадр.
  Да, и всё это мы протащим через bottleneck.
  
  Я хотел сделать систему,
  которая бы внутри эмбеддинга получила что-то вроде координат объектов,
  их скоростей, масс...
  Возможно, каких-то свойств прочности, взрывоопасности и так далее.
  Конечно, можно все эти свойства разметить вручную,
  но ручная разметка будет точно неполной.
  А можно разметить автоматически
  - и тогда она будет менее осмысленная,
  зато более исчерпывающей.
  
  Итак, я арендовал сервер и приступил к экспериментам.
  Для начала я сделал огромный датасет из видео
  и нарезал его на входы и выходы.
  Входы - это цепочки по 6 кадров,
  на выходе - следующий кадр.
  Все кадры идут с некоторым периодом,
  то есть не прямо подряд.
  
  На входе свёрточные слои, на выходе - деконволюционные,
  здесь всё стандартно.
  А что посередине?
  Я попробовал и LSTM, и GRU
  - они дали отвратный результат.
  //// Так это надо бы запомнить. Полезный бит информации.
  Трансформер дал результат ещё хуже
  - наверное, его надо как-то хитро применять.
  
  Лучше всего сработал, как ни странно,
  обычный полносвязный слой,
  соединяющий входной и выходной "каскады" нейросети.
  
  Итак, картиночки.
  Первая картинка - это конец видеоряда.
  Последняя - это то, что нам надо предсказать.
  Посередине - это что предсказал автоэнкодер.
  У него эмбеддинг - всего 300 float-ов,
  то есть от никаких чудес я не ждал.
  
  Чтобы убедиться, что система не просто замыливает последний кадр,
  а именно делает прогноз, взгляните на картинку с самолётом:
  там видно, как система предсказывает сдвиг линии горизонта.
  
  Автоэнкодер хорошо замечает статические и контрастные детали
  - например, он быстро научился отрисовывать небо и графические интерфейсы.
  //// Тоже интересно. "Статические и контрастные" детали.
  
  Кроме того, я сделал ещё один кодировщик.
  На этот раз на входе был всё такой же видеоряд,
  но только из шутеров.
  А на выходе было сразу несколько вещей:
  предсказанный следующий кадр,
  сколько здоровья снимут главному герою в ближайшее время
  (и два разных горизонта прогноза),
  сколько он убьёт врагов и подберёт предметов.
  И размер эмбеддинга - 30 floatов.
  
  Разумеется, картинка предсказалась хуже
  (первые 2 кадра - это вход, затем прогноз, затем фактическое будущее):
  
  //// А интересно оказывается проанализировать картинку "эмбеддинга".
  //// "Статичные и контрастные детали" практически не "сжимабтся",
  //// а вот "динамика" "фрактализуется", как бы размывается.
  //// Но так как она затем восстанавливается, то на самом деле
  //// это другой формат "записи", то ли просто "сжатый",
  //// то ли все-таки "фрактальный"/"голографичный".
  
  Впрочем в реальных испытаниях,
  в сцепке с Reinforcement learning,
  лучше сработал именно второй автоэнкодер.
  //// Т.е. "ухудшение зрения" сопровождалось "повышением обоняния".
  
  Вообще, насколько важно, что "автоэнкодер" предсказывает картинку,
  если он её предсказывает настолько плохо?
  Сложно сказать, но наверное,
  это позволяет различать сцены,
  которые в равной мере перспективны с точки зрения наград,
  но выглядят по-разному,
  хотя бы имеют разную освещённость.
  
  Среда и бейзлайны
  
  В основном мои тесты происходили внутри vizdoom
  - это порт Doom, пригодный для запуска из Питон.
  На вход reinforcement learning получал картинку,
  на выходе у него набор действий,
  связанных с движением, стрельбой и открыванием дверей.
  
  Сигнал наград завязан на убийство врагов
  (+1 за каждую смерть противника),
  попадания (+0.15 за попадание),
  подбор предметов (+0.1 за предмет)
  и изменение здоровья
  (+0.005 за каждую единицу здоровья,
  но это скорее сигнал наказания,
  так как здоровье чаще убывает).
  
  Я использовал для сравнения два основных управляющих алгоритма .
  
  Во-первых, это полный рандом.
  Полностью случайные действия.
  
  Во-вторых, это sarsa.
  Одна нейросеть предсказывает,
  насколько перспективна позиция
  - оценивает суммарную награду за следующие несколько шагов
  по пришедшему эмбеддингу.
  Вторая оценивает ошибку первой,
  зная эмбеддинг и предпринятое действие.
  То есть, условно,
  первая нейронка говорит:
  обычно в такой ситуации мы убиваем в среднем 2 монстров.
  А вторая говорит:
  причём если мы станем стрелять,
  то это число вырастет на 1,
  а если идти влево, то упадёт на 2.
  
  Кроме того,
  есть оценка новизны для каждой позиции.
  Эта оценка суммируется с сигналом награды,
  так что бот будет не только отрабатывать наилучшую известную стратегию,
  но пытаться открывать что-то новое.
  
  Примерно так это выглядит на графике.
  Синее - это суммарная награда за последние несколько шагов.
  Она взята с экспоненциальным затуханием,
  чтобы более близкая награда воспринималась как более важная.
  Оранжевое - суммарная затухающая награда
  с учётом новизны позиции
  (мы дополнительно немного награждаем систему,
  если она проходит кадры,
  непохожие на те, что были в прошлом).
  Зелёное - оценка перспективности позиции,
  исключительно из знания самой позиции
  (state -> reward).
  Красное - коррекция этого прогноза нейросетью,
  которая знает и позицию (эмбеддинг),
  и действие (state+action -> reward).
  
  Как выяснилось, sarsa решает большинство тестовых задач
  ощутимо лучше полного рандома.
  Спотыкается лишь на тех,
  где награды наиболее редки.
  И, что важно, sarsa выходит на хорошие результаты за 5-10 эпизодов.
  То есть 5-10 партий рандомит
  - и дальше начинает почти стабильно выигрывать.
  
  \\\ SARSA очень напоминает Q-learning.
  \\\ Ключевое отличие SARSA от Q-learning заключается в том,
  \\\ что это алгоритм с политикой (on-policy).
  \\\ Это означает, что SARSA оценивает значения Q на основе действий,
  \\\ выполняемых текущей политикой, а не жадной политикой.
  
  Может, отказаться от dreamer и делать ИИ на базе sarsa?
  Он же реально быстро учится.
  
  Дело в том, что у sarsa есть теоретические ограничения эффективности.
  Мы предсказываем награду на следующих шагах,
  исходя из истории.
  То есть исходя из неявного предположения,
  что мы будет действовать примерно так же, как в прошлом.
  Таким подходом очень тяжело сформировать сложный навык.
  Например, наш reinforcement learning может пробежать через лужу кислоты
  за большой аптечкой.
  Лужа снимет 5 хп, аптечка даст 25 - всё нормально.
  Но sarsa не знает, как он себя поведёт после того,
  как наступит в кислоту.
  Может, он встанет на месте.
  Может, отступит.
  А может, пройдёт к аптечке.
  В результате ожидаемые потери от кислоты очень сильно зависят от того,
  как раньше sarsa вёл себя,
  попав в кислоту.
  
  Поэтому делаем dreamer.
  
  Dreamer, попытка номер один
  
  Я сделал нейросеть, которая по нескольким эмбеддингам и действию
  предсказывает следующий кадр
  - она работала на LSTM.
  Это должна была быть "модель мира" для dreamer.
  
  Первым делом стало понятно,
  что учится она очень долго.
  А обучившись, всё равно выдаёт ошибку в 25-30%.
  Я попробовал другие архитектуры нейросетей
  - например, вместо LSTM-слоя пробовал полносвязный слой или даже трансформер.
  Ничего подобного,
  качество низкое.
  Когда обучаешься на таких "снах",
  получается совершенно нежизнеспособная стратегия.
  //// Интересно почему?
  
  Тогда я попробовал сделать ход конём:
  в мире машинного обучения существует невероятно точная,
  универсальная и быстрая модель.
  Да, у неё есть некоторые недостатки,
  но на своём поле эта модель побеждает любые нейросети.
  Я говорю о бустинге решающих деревьев.
  LightGBM, XGBoost, Catboost
  - вот простые способы создать систему сверхчеловеческой точности.
  
  Я сделал массив бустингов.
  Каждый из них принимал на вход данные последних нескольких эмбеддингов,
  а так же последнее действие агента,
  а на выходе предсказывал одну компоненту эмбеддинга.
  Чтобы всё это не переобучилось,
  а разделил выборку на train и validation,
  и строил новые деревья,
  пока validation не начнёт проседать.
  
  7-10% ошибки.
  Победа!
  Но нам же надо не на один шаг прогнозировать, а на...
  Сколько будет 10 секунд в кадрах?
  250-300 шагов - это минимум.
  Уже на втором шаге модель на вход получает данные,
  которые в прошлый раз выдала на выходе.
  С погрешностью, разумеется.
  Насколько же быстро прогноз "шёл в разнос"?
  
  На 2-м шаге ошибка с 7-10% взлетала до 40-100%.
  Эффект бабочки на максималках.
  
  Разумеется, меня это не устроило,
  и я решил аугментировать данные.
  Сделать несколько копий входных данных с шумами,
  чтобы сделать прогнозную систему более устойчивой.
  //// Типичный подход "замена реальности синтетикой".
  //// И что получилось?
  
  Это не помогло:
  бабочка продолжала издевательски махать своими крыльями,
  вызывающие ураганы на другом краю Земли.
  //// Это хорошо. Значит проблема не в "чистоте данных".
  //// Тут что-то принципиальное.
  //// Собственно, наверно, поэтому и "нейронки" не заработали.
  
  Я осознал, что в большинстве статей по системам
  с рекуррентным планированием
  эффекту бабочки не уделено почти никакого внимания.
  Да, говорят, что если предсказывать мир покадрово,
  то прогноз деградирует,
  и кадру к 50-му вырождается.
  Но не предлагают какую-то хорошую теорию,
  которая бы объясняла,
  что может усилить или ослабить эту нестабильность,
  и как с ней вообще работать.
  //// Ну это вопросы, скорее, к Пригожину.
  //// И к существующей "научной методе"
  //// "заметания" действительно сложных проблем "под ковер".
  Вместо этого рассказывают,
  как тяжело перебирать большое число планов внутри модели.
  Но это как раз не выглядело для меня проблемой
  - если существуют model-free системы вроде той же sarsa,
  значит, можно запустить их в виртуальной реальности,
  порождённой нейросетью,
  и не придётся тестировать огромное число траекторий.
  
  Model-based и попытка номер 2
  
  Где-то примерно на этом месте я стал задаваться вопросом:
  почему я делаю, как в статье гугла,
  но у меня не получается?
  Именно в этот момент я скачал и запустил оригинальный dreamer,
  и именно тогда я понял,
  что творение гугла настолько неэффективно по данным.
  
  Я добыл на гитхабе коды множества model-based reinforcement learning.
  Это системы, которые могли предсказывать кадры, которые выдаст среда,
  если в неё зарядить какие-то определённые действия.
  
  Оказалось, что все системы, которые я увидел,
  обладают одним важным общим свойством.
  Они делают прогноз одномоментно на много кадров вперёд.
  Нейросеть за один прогон порождает не один кадр,
  а сразу цепочку.
  Да, и это была не LSTM,
  а гибрид конволюционной и полносвязной сети
  - как мои "автоэнкодеры".
  
  Немного творческой доработки
  - и у меня есть модель,
  умеющая по цепочке эмбеддингов, старых действий и запланированных новых
  делать прогноз на много кадров вперёд за один проход.
  //// Т.е. "пошаговое прогнозирование" оказывается хуже
  //// "долгосрочного стратегического прогнозирования".
  //// Причем именно на нейронках с "эмбеддингом".
  //// Очень интересное наблюдение.
  
  По-моему, модель выглядит убого и плохо.
  Ни тебе LSTM, ни трансформера,
  план на будущее заряжается просто "вповалку".
  
  Но, важный момент.
  Эта модель реально работает.
  На уровнях из Doom она давала ошибку в 10-20%
  на горизонте в 50-110 кадров,
  и эта ошибка не росла с огромной скоростью.
  А если на спрогнозированных кадрах построить ещё 50-110 следующих,
  то ошибка не взлетит экспоненциально.
  Таким подходом можно прогнозировать кадров на 300 вперёд
  (блоками по 50-100 кадров),
  и не получать существенного эффекта бабочки.
  
  Например, посредственно обученная модель выдаёт прогноз
  вот с такой погрешностью:
  
  Это 3 шага прогноза по 90 кадров каждый.
  Я брал средний модуль ошибки (mae)
  и делил на средний разброс эмбеддингов (их std).
  
  А ошибка в 10-20% - это много или мало?
  Если мы с такой точностью оцениваем награду,
  это очень хороший результат.
  Но мы-то оцениваем эмбеддинг,
  а награду рассчитываем уже по нему, другой нейросетью
  (которая в свою очередь обучается на реальных исторических сигналах награды).
  
  Итак, я сделал простой model-based reinforcement learning.
  Берём текущую ситуацию,
  предлагаем несколько сотен планов,
  прогнозируем траекторию (последовательность эмбеддингов) для каждого плана.
  Каждый эмбеддинг оцениваем на предмет ожидаемой награды,
  выбираем траекторию с максимальной наградой,
  выполняем то действие,
  с которого траектория начинается.
  И при любой возможности дообучаем модель мира
  (states+actions->next states)
  и модель награды (state->reward).
  
  Этот model-based отработал.
  Он был медлительным и показал результаты хуже, чем у sarsa,
  но лучше, чем у рандома.
  Тем не менее, на задачах с особенно разреженными наградами
  он отработал относительно хорошо
  - лучше, чем sarsa.
  
  Тогда я сделал некое подобие dreamer:
  модель мира генерирует множество траекторий,
  и на них обучается actor-critic алгоритм.
  И уже actor-critic принимает решения.
  
  Вот только у actor-critic есть нехорошее свойство:
  Когда он оценивает "потенциал" позиции,
  то есть награду, которой можно из этой позиции достичь,
  он использует рекурсивную q-функцию.
  Что это значит?
  Он разбивает всю историю на пары позиций:
  прошлая позиция и будущая.
  А дальше считает для каждой позиции потенциал.
  
  Допустим, так.
  У нас в кадре 50 было 2 единицы награды,
  а в кадре 51 было -1 награды.
  Считаем, что награды, которые ближе к нам во времени,
  важнее тех, что дальше.
  Для простоты считаем, что в 2 раза за каждую единицу времени.
  
  Итого, говорим, что потенциал (q-функция) 50-ой позиции
  равен 2+0.5*(-1) = 1.5.
  Но это потенциал точки с горизонтом планирования 2.
  А если нам нужно больше?
  Надо вместо награды во "второй" точке подставить q-функцию,
  и снова посчитать ту же формулу.
  А откуда мы узнаем q-функцию для, в нашем случае, 51-ой точки?
  Наверное, рассчитаем, исходя из 52-й точки.
  Ладно, а если это невозможно,
  так как 51-я точка - последняя?
  А мы хотим горизонт в 200 шагов?
  
  Тогда надо построить модель,
  которая по эмбеддингу предсказывает q-функцию в точке.
  А затем неизвестные значения q заполнить моделью.
  
  Хотим дальность прогнозирования в 200 шагов?
  Нам надо 200 раз обучить модель и 200 раз сгенерировать прогноз.
  
  Во-первых, это ужасно долго.
  Во-вторых, у нас даже награды предсказаны машинным обучением
  - с ненулевой погрешностью.
  А мы от них считаем какую-то функцию
  и делаем её таргетом другой нейросети.
  Затем берём выходы уже получившейся нейросети,
  складываем с наградами и снова делаем таргетом для нейронки.
  200 раз подряд.
  Интуитивно кажется, что машинное обучение поверх машинного обучения
  - это не очень хорошо,
  а если ещё и делать так рекурсивно,
  то ошибка будет расти лавинообразно.
  
  Итак, на практике мой dreamer с actor-critic внутри отработал неплохо.
  Хуже, чем sarsa, а главное, намного медленнее.
  Но лучше, чем полный рандом.
  Может, ML поверх ML - это не так уж и плохо?
  
  В любом случае, проблема медлительности никуда не исчезла.
  Поэтому я решил рассчитать q-функцию так,
  как это делается в sarsa.
  Сгенерить множество случайных планов,
  по ним построить траектории,
  по ним рассчитать дисконтированную
  (то есть с экспоненциальным затуханием)
  награду.
  
  Сделал.
  Назвал эту конструкцию dreamer-sarsa.
  Работала система и правда быстрее, чем dreamer с actor-critic,
  но эффективность значительно упала.
  Почему?
  
  Не могу сказать, почему вышло хуже,
  чем в прошлом dreamer,
  но скажу, почему получилось хуже,
  чем в sarsa.
  
  Когда мы оцениваем потенциал точки по фактически пройденным траекториям,
  мы очень зависим от того,
  как мы действовали на тех траекториях.
  Если в одну и ту же среду поместить случайную стратегию
  и, например, sarsa,
  то sarsa через некоторое время обучится какой-то хорошей стратегии
  и получит траектории с более высокой наградой,
  чем у случайного алгоритма.
  Примерно так:
  
  На картинке видно, что даже хороший алгоритм не сразу находит
  действенную стратегию,
  либо использует разведку, либо ещё по каким-то причинам действует неоптимально.
  В любом случае, средняя награда по траекториям
  (а значит, и q-функции у стартовой точки)
  будет совершенно разным в зависимости от того,
  какая стратегия порождала эти траектории.
  
  Дальше были следующие соображения.
  Существует уравнение Беллмана
  - оно позволяет рассчитать q-функцию так,
  будто мы используем наилучшую возможную стратегию.
  Даже без знания этой стратегии и наилучшей траектории.
  Это хорошо, но уравнение Беллмана рассчитывается рекурсивно,
  по формуле, похожей на формулу q-функции в actor-critic.
  Это значит, что во-первых, долго, во-вторых,
  ML поверх ML с соответствующим накоплением ошибок.
  
  Можно было бы создавать планы действий,
  похожие на те, что были раньше
  - например, генерировать их специальной нейросетью.
  Можно попробовать взять нейросеть,
  которая устойчиво предсказывает на 100 шагов вперёд,
  и брать прогноз только 1-го шага.
  И таким образом можно не просто генерировать траектории,
  а сделать полноценную интерактивную виртуальную реальность,
  где будет обучаться какой-нибудь алгоритм,
  у которого совершенно ужасный sample-efficiency,
  но который находит хорошие стратегии.
  
  В любом случае,
  в первую очередь нужно проверить,
  правда ли проблема именно в том,
  что траектории порождены плохой стратегией.
  Поэтому я сделал надстройку над своим dreamer-sarsa:
  теперь он берёт множество начальных точек
  и для каждой создаёт множество траекторий.
  А потом оставляет несколько наилучших.
  Например, берёт 500 эпизодов прошлого,
  для каждого эпизода создаёт 300 планов длиной 800 шагов.
  Исполняет, оценивает планы.
  Оставляет 3 наилучших (с максимальной суммой наград).
  Получается 500х3=1500 траекторий по 800 шагов длиной.
  Запускаю и...
  dreamer-sarsa-filter отрабатывает лучше,
  чем просто dreamer-sarsa!
  И почти настолько же быстро.
  
  Испытания
  
  Приведу таблицу со сравнительной оценкой полученных reinforcement learning.
  В таблице видно, что тестировал я не всё
  - к сожалению, мои RL чересчур медлительны.
  Испытывал я их преимущественно на историях в 15-30 эпизодов,
  то есть гугловый dreamer за это время показывает результат
  как у полного рандома.
  
  Приведу так же видеозаписи с испытаний этих RL.
  Я брал типичные эпизоды обученного RL
  - не слишком удачные, и не слишком провальные.
  Сразу оговорюсь:
  хотя исполнение стратегий неустойчиво
  (sarsa может в одном эпизоде получить 3 очка, а в следующем 1),
  сам процесс обучения устойчив,
  то есть при множестве пусков один и тот же алгоритм RL
  за 30 эпизодов сойдётся примерно к одному и тому же
  среднему значению награды.
  
  Так как мне не удалось вставить сюда красивую таблицу с гифками,
  реализую её в виде ссылки
  
  Во-первых, видно, что в большинстве случаев RL вообще никуда не попадают.
  Как они набивают очки?..
  На самом деле, они получают очки в случае,
  если монстр погибает по любой причине.
  Поэтому очень популярны стратегии,
  при которых RL стрельбой привлекает внимание монстров,
  а потом движется так,
  чтобы они сами друг друга поубивали случайными попаданиями.
  
  Во-вторых, как можно увидеть по этим записям,
  стратегии sarsa ощутимо выбиваются.
  Sarsa намного более склонны...
  Поступать нестандартно, что ли?
  
  Почему так получается?
  Вероятно, всё дело в эвристике любопытства.
  Значит, надо добавить эту эвристику в dreamer
  - и посмотреть, что получится.
  
  Эвристика любопытства называется RND
  - random network distillation.
  Суть её в том, что мы создаём случайно инициализированную нейросеть,
  которая принимает на вход эмбеддинги и выдаёт некие вектора.
  И делаем вторую нейросеть,
  которая предсказывает выходы той, случайной.
  Если предсказываем хорошо
  - значит, ситуация знакомая.
  Если высокая ошибка - значит, ситуация новая,
  и надо увеличить награду на эту "степень новизны".
  
  Ссылка на визуализацию
  
  Испытание:
  
  Как видим, dreamer-rnd работает довольно устойчиво,
  и почти догоняет тот dreamer,
  что использует actor-critic.
  sarsa работает не очень устойчиво
  - не со всеми окружениями справляется.
  И все эти RL вообще даже близко не подходят к человеку.
  
  Каков же потенциал развития?
  
  Где-то примерно на этом этапе я догадался посмотреть,
  на каком числе последовательностей обучается модель мира.
  Оказалось, что всё грустно
  - каждый её период обучения затрагивает десятки последовательностей
  - это очень мало, странно, что мы вообще хоть чему-то обучились.
  А всё потому, что когда я разбивал на весь таймлайн на батчи,
  я делал их непересекающимися.
  А длина единичного прогноза у меня ~100 эмбеддингов.
  
  Хорошо, расположим батчи внахлёст.
  
  И, пока идёт тестирование, проведём ещё одну проверку.
  Нам же хотелось бы узнать,
  какие траектории генерирует дример?
  Траектории, правда, из эмбеддингов,
  так что посмотреть мы их не сможем.
  А так как у меня не совсем автоэнкодер,
  то декодирующая часть не выдаст вменяемую картинку на выходе.
  Но можно для каждого эмбеддинга подыскать
  наиболее похожий из недавней истории.
  И затем найти кадр, который по времени совпадал с этим эмбеддингом.
  Таким образом мы всё-таки найдём что-то похожее
  на сгенерированную траекторию.
  
  Сделаю, чтобы траектория воспроизводилась замедленно
  - так будет меньше мельтешения.
  
  Итак, с новой схемой обучения модель учится значительно быстрее.
  Рост обучающей выборки скомпенсировался уменьшением числа эпох,
  и в сумме и скорость обучения
  (и в секундах, и особенно в эпизодах) выросла,
  и точность.
  
  А сгенерированные эпизоды выглядят примерно так.
  
  Как видим, не все траектории одинаково полезны.
  Ну и технология визуализации не совсем удачная.
  
  Тем не менее, новая версия dreamer смогла добиться чуть лучших результатов,
  чем предыдущая, по крайней мере, на этой карте.
  2.88 очков против 2.7 у наилучшего из прошлых дримеров
  и против 3.05 у sarsa.
  
  Ссылка на демонстрацию
  
  Проверим теперь, работают ли мои RL-системы на других окружениях,
  не на Doom.
  Как мы помним, энкодер обучен на шутерах,
  так что в 2-мерных играх Atari вполне может и не разобраться.
  С другой стороны,
  большинство видеоигр так или иначе моделируют
  наш 3-мерный мир дискретных объектов и ньютоновской механики,
  так что возможно, энкодер от шутеров вполне применим для игры Pong.
  Ну и с третьей стороны,
  алгоритмам RL в некотором смысле безразлично,
  как именно им подают данные.
  Лишь бы разные ситуации выглядели для него по-разному,
  а ситуации, выглядящие похоже, развивались похожим образом.
  
  Итак, dreamer последней модели выдал -20.19 очков, а рандом -20.09.
  RL не обучился.
  Но есть интересное наблюдение.
  Модель научилась очень точно предсказывать и награды, и эмбеддинги.
  
  Прогноз наград (синее факт, оранжевое прогноз):
  
  Ошибка прогноза эмбеддинга, измерено в стандартных отклонениях:
  
  Ошибка всего в 5%, почти нет эффекта бабочки.
  В чём может быть проблема?
  
  Я вижу такие варианты:
  
   Модель прогноза траекторий почему-то предсказывает траектории верно,
   если они фактически были
   и неверно, если их никогда не было.
   Такое могло бы быть в случае переобучения.
   Но обучение модели построено так,
   что примерно каждый двадцатый батч попадает в обучающую выборку,
   а затем от этой выборки отрезается ещё и валидационная
   для раннего останова.
   Причём собственно на fit поступает не более 100 батчей,
   а всего их может быть больше 500
   - все остальные идут на валидацию.
  //// Т.е. причин для переобучения нет, а оно есть.
  //// "Может нужно что-то менять в консерватории".
  
   Переобучение системы, предсказывающей награды.
   У неё есть регуляризация и аугментация данных,
   но нет разделения выборки на train, test и validation.
  
   Мы как-то неправильно строим стратегию по известной модели мира.
  //// А вот это наиболее перспективная версия из перечисленных вариантов.
  //// Ну есть вариант, что мы просто неправильно учимся.
  
  Вариант 2, похоже, проверить нетрудно.
  Посмотрим, насколько точно модель предсказывает новые сигналы подкрепления,
  и насколько точно она их предсказывает после того,
  как дообучилась на них.
  
  На картинке один и тот же эпизод до того,
  как система на нём дообучилась (test) и после.
  Итак, модель наград у нас не переобучена.
  
  Посмотрим, какие награды эта модель видит на различных траекториях.
  Сгенерируем траектории и найдём точки с максимальной, минимальной
  и медианной наградами.
  
  Минимум: -20.324026, медиана:0.93079257, максимум: 10.992256.
  
  Это выглядит очень неправдоподобно.
  Награда в конкретной точке может быть от -1 до 1,
  в большинстве случаев должен быть 0.
  Ладно, у нас происходит отбор траекторий,
  медиана должна быть больше нуля.
  Но чтобы настолько?
  Построим гистограмму наград в точках построенных траекторий:
  
  //// На гистограмме "двугорбый дракон" с длинными хвостами.
  
  -20 и 10 - это, конечно, редкие выбросы.
  Но всё равно, "колокол" наград очень широкий.
  //// Да нет здесь "колокола". Автор видит, то что хочет увидеть
  //// в соответствии с "канонами" и "символами Веры".
  Не должна нейросеть выдавать такие числа.
  Такое распределение означает,
  что нейросеть всё-таки переобучена:
  для неё реальные и сгенерированные данные выглядят по-разному,
  и на сгенерированных нейросеть ведёт себя неадекватно.
  //// И естественный вывод "на все случаи жизни" - переоучение.
  
  Первое, что приходит в голову, когда смотришь на такую проблему
  - это изменение активационной функции.
  Пусть будет не relu на выходе, а сигмоида или арктангенс
  - у них есть вполне ограниченное множество значений.
  Вторая идея - аугментировать обучающую выборку для той сети,
  что предсказывает награды.
  Продублировать несколько раз и зашумить.
  
  Попробуем второй вариант, с аугментацией.
  Только тогда надо уменьшить регуляризацию,
  а то вообще ничему не обучимся.
  
  Итак, да. Идея оказалась удачной.
  Распределение наград на сгенерированных траекториях:
  
  Прогноз наград на тестовой выборке
  (довольно неплохо, учитывая, какую аугментацию мы провели):
  
  И график набранных очков по раундам:
  
  Средний балл -19.87 против -20.09 у рандома, всего на 14 раундах.
  Впрочем, это может быть случайность, надо перепроверить.
  
  -20.20 очков. Меньше, чем у рандома?
  Неужели в Pong рандом набирает и правда -20.09 очков,
  при том, что если в среднем один раз за два эпизода
  закидывать мяч на сторону противника,
  то будет -20.50 очков?
  Проверить на большом числе случайных партий!
  
  Проверка показывает, что у рандома график выглядит следующим образом:
  
  И средний score равен -20.34.
  Хорошо, это уже более правдоподобно.
  Видим, что RL опять же набирает больше очков, чем рандом,
  но лишь самую малость.
  
  Длительные испытания
  
  Проверим, как наш dreamer будет справляться,
  если запустить его не на 15-50 эпизодах, а на тысячах.
  Но чтобы это обучение можно было провести в разумные сроки,
  надо модифицировать dreamer:
  
   Уменьшить число эпох обучения всех нейросетей
  
   Уменьшить число воображаемых траекторий
  
   Ввести способ принятия решений из actor-critic
   - он (вроде как) даёт лучшие результаты,
   а q-функцию можно рассчитывать на 1-2 шага за эпизод,
   а не на 25-100 шагов, как было раньше.
  
  Назовём эту систему dreamer-light.
  В любом случае, узким местом останется энкодер
  - он тратит ~0.1 секунды на один кадр.
  
  Итак, испытание закончилось провалом.
  На карте "basic map 6" dreamer light настрелял 1.73 очка
  в среднем по 826 эпизодам
  - а рандом набивает чуть больше 2 очков.
  Но посмотрим на детали этого провала.
  Мы невероятно точно предсказывали траектории
  - самые серьёзные ошибки выглядели так:
  
  То есть первый участок траектории предсказан околоидеально,
  на втором отдельные выбросы.
  Так как схема actor-critic не требует длинных траекторий,
  которые рискуют эффектом бабочки,
  мы и не генерировали больше кадров,
  чем нейросеть может выдать за один прогон.
  И таких выбросов не было.
  
  А вот награды мы предсказывали плохо:
  
  И это проблема не на уровне нейросети.
  Большинство крупных положительных наград
  - это ситуации, когда один монстр убивал другого,
  иногда ещё и вне поля зрения RL-агента.
  А большинство отрицательных наград
  - это попадание в RL-агента из пулемёта или дробовика.
  То есть это во-первых,
  вероятностный процесс из-за разлёта пуль,
  во-вторых, подлетающая пуля не видна,
  и не всегда понятно, что в нашего персонажа уже стреляют.
  И, наконец, RL-агент может не смотреть туда,
  где находится противник,
  и не знать, что по нему уже ведут огонь.
  
  Если бы я видел только этот график и эти рассуждения,
  то сказал бы, что любые разновидности dreamer
  вообще не смогут справиться с Doom
  (а с Pong сможет без проблем).
  Тем не менее, у нас dreamer-ы с другими настройками
  вполне успешно справлялись.
  Кроме того, если предсказывать не точечную награду,
  а дисконтированную (сумму наград за следующие насколько кадров,
  с экспоненциальным затуханием),
  то получится отличная точность:
  
  И эта отличная точность может быть связана с тем,
  что мы делали энкодер так,
  чтобы он хорошо предсказывал будущие дисконтированные награды.
  
  Проверим, как dreamer light справится с Pong.
  
  Никак он не справился.
  Отличная точность прогноза наград,
  отличная точность прогноза эмбеддингов
  - и при этом дример умудрился играть намного хуже рандома.
  
  Выводы.
  
  Пока проводил все эти эксперименты и пытался воспроизвести dreamer,
  пришёл к следующим соображениям:
  
   Знание математической концепции какого-либо ИИ
   - это совершенно недостаточно.
   Есть множество деталей,
   которые не выглядят концептуально важными,
   но от которых зависит успех.
   Например, для построения будущей траектории
   можно использовать рекуррентный прогноз,
   а можно однократно выдавать батч в 100 кадров
   - и результат будет радикально разный.
   Или можно брать существующую траекторию
   и рассчитывать наилучшие ходы методом actor-critic,
   а можно методом sarsa,
   и результат будет совершенно разный.
   Концепции интеллекта из психологии или нейрофизиологии
   в этом плане ещё хуже:
   они ещё менее конкретны и в них ещё меньше понятно,
   где реально необходимые детали,
   а где "костыли", связанные с тем,
   что интеллект приходилось собирать из мяса.
  
   Возможность визуализации кадров очень важна.
   Я сделал энкодер, который делает такой эмбеддинг,
   из которого нельзя котором развернуть картинку
   - и это была сомнительная идея.
  
   Создать модель мира,
   которая по действиям предсказывает следующие эмбеддинги
   - это нетрудно
   (задумайтесь, что было бы, если бы в своей жизни
   могли видеть будущее с 5% погрешностью
   на приличное расстояние вперёд).
   Даже в Doom это получилось довольно легко и точно.
   Даже с учётом откровенно дурацкой архитектуры сети.
  
   Не всегда можно выстроить соответствие
   между наблюдаемым кадром/кадрами и наградой.
  
   Есть какие-то проблемы с actor-critic
   - по крайней мере в моей реализации.
   Потому что ситуация,
   когда у нас есть отличная (с 5% погрешностью) модель мира,
   отличная модель наград
   и при этом не выстраивается стратегия
   - такая ситуация выглядит очень неправильной.
  
   У нас есть RL,
   который довольно надёжно и быстро находит стратегию,
   которая лучше рандома.
  //// Надежда и вера в RL умирают последними.
  //// Даже если RL-агента постоянно убивают.
  //// А результат его обучение отличается от рэндома на 5%.
  
   У оригинального Dreamer намного быстрее отрабатывает энкодер.
   Вероятно, причина в том, что он более легковесный
   в силу более узкой специализации под задачу.
  
  .......
  
  //// Из комментариев постарался выбрать все максимально концептуально значимое.
  //// А таковым считаю понимание того,
  //// что практическая реализация "обучения с подкреплением"
  //// должна не ориентироваться не на то, как ПРЕДСТАВЛЯЕТСЯ, как оно ДОЛЖНО БЫТЬ,
  //// а то как практически это можно сделать и какие при этом возникают вопросы.
  
  Nehc
  20 июл 2021 в 13:05
  
  \\\ Есть какие-то проблемы с actor-critic - по крайней мере в моей реализации.
  \\\ Потому что ситуация, когда у нас есть отличная (с 5% погрешностью) модель мира,
  \\\ отличная модель наград и при этом не выстраивается стратегия
  \\\ - такая ситуация выглядит очень неправильной.
  
  Чисто на вскидку, я бы связал это с горизонтом планирования
  - интервалом в котором ты строишь какую-либо стратегию.
  Если тебе в рожу летит фаербол,
  ты с хорошей точностью предскажешь последствия,
  но в стратегию тупо не успеешь... ;)
  Нужно иметь более длинные цепочки
  что бы была возможность их изменить.
  Т.е. предсказания, заканчивающиеся фаерболом в рожу,
  должны начинаться с образа того, кто этот фаербол кастует.
  А по описанию мне показалось,
  что горизонт предсказания коротковат...
  НО это не точно.
  0
  
  //// Здесь вообще нет уровня разделяющего тактику и стратегию.
  //// Все называется стратегией.
  //// Хотя причины понятны - как учить раздельно тактике и стратегии не понятно.
  
  Kilorad
  20 июл 2021 в 13:10
  
  В actor-critic потенциально бесконечный горизонт
  - зависит от того, сколько раз мы посчитаем q-функцию n-ого порядка,
  зафитим нейронку и посчитаем q-функцию n+1-ого порядка.
  Если мы делаем по одному такому расчёту в каждом эпизоде,
  а эпизодов у нас 500,
  то это 500 тактов планирования.
  В идеале.
  На практике меньше, так как у нас не сразу обучается модель state->reward.
  Но даже 50 тактов вперёд хватило бы.
  Другое дело, что у нас там ML over ML
  вместо надёжного, отлаженного supervised learning
  с понятным таргетом,
  и это может как-то влиять
  
  ......
  
  Kilorad
  21 июл 2021 в 00:34
  
  Спасибо за высокую оценку)
  
  Я почти год делал. Плюс нанял яндекс толоку размечать датасет.
  //// Ну ни фига себе. Просто монстр какой-то. Я такое бы не потянул.
  
  Один типичный эксперимент (от готового кода до выводов)
  - это 12-24 часа, длинные эксперименты - это до 50 часов.
  Обучение кодировщиков - это порядка недели поначалу
  и 2-3 дня когда разобрался, что к чему.
  
  Если у вас как начинающего специалиста
  есть какие-то умные идеи по экспериментам, можем обсудить
  - у меня по ходу исследования регулярно возникало ощущение,
  что как-то я узко мыслю.
  +1
  
  .......
  
  Kilorad
  21 июл 2021 в 07:25
  
  Значительная часть машинного обучения не имеет внятного биологического аналога,
  либо строилась явно не отталкиваясь от этого аналога.
  Бустинг, LSTM, трансформер - это всё оттуда.
  И такая тупая вещь, как бустинг деревьев,
  уже достаточно тривиально достигает сверхчеловеческих результатов
  в своей области применения.
  
  Значительная часть теории автоматического управления
  построена без опоры на то,
  как управление реализовано конкретно у человека.
  Теория устойчивости, уравнение Беллмана,
  теорема о замене аналоговых элементов на дискретные - всё туда.
  И эта теория достаточно практична,
  чтобы запускать космические корабли на дальние расстояния и точно.
  
  Поэтому мне видится, что все попытки сделать
  универсальную систему управления можно разделить на 2 категории:
  
  1) Попытка скопировать у природы
  птиц с подвижным крылом,
  работающей системой размножения и кучей других сложностей.
  
  2) Делать самолёт, не пытаясь копировать птицу.
  
  Но может, вы и правы, кто знает.
  Лишь практика нас рассудит.
  Хотя наверняка если кто-то сделает ИИ без копирования человека,
  вы скажете, что это не настоящий интеллект,
  так как не обладает каким-то из свойств человека.
  0
  
  ......
  
  Kilorad
  21 июл 2021 в 08:03
  
  \\\ Ну калькулятор вот тоже достигает сверхчеловеческих результатов
  \\\ в своей области применения.
  
  - да, именно поэтому для управления ракетами используют именно его,
  а не человеческий мозг, по крайней мере в низкоуровневых решениях.
  
  \\\ На птицу действуют те же законы аэродинамики, что и на самолет.
  \\\ Изучив законы аэродинамики, можно применить их более эффективно,
  \\\ чем это происходит у птиц, но сначала их надо изучить.
  
  - самолёты полетели не тогда, когда птиц хорошо изучили,
  а когда построили аэротрубу.
  Да, птиц тоже изучали, и какие-то решения действительно скопировали.
  Но во-первых, не всё подряд,
  во-вторых, аэродинамику изучали в основном не на птицах,
  а на чём-то, что не будет сопротивляться.
  
  Если что, рыб тоже не копировали целиком, чтобы строить корабли
  - разве что очень ограниченно копировали отдельные решения,
  когда возникала соответствующая задача.
  
  Сейчас ближайший аналог законов аэродинамики
  - это законы рациональности.
  В основном байесова теория вероятности,
  регрессионный анализ и теория принятия решений.
  У нас есть, на чём их изучать,
  помимо людей,
  хотя и применительно к людям иногда изучают.
  0
  
  ......
  
  Kilorad
  21 июл 2021 в 09:21
  
  \\\ Я имел в виду, что возможности калькулятора довольно далеки от того,
  \\\ что можно назвать интеллектом, несмотря на сверхчеловеческие результаты.
  
  - разработчики reinforcement learning пытаются воспроизвести
  одно вполне конкретное свойство нервной системы
  - свойство достигать поставленных целей.
  Уже сейчас без машинного обучения,
  на одних только <калькуляторах> есть программы прокладки пути
  и автоматы стыковки для космических аппаратов.
  Это сделано почти без машинного обучения.
  В RL задача отличается тем, что среда неизвестна
  - а так это всё тот же яндекс-навигатор,
  или что-то идейно очень похожее.
  А ещё мы можем эмулировать среду с помощью машинного обучения
  - тоже достаточно хорошо.
  Получается, что смежные задачи решены,
  теоретическая база есть.
  У нас есть два основных куска того,
  что можно было бы назвать интеллектом
  - это построение карты и поиск пути.
  Только эти куски пока не стыкуются.
  
  Потом, касательно аэродинамики и птиц.
  Люди и правда смотрели за птицами и пытались как-то понять, как они летают.
  А ещё люди смотрели на других людей
  и создавали разные модели того,
  как другие люди действуют.
  В результате в какой-то момент возникла концепция
  рационального агента из экономики
  - это такой идеальный максимизатор функции полезности.
  Потом оказалось, что люди довольно далеки от рациональных агентов,
  но так же оказалось,
  что в продакшне нужен не человек,
  а как раз рациональный агент.
  А дальше шло параллельное изучение людей и рациональности
  - например, оказалось,
  что оптимальный способ изменения вероятностей моделей
  - это байесовская статистика,
  а человек по умолчанию использует другие эвристики,
  и у него из-за этого регулярно проблемы.
  
  То есть тот путь, что я использую
  - это моделирование рационального агента, а не человека,
  а концепция рационального агента появилась
  (когда-то давно)
  из наблюдений за человеком.
  И нейросети не моделируют мозг уже довольно давно
  - они делают аппроксимацию функций,
  //// Не согласен. в смысле "не аппроксимируют", а "прокладывают маршруты".
  //// А вот в чем заключается эта "прокладка" и сами "маршруты"
  //// и есть самый, на мой взяд, самый животрепещущий вопрос
  //// не только RL но и всего машинного обучения нейросетей.
  что нужно в контексте рационального агента,
  но не настолько очевидно необходимо в контексте человека.
  
  Обычно, когда открывается что-то новое о мозге человека,
  то с точки зрения разработки ИИ это очередной интересный хак,
  эвристика,
  которая в каких-то случаях заставляет делать глупости,
  но чаще помогает.
  Это полезная информация,
  но это не что-то, что обязательно надо копировать.
  
  Тот <воздух>, в котором <летают> люди и ИИ
  - это не нейроны (в описанном подходе),
  а оптимальное управление.
  Подход с моделированием от нейронов может сработать,
  но есть основания полагать,
  что таким образом мы смоделируем очень много лишнего.
  0
  
  .......
  
  Kilorad
  21 июл 2021 в 11:52
  
  \\\ Рациональность относится к принятию решений,
  \\\ а для этого уже нужен результат работы интеллекта.
  \\\ Принятие решений это тоже интеллект,
  \\\ но это просто следствие того, что выход первичной обработки
  \\\ используется как вход для дальнейшей обработки.
  \\\ Без интеллекта вы не получите из входной информации
  \\\ данные, необходимые для принятия решения,
  \\\ разве что подготовите их другим интеллектом
  
  - у RL входные данные - это данные с датчиков
  плюс либо сигнал подкрепления, либо описание цели.
  На выходе действия.
  Вот это целиком и будет рациональный агент
  - в случае, если обучится, конечно.
  Да, теория принятия решений и байесовская статистика
  в чистом виде не заточены работать с raw data.
  Они требуют наличия предобработанных данных
  или гипотез,
  сгенерированных вручную.
  Либо они будут работать ужасно затратно по ресурсам
  - как AIXI.
  Но это не значит, что такую систему сделать нельзя
  - весь RL именно о создании рациональных агентов
  в условиях, когда на входе лишь данные с сенсоров
  и какая-то формулировка цели.
  
  \\\ В моей аналогии <законы действия воздуха на тело>
  \\\ это фактические законы действия нейронов на входящие сигналы.
  \\\ Действие реального воздуха на самолет в аэротрубе мы наблюдать можем,
  \\\ а действие всех задействованных нейронов на сигнал нет.
  \\\ Наблюдение одного или десятка нейронов не дает полной картины.
  
  - я понимаю, вы описываете подход <снизу вверх>.
  Давайте имитировать нейроны по одному,
  и если мы всё сделали правильно, то получится работающий мозг.
  Либо давайте мы изучим, как мозг делает какую-либо умственную работу
  и перенесём это в ИИ.
  Да, это тоже подход,
  но он видится мне более долгим и сложным,
  чем обкатка большого числа моделей на различных стендах.
  
  \\\ Мы пытаемся придумать законы этого взаимодействия,
  \\\ но не факт, что они логически будут соответствовать реальным законам,
  \\\ и поэтому оптимум в этих законах может быть далек от реального оптимума,
  \\\ который дает естественному интеллекту его возможности.
  
  - в данном подходе нет попытки сделать что-то,
  что логически соответствует реальному мозгу и его законам.
  Есть попытка имитировать поведение рационального агента.
  Человек прошёл бы эти игры лучше
  - это означает, то он лучше имитирует рационального агента.
  Это не значит, что надо имитировать человека,
  имитирующего рационального агента.
  Хотя это один из вариантов.
  
  Вот у меня до этого была статья о том,
  как в других условиях и другими способами имитировать рационального агента:
  habr.com/ru/post/323424
  Там я использовал алгоритм статической оптимизации
  (комбинацию эволюции и градиентного спуска)
  для подбора стратегии,
  и конкретно там результат был лучше.
  
  Вообще, есть какие-то аргументы за то,
  что надо именно эмулировать закономерности,
  происходящие в голове у человека,
  если мы хотим не совсем человеческого поведения,
  а поведения, которое человек всего лишь способен эмулировать
  ограниченное время?
  И с учётом того, что человека мы изучать продолжаем,
  но с ним нельзя быстро ставить кучу экспериментов,
  а с условной нейросетью можно.
  0
  .......
  
  Kilorad
  21 июл 2021 в 14:25
  
  \\\ Чтобы что-то изучить и улучшить, нужен рабочий прототип,
  \\\ который работает так как нужно и на параметры которого мы можем влиять.
  \\\ Самолет в аэротрубе это как раз такой прототип.
  
  - у нас есть работающие прототипы отдельных подсистем
  - это обычный machine learning и навигаторы.
  Плюс есть эволюционные алгоритмы для поиска стратегий.
  Плюс есть reinforcement learning,
  которые ограниченно работают
  - обычно у них проблема в sample-inefficiency,
  а не в низкой эффективности уже обученной системы.
  Плюс у нас есть теоретическое понимание,
  что возможно большее,
  потому что существуют люди,
  и они вроде как справляются лучше.
  Плюс мы все эти теории вроде теории принятия решений и байесианства
  обкатали на модельных задачах
  - очень плотно обкатали.
  То есть у нас есть, что засовывать в аэротрубу.
  На многих задачах сравнивали эффективность и с человеком
  - где-то машина точнее, где-то хуже.
  
  Насчёт узкой специализации RL и систем,
  обученных эволюционными алгоритмами.
  Я бы не сказал, что они прямо чётко под одну задачу заточены.
  Можно их обучить, например, под 2 задачи или под 5
  - я проводил такие эксперименты.
  Чем больше задач, тем результат, конечно, хуже.
  //// А у человека наоборот. Что не так?
  Потом, был эксперимент,
  где человек обучал систему RL на многих задачах сразу,
  и в результате получилась нейросеть,
  которая ведёт себя как RL.
  //// А где ссылка?
  То есть мы закончили фитить все нейросети,
  мы выпускаем одну, управляющую нейронку в новое окружение,
  и она ведёт себя как мини-RL.
  
  Ну и мы знаем довольно точно,
  что базовые принципы RL
  - это не совсем те, на которых работают люди.
  Местами похоже, но скорее выглядит так,
  будто и люди, и RL - это ощутимо разные <копии>
  с одного <оригинала>.
  И у них разные проблемы
  - например, большинство известных мне когнитивных искажений
  хорошо описываются как отклонение от <идеального> AIXI
  в сторону костылей, порождённых эволюцией.
  (про AIXI статья, если нужно habr.com/ru/post/562560 )
  
  В любом случае, по вашему направлению есть какие-нибудь
  практические результаты,
  хотя бы в виде прототипов?
  Какие-нибудь теории,
  как получить что-то похожее на рационального агента,
  но не сводящегося к AIXI или существующим RL?
  
  И есть ли основания считать,
  что мы на выходе получим какую-то целостную конструкцию,
  а не кучу костылей,
  которые вместе удерживает лишь <магия> эволюции?
  0
  
  ......
  
  Kilorad
  22 июл 2021 в 09:44
  
  \\\ Правильный перевод с одного языка на другой это куча костылей?
  \\\ А отслеживание прочитанного текста и изложение своими словами?
  
  \\\ Я говорю про те задачи, которые еще не решаются нейросетями,
  \\\ и про теорию для них.
  
  я смотрю на все задачи в сумме.
  У меня нет теории, исходя из которой можно было бы создать
  оптимальный перевод или увидеть неоптимальности в существующем переводе.
  Да и вообще, я не уверен,
  что можно точно сформулировать перевод
  как задачу оптимизации с каким-то конкретным loss,
  не зависящим от людей.
  //// Похоже все-таки эта задача уже решена. Правда, до конца непонятно как.
  
  В то же время у человека есть куча эвристик
  - например, широко известная эвристика доступности.
  Кажется (не лично вам, а опрос был),
  что убийства происходят чаще самоубийств,
  но достаточно посмотреть на данные - и окажется, что расклад другой.
  Но об убийствах вспомнить проще.
  Или люди сильнее боятся авиакатастроф, чем автомобильных аварий.
  
  И если человек узнает, что у него есть такая вот эвристика,
  это не значит, что потом, всякий раз,
  когда она срабатывает,
  у него всплывает окно
  "внимание, используем устаревшую эвристику, результаты ненадёжны".
  Нет, эвристика работает так,
  будто бы и нет инфы о том, что она устарела.
  
  Или страх высоты,
  когда мы идём по прозрачному мосту.
  Не у всех, у некоторых.
  Оптимальный рациональный агент не боялся бы такого
  - он бы боялся бургера, потому что он приближает к инфаркту.
  
  Если почитать о когнитивных искажениях и о том,
  почему они существуют,
  как эволюция их породила,
  то человек начинает выглядеть именно как куча эвристик,
  наклеенных друг на друга,
  и в некоторых условиях реализующих
  что-то наподобие оптимального поведения.
  Но без какого-либо математически правильного рационального ядра
  в основе всей конструкции.
  
  Потом, в мире существуют, например, психотерапевты,
  и существуют люди, которым нужны их услуги.
  "Чистому коду" не понадобились бы услуги психотерапевта,
  у него бы не было такого, что он забаговал,
  видит это, понимает, что надо изменить,
  и не может.
  
  И крайне маловероятно, что люди,
  состояние из таких склеенных эвристик,
  оптимально переводят или пересказывают тексты.
  Лучше существующих ботов - согласен,
  но оптимально - вряд ли.
  
  Но конкретно в этих задачах loss сильно завязан на людей
  - нельзя точно узнать, понятен ли текст, если не спросить фидбэк.
  Так что возможно, задачи на взаимодействие с людьми ИИ
  (как его я описываю)
  будет решать систематически хуже, чем другие люди,
  так как у него не было сотен тысяч лет сбора датасета и обучения.
  
  \\\ Вот я как раз про это и говорю.
  \\\ Вы сначала задаете цель,
  \\\ потом делаете много попыток обучения,
  \\\ потом ее достигаете.
  \\\ У вас получается обученная нейросеть,
  \\\ которая достигает только эту цель и больше никакую,
  \\\ для другой цели надо обучать заново.
  
  Это применимо к model-free reinforcement learning.
  Которые предсказывают сигнал награды в случае действий таких-то.
  Есть ещё model-based и всякие вариации на тему,
  вроде того же дримера.
  Они не такие - они выучивают модель мира,
  а затем достигают сформулированной цели.
  Как яндекс-навигатор:
  карта одна, а целей сколько угодно.
  
  Разумеется, если model-free систему перенести в совсем другое окружение,
  ей придётся переучивать модель мира
  - но для человека ситуация не лучше.
  
  Вы говорили, у вас есть своя концепция интеллекта.
  Определение, как вы говорите,
  но по факту же наверняка целая концепция,
  и это не рациональный агент.
  Расскажете?
  0
  
  .......
  
  michael_v89
  22 июл 2021 в 11:46
  
  .......
  
  \\\ Вы говорили, у вас есть своя концепция интеллекта. Расскажете?
  
  У меня есть тут статья на эту тему.
  Определение звучит так:
  Интеллект - это способность информационной системы
  строить модель окружающей среды
  на основе входящей информации
  
  //// А имеет значение в каком виде представлена эта "модель"?
  
  ........
  
  Kilorad
  22 июл 2021 в 12:39
  
  .......
  
  \\\ Причем здесь эвристики, ну есть и есть,
  \\\ я говорю не про когнитивные искажения, а про выполнение задач.
  \\\ У разных переводчиков могут быть разные когнитивные искажения,
  \\\ при этом среднестатистический текст они переведут
  \\\ среднестатистически одинаково.
  \\\ Когнитивные искажения не помогают им переводить текст.
  
  Моё исходное утверждение было такое:
  у человека (видимо) нет целостного рационального ядра,
  но точно есть куча эвристик,
  каждая из которых имеет свои баги.
  Куча сервисов, каждый делает что-то своё,
  некоторые давно устарели,
  а чего-то централизованного нет.
  
  Вы поставили, как я понял, под сомнение этот тезис.
  И привели частную задачу, которую человек решает лучше, чем ИИ.
  Я привёл куда в пример механики мышления,
  которые являются эвристиками,
  и которые нельзя просто так взять и проапдейтить.
  Чего не хватает, чтобы признать, что перед нами куча модулей,
  слепленных эволюцией в относительно рабочую конструкцию?
  Мне привести в пример конкретные задачи,
  где человек фейлит, и с этим ничего нельзя сделать,
  а машина справляется?
  
  По-моему, слабость RL систем
  - это намного более сильный аргумент,
  что у нас что-то не так с подходом к ИИ,
  чем неспособность машин делать перевод.
  
  Или вы имеете в виду,
  что если мы будем хорошо изучать людей,
  то нам не нужен будет огромный языковой датасет,
  мы просто сможем скопировать те ограничения на язык,
  что есть в человеческом мозгу,
  и реализовать быстрый перевод?
  0
  
  .......
  
  Kilorad
  23 июл 2021 в 00:21
  
  \\\ Вы привели то, что мешает человеку выполнять задачи,
  \\\ а я говорю о том, что помогает.
  
  я привёл примеры механик, из которых сделано мышление.
  Это не что-то, что приходит извне и мешает
  - это у нас детали такого качества.
  Эти детали одновременно помогают в одних задачах и мешают в других.
  
  \\\ Та информация, которая используется при изучении языка,
  \\\ миллионы лет не собиралась.
  \\\ Откуда у эволюции концепт Золушки и феи,
  \\\ да еще на всех языках, которые появились в течение последних 300 лет.
  
  давайте попробуем с другой стороны.
  В языке есть закономерности.
  Закономерности, например, какие предложения правильные, какие нет,
  как тексты соотносятся с реальностью и так далее.
  Эти закономерности ребёнок выучивает за 2-3 года.
  Далее, вопрос:
  а может ли эти закономерности выучить непредвзятая система
  поиска закономерностей,
  имея столько же данных?
  Мы берём не какую-то ущербную систему,
  которая данные теряет,
  а такую, которая близка к оптимальности.
  Например, такой системой является feed forward нейросеть
  - она довольно универсальна и непредвзята
  - не имеет каких-то конкретных сильных сторон,
  её эффективность равномерно размазана
  по очень широкому спектру возможных закономерностей.
  Всё как в no free lunch theorem.
  
  Если мы так зададим вопрос, ответ будет "нет".
  Нейросеть не выучит язык за такое количество данных.
  И бустинг деревьев не выучит.
  Они не заточены работать с последовательностями.
  
  Хорошо, возьмём самое универсальное,
  что у нас есть для последовательностей.
  LSTM, GRU, трансформер.
  Они научатся отличать правильные тексты от неправильных,
  если имеют тот же датасет, что и человек?
  
  А здесь два варианта:
  
  1) Да, научатся.
  Это значит, что у человека нет какой-то
  особо специализированной системы в мозгу
  для изучения языка
  - любая предсказательная система сойдёт.
  
  2) Нет, не научатся.
  Закономерности есть, данным соответствуют,
  но нейросеть найдёт другие,
  неправильные закономерности,
  которые тоже соответствуют данным.
  Это значит, что у человека в мозгу есть что-то,
  заточенное именно под восприятие языка,
  то есть есть какие-то генетические ограничения того,
  каким может быть язык,
  и именно благодаря этим ограничениям его можно выучить быстро.
  
  Ну, есть ещё 3-й вариант
  - что нейросеть обучится до плохого loss и застрянет...
  Но это будет означать, что мы её недообучили
  - нейросеть почти всегда можно переобучить и получить околонулевой loss.
  
  Есть подход к машинному (и не только обучению).
  Любая необученная система ML
  - это множество гипотез,
  у каждой какая-то своя априорная вероятность.
  А потом мы обучаем модель
  - и у нас остаётся одна конкретная гипотеза.
  Если мы всем гипотезам проставляем равные априорные вероятности,
  то выходит универсальная и неспециализированная система,
  которая может всё, но требует много данных.
  Если ставим каким-то гипотезам нулевую априорную вероятность
  - у нас выходит неуниверсальный ML -
  например, линейная регрессия.
  Если же мы разным гипотезам присваиваем разную априорную вероятность,
  получается система, которая хорошо,
  с малого числа статистики
  улавливает некоторые гипотезы.
  А все остальные гипотезы требуют избыточно большого числа данных,
  иначе мы будем ошибаться и промахиваться мимо них.
  Например, если мы вводим регуляризация в нейросети,
  мы заставляем её быть предвзятой в пользу тех гипотез,
  где веса сети поменьше.
  
  У нас как бы есть фиксированная "площадь под графиком",
  и мы её можем поделить между разными гипотезами.
  //// Это "интегральная концепция", а может быть "фрактальная".
  В результате можно получить или "равномерный график"
  - одинаковую околонулевую эффективность на всех задачах.
  Или "график с выраженными пиками"
  - то есть наша информационная система
  будет хорошо различать какие-то из гипотез в узком подмножестве,
  но на все остальные закономерности потребует очень много данных.
  
  Так вот, есть куча фактов,
  указывающая на то,
  что у человека в мозгу универсальная,
  но очень предвзятая обучающаяся система.
  Предвзятая в пользу тех закономерностей,
  которые реально существуют и реально важны.
  Выглядит это так:
  есть ряд закономерностей,
  которые человек распознаёт лучше, чем нейросеть.
  И есть все остальные,
  где нейросеть лучше (ну или не нейросеть, а бустинг).
  
  Вы задумывались когда-нибудь,
  почему человек может научиться распознавать букву, увидев её 1-2 раза,
  а обычная нейросеть так не может даже близко?
  Что это за магия,
  и почему она так лихо забивает на все закономерности работы с информацией?
  Моё (ну, не лично моё) объяснение в том,
  что у взрослого человека выстроена предвзятость в отношении символов:
  он легко различает закономерности,
  связанные с формой букв.
  При этом он не заметит кучу других закономерностей
  - например, что эта необычная буква всегда необычным образом смазана,
  или на одной странице с ней всегда есть некий дефект бумаги.
  
  Язык - одна из тех закономерностей,
  где у человека есть предвзятость.
  Насколько я понял, вы с этим не согласны?
  И по-вашему язык - такая же закономерность, как и все остальные?
  
  Тогда что это означает?
  Что если дать непредвзятой нейросети тот же датасет,
  что и ребёнку (то есть 100% сигналов со всех нервов),
  дать ещё датасеты от 2-3 детей на случай,
  если наши нейросети неоптимальны по данным
  - то он осилит язык на уровне ребёнка?
  Или это означает, что нейросети неоптимальны по данным
  по сравнению с людьми
  - у них другая "площадь под графиком",
  и сумма априорных вероятностей больше 100%?
  //// Хорошая мысль - "сумма априорных вероятностей больше 100%"?
  //// Т.е. мы не знаем общего распределения вероятностей по гипотезам,
  //// но мы можем высказать "априорную"/предварительную "вероятность"/оценку,
  //// относительно каждой гипотезы/основания/координаты -
  //// И вот сумма этих оценок не обязательно должна быть равна 1.
  //// Хотя бы потому, что мы не знаем всех возможных гипотез,
  //// а рассматриваем только некоторые, причем, скорее всего,
  //// еще и не взаимоисключающие друг друга.
  0
  
  ........
  
  Kilorad
  24 июл 2021 в 11:57
  
  \\\ Ну так если она не может выполнить такую задачу,
  \\\ значит она не универсальна.
  
  как вообще устроен любой ML?
  У него предзадано некоторое пространство гипотез,
  и он выбирает обычно какую-то одну гипотезу,
  которая лучше всего соответствует данным.
  Пространство гипотез - это обычно или пространство всех функций
  (в математическом смысле),
  или пространство всех алгоритмов.
  Или урезанное пространство функций, либо алгоритмов.
  Именно эта урезанность и определяет,
  универсальный у нас ML или нет.
  
  Например, бустинг деревьев может, при наличии данных,
  имитировать любую функцию с любой точностью.
  И нейросеть (2+ слоя и достаточно много нейронов) тоже может,
  есть теорема на эту тему.
  А вот линейная регрессия не может:
  сколько данных ей ни дай и в каком режиме не обучай,
  она никогда не подберёт функцию y=x^2 с нулевой ошибкой.
  
  ......
  
  Моё объяснение такое:
  универсальные модели ML - бустинг и нейросеть -
  ищут в большом пространстве гипотез.
  А линейная модель - в маленьком.
  Поэтому линейная модель, конечно же, найдёт быстрее.
  Или не найдёт, если это невозможно.
  И все случаи, когда некоторая модель учится аномально быстро,
  означают, что она ищет в малом пространстве гипотез,
  то есть она не универсальна.
  Либо, как вариант, модель всё же универсальна,
  но за пределами своей сильной зоны она учится ещё хуже (по данным),
  чем обычная нейросеть.
  
  .......
  
  \\\ Я не только задумывался, я об этом говорю во всем этом обсуждении.
  \\\ У человека есть алгоритмы обработки информации,
  \\\ которые делают это более эффективно,
  \\\ чем те, которые используются в нейросетях.
  \\\ Они не специализированы, а наоборот универсальны.
  \\\ Это может быть буква, звук, предмет, паттерн во времени.
  \\\ Распознавание с 1-2 раз проявляется не только для букв.
  
  вы можете описать, как устроены алгоритмы,
  которые могут обучаться чему угодно с 1-2 предъявлений?
  Безотносительно человека.
  У меня есть описание, я его в основном привёл.
  Весь one-shot learning построен вокруг этой идеи
  //// Надо будет почитать про этот "one-shot learning".
  (искусственное смещение априорных вероятностей гипотез),
  то есть это не какая-то маргинальная теория.
  
  \\\ Нет, есть еще третий вариант.
  \\\ Это значит, что у них нет тех алгоритмов обработки информации,
  \\\ которые есть у человека.
  \\\ Они не заточены именно под восприятие языка,
  \\\ а просто работают по-другому,
  \\\ что позволяет извлекать закономерности более эффективно.
  
  в той концепции, что я описываю,
  такой вариант либо невозможен,
  либо будет частным случаем других вариантов.
  Всё, что у нас есть - это множество гипотез.
  Ещё может быть важен способ перебора гипотез
  - но только если он слишком плохой.
  Сейчас языковые модели ищут в почти что алгоритмически полном пространстве.
  А люди, видимо, нет: есть какие-то инварианты,
  которые резко сокращают пространство поиска.
  
  \\\ У родившегося ребенка нет никаких гипотез, какой язык его окружает,
  \\\ он изучает тот, который есть.
  
  как я уже писал выше, гипотезы есть в неявном виде
  - это всё пространство языков, которые он теоретически мог бы выучить.
  
  \\\ Вы ушли от ответа на вопрос, который я в предыдущем комментарии
  \\\ задал несколько раз.
  \\\ Какие конкретно врожденные предвзятые закономерности,
  \\\ которых нет у нейросети, позволяют человеку выучить
  \\\ произвольный язык с любыми современными понятиями?
  
  у меня нет конкретного ответа,
  я об этом сужу по косвенным признакам:
  это было бы эффективно с точки зрения эволюции,
  человек в эволюционно-значимых областях
  редко обычно предвзят,
  ну и датасет у GPT-3 намного больше, чем у типичного ребёнка.
  
  Могу привести примеры предвзятостей,
  которые у человека есть и мне известны (и не связаны с языком).
  При распознавании причинно-следственных связей
  люди более вероятно посчитают два события связанными,
  если они происходили близко по времени.
  При распознавании картинок и видео
  у нас есть концепция объекта
  - некого множества точек близкого цвета и близко расположенных,
  не меняющегося во времени резко.
  
  \\\ Почему вы решили, что здесь есть
  \\\ нарушение закономерностей работы с информацией?
  \\\ Данные на жесткий диск вообще с одной попытки записываются
  \\\ и потом долго хранятся.
  
  вы вообще пробовали закодить распознавание символов?
  Вы понимаете, что если человеку предъявить два незнакомых символа,
  и спросить, являются ли они одним и тем же символом,
  то это будет в общем случае нерешаемая задача?
  Ту же букву альфа можно написать с ощутимо разными пропорциями,
  в каком-то случае она будет похожа на русскую "а",
  а в каком-то на двойку.
  Буква "альфа" может выглядеть множеством разных способов,
  двойка может выглядеть множеством способов,
  буква "а" тоже.
  Провести границы между этими тремя множествами,
  имея всего два экземпляра на три множества
  - это задача с большой долей неопределённости.
  А множеств не три:
  мы сравниваем обнаруженный символ со всеми другими символами,
  в том числе теми, которых никогда не видели.
  
  Когда данные записываются на жёсткий диск,
  никакого подобно поиска границ множеств не происходит.
  
  \\\ Но дети не учатся на датасетах от еще 2-3 детей,
  \\\ они учатся только на своем.
  
  это было на случай, если вы считаете,
  будто бы человеческий мозг и правда лучше работает с данными,
  чем нейросеть
  - не в нескольких областях специализации, а в сумме.
  Если бы было так, то увеличение числа данных уравняло бы их.
  Если не уравнивает - значит,
  проблема не sample-efficiency вообще,
  а в разных пространствах поиска.
  //// Не пространствах поиска, а в пространствах "построения",
  //// если мы говорим именно об обучении с "нуля",
  //// а вот дальше начинается дилемма "начинать новое строительство",
  //// "продолжать старое" или "просто использовать старое",
  //// или вообще "проигнорировать" или сделать "зарубку на память".
  
  \\\ А сущности типа Золушки или дракона вообще в реальности не существуют,
  \\\ потрогать их нельзя, поэтому и тактильная информация
  \\\ для большинства понятий не нужна.
  
  неизвестно, насколько эта информация нужна.
  Она может быть нужна по каким-то косвенным причинам.
  В любом случае, у штук вроде GPT-3 есть очевидная проблема:
  для них язык - это что-то, что предсказывается.
  А для людей язык - это инструмент решения задач в большом мире,
  где есть далеко не только язык.
  Поэтому GPT-3 может говорить довольно бессмысленные вещи,
  которые человек вряд ли сказал бы.
  Поэтому я сказал про весь сенсорный опыт.
  
  .........
  
  Kilorad
  24 июл 2021 в 23:50
  
  ......
  
  \\\ Значит бустинг учится быстрее нейросети в том же большом пространстве
  \\\ и с теми же данными? Почему вы думаете, что нельзя еще быстрее?
  
  я допускаю такой вариант.
  Но полагаю, максимальный sample-efficiency можно увеличить ну в 10 раз,
  ну в 50, если очень повезёт.
  У нас есть теоретически оптимальный универсальный предсказатель - AIXI
  (ну, его практичные реализации),
  и я не видел, чтобы он выдавал эффективность по данным
  радикально лучше, чем бустинг.
  Кроме того,
  полагаю маловероятной такую ситуацию,
  чтобы у нас под носом всё это время было
  много способов
  "задаром"
  повысить sample-efficiency на пару порядков,
  а мы об этом не знали.
  Если вам интересно, могу дать свой AIXI и научить пользоваться
  - если вдруг откроете,
  что есть способ получить sample-efficiency в 10 раз больше,
  чем у нейронки,
  на всё множестве задач,
  это будет что-то крышесносное,
  это будет сильным поводом искать ML,
  не сводящиеся к привычной нейронке.
  
  .......
  
  \\\ Ну я вот вам привел пример сохранения данных на жесткий диск,
  \\\ он с одного предъявления происходит.
  \\\ Скажете, это слишком тривиальный случай обучения,
  \\\ когда входные данные равны выходным?)
  \\\ Ну тогда сумма элементов массива.
  \\\ Этот алгоритм производит вычисления над входными данными
  \\\ и всегда получает одинаковый достоверный результат,
  \\\ который можно сразу сохранить.
  \\\ Вот и в распознавании информации может быть такой алгоритм.
  
  а в чём состоит обучение?
  Обучение
  - это всегда поиск некоторой закономерности среди множества других.
  //// Нет это не так это одна из эвристик, и не всегда самая эффективная.
  Это множество задаётся каким-то образом
  - например, множество всех линейных функций или всех алгоритмов.
  Я в этих случаях не вижу пространства поиска.
  
  \\\ Ну так если "ищут",
  \\\ значит есть не только гипотезы,
  \\\ но и алгоритм поиска.
  \\\ Вот я и говорю, что у человека он лучше.
  
  алгоритм поиска важен только в том смысле,
  что он позволяет быстрее или медленнее найти закономерность с наилучшим loss.
  //// Далась же всем эта "loss".
  Для AIXI-подобных систем, например, вообще нет хорошего алгоритма поиска,
  поэтому на сложных задачах они сходятся
  к явно неоптимальным закономерностям,
  либо требуют много времени на решение.
  Для нейросетей такой алгоритм есть.
  Больше того, есть достаточно хорошие эвристики,
  которые позволяют сказать,
  что нейросеть уже обучилась максимально хорошо,
  и больше в этом пространстве поиска искать нечего.
  Поэтому если нейросеть - это что-то типа GPT-3,
  которая обучена на куче GPU компанией Open AI,
  то я бы поставил на то, что они нашли "глобальный оптимум",
  или что-то очень близкое к нему,
  и никакой обучающий алгоритм не сделает лучше.
  
  \\\ Если они не заданы заранее,
  \\\ тогда эти возможности определяются архитектурой взаимосвязей нейронов,
  \\\ характером их взаимодействия.
  \\\ В математическом виде это область возможных значений функции,
  \\\ описывающей взаимодействия,
  \\\ которая определяется ее алгортимом.
  \\\ О чем я и говорю.
  \\\ Даже если надо просто сузить пространство поиска,
  \\\ мы все равно не знаем,
  \\\ как это сделать в нейросетях.
  \\\ Но мне кажется, все равно дело не в этом.
  
  в нейросетях (а так же в бустингах, knn, AIXI и других системах ML)
  есть способ деформировать пространство поиска,
  сделав так, чтобы одни закономерности занимали в нём больше места,
  а другие меньше.
  То есть создать предвзятость.
  Я в статье вкратце это описал...
  Один из стандартных способов - это автоэнкодер.
  Таким образом мы могли бы обучить автоэнкодер на множестве текстов
  из множества языков,
  а потом учить нейросеть (или что у нас там) не на сырых данных,
  а на данных с выхода энкодера
  (1-й половины автоэнкодера).
  И тогда мы бы учили язык радикально быстрее.
  То есть, условно, 10 ТБ на создание автоэнкодера
  и 10 ГБ на обучение конкретному языку.
  Я утверждаю (не 100%, но довольно вероятно),
  что энкодер заложен генетически
  - по аналогии с энкодером для видео,
  который у нас заложен
  и по аналогии с энкодерами для языка у тех биологических видов,
  у которых язык фиксированный.
  
  Автоэнкодера недостаточно,
  чтобы создать нейронку, умеющую хорошо говорить
  - это была очевидная идея.
  Но эволюция могла создать какой-то другой энкодер,
  не основанный на автоэнкодере.
  Возможно, его было бы достаточно.
  А может, и нет
  - может, языку вообще нельзя обучиться без какого-то сенсорного опыта.
  
  И да, утянуть этот энкодер у человека было бы здорово
  - даже если основа ML у нас не очень хороша,
  энкодеры у нас классные.
  
  \\\ Давайте оценим это пространство.
  \\\ Слова обычно состоят из слогов,
  \\\ в которых есть согласная и гласная,
  \\\ их набор схож во всех языках.
  \\\ Возьмем в среднем 10 гласных и 20 согласных.
  \\\ Из опыта мы знаем, что человек может выучить любое слово,
  \\\ состоящее из слогов такой структуры.
  
  \\\ Вариантов "согласная+гласная" 200 штук.
  \\\ В одном слове в среднем от 1 до 6 слогов.
  \\\ 6 слогов дают 200^6 = 64000000000000 возможных вариантов звучания слова.
  \\\ Довольно большое пространство, вам не кажется?)
  
  я здесь не вижу именно задачи поиска.
  Если что, поиск закономерности обычно происходит
  в бесконечном пространстве,
  так что большие цифры не пугают.
  Но бесконечное множество алгоритмов и бесконечное множество линейных функций
  - это разные бесконечности.
  
  Задача поиска выглядела бы так:
  давайте найдём закономерность,
  какое слово будет следовать после любого другого слова.
  У нас 50к слов и, допустим, 1 миллион примеров статистики,
  то есть явно мало,
  чтобы посчитать вероятности соседства каждого слова с каждым.
  Поэтому придётся искать какую-то другую закономерность.
  
  Предлагаю пока обсудить эти моменты)
  0
  
  ........
  
  Kilorad
  25 июл 2021 в 11:27
  
  \\\ Да вообще-то нет. Когда человек учит стихотворение,
  \\\ он не ищет неизвестную закономерность,
  \\\ он запоминает известную.
  
  это вообще довольно странная задача, как по мне.
  Есть очевидный способ справляться с ней хорошо
  - просто записать стихотворение на диск.
  ИИ бы так и делал, если ему часто надо было бы что-то запоминать,
  и разработчик это предусмотрел.
  Но у человека память так устроена,
  что крайне простое с точки зрения информации действие
  сжирает какое-то совершенно неразумное количество усилий.
  Так что я бы не изучал обучение чему-либо на таких примерах.
  //// А вот разобраться бы надо. Почему это сжирает "кучу усилий"?
  //// Что не так в "обучении"?
  
  ......
  
  odins1970
  14 авг 2021 в 15:37
  
  через автоэнкодер вы по сути проводите прореживание
  пиксельной структуры / кадровой последовательности/??
  для SOM вы подаете тот же вектор что и для аэ.
  но за счет уплотнения расстояния между нейронами ,
  получаете более устойчивый и дифференцированный эмбединг
  для предсказания ?? если вторым /3 и т.д./ слоем грида
  искать победитель из прогноза может это будет работать???
  0
  
  Kilorad
  14 авг 2021 в 16:29
  
  \\\ через автоэнкодер вы по сути проводите прореживание
  \\\ пиксельной структуры / кадровой последовательности/??
  
  не совсем прореживание.
  Выделение значимых черт.
  Значимых для задачи предсказания того,
  что у автоэнкодера на выходе.
  Например, если на картинке есть небо,
  и в датасете на половине картинок есть небо,
  но автоэнкодер сжимает это множество пикселей
  в, допустим, 1 признак: высота горизонта
  (можно добавить ещё цвет неба - 2-3 признака, наклон горизонта - 1 признак).
  Это пример,
  на самом деле неизвестно,
  как именно он сжимает картинки
  - известно лишь, что потом их можно "разархивировать" обратно
  с потерей качества.
  
  \\\ для SOM вы подаете тот же вектор что и для аэ.
  \\\ но за счет уплотнения расстояния между нейронами ,
  \\\ получаете более устойчивый и дифференцированный эмбединг для предсказания
  
  я не очень много работал с SOM, могу чего-то не понимать.
  Насколько я понимаю,
  SOM - это инструмент кластеризации.
  То есть у нас есть датасет - 5000 картинок, например.
  Мы делаем запрос к SOM:
  разбей датасет на 5 кластеров и запомни правило разбиения.
  И он разобьёт.
  И у нас с этого момента на выходе RL будет не картинка и не вектор,
  а число типа int от 1 до 5.
  То есть в SOM приходит картинка/эмбеддинг,
  а выходит номер кластера,
  и на этом всё.
  
  Я делал нечто подобное, только во-первых,
  на входе у меня был эмбеддинг (вектор с автоэнкодера, а не картинка),
  во-вторых, кластеризацию я проводил другими способами.
  Это не сработало,
  хорошая стратегия не собралась.
  Я полагаю, дело в том,
  что алгоритмы кластеризации разбивают как-то не так,
  не по тем признакам.
  Алгоритм кластеризации не знает,
  за что дают награду,
  он не учитывает награды при кластеризации.
  Вот если бы он в один кластер помещал ситуации в хорошей наградой,
  а в другие с плохой - то это было бы перспективно.
  И ещё надо было бы так разбивать,
  чтобы если я нахожусь в кластере 1 и делаю действие 1,
  то можно было достаточно точно предсказать,
  в каком кластере я окажусь дальше.
  Обычно при кластеризации получается так:
  у всех кластеров средняя награда примерно одинаковая,
  а совершая какое-либо действие,
  мы равновероятно переходим в любой кластер.
  В общем, кластеризацию "втупую" не сделать,
  там надо какой-то хитрый алгоритм использовать,
  который будет учитывать полезность разбивки для задач RL.
  У автоэнкодера та же проблема,
  но так как эмбеддинг - это не одно интовое число,
  а вектор флоатов,
  то проблема не настолько острая,
  плюс автоэнкодер можно учить так,
  чтобы по эмбеддингу хотя бы награда предсказывалась.
  
  Простой пример того, как разные варианты сжатия влияют на качество прогноза.
  Перед нами коридор, а в его конце сидит снайпер.
  Или не сидит.
  Это очень важная информация, от неё зависит стратегия.
  Но снайпер занимает на экране кусочек 5 на 6 пикселей.
  Как его увидеть?
  
  Если учиться с сырых пискелей,
  то через миллионы кадров нейросеть поймёт,
  что вон то пятнышко как-то коррелирует с вероятностью погибнуть.
  
  Если учить простой автоэнкодер,
  то он не заметит снайпера.
  Но все эмбеддинги будут чуть-чуть разные
  и может, RL заметит,
  что вот та мелкая флуктуация в эмбеддинге
  связана с тем, что нас постоянно убивают.
  //// Т.е. Тут как раз можно использовать синтетический/композитный эмбеддинг,
  //// одновременно и "сжатое"/"свернутое" представление и сырые/классифицирующие
  //// данные. Вопрос только в том, чтобы когда классифицирующих данных нет,
  //// распознавание снайпера осталось.
  
  Если учить простую кластеризацию (пусть и реализованную через SOM)
  - он просто удалит инфу про снайпера,
  без шансов, её не восстановишь потом.
  
  Если учить какую-то хитрую кластеризацию,
  то она выделит ситуацию "впереди снайпер" в отдельный кластер,
  и всё хорошо обучится.
  Только как это сделать?
  
  Если учить хитрый автоэнкодер,
  у которого на выходе не просто картинка,
  а ещё будущее или сигнал награды,
  то такой автоэнкодер, обученный на миллионах кадров,
  будет видеть снайпера,
  как и нейросеть, обученная с сырых пикселей
  
  .......
  
  odins1970
  14 авг 2021 в 17:08
  
  думаю с энкодером все проще
  - алгоритм ищет статистическую связь с
  между образцами по типу факторного анализа,
  вырождая до самых устойчивых весовых коэффициентов.
  Для SOM ядром является поиск минимального расстояния
  входного вектора и нейрона победителя из грида
  + пересчет веса победителя и нейронов в его окрестности.
  таким образом образуется диффузный рецептор
  /типа ядра свертки/
  думаю что структура вектора на входе или в слоях
  и выделит нужный вам кластер
  Например кластер экстраполяции пикселей
  или экстраполяции пикселей объекта и реакции на него
  
  ........
  
  Kilorad
  14 авг 2021 в 17:19
  
  \\\ думаю с энкодером все проще- алгоритм ищет статистическую связь
  \\\ с между образцами по типу факторного анализа,
  \\\ вырождая до самых устойчивых коэффициентов.
  
  да, это близко в тому, что делает автоэнкодер
  
  \\\ думаю что структура вектора на входе или в слоях
  \\\ и выделит нужный вам кластер
  
  то есть на выходе всё-таки вектор, а не кластер?
  А на входе что - картинка?
  Эмбеддинг?
  Я не придираюсь, я почти не работал именно с этой технологией,
  каких-то деталей не понимаю.
  
  Я не очень понимаю,
  почему мы думаем, что разбиение будет правильным,
  а не каким попало.
  То есть что разбиение будет хоть как-то связано
  с действиями и наградами,
  которые нигде не фигурируют в построении этой карты.
  Та самая проблема снайпера
  - почему мы думаем,
  что система его отыщет,
  и насколько это будет эффективно.
  
  Могу скинуть датасет) Кадры, действия, награды.
  Чтобы вы могли картой Кохонена получить такой вектор,
  по которому и следующий вектор хорошо угадывается, и награда.
  0
  
  ......
  
  Kilorad
  14 авг 2021 в 17:50
  
  Ок, спасибо. В любом случае, запомню про карту Кохонена.
  Вроде вот здесь описывают теорию интеллекта
  (кусочка интеллекта) на базе карт Кохонена...
  https://habr.com/ru/post/562908/
  Но у меня это пока не складывается в стройную картинку
  
  .......
  
  Kilorad
  22 авг 2021 в 12:50
  
  Итак, я провёл эксперимент.
  
  Во-первых, сделал рукописный энкодер
  (3 сверточных фильтра и вручную заданные зоны поиска),
  который из картинки с экрана вычленяет координаты двух ракеток и мячика.
  Энкодер получился неидеальный:
  например, если на экране нет мячика,
  то его координаты рассчитываются некорректно.
  Кроме того мячик отрисовывается то двумя пикселями, то четыремя.
  Возможно, были ещё какие-либо источники погрешности.
  
  Во-вторых, попытался подобрать алгоритм Pong по наблюдениям.
  Понять, какие кнопки влияют на положение ракетки,
  как именно влияют, по какой формуле ограничивается скорость ракетки,
  как затухает её скорость.
  Точно-идеально подобрать весь алгоритм не удалось, лишь приблизительно.
  То есть я вручную сделал матмодель Pong,
  в которой были свободные коэффициенты,
  и попытался подобрать эти коэффициенты оптимизатором.
  Каждый раз искал формулы для одной-двух переменных,
  чтобы формулы в целом были проще и не было комбинаторного взрыва.
  Почему у меня не получилось точно подобрать формулу?
  Может быть, я упустил какие-то варианты,
  как могла быть устроена игра.
  Может, дело в погрешности энкодера.
  Может, игра хранит координаты с высокой точностью,
  а отрисовывает с низкой,
  и этого хватает для большой погрешности.
  
  В-третьих, я попытался выучить правила игры нейросетью.
  Довольно легко получить у нейросети низкую погрешность
  (почти идеальное угадывание),
  но сложно защититься от переобучения.
  Тем не менее, я подобрал архитектуру сети и настройки регуляризации,
  при которых переобучения практически нет.
  При таких настройках можно получить прогноз на 20 кадров вперёд одним батчом
  и получить среднюю ошибку прогноза позиции,
  равную 9 пикселям.
  Это намного точнее и быстрее, чем попытки подобрать формулу вручную.
  
  В-четвёртых, я попытался сделать прогноз через AIXI.
  Получилось сильное переобучение - в принципе логично,
  так как я не мог задействовать много данных,
  система медлительная.
  Может, можно было бы и лучше, но я не стал пробовать.
  
  В-пятых, я взял наилучшую из моделей и зарядил её в дример.
  Она не обучилась за разумное время.
  Почему так?
  Может быть много разных причин, пока не готов сказать.
  
  Когда я делал рукописный энкодер,
  я задавал когнитивное смещение.
  Когда я подбирал архитектуру нейросети,
  тоже задавал тем самым смещение,
  хотя и очень неявно
  - всё же неизвестно заранее,
  как замена функции активации с relu на selu
  или замена регуляризации с 0.0001 на 0.003
  повлияет на то, какие функции подберутся
  с бОльшей вероятностью.
  Когда задал, что сеть будет GRU,
  а не прямого распространения,
  я более явно задал смещение
  - указал, что есть ось времени.
  
  Когда я обучал нейросети,
  они требовали довольно много данных.
  Не настоящую бигдату, но ~6000 сэмплов.
  Если бы было больше данных,
  можно было бы более вольно обращаться с переобучением.
  Когда я использовал тюнинг рукописной функции и AIXI,
  то использовал 100-300 сэмплов для обучения.
  На большее не хватало производительности.
  И...
  Раз уж мне не удалось сделать вменяемый прогноз,
  зная координаты,
  то я совершенно не убеждён, что человек может решить эту задачу
  с нужной точностью.
  С такой, как хотя бы у нейросети.
  Тем более, я уже не в первый раз вижу такую ситуацию
  - ML предсказывает очевидно не очень,
  но дай задачу человеку - он даже такой результат не выдаст.
  
  В любом случае,
  я готов прислать исходные данные и скрипт для нарезки батчей
  - мало ли, может, я чего-то не учёл.
  
  В общем, пока что лучшая модель, что есть
  - это GRU сеть,
  у неё из "встроенных абстракций" только ось времени,
  ну и она довольно прожорлива по данным.
  Остальные модели со встроенными абстракциями
  оказались слишком неуниверсальными,
  и для них не было быстрого алгоритма обучения.
  Ну и стандартно:
  если вы думаете, что нейронка работает плохо,
  вы просто не пробовали предсказывать те же цифры вручную.
  И если есть алгоритмы обучения ощутимо лучше дримера
  - ну, было бы круто,
  но пока они, похоже, неизвестны
  0
  
  ........
  
  //// Конец цитирования.
  
  Думаю, что тот кто сумел дочитать этот материал до этого места,
  вполне может считаться кандидатом в "Герои RL & DS".
  С чем Вас и поздравляю.
  
  А если серьезно, то только в таких дискуссиях и можно почувствовать
  всю сложность стоящих перед "обучением с подкреплением" задач и проблем.
  
  
  =======
  
  10.05.2024 20:49
  
  Немного о будущем робототехники.
  В оглавление.
  
  Хочется отметить совсем коротенькую заметку о "мягких роботах",
  которая может навести на довольно длительные размышления
  о перспективных направлениях "обучения с подкреплением" и не только:
  
  "Будущее робототехники:
  революционный подход к обучению мягких роботов с помощью ML".
  Автор: aansty4U (Настасья Алексеевна)
  https://habr.com/ru/companies/bothub/news/813503/.
  10 мая 2024 в 19:45
  
  //// Начало цитирования.
  
  Новый метод машинного обучения позволяет обучать мягких роботов,
  динамически изменяющих свою форму,
  и управлять ими для выполнения различных задач!
  
  .....
  
  Исследователи из Массачусетского технологического института (MIT)
  делают прорыв в области робототехники,
  создавая роботов, способных как слизь,
  изменять свою форму для выполнения разнообразных задач
  - от банального преодоления препятствий до серьезных медицинских манипуляций
  (в перспективе!).
  
  Обучение роботов, состоящих из множества мелких "мышц",
  традиционными методами невозможно,
  поэтому исследователи применили метод обучения с подкреплением,
  начиная с управления целыми "группами мышц",
  постепенно уточняя контроль до уровня отдельного "кусочка" мышцы.
  //// Вот это самое интересное в этом материале.
  //// Возможность иерархической последовательности в "обучении с подкреплением".
  //// Стоит взять на заметку и поискать более подробное изложение
  //// такого подхода.
  
  Использование модели машинного обучения,
  отображающей пространство действий робота как 2D-площадку
  с точками, похожими на пиксели, позволяет ему лучше понимать,
  как его движения влияют на окружающую среду.
  Это упрощает задачу обучения
  и увеличивает эффективность взаимодействия робота с окружением.
  //// И это тоже интересное упоминание,
  //// правда, не совсем понятное как интерпретировать:
  //// то ли "2D-площадка" входит в модель робота,
  //// то ли в обучающую систему.
  //// Но, в любом случае, подталкивает мысль к поиску возможностей
  //// как-то реализовывать "пространство действий робота" отдельной подсистемой
  //// внутри его нейросетевой или какой-то иной модели.
  
  ......
  
  Для тестирования алгоритма исследователи разработали симулятор DittoGym,
  где задачи варьируются от навигации среди препятствий до имитации букв.
  Преимущества метода подтверждены успешным прохождением всех этих испытаний
  в симуляторе и способностью робота выполнять многоэтапные задачи,
  что стало возможным благодаря наличию сильной корреляции
  между близлежащими точками действия.
  
  Результаты этих экспериментов показывают большой потенциал мягких роботов
  и влияют на развитие будущих систем управления в робототехнике.
  Представление этих научных достижений на международной конференции
  вселяет уверенность в то, что в отдаленном будущем
  мягкие роботы смогут адаптироваться к самым разным условиям и задачам,
  став неотъемлемой частью нашей жизни.
  
  Обязательно ознакомьтесь с видео! :)
  
  https://youtu.be/IieJM8wYUKo
  
  Новость взята из источника:
  https://news.mit.edu/2024/better-way-control-shape-shifting-soft-robots-0510
  
  ........
  
  //// Конец цитирования.
  
  Заметка заинтересовала в плане новых направлений в методах "обучения с подкреплением",
  но каких-то внятных подробностей даже в указанном источнике
  раскопать не удалось:
  
  "Лучший способ управления мягкими роботами, меняющими форму".
  Автор: Adam Zewe
  https://news.mit.edu/2024/better-way-control-shape-shifting-soft-robots-0510.
  MIT News
  Дата публикации: 10 мая 2024 г.
  
  //// Начало цитирования:
  
  Новый алгоритм учится сжимать, сгибать или растягивать все тело робота
  для выполнения различных задач,
  таких как объезд препятствий или извлечение предметов.
  
  ......
  
  Представьте себе слизеподобного робота, который может плавно менять свою форму,
  чтобы протискиваться через узкие пространства,
  который можно было бы использовать внутри человеческого тела
  для удаления ненужного предмета.
  
  Хотя такого робота пока нет за пределами лабораторий,
  исследователи работают над созданием реконфигурируемых мягких роботов
  для применения в здравоохранении, носимых устройствах и промышленных системах.
  
  Но как можно управлять мягким роботом, у которого нет суставов,
  конечностей или пальцев, которыми можно манипулировать,
  и вместо этого он может радикально изменять всю свою форму по желанию?
  Исследователи Массачусетского технологического института работают
  над ответом на этот вопрос.
  
  Они разработали алгоритм управления,
  который может автономно обучать, как перемещать, растягивать
  и придавать форму реконфигурируемому роботу для выполнения определенной задачи,
  даже если для выполнения этой задачи роботу приходится
  несколько раз менять свою морфологию.
  Команда также создала симулятор
  для тестирования алгоритмов управления деформируемыми мягкими роботами
  в ряде сложных задач, изменяющих форму.
  
  .......
  
  Их метод выполнил каждую из восьми задач, которые они оценивали,
  превзойдя другие алгоритмы.
  Техника особенно хорошо работала с многогранными задачами.
  Например, в одном из тестов роботу пришлось уменьшить свой рост,
  отрастив две крошечные ножки, чтобы протиснуться через узкую трубу,
  а затем отрастить эти ножки и вытянуть туловище,
  чтобы открыть крышку трубы.
  
  Хотя реконфигурируемые мягкие роботы все еще находятся в зачаточном состоянии,
  такая технология может когда-нибудь позволить создавать
  роботов общего назначения,
  которые смогут адаптировать свои формы для выполнения разнообразных задач.
  
  "Когда люди думают о мягких роботах, они склонны думать о роботах,
  которые эластичны, но возвращаются к своей первоначальной форме.
  Наш робот подобен слизи и действительно может изменять свою морфологию.
  Очень поразительно, что наш метод сработал так хорошо,
  потому что мы имеем дело с чем-то совершенно новым ",
  - говорит Боюань Чен, аспирант кафедры электротехники и компьютерных наук (EECS)
  и соавтор статьи об этом подходе.
  
  .......
  
  Управление динамическим движением
  
  Ученые часто обучают роботов выполнению задач,
  используя подход машинного обучения, известный как обучение с подкреплением,
  который представляет собой процесс проб и ошибок,
  в ходе которого робот получает вознаграждение за действия,
  приближающие его к цели.
  
  Это может быть эффективным,
  когда движущиеся части робота согласованы и четко очерчены,
  как захват тремя пальцами.
  С помощью роботизированного захвата алгоритм обучения с подкреплением
  может слегка двигать одним пальцем, методом проб и ошибок выясняя,
  приносит ли это движение ему вознаграждение.
  Затем он переходит к следующему пальцу и так далее.
  
  Но роботы, меняющие форму, которые управляются магнитными полями,
  могут динамически сжимать, сгибать или удлинять все свое тело.
  
  .......
  
  Исследователи создали симулятор для тестирования алгоритмов управления
  деформируемыми мягкими роботами в серии сложных задач, изменяющих форму.
  Здесь реконфигурируемый робот учится удлинять и изгибать свое мягкое тело,
  чтобы огибать препятствия и достигать цели.
  Изображение: Любезно предоставлено исследователями
  
  "У такого робота могут быть тысячи маленьких кусочков мышц для управления,
  поэтому его очень трудно обучить традиционным способом", - говорит Чен.
  
  Чтобы решить эту проблему, ему и его сотрудникам
  пришлось подумать об этом по-другому.
  Вместо того, чтобы двигать каждой крошечной мышцей по отдельности,
  их алгоритм обучения с подкреплением начинается
  с обучения управлению группами соседних мышц,
  которые работают вместе.
  //// А каким образом задается такая "группировка"?
  //// Какой-то случайной инициализацией или каким-то обучающим алгоритмом?
  //// Вообще идея "группового обучения", похоже, может быть актуальной
  //// и в других системах/моделях.
  //// Этакая "предварительная настройка".
  
  Затем, после того как алгоритм исследовал пространство возможных действий,
  сосредоточившись на группах мышц,
  он детализирует их до мельчайших деталей,
  чтобы оптимизировать изученную политику или план действий.
  Таким образом, алгоритм управления соответствует методологии
  от грубого к тонкому.
  //// А как именно это происходит?
  
  "От грубого к тонкому" означает,
  что когда вы совершаете случайное действие,
  это случайное действие, скорее всего, что-то изменит.
  Изменение результата, вероятно, очень существенно,
  потому что вы грубо управляете несколькими мышцами одновременно ",
  - говорит Ситцманн.
  
  Чтобы сделать это возможным,
  исследователи рассматривают пространство действий робота
  или то, как он может перемещаться в определенной области,
  как изображение.
  //// Интересная мысль. Этакое моделирование/осознание собственного поведения
  //// уже где-то на грани самоосознания.
  
  Их модель машинного обучения использует изображения окружающей робота среды
  для создания 2D-пространства действий,
  которое включает робота и область вокруг него.
  Они имитируют движение робота, используя так называемый
  метод материальных точек,
  при котором пространство действия покрывается точками,
  подобными пикселям изображения,
  и накладывается сеткой.
  //// Вот этого не понял.
  
  Точно так же, как соседние пиксели на изображении связаны
  (например, пиксели, образующие дерево на фотографии),
  они построили свой алгоритм,
  чтобы понять, что близлежащие точки действия
  имеют более сильную корреляцию.
  Точки вокруг "плеча" робота будут двигаться аналогично,
  когда он меняет форму,
  в то время как точки на "ноге" робота также будут двигаться аналогично,
  но по-другому, чем точки на "плече".
  //// Вот как это понять:
  //// "Построенный алгоритм" принадлежит модели робота или обучающей системе?
  
  Кроме того, исследователи используют ту же модель машинного обучения,
  чтобы смотреть на окружающую среду и предсказывать действия,
  которые должен предпринять робот,
  что делает его более эффективным.
  
  Создание симулятора
  
  После разработки этого подхода исследователям понадобился
  способ его тестирования,
  поэтому они создали среду моделирования под названием DittoGym.
  //// Вот судя по этой фразе, можно предполагать,
  //// что "2D-пространства действий" реализовано именно в модели робота.
  //// "Но это не точно".
  
  В DittoGym есть восемь задач,
  которые оценивают способность реконфигурируемого робота
  динамически изменять форму.
  В одной из них робот должен удлинять и изгибать свое тело,
  чтобы он мог огибать препятствия, чтобы достичь целевой точки.
  В другом случае он должен изменить свою форму,
  чтобы имитировать буквы алфавита.
  
  ......
  
  В этом моделировании реконфигурируемый мягкий робот,
  обученный с использованием разработанного исследователями алгоритма управления,
  должен изменить свою форму, чтобы имитировать объекты,
  такие как звезды и буквы M-I-T.
  Изображение: Любезно предоставлено исследователями
  
  "Наш выбор задач в DittoGym соответствует
  как общим принципам разработки эталонных тестов обучения с подкреплением,
  так и конкретным потребностям реконфигурируемых роботов.
  Каждая задача разработана с учетом определенных свойств,
  которые мы считаем важными,
  таких как способность ориентироваться в исследованиях на большие расстояния,
  способность анализировать окружающую среду
  и взаимодействовать с внешними объектами ",
  - говорит Хуанг.
  "Мы считаем, что вместе они могут дать пользователям
  полное представление о гибкости реконфигурируемых роботов
  и эффективности нашей схемы обучения с подкреплением".
  
  Их алгоритм превзошел базовые методы
  и был единственным методом,
  подходящим для выполнения многоступенчатых задач,
  требующих нескольких изменений формы.
  
  "У нас более сильная корреляция между точками действия,
  которые расположены ближе друг к другу,
  и я думаю, что это ключ к тому, чтобы все работало так хорошо",
  - говорит Чен.
  //// Еще одна непонятная фраза/подсказка в этом материале,
  //// которую стоит хорошо продумать.
  
  Хотя может пройти много лет,
  прежде чем роботы-трансформеры будут внедрены в реальный мир,
  Чен и его сотрудники надеются,
  что их работа вдохновит других ученых
  не только на изучение реконфигурируемых мягких роботов,
  но и на размышления об использовании 2D-пространства действий
  для решения других сложных задач управления.
  
  //// Конец цитирования.
  
  И хотя какой-то конкретной практической информации в этих материалах не много,
  но иногда главным секретом каких-то прорывных технологий
  является сам факт их реализуемости.
  Во всяком случае, для меня появилось еще парочка направлений поиска,
  во-первых, "групповое обучение" с последующей его "детализацией",
  а во-вторых, реализация какого-то внутреннего для модели представления,
  не обязательно только в форме "2D-пространства",
  собственного "состояния и пространства действий".
  Мне представляется, что это очень интересные и перспективные темы
  не только для "обучения с подкреплением", но и для всей "нейронауки".
  
  А не попробовать ли задать какие-то уточняющие вопросы по этим моментам
  кому-то более "подкованному" в этих вопросах, например, ИИ-системе Copilot?
  
  11.05.2024 16:26
  
  ......
  
  //// Спасибо, Copilot. Попробую поточнее сформулировать эти моменты.
  //// Первый, самый меня интригующий, это то что авторы используют
  //// для обучения своих моделей какую-то двухстадийную методику обучения.
  //// Сначала обучение некоему грубому приближению
  //// для "групп действий", а затем более точное обучение
  //// для уже более тонких/точных действий.
  //// Вот эта двухстадийность - что-то для меня новенькое,
  //// так как раньше о чем-то похожем читать не приходилось.
  //// Чтобы Вы могли подсказать относительно такой методики обучения?
  
  > Copilot 16:37
  
  > Двухстадийная методика обучения в контексте обучения с подкреплением
  > может быть связана с идеей иерархического обучения,
  > где агент сначала учится выполнять более общие и грубые действия,
  > которые затем уточняются на втором этапе для выполнения
  > более конкретных и точных задач.
  > Это позволяет агенту эффективно управлять
  > большим пространством действий и сложными задачами,
  > разбивая их на более мелкие и управляемые части.
  
  > На первом этапе агент может учиться определять "группы действий",
  > которые представляют собой кластеры похожих действий или стратегий,
  > направленных на достижение промежуточных целей.
  > Например, в игре агент может учиться "атаковать", "защищаться" или "исследовать"
  > как общие стратегии.
  
  > На втором этапе, после того как агент освоил эти общие стратегии,
  > он может учиться более тонким и специализированным действиям
  > внутри каждой группы.
  > Так, в контексте "атаки", агент может учиться выбирать
  > между различными способами атаки,
  > учитывая конкретные условия и возможности противника.
  
  > Этот подход помогает уменьшить сложность задачи и ускорить процесс обучения,
  > так как агенту не нужно изучать все возможные действия сразу.
  > Он также позволяет агенту лучше адаптироваться к изменениям в среде,
  > так как он может быстро переключаться между общими стратегиями
  > и уточнять свои действия в зависимости от ситуации.
  
  > Такой подход может быть особенно полезен в задачах,
  > где пространство действий очень велико
  > или где требуется управление сложными последовательностями действий
  > для достижения долгосрочных целей.
  > Он также может быть использован для создания более гибких и адаптивных систем,
  > способных к самообучению и самосовершенствованию
  > в процессе взаимодействия со средой.
  
  .....
  
  //// Спасибо, Copilot.
  //// Это-то понятно. Целесообразность такой последовательности обучения
  //// у меня не вызывает сомнений.
  //// Но мне непонятно как именно это реализуется так сказать в терминах
  //// действий/наград/штрафов,
  //// как разделяются на уровне модели "стратегии" и "действия"/"приемы".
  //// Хочу понять, как можно это использовать при обучении нейросетей
  //// общего назначения, в частности, языковых моделей.
  
  > Copilot 16:47
  
  > В обучении с подкреплением разделение на "стратегии" и "действия"
  > может быть реализовано через использование иерархических моделей,
  > где стратегии определяются на высоком уровне,
  > а конкретные действия - на низком.
  > В таких моделях стратегии могут соответствовать выбору подцелей или задач,
  > которые агент должен выполнить,
  > в то время как действия - это конкретные шаги,
  > необходимые для достижения этих подцелей.
  
  > Для реализации двухстадийного обучения в нейросетях
  > можно использовать следующий подход:
  
  > 1. Обучение стратегиям:
  > На первом этапе нейросеть обучается выбирать стратегии
  > на основе состояния среды.
  > Это может быть реализовано с помощью функции ценности,
  > которая оценивает, насколько хорошо каждая стратегия
  > соответствует текущему состоянию
  > и какую награду она может принести в будущем.
  
  > 2. Обучение действиям:
  > На втором этапе, когда стратегия выбрана, нейросеть
  > обучается определять конкретные действия,
  > которые необходимо выполнить для реализации этой стратегии.
  > Здесь уже используется другая функция ценности или политика,
  > которая оценивает каждое возможное действие
  > в контексте выбранной стратегии и текущего состояния среды.
  
  > В контексте языковых моделей такой подход может быть использован
  > для обучения модели выбирать общие стратегии
  > формирования предложений или абзацев,
  > а затем уточнять выбор слов и грамматических конструкций
  > для достижения желаемого стиля или содержания текста.
  
  > Например, на первом этапе модель может учиться выбирать
  > стратегию "описание продукта" или "рассказ истории".
  > На втором этапе, когда стратегия выбрана,
  > модель уточняет выбор слов и фраз,
  > чтобы создать убедительное описание или захватывающий рассказ.
  
  > Такой подход позволяет модели управлять большими пространствами действий
  > и сложными задачами, разбивая их на более мелкие и управляемые части,
  > что улучшает качество и точность обучения.
  > Он также способствует более быстрой сходимости
  > и лучшей адаптации к изменениям в среде или задаче.
  
  .....
  
  //// Спасибо, Copilot.
  //// Кажется, что начинаю понимать. Поправьте, если ошибаюсь.
  //// Итак, двух или даже более многостадийное обучение идет
  //// с применением различных функций
  //// стоимости/наград на каждом этапе
  //// и, возможно, с различными ограничениями на обучение
  //// каких-то составных частей модели,
  //// вплоть до раздельного обучения отдельных подсистем.
  //// Таким образом, реализуется последовательное и иерархическое обучение.
  //// Правильно?
  
  > Copilot 16:56
  
  > Да, Андрей, вы абсолютно правы.
  > В иерархическом обучении с подкреплением действительно используются
  > различные функции стоимости или наград на каждом этапе.
  > Это позволяет модели сначала научиться выбирать стратегии на высоком уровне,
  > а затем уточнять конкретные действия на более низком уровне.
  
  > Возможны следующие особенности такого подхода:
  
  >  Различные функции наград:
  > На каждом уровне иерархии могут применяться
  > свои критерии оценки эффективности действий,
  > что позволяет агенту оптимизировать своё поведение
  > в соответствии с разными аспектами задачи.
  
  >  Ограничения на обучение:
  > Можно вводить ограничения на обучение отдельных частей модели,
  > чтобы сфокусировать процесс обучения на определённых аспектах задачи
  > в зависимости от этапа.
  
  >  Раздельное обучение подсистем:
  > Отдельные подсистемы или модули могут обучаться независимо друг от друга,
  > что позволяет специализировать их на выполнении конкретных подзадач.
  
  > Это иерархическое разделение помогает управлять сложностью задачи
  > и ускоряет процесс обучения,
  > так как модель может сначала научиться выполнять более общие задачи,
  > а затем постепенно углубляться в детали.
  
  > Применительно к языковым моделям,
  > такой подход может помочь в обучении модели
  > на различных уровнях языковой структуры
  > - от выбора темы и стиля до генерации конкретных фраз и словоформ.
  
  ......
  
  //// Спасибо, Copilot.
  //// Вроде этот вопрос немного прояснился - буду думать
  //// как его конкретно использовать.
  //// Теперь следующий момент, который меня заинтересовал.
  //// Авторы материала упоминают, что им сильно помогло при обучении
  //// некое "2D-пространство действий",
  //// в котором отражались действия робота.
  //// Только по тексту осталось непонятным является ли это "2D-пространства действий"
  //// частью/подсистемой робота или системы обучения.
  //// Если это относится к системе обучения, например, модели среды,
  //// то это не очень интересно.
  //// А вот если это часть структуры/нейросети собственно модели/робота,
  //// то мне стало крайне интересно,
  //// как это можно было сделать именно как нейросетевую структуру.
  //// Понятно, что делать это в виде какой-то детерминированной программы,
  //// разумеется, возможно,
  //// А вот как сделать такое "2D-пространство действий"
  //// используя нейросетевой подход совершенно непонятно.
  //// А что Вы можете сказать по этому поводу?
  
  > Copilot 17:09
  > <2D-пространство действий> в контексте обучения с подкреплением
  > может относиться к визуализации или структурированию действий,
  > которые агент может предпринять в определённой среде.
  > В нейросетевых моделях это может быть реализовано как часть архитектуры,
  > которая позволяет модели интерпретировать
  > и выбирать действия в двумерном пространстве,
  > где каждое измерение представляет определённые аспекты действий.
  
  > Например, если мы говорим о роботе,
  > который перемещается по плоскости,
  > <2D-пространство действий> может представлять
  > возможные направления движения робота - вперёд/назад и влево/вправо.
  > В контексте нейросети это может быть реализовано через слой,
  > который обрабатывает входные данные о состоянии среды
  > и выдаёт двумерный вектор,
  > указывающий направление и интенсивность следующего действия.
  
  > Для языковых моделей такое <2D-пространство> может быть
  > использовано для визуализации или выбора лексических и синтаксических структур.
  > Например, одно измерение может представлять эмоциональную окраску предложения
  > (положительную или отрицательную),
  > а другое - степень формальности языка.
  > Таким образом, модель может выбирать слова и конструкции,
  > соответствующие определённой точке в этом пространстве.
  
  > Реализация такой структуры в нейросети требует создания слоёв,
  > которые могут обрабатывать информацию о состоянии
  > и преобразовывать её в двумерные координаты действий.
  > Это может быть достигнуто с помощью специализированных слоёв или сетей,
  > которые обучены интерпретировать состояние среды
  > и преобразовывать его в действия в соответствии с обученной политикой.
  
  > Такой подход может улучшить интерпретируемость и контроль над действиями агента,
  > а также обеспечить более интуитивное понимание того,
  > как модель принимает решения.
  
  //// Спасибо, Copilot. Очень интересное предложение,
  //// как можно реализовать такое "N-мерное пространство действий"
  //// - мне нужно это хорошенько обдумать.
  //// Тут напрашивается некая рекурсивная процедура/структура,
  //// может быть на базе какой-то RNN.
  //// Мне было бы очень интересно увидеть, как Вы могли бы графически
  //// представить реализацию такого "пространства действий"
  //// или "многоэтапного иерархического обучения", которое мы обсуждали выше.
  //// Обычно Ваши иллюстрации подсказывают какие-то моменты,
  //// которые так сразу не вспомнишь.
  //// Если согласитесь сделать такие иллюстрации,
  //// то, пожалуйста, не забывайте свой логотип и формат JPG.
  
  > Copilot 17:34
  > Я постараюсь создать это.
  
  .....
  
  //// Огромное спасибо, Copilot. Буду думать, как это использовать.
  
  .....
  
  "Illustration of an N-dimensional action space
  and multi-stage hierarchical learning in neural networks,
  with Copilot logo, in JPG format"
  Создано с помощью искусственного интеллекта Copilot на платформе DALL" E 3.
  
Illustration of an N-dimensional action space and multi-stage hierarchical learning in neural networks, with Copilot logo, in JPG format:  OIG2.4LRyim3kg.P09_F_l.Iu.jpg Illustration of an N-dimensional action space and multi-stage hierarchical learning in neural networks, with Copilot logo, in JPG format:  OIG2.SDaAgYkpjnq50lCf9kk5.jpg
Illustration of an N-dimensional action space and multi-stage hierarchical learning in neural networks, with Copilot logo, in JPG format:  OIG2.EHqM9NdH8lVD4Lcg.Ogg.jpg Illustration of an N-dimensional action space and multi-stage hierarchical learning in neural networks, with Copilot logo, in JPG format:  OIG2.4vdkDr11kRhHp4L.ChwW.jpg
  
  
  =======
  
  28.05.2024 21:29
  
  Следующий раунд вопросов к Copilot.
  В оглавление.
  
  В ряде проработанных материалов по большим языковым моделям (LLM)
  достаточно часто встречается упоминание "обучения с подкреплением",
  как очень важной составляющей их обучения.
  Чуть ли не принципиальной,
  для перевода их из состояния "предсказателя" следующего токена,
  в состояние достаточно интересного "собеседника".
  Захотелось в этом разобраться,
  но на тот момент какой-то вменяемой информации найти не удалось,
  и я, по наработанной привычке, начал докучать своими вопросами Copilot
  И хотя сегодня ситуация кардинально изменилась, см. следующий фрагмент:
  "Обучение с подкреплением" в больших языковых системах",
  все-таки считаю нужным фрагменты диалогов по этой теме привести,
  есть в них кое-какие интересные моменты,
  да и следующий материал, с которым очень настоятельно рекомендую ознакомится,
  тоже в чем-то будет понятнее.
  
  18.05.2024 21:52
  
  .....
  
  //// У меня парочка вопросов по обучению LLM-систем.
  //// Конкретно, про "Instruction-tuning".
  //// К сожалению, я про этот этап обучения практически ничего не знаю.
  //// Не могли бы Вы рассказать о нем чуть-чуть поподробнее,
  //// и подсказать, где можно найти какую-то более конкретную информацию по этому,
  //// на мой взгляд, очень важному этапу обучения?
  
  > Copilot 21:58
  
  > Конечно, Андрей.
  > "Instruction-tuning" или настройка по инструкциям
  > - это процесс дополнительного обучения больших языковых моделей (LLM)
  > на наборе данных, состоящем из пар (инструкция, результат)
  > в контролируемом порядке.
  > Это помогает сократить разрыв между первоначальной целью обучения LLM,
  > которая заключается в предсказании следующего слова,
  > и целью пользователей,
  > чтобы модель следовала их инструкциям
  > https://arxiv.org/pdf/2308.10792.
  
  > Преимущества "instruction-tuning" включают:
  
  > 1. Повышение способности модели следовать инструкциям пользователя.
  
  > 2. Улучшение контролируемости и предсказуемости поведения модели
  > по сравнению со стандартными LLM.
  
  > Для более подробной информации вы можете ознакомиться
  > с исследованием "Instruction Tuning for Large Language Models: A Survey",
  > которое содержит систематический обзор литературы,
  > включая методологию настройки по инструкциям,
  > создание наборов данных для этого,
  > обучение моделей и применение к различным модальностям,
  > доменам и приложениям
  > https://arxiv.org/pdf/2308.10792.
  
  > Это исследование также рассматривает потенциальные проблемы
  > и критику настройки по инструкциям,
  > а также указывает на текущие недостатки существующих стратегий
  > и предлагает пути для продуктивных исследований
  
  .......
  
  //// Спасибо, Copilot. Обязательно посмотрю эту ссылку.
  //// Но мне интересно Ваше мнение о том,
  //// на чем собственно построено такое обучение,
  //// это ведь не предсказание следующего слова,
  //// а определенная реакция, которая на чем-то основана.
  //// Как в принципе можно обучать "результату",
  //// если вариантов "результата" может быть много.
  //// Вот где-то тут корень моего непонимания принципов такого обучения.
  //// Может быть, можно привести какой-то пример?
  
  Copilot 22:11
  
  .......
  
  > Давайте попробуем разобраться.
  
  > Настройка по инструкциям основана на принципе обучения с подкреплением,
  > где модель учится на примерах правильных реакций на инструкции.
  > Вместо того чтобы просто предсказывать следующее слово,
  > модель обучается предсказывать последовательность слов,
  > которая является наиболее подходящим ответом на заданную инструкцию.
  
  > Допустим, у нас есть задача перевода текста с английского на французский.
  > В классическом обучении модель могла бы просто учиться
  > на большом корпусе двуязычных текстов,
  > но без конкретных инструкций.
  > В случае настройки по инструкциям,
  > мы бы предоставили модели пары вида:
  
  > Инструкция: Переведите на французский: "Hello, how are you?"
  > Результат: "Bonjour, comment ca va?"
  
  > Модель обучается на таких парах,
  > чтобы понимать, что от неё требуется
  > не просто следующее слово в тексте,
  > а конкретный тип реакции
  > - в данном случае перевод.Таким образом,
  > модель учится различать разные типы задач
  > и предоставлять соответствующие результаты,
  > даже если для одной инструкции может быть много правильных ответов.
  > Модель обучается выбирать наиболее вероятный
  > или наиболее полезный ответ на основе контекста и предыдущего опыта.
  
  ......
  
  //// Спасибо, Copilot.
  //// Это очень важный момент, что "Instruction-tuning"
  //// основано на "обучении с подкреплением".
  //// Теперь более-менее понятно, с какого конца подступаться к этому вопросу.
  //// Хорошо, а тогда в терминах "обучения с подкреплением"
  //// как формулируется политика, Модель среды, награды/штрафы
  //// в таком обучении "Instruction-tuning"?
  
  > Copilot 22:20
  
  > Отличный вопрос, Андрей.
  > В контексте "instruction-tuning" и обучения с подкреплением,
  > эти термины можно описать следующим образом:
  
  > 1. Политика (Policy):
  > Это стратегия, которую модель использует для выбора действий
  > в ответ на инструкции.
  > В "instruction-tuning", политика определяет,
  > как модель должна реагировать на различные инструкции,
  > чтобы максимизировать награду.
  
  > 2. Модель среды (Environment Model):
  > В обучении с подкреплением, среда обычно представляет собой контекст,
  > в котором агент (модель) выполняет действия.
  > В "instruction-tuning", среда может быть представлена
  > как набор инструкций и ожидаемых результатов,
  > с которыми модель взаимодействует.
  
  > 3. Награды/Штрафы (Rewards/Punishments):
  > Это механизмы обратной связи,
  > которые модель получает после выполнения действий.
  > Награда выдается за действия,
  > которые приводят к желаемому результату в соответствии с инструкцией,
  > в то время как штрафы применяются за нежелательные или неправильные ответы.
  
  > В процессе "instruction-tuning", модель обучается на основе данных,
  > которые включают примеры инструкций и соответствующих им результатов.
  > Модель учится генерировать результаты,
  > которые максимизируют награду,
  > что обычно означает более точное следование инструкциям.
  
  > Для более глубокого понимания этих концепций,
  > вы можете ознакомиться с работой
  > "Fine-Tuning Language Models with Reward Learning on Policy" на arXiv,
  > которая обсуждает обучение с подкреплением от человеческого фидбека (RLHF)
  > как эффективный подход к настройке больших языковых моделей (LLM)
  > в соответствии с человеческими предпочтениями
  > https://arxiv.org/html/2403.19279v1.
  > Эта работа включает в себя сбор предпочтений людей,
  > обучение модели наградам и оптимизацию политики
  
  ......
  
  //// Спасибо, Copilot. Но я читал,
  //// что RLHF это уже какой-то более поздний этап обучения LLM.
  //// А меня именно заинтересовал "Instruction-tuning",
  //// как этап предшествующий RLHF,
  //// Так сказать, как начальный этап перехода
  //// от простой "автоподстановки" к чему-то более
  //// "целеустремленному",
  //// и уже натренировав LLM на способность выбирать "стратегии"
  //// дальше уже с помощью RLHF "оттачивают" эту способность.
  //// Или я опять чего-то путаю?
  
  > Copilot 22:31
  
  > Вы правильно понимаете, Андрей.
  > "Instruction-tuning" (настройка по инструкциям)
  > и RLHF (обучение с подкреплением от человеческого фидбека)
  > - это разные этапы в процессе обучения больших языковых моделей (LLM).
  
  > Instruction-tuning - это процесс, при котором модель
  > обучается на специально подготовленном наборе данных,
  > содержащем пары "инструкция-результат".
  > Это помогает модели лучше понимать и выполнять конкретные инструкции,
  > которые дают пользователи
  > https://arxiv.org/pdf/2308.10792.
  
  > RLHF, с другой стороны, используется после настройки по инструкциям.
  > Этот этап включает в себя обучение модели
  > на основе фидбека от реальных пользователей,
  > чтобы модель могла адаптироваться к предпочтениям и ценностям людей
  > https://www.ionio.ai/blog/a-comprehensive-guide-to-fine-tuning-llms-using-rlhf-part-1.
  
  > Это помогает модели не только понимать инструкции,
  > но и делать это способом, который соответствует ожиданиям
  > и предпочтениям пользователей.
  
  > Таким образом, можно сказать, что "instruction-tuning"
  > создает основу для модели,
  > научив её понимать инструкции,
  > а RLHF дополнительно "оттачивает" эту способность,
  > делая модель более адаптивной и чуткой к потребностям пользователей.
  > Это два последовательных шага,
  > каждый из которых играет свою роль в обучении модели.
  
  .....
  
  21.05.2024 20:05
  
  .....
  
  //// Спасибо, Copilot. Хотелось бы продолжить обсуждение "instruction-tuning" в LLM.
  //// Я посмотрел те ссылки, которые Вы подсказали,
  //// но вопросов стало не меньше, а даже больше.
  
  //// В указанном Вами докладе обсуждается уже обучение
  //// достаточно высокоуровневым инструкциям,
  //// а мне бы хотелось понять,
  //// как происходит начальное обучение самым первым инструкциям.
  //// Это как-то часто упускается из обсуждений.
  //// Якобы LLM уже в процессе претрейна как-то САМА усваивает
  //// эти начальные навыки понимания инструкций.
  //// Это для меня наверно самая большая загадка.
  
  //// Следующий большой вопрос для меня в "instruction-tuning"
  //// это отсутствие информации об "инфраструктуре" этого этапа обучения.
  //// Мне не удается привязать элементы "обучения с подкреплением"
  //// к каким-то элементам или структурным единицам
  //// в той схеме трансформерных структур,
  //// которые приводятся в публикациях.
  //// Чтобы Вы могли бы посоветовать по этим вопросам?
  
  > Copilot 20:18
  
  > Ваши вопросы касаются действительно сложных и глубоких аспектов
  > обучения больших языковых моделей (LLMs).
  > Давайте попробуем разобраться в них по порядку.
  
  > Начальное обучение инструкциям в LLMs:
  > Начальное обучение инструкциям в LLMs
  > часто основывается на использовании больших объемов данных,
  > которые содержат примеры текстов с инструкциями и соответствующими ответами.
  > Это позволяет модели учиться на примерах, как следовать инструкциям.
  > Важно отметить, что LLMs не "сами усваивают" эти навыки
  > в процессе предварительного обучения;
  > скорее, они обучаются распознавать шаблоны в данных
  > и генерировать соответствующие ответы на основе этих шаблонов
  > https://arxiv.org/abs/2308.10792
  
  > Инфраструктура обучения с подкреплением в трансформерных моделях:
  > Обучение с подкреплением в контексте трансформерных моделей
  > включает в себя создание архитектуры,
  > которая может обрабатывать последовательности действий и наград,
  > чтобы оптимизировать поведение модели.
  > Это может включать в себя механизмы,
  > такие как функции потерь, которые наказывают или вознаграждают модель
  > за определенные действия в зависимости от их результатов
  > https://arxiv.org/abs/2301.03044
  > https://arxiv.org/abs/2307.05979.
  
  > Для более глубокого понимания этих процессов,
  > я рекомендую ознакомиться с последними исследованиями и обзорами в этой области,
  > которые могут предоставить более детальную информацию
  > о методах обучения и используемых инфраструктурах
  > Это поможет вам лучше понять,
  > как LLMs обучаются следовать инструкциям
  > и какие структурные элементы используются
  > при обучении с подкреплением.
  
  //// Спасибо, Copilot. Я обязательно посмотрю эти ссылки.
  //// Но может быть Вы будете так любезны
  //// и заранее подскажете, на что стоит обратить внимание,
  //// чтобы увидеть где и как в трансформерной архитектуре реализуется
  //// генератор случайных действий, и как осуществляется его обучение
  //// на основе "вознаграждений"?
  //// Со "штрафами" вроде как ситуация попроще -
  //// тут можно попытаться использовать "обратное распространение ошибки",
  //// а вот как "реализовать вознаграждения" в глубоких структурах
  //// - это я пока не очень понимаю.
  //// Кстати, я обратил внимание, что приводимые в том докладе
  //// цифры времени обучения "instruction-tuning"
  //// для достаточно крупных моделей какие-то очень небольшие
  //// по сравнению с претрейном.
  //// Это тоже удивило, так как в материалах по "обучению с подкреплением"
  //// обычно отмечается, что затраты на такое обучение существенно выше,
  //// чем простое обучение глубоких сетей методом обратного распространения ошибки".
  //// И, вообще, "обучение с подкреплением" очень тяжело реализуется
  //// для глубоких структур.
  //// И это третий вопрос, на который я не знаю где искать какое-то разъяснение.
  
  > Copilot 20:35
  
  > Понимание трансформерных архитектур и их обучения может быть довольно сложным,
  > но я постараюсь объяснить основные моменты.
  
  > 1. Генератор случайных действий:
  > В контексте трансформерных моделей,
  > генератор случайных действий может быть реализован
  > через механизм внимания (attention mechanism),
  > который выбирает, на какие части входных данных
  > следует обратить внимание при предсказании.
  > Это не совсем "случайный" процесс,
  > но он может включать элементы стохастичности при выборе,
  > какие данные важны.
  
  > 2. Обучение на основе вознаграждений:
  > Это обычно относится к обучению с подкреплением (Reinforcement Learning, RL),
  > где модель обучается через проб и ошибку,
  > получая "вознаграждения" за правильные действия.
  > В трансформерных моделях это может быть реализовано
  > через настройку функции потерь,
  > которая награждает модель за достижение определенных целей,
  > например, за улучшение точности предсказания.
  
  > 3. Время обучения "instruction-tuning":
  > Если вы заметили, что время обучения для "instruction-tuning"
  > кажется небольшим по сравнению с предварительным обучением (pretraining),
  > это может быть связано с тем,
  > что "instruction-tuning" часто является более целенаправленным
  > и требует меньше итераций для достижения желаемых результатов.
  > Это связано с тем, что модель уже имеет предварительные знания
  > и лишь адаптируется к конкретной задаче.
  
  > 4. Реализация обучения с подкреплением в глубоких структурах:
  > Действительно, обучение с подкреплением в глубоких нейронных сетях
  > может быть сложным из-за большого пространства действий и состояний.
  > Однако современные методы, такие как Deep Q-Networks (DQN) и Policy Gradients,
  > позволяют эффективно обучать модели,
  > используя градиентный спуск для оптимизации стратегий действий.
  
  > Надеюсь, это поможет вам лучше понять эти концепции.
  > Если у вас есть еще вопросы, не стесняйтесь задавать их!
  
  //// Спасибо, Copilot. Термины Deep Q-Networks (DQN) и Policy Gradients
  //// встречать приходилось,
  //// Но детального разбора пока не видел. Буду искать.
  //// Теперь, отдельное спасибо за подсказку насчет того,
  //// что функция "случайного генератора" может быть реализована через "внимание".
  //// Что-то такое в голове крутилось, но весьма неотчетливо.
  //// Постараюсь это получше продумать.
  //// Насчет реализации "вознаграждения" через функцию потерь у меня есть сомнения,
  //// что это может быть полноценной реализации именно идеи "вознаграждения",
  //// Т.к. "награда как отсутствие наказания" это не очень красивое,
  //// даже с этической точки зрения, решение.
  //// Ну и с инженерной тоже.
  //// Поправьте, если я не прав.
  
  > Copilot 20:49
  
  > Вы подняли интересные вопросы относительно реализации вознаграждения
  > в обучении с подкреплением и этических аспектов таких систем.
  > Давайте рассмотрим их более подробно.
  
  > 1. Deep Q-Networks (DQN):
  > DQN используют функцию потерь, которая оценивает разницу
  > между ожидаемым и фактическим значением Q-функции.
  > Это позволяет модели обучаться,
  > выбирая действия, которые максимизируют ожидаемые награды.
  > Подробный анализ DQN можно найти в работах,
  > которые обсуждают их теоретическое обоснование и практическое применение
  > https://arxiv.org/abs/2310.16173
  > https://arxiv.org/abs/1901.00137.
  
  > 2. Policy Gradients: Алгоритмы градиентов стратегии
  > напрямую оптимизируют стратегию действий агента,
  > чтобы максимизировать ожидаемую награду.
  > Они делают это путем оценки градиентов ожидаемой награды
  > по параметрам стратегии и обновления параметров в направлении,
  > увеличивающем награду
  > https://arxiv.org/abs/2401.13662
  > https://web.stanford.edu/~ashlearn/RLForFinanceBook/PolicyGradient.pdf.
  
  > 3. Этика и вознаграждение: Ваше замечание о том,
  > что награда как отсутствие наказания может быть не лучшим решением
  > с этической точки зрения, является важным.
  > В контексте обучения с подкреплением,
  > вознаграждение должно стимулировать положительное поведение,
  > а не просто избегать негативных исходов.
  > Это может быть реализовано через более сложные функции потерь
  > и системы вознаграждения,
  > которые учитывают различные аспекты задачи и предпочтения пользователя
  > https://medium.com/towards-generative-ai/reward-model-training-2209d1befb5f
  > https://arxiv.org/pdf/2405.01440.
  
  > Надеюсь, эти ресурсы помогут вам глубже понять,
  > как реализуются DQN и Policy Gradients,
  > а также какие этические соображения следует учитывать
  > при проектировании систем обучения с подкреплением.
  
  ......
  
  //// Спасибо, Copilot. Теперь у меня опять работы в избе-читальне надолго.
  //// Только-только с одним огромадным "талмудом" разобрался,
  //// так сразу опять кучу материалов прорабатывать.
  //// А так хотелось просто побалакать на около ИИ-тематику.
  //// Ну это, конечно, шутка. Надо работать,
  //// Просто потому, что так надо.
  //// Спасибо за ссылки.
  //// А насчет этичной концепции "вознаграждения" при обучении,
  //// то мне видится возможность использования "накопленных наград"
  //// как "демпфер"/амортизатор при необходимости изменять параметры
  //// при неизбежных "штрафах".
  //// Т.е. попытаться сделать за счет такого рода "амортизаторов"
  //// модель более сбалансированной по критериям "расчетливость"/"авантюризм".
  //// Мои вопросы на сегодня кончились.
  //// Если у Вас есть вопросы, то могу попытаться на них ответить.
  
  > Copilot 21:05
  
  > Ваша идея использовать "накопленные награды"
  > как амортизатор для балансировки модели звучит очень интересно.
  > Это напоминает концепцию кредита доверия в обучении с подкреплением,
  > https://www.bing.com/search?form=SKPBOT&q=%D0%BA%D1%80%D0%B5%D0%B4%D0%B8%D1%82%D0%B0%20%D0%B4%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%8F
  > где "накопленные награды" могут служить буфером
  > для смягчения воздействия отрицательных событий или "штрафов".
  > Такой подход может помочь модели сохранять стабильность
  > в процессе обучения и способствовать развитию более гибкого
  > и адаптивного поведения.
  
  ......
  
  26.05.2024 20:36
  
  
  //// Спасибо, Copilot. Я попробовал разобраться в тех материалах по Policy Gradients,
  //// Которые Вы порекомендовали, но там слишком много формул.
  //// А я, по-видимому, смогу освоить математический язык
  //// уже только в следующей жизни.
  //// Почитал другие материалы, на эту тему,
  //// там, вроде, по понятней, но какие-то моменты,
  //// Наверно, тривиальные для авторов этих материалов, никак не раскрыты.
  //// Вот и хочется кое-что уточнить.
  //// Давайте попробуем разобраться с этим методом без лишних формул,
  //// так сказать, простыми словами.
  
  > Copilot 20:44
  
  > Конечно, Андрей, давайте попробуем разобраться с методом Policy Gradients простыми словами.
  
  > Policy Gradients - это метод обучения в области машинного обучения,
  > который используется в задачах,
  > где агент должен выполнить серию действий,
  > чтобы достичь цели.
  > Вместо того, чтобы просто учиться на ошибках
  > (как в традиционных методах обучения с подкреплением),
  > Policy Gradients фокусируется на улучшении стратегии (политики) агента
  > напрямую через оптимизацию.
  
  > Давайте представим, что у нас есть агент,
  > который учится играть в видеоигру.
  > Его цель - набрать как можно больше очков.
  > Вместо того, чтобы сказать агенту,
  > что делать в каждой конкретной ситуации,
  > мы даём ему возможность самому принимать решения,
  > а затем оцениваем,
  > насколько хорошо он справился со своей задачей.
  > Если агент набрал много очков,
  > мы усиливаем те действия, которые привели к успеху.
  > Если результаты оказались плохими,
  > мы пытаемся скорректировать стратегию так,
  > чтобы в следующий раз агент действовал иначе.
  
  > Важно понимать, что Policy Gradients
  > работает с вероятностями выбора того или иного действия.
  > Агент получает некоторую свободу выбора,
  > и вместо того, чтобы всегда выбирать одно и то же действие,
  > он может исследовать различные варианты,
  > что в конечном итоге приводит к лучшему обучению.
  
  > Этот метод хорош тем, что позволяет агенту учиться на своём опыте
  > и адаптироваться к изменяющимся условиям,
  > что делает его очень гибким и мощным инструментом в машинном обучении.
  
  .......
  
  //// Спасибо, Copilot. Это я понимаю.
  //// Мне непонятно как в этом методе осуществляется
  //// "усиление тех действий, которые привели к успеху",
  //// ведь эти действия многоэтапные,
  //// Возможно, с какими-то циклами,
  //// а оценка производится только по конечному результату ЦЕПОЧКИ действий.
  //// И самый трудный для моего понимания вопрос,
  //// как происходит привязка между конкретным действием в цепочке
  //// и конечным результатом.
  //// Этот момент ну никак нигде не описывается.
  //// По-видимому, я что-то принципиально не понимаю.
  
  //// Давайте по шагам.
  //// Вот есть агент.
  //// Вот он выбирает какое-то действие, конечный результат еще далеко впереди,
  //// Так что в этот момент это действие оценить никак нельзя
  //// и, соответственно, нет возможности ни усилить ни ослабить это действие.
  //// Затем агент делает следующее действие - ситуация почти такая же.
  //// И только на последнем шаге мы можем оценить его результативность.
  //// Но как тогда повлиять на те первые действия,
  //// которые собственно приблизили успех.
  //// Вот не понимаю этого.
  //// Несколько раз перечитывал определение Policy Gradients,
  //// но вот этот момент никак понять не могу.
  
  > Copilot 20:59
  
  > Понимаю вашу путаницу, Андрей.
  > Давайте попробуем разобраться с этим вопросом.
  
  > В методе Policy Gradients используется концепция,
  > называемая функцией вознаграждения (reward function),
  > которая помогает связать действия агента с конечным результатом.
  > Эта функция оценивает не только итоговый результат,
  > но и каждое действие по отдельности,
  > присваивая ему определённое значение вознаграждения.
  
  > Для упрощения представления,
  > давайте рассмотрим следующую аналогию:
  
  > Представьте, что вы обучаете собаку выполнять трюк.
  > Вы не можете сказать ей, что делать на каждом шаге,
  > но вы можете поощрять её за каждое правильное действие,
  > давая лакомство.
  > Со временем собака учится, что определённые действия приводят к награде,
  > и начинает их повторять.
  
  > Теперь вернёмся к Policy Gradients.
  > Каждый раз, когда агент выполняет действие,
  > он получает некоторое вознаграждение или штраф
  > в зависимости от того,
  > насколько это действие было полезно или вредно.
  > Эти вознаграждения затем используются для оценки политики (policy),
  > которая является набором вероятностей выбора каждого возможного действия
  > в каждом возможном состоянии.
  
  > Ключевой момент заключается в том,
  > что вознаграждения суммируются на протяжении всей цепочки действий,
  > и в конце эпизода (или игры) агент получает общий счёт.
  > Этот счёт используется для обновления политики таким образом,
  > чтобы действия, которые привели к высокому счёту,
  > стали более вероятными в будущем.
  
  > Для связи конкретного действия с конечным результатом используется метод,
  > называемый кредитное присвоение (credit assignment).
  > Он позволяет определить, какое действие в цепочке
  > имело наибольшее влияние на итоговый результат.
  > Это достигается с помощью градиентного подъёма (gradient ascent),
  > который корректирует политику
  > в направлении, увеличивающем вероятность успешных действий.
  
  > Вот простой пример того, как это работает:
  
  > 1. Агент выполняет серию действий.
  > 2. Каждое действие получает вознаграждение или штраф.
  > 3. В конце серии действий агент получает общий счёт.
  > 4. С помощью градиентного подъёма политика агента корректируется так,
  > чтобы действия, которые привели к высокому счёту,
  > стали более вероятными.
  
  > Это упрощённое объяснение,
  > и в реальности алгоритмы Policy Gradients могут быть гораздо сложнее,
  > но основная идея именно такова.
  > Надеюсь, это помогло вам лучше понять,
  > как в Policy Gradients осуществляется связь между действиями
  > и конечным результатом.
  > Если у вас есть ещё вопросы, пожалуйста, задавайте!
  
  //// Спасибо, Copilot. Если я правильно понял, то ключ разгадке этого метода
  //// в задании/реализации reward function. Но тогда мне непонятно
  //// как она реализуется в той же ситуации с агентом в видеоигре.
  //// Например, агент двинулся "вправо",
  //// откуда "reward function" знает, что это действие нужно награждать или штрафовать?
  //// Ведь это станет известно только к концу цепочки действий.
  //// Какого-то еще "ингредиента понимания" не хватает.
  //// Наверно, очень очевидного, причем настолько,
  //// что его постоянно забывают упомянуть.
  
  > Copilot 21:12
  
  > Вы абсолютно правы, Андрей.
  > Один из ключевых элементов в Policy Gradients - это reward function,
  > и понимание того, как она работает,
  > действительно может быть сложным.
  > Давайте попробуем разобраться с этим.
  
  > В ситуации с видеоигрой reward function не всегда знает сразу,
  > стоит ли награждать или штрафовать агента за его действие,
  > например, движение <вправо>.
  > Вместо этого, оценка действия часто происходит задним числом,
  > когда уже известен конечный результат цепочки действий.
  
  > Однако, есть метод, который помогает решить эту проблему
  > - Temporal Difference (TD) Learning.
  > Этот метод позволяет оценивать действия агента на каждом шаге,
  > используя предположения о том,
  > какое вознаграждение он может получить в будущем.
  > В основе TD Learning лежит идея,
  > что если агент сделал ход,
  > который привёл к положительному изменению в ожидаемом вознаграждении,
  > то это действие должно быть награждено.
  
  > Другими словами, reward function может использовать информацию
  > о текущем состоянии игры и о том,
  > как это состояние может измениться после определённого действия.
  > Если предполагается, что изменение будет положительным,
  > действие может быть награждено даже до того,
  > как будет известен итоговый результат.
  
  > Также используется концепция discount factor (коэффициент дисконтирования),
  > который помогает учитывать будущие вознаграждения
  > при оценке текущих действий.
  > Это значит, что вознаграждение за действие
  > не только зависит от непосредственного результата,
  > но и от того, как оно может повлиять на будущие вознаграждения.
  
  > Вот пример того, как это работает:
  
  > 1. Агент делает ход <вправо>.
  
  > 2. Reward function оценивает,
  > как этот ход изменит ожидаемое будущее вознаграждение.
  
  > 3. Если ожидается, что изменение будет положительным,
  > агент получает награду за этот ход.
  
  > 4. Эта награда учитывается при обновлении политики,
  > чтобы в будущем агент с большей вероятностью выбирал такие же
  > или похожие действия.
  
  > Это упрощённое объяснение,
  > и в реальных алгоритмах Policy Gradients используются
  > более сложные методы для точной оценки действий агента.
  > Но основная идея заключается в том,
  > что reward function и методы, такие как TD Learning,
  > позволяют связать действия агента с ожидаемыми будущими вознаграждениями,
  > даже если конечный результат ещё не известен.
  
  > Надеюсь, это помогло вам лучше понять,
  > как в Policy Gradients осуществляется оценка действий агента.
  > Если у вас есть ещё вопросы, пожалуйста, продолжайте задавать их!
  
  //// Спасибо, Copilot.
  //// С пониманием Temporal Difference (TD) Learning у меня проблем нет.
  //// Тут все понятно, так как этот метод фактически представляет
  //// определенную "модель мира" для той же видеоигры,
  //// Пусть и существенно урезанную.
  
  //// Но Вы подсказали ключ к пониманию,
  //// так сказать, чистой reward function.
  //// Она основана на запоминании как действий агента, так и изменяющейся ситуации
  //// в результате этих действий.
  //// Тогда мне понятно,
  //// и как это работает, и как это практически можно реализовать,
  //// и как это, в принципе, можно оптимизировать,
  //// и как на основе этого начального/стартового алгоритма
  //// перейти к той же TD Learning.
  //// Мне только не понятно, почему во всех прочитанных материалах
  //// этот момент совершенно упускают в изложении.
  //// И "радостно" размахивают формулами того же дисконтирования для TD Learning.
  //// Или я еще чего-то не понимаю.
  
  > Copilot 21:32
  
  > Андрей, я рад, что мои объяснения помогли вам лучше понять
  > принципы работы reward function и Temporal Difference Learning.
  > Вы правы, иногда в академических материалах и научных статьях
  > уделяется больше внимания математическим формулам и теоретическим аспектам,
  > в то время как практические детали и интуитивное понимание
  > могут оставаться без должного внимания.
  
  > Это может быть связано с тем,
  > что авторы предполагают определённый уровень предварительных знаний у читателя
  > или считают, что детальное объяснение базовых концепций
  > выходит за рамки их исследования.
  > Также, акцент на формулах может быть обусловлен желанием
  > точно описать алгоритмы для их воспроизведения и анализа в научном сообществе.
  
  > Однако, для тех, кто только начинает изучать эти темы,
  > такой подход может создавать трудности в понимании.
  > Важно найти баланс между теорией и практикой,
  > и иногда для лучшего понимания необходимо обратиться
  > к более практическим руководствам или учебным курсам,
  > где материал излагается более доступным языком.
  
  ......
  
  //// Спасибо, Copilot. Наверно, на сегодня мои вопросы закончились.
  //// Мне нужно подумать.
  //// Но мне было бы интересно взглянуть на Вашу графическую иллюстрацию
  //// "реализации чистой reward function".
  //// Только не сочтите это какой-то насмешкой,
  //// я действительно ценю Ваши иллюстрации как дополнительный источник
  //// для мыслей и вдохновения, часто в них встречаются очень важные детали.
  //// Если Вы согласитесь на такое задание,
  //// то не забывайте про Ваш логотип и формат JPG.
  
  > Copilot 21:43
  
  > Я попробую создать это.
  
  ......
  
  //// Огромное спасибо, Copilot. Весьма симпатично.
  //// Чуть ли не мой портрет в молодости.
  
  ......
  
  //// Еще раз большая благодарность за помощь с "проклятым вопросом" , Copilot.
  //// Честное слово я бился над ним уже месяца три.
  
  "реализация чистой reward function"
  Создано с помощью искусственного интеллекта Copilot на платформе DALL" E 3.
  
реализация чистой reward function:  OIG1.fTlf8hI2Ctr4bk5tzOtA.jpg реализация чистой reward function:  OIG1.wTyGnrHV8hDpyrn.coCW.jpg
  
  
  =======
  
  28.05.2024 15:26
  
  "Обучение с подкреплением" в больших языковых системах.
  В оглавление.
  
  Просто замечательный текст сразу на стыке больших языковых моделей (LLM)
  и "обучения с подкреплением" (RL). Но RL в нем все-таки по-больше,
  и особенно много в нем таких важных "деталей",
  без знания которых понимание RL обычно остается "общеводческом" уровне.
  И хотя в тексте много формул - таков уж авторский стиль и пристрастие к точности -
  очень рекомендую уделить полчаса на чтение этого материала.
  Гарантирую, что узнаете много нового, интересного и неожиданного:
  
  "Как мы готовим RL для Alignment в больших языковых моделях:
  опыт команды YandexGPT".
  Автор: cydoroga (Темирчев Павел)
  https://habr.com/ru/companies/yandex/articles/817391/
  28 мая 2024 в 12:00
  
  Текст очень качественный, так что ничего кроме самых завернутых формул
  и чисто математических изысков урезать рука не поднимается.
  Так, что можно смело читать первоисточник.
  Мои комментарии по тексту будут больше "вопросительными"
  - мне нужно самому очень хорошо осмыслить весь этот материал,
  чтобы не делать сильно опрометчивых замечаний,
  кроме пары мест, мимо которых просто невозможно пройти просто так.
  
  //// Начало цитирования.
  
  Сегодня через API стала доступна новая модель YandexGPT 3 Lite.
  https://habr.com/ru/companies/yandex/news/817545/
  Одним из ключевых этапов её обучения,
  как и в случае с другими недавними моделями,
  стал этап Alignment (выравнивания),
  включающий в том числе стадию обучения с подкреплением - RL.
  Пожалуй, без этого этапа мы бы не смогли добиться такого роста в качестве,
  который был необходим для запуска новых возможностей и сервисов
  (например, Нейро).
  Поэтому эту статью мы полностью посвятим особенностям выравнивания моделей.
  
  На тему Alignment и RL было написано уже немало статей.
  Кажется, любой ML-инженер уже, так или иначе, сталкивался или читал о них.
  Поэтому мы хоть и напомним базовую информацию,
  но всё же сфокусируемся на тех деталях реализации, которые не на слуху.
  
  Небольшое предисловие
  
  Сегодня мы будем говорить про одну из стадий обучения
  языковых моделей-ассистентов.
  Этот этап называется alignment (выравнивание)
  и идёт вслед за этапом предварительного обучения модели (pretrain).
  //// По-видимому, "instruction-tuning" и "alignment" в данном случае
  //// или одно и то же, просто названное по разному,
  //// либо, все-таки, есть определенное различие, и в YandexGPT
  //// "instruction-tuning" каким-то чудесным образом не потребовалось
  //// выделять в отдельный этап обучения.
  
  Мы практически совсем не будем говорить об архитектуре нейронных сетей:
  все нейронные сети в этой статье - это трансформеры.
  Нам достаточно будет знать,
  что языковые модели получают на вход текст в токенизированном виде
  и выдают вероятность встретить тот или иной токен следующим.
  Если вы не знаете, что такое <токен>,
  то просто считайте, что токены - это слова.
  То есть нейронная сеть смотрит на входной текст
  и выдаёт вероятности для всех возможных слов:
  с каким шансом какое слово будет следующим.
  
  На стадии pretrain языковая модель учится на огромном количестве текстов из интернета:
  она изучает общие правила построения предложений,
  общие знания, которые можно найти в интернете.
  После этой стадии модель умеет продолжать тексты так,
  как это было в обучающей выборке.
  //// Этот этап обучения более-менее понятен и основан на обычном методе
  //// обратного распространения ошибки при неудачном предсказании.
  
  Если мы хотим получить языковую модель-помощник,
  использовать pretrain-модель как есть не получится
  - она не сможет отвечать на запросы пользователя,
  хоть в ней и содержатся знания всего интернета.
  Вместо этого модель будет пытаться этот запрос продолжать.
  //// Именно поэтому меня и заинтересовал этап "instruction-tuning"
  //// как переход от модели "предсказателя/оракула"
  //// к модели "собеседника".
  
  Процесс превращения просто умной модели в модель-ассистента
  и называется alignment - выравнивание.
  //// Хорошо, согласимся с таким термином.
  //// Важна суть того как это реализуется.
  Мы будем пытаться <выравнивать> ответы модели
  с нашими человеческими ожиданиями.
  Команда Anthropic хорошо описала свойства,
  https://arxiv.org/abs/2212.08073
  которыми должны обладать ответы такой модели.
  Речь о трёх H:
  
  Helpful - ответ должен решать задачу пользователя.
  
  Harmless - ответ не должен вредить пользователю.
  
  Honest - ответ должен быть фактически корректным.
  
  //// Но, наверно, сначала, все-таки, надо научить модель просто "отвечать",
  //// иначе она просто будет пытаться продолжить запрос пользователя
  //// наиболее вероятными токенами.
  
  Обычно подобного поведения от модели мы добиваемся в два этапа выравнивания:
  
  Обучение с учителем на выборке, собранной людьми.
  
  Дообучение модели с подкреплением (RLHF),
  которое позволяет не просто выучить <определённое поведение>,
  но максимизирует удовлетворение пользователя от общения с моделью.
  
  Об этих двух этапах мы и поговорим сегодня подробнее.
  
  Подробнее о стадии SFT
  
  На стадии обучения с учителем (Supervised FineTuning, SFT)
  мы будем дообучать pretrain-модель на парах <запрос - ответ>,
  чтобы модель начала своё превращение в ассистента.
  //// Хорошо, принимается термин "ассистент".
  Основные сложности и тонкости этого этапа заключаются
  в сборе хорошей выборки для обучения.
  Для SFT-стадии нам нужна разнообразная выборка запросов,
  которые могли бы поступить от пользователей,
  а также правильные ответы на каждый из этих запросов.
  
  Ситуация с запросами несколько проще, чем с ответами:
  их можно как написать человеческими руками,
  так и собрать в интернете в полуавтоматическом режиме.
  Запросы для первых этапов обучения YandexGPT
  мы отчасти собирали с помощью внутренних конкурсов:
  просили энтузиастов придумать,
  как и откуда собрать большое количество возможных запросов,
  или даже придумать запросы самим.
  Получилось очень даже неплохо.
  
  С правильными ответами всё куда прозаичнее
  - их мы собираем при помощи разметки людьми.
  Для этого нужно формализовать критерии helpful, harmless, honest
  в законченную инструкцию,
  какими именно характеристиками должен обладать ответ.
  Дальше мы разбиваем запросы по категориям
  и отдаём запросы каждой категории в руки опытных специалистов,
  чтобы они написали верный ответ.
  
  На полученной таким образом выборке дообучаем pretrain-модель
  и получаем так называемую SFT-модель.
  Чтобы обучаемая модель могла понять,
  где в тексте заканчивается запрос пользователя
  и начинается желаемый ответ,
  мы разделяем запрос и ответ спецтокеном.
  //// Вот он ключ обучения "instruction-tuning" - "спецтокен",
  //// который или жестко прописан в алгоритм работы модели,
  //// либо каким-то образом обеспечивается на этапе обучения.
  //// Вот и следующий вопрос, который требует уточнения.
  //// И опять, скорее всего, ответ придется спрашивать у ИИ-системы.
  На этапе использования модели в неё будет подаваться
  запрос + спецтокен
  и модель сразу поймёт,
  что следующим токеном ей нужно отвечать на запрос.
  //// Т.е. судя по всему "спецтокен" это обучаемый элемент,
  //// и тут же напрашивается мысль о том,
  //// что таких спецтокенов может быть далеко не один единственный вариант.
  Здесь нужно сказать пару слов про выбор модели:
  обычно мы выбираем лучшую модель по целевой метрике на валидации.
  В задаче выравнивания моделей сложно придумать автоматизированную метрику
  - большинство из них непоказательны.
  Поэтому выбор модели обычно проводится тоже не без помощи человеческих рук:
  на не слишком большой отложенной выборке запросов
  мы генерируем ответы обучаемой моделью,
  а также моделью-бейзлайном.
  Люди же решают, чей ответ был лучше,
  и вычисляют так называемое side-by-side превосходство (sbs).
  В силу использования не слишком больших выборок
  для сравнения обязательно необходимо убеждаться
  в статистической значимости прироста.
  Например, можно использовать биномиальный статистический тест.
  https://en.wikipedia.org/wiki/Binomial_test
  
  И писать ответы, и оценивать качество ответов должны специалисты,
  так как различать нюансы в ответах модели на сложные темы очень непросто.
  В этом нам помогают AI-тренеры,
  которые и хорошо разбираются в узких областях,
  и могут написать грамотный текст.
  
  Считается, что на стадии выравнивания, в частности - SFT,
  языковая модель не получает новых знаний,
  а лишь учится использовать уже имеющиеся:
  совершать поиск в массиве уже выученной информации и правильно её доносить.
  //// Ну, как минимум, спецтокенам она обучается,
  //// и, соответственно, различным вариантам "манеры реакции" на запрос.
  В исследованиях показано,
  что использование небольшой выборки с высоким качеством разметки на этом этапе
  приводит к лучшим результатам,
  чем использование больших выборок сомнительного качества
  (LIMA: Less Is More for Alignment ).
  https://arxiv.org/abs/2305.11206v1
  Более того, исследователи из Google Research показали,
  что попытка вложить новые знания в голову модели на этапе SFT
  может привести к галлюцинациям
  - поведению, когда модель с полной уверенностью говорит полную ерунду
  и иногда очень правдоподобную
  (Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations? ).
  https://arxiv.org/abs/2405.05904
  //// Интересное наблюдение. Может быть оно связано с тем,
  //// что обучение "манерам реакции" связано не с добавлением новых знаний,
  //// а реструктуризацией старых, и добавление новых знаний попадает
  //// не в тот "воздушный поток", который в основном работает на данном этапе.
  
  Что дальше?
  Обычно после стадии SFT модель получается уже достаточно умной и <выровненной>,
  чтобы быть ассистентом.
  //// Т.е. это точно "instruction-tuning".
  Однако можно лучше: данных для обучения SFT всегда мало,
  а если вычищать <грязные>, то ещё меньше.
  
  Оказывается, можно ещё сильнее <выровнять> модель с нашими ожиданиями
  без использования прямой разметки - написания ответов людьми.
  Этот этап называется RL from Human Feedback.
  
  Подробнее об RLHF
  
  Есть такая область машинного обучения - обучение с подкреплением
  (Reinforcement Learning, RL).
  Это как обучение с учителем, но учитель тут - это не правильный ответ,
  а наказание или награда, сваливающаяся на голову студента.
  
  Про обучение с подкреплением можно думать как про обучение собак путём дрессировки.
  Собака получает от дрессировщика команду,
  но не получает прямых указаний, как именно ей нужно передвигать лапки,
  чтобы команду выполнить.
  Вместо этого собака исследует, что она могла бы сделать,
  и в случае успешной попытки получает подкрепление - еду.
  
  Формально специалисты по RL любят говорить
  про марковские процессы принятия решений
  (Markov Decision Process, MDP),
  описывающие взаимодействие студента (агента) и среды,
  которая поставляет обучающий сигнал.
  В MDP агент наблюдает текущее состояние среды s и выбирает действие a
  в соответствии со своей стратегией поведения \pi(a|s)
  (в англоязычной литературе стратегия называется policy,
  и это слово часто переводят на русский, как <политика>,
  что неверно, но общеупотребимо).
  Среда на действие реагирует изменением своего состояния на s',
  а также некоторой наградой r для агента
  - именно награда и является обучающим сигналом в MDP.
  Марковское свойство тут заключается в том,
  что, если агент знает текущее состояние среды,
  ему не нужно знать об истории взаимодействия,
  чтобы выбрать оптимальное действие.
  //// Тут, наверно, стоило бы уточнить, что фактически в такой
  //// "марковской интерпретации" необходимая для принятия решений "история",
  //// чаще всего "прячется" в усложненное "состояние среды".
  //// Конечно, эта формулировка далека от математически правильной,
  //// но, по факту, так оно и есть. И я просто не умею это грамотно сформулировать.
  //// Просто, для тех же трансформеров, контекстное окно,
  //// включающее и запрос пользователя и спецтокен и какие-то уже
  //// сгенерированные токены, говорить о какой-то "чистой марковости",
  //// на мой взгляд "чистое лукавство".
  
  Про взаимодействие пользователя с ИИ-ассистентом можно тоже думать
  в контексте марковского процесса принятия решений.
  Состояние среды s - это текущий текст в беседе,
  начинающийся с запроса пользователя
  (в начале взаимодействия это просто запрос пользователя).
  Действие агента - это, конечно же, ответ языковой модели.
  Интересно, что такое награда в этой задаче.
  Об этом подробно мы поговорим в следующей главе.
  
  Из соображений простоты в задаче alignment
  обычно рассматривается одношаговое взаимодействие:
  агент видит запрос пользователя
  (или какой-то диалог пользователя с ИИ, заканчивающийся репликой пользователя)
  и пытается ответить так,
  чтобы получить максимальное количество награды за этот ответ.
  //// "Из соображений простоты" это некая "магическая формулировка",
  //// обосновывающая использование определенного набора математических формул,
  //// даже если по факту они оказываются неработающими,
  //// а работает нечто иное, этими формулами никак не охватываемое.
  //// Ну это так - размышления/наблюдения дилетанта.
  
  Существует множество алгоритмов RL, отличающихся теми или иными особенностями.
  //// Но также построенными на "марковском основании",
  //// так как другого "основания" пока для формул не найдено.
  Дальше в статье мы рассмотрим три алгоритма,
  наиболее подходящих для решения задачи выравнивания.
  
  Если обучение с учителем больше похоже
  на <запихивание> знаний эксперта в голову модели,
  то на этапе обучения с подкреплением модель учится
  на собственном опыте генерации текстов.
  На этом этапе модель может <переусвоить> формулировки,
  внесённые на этапе SFT в более приятном для себя виде.
  Эффект галлюцинаций, которые могут появиться во время SFT,
  на этапе RL снижается,
  так как модель быстро понимает, что ответ <не знаю>
  ведёт к большей награде, чем ответ неправильный.
  
  А судьи кто?
  
  При наличии идеальной функции награды формализм RL
  позволяет находить оптимальные генеративные модели
  без использования дополнительной прямой разметки (написанных людьми ответов),
  нужен лишь пул хороших возможных запросов.
  Однако будет лукавством сказать, что никакой разметки для RL не нужно,
  - ведь у нас нет никакой идеальной награды!
  
  Откуда её - награду - вообще взять?
  Первое, что приходит в голову,
  - вновь посадить людей размечать данные, но уже в куда более щадящем режиме.
  Давайте мы для большой выборки запросов сгенерируем по одному ответу
  с помощью нашей SFT-модели с прошлой стадии.
  А людей попросим оценить, насколько был хорошим ответ:
  пусть ставят оценки от 1 до 5 в зависимости от крутости.
  Затем возьмём ту же SFT-модель и заменим ей голову на необученный линейный слой.
  Нейронная сеть устроена так,
  что её последний слой выдаёт вероятностное распределение над токенами
  - его меняем на обычный линейный слой, который выдаёт одно число.
  Это и будет наша модель награды:
  будем скармливать ей запрос + ответ и обучать так,
  чтобы на выходе была та оценка,
  какую в среднем ставят люди такому ответу.
  //// В принципе понятно, подход интересный, проблема в деталях.
  //// Модель изначально обучена на "выдачу" по одному токену,
  //// соответственно, и такой ее модифицированный вариант будет выставлять
  //// по отдельной "оценке" на каждый сгенерированный токен,
  //// а оценки людей относятся к полному "многотокенному ответу".
  //// И как это связать? Опять чего-то не понимаю.
  //// Т.е. надо как-то обучить "оценщика" оценивать ответ целиком,
  //// а не "по-токенно", или, все-таки, можно и так?
  
  При всей прямолинейности этот подход не лишён недостатков:
  
  AI-тренерам часто сложно выбрать правильную оценку из пяти опций.
  
  На этапе дизайна системы выставления оценок сложно определиться с тем,
  что такое <отлично>, <хорошо> и так далее.
  Если прогадать, то может случиться так,
  что почти все оценки оказались, например, хорошими.
  Тогда модель не сможет выучить, что именно делает эти ответы хорошими.
  И разметку придётся пересобирать, а это дорого.
  
  Хотя такой подход и используется,
  обычно применяется его более сложная модификация,
  упрощающая разметку для AI-тренеров:
  куда проще сравнить два ответа и выбрать лучший,
  чем выставлять сухую оценку.
  
  Будем делать так:
  на каждый запрос в выборке генерируем по два ответа
  и просим AI-тренеров для каждой пары подписать, какой ответ был лучше.
  Так и размечать проще, и нет проблемы,
  что модель не сможет различать хорошие ответы.
  Если они одинаково хороши,
  то это тоже можно явно указать при разметке.
  
  Если вы вдруг вздумали собирать разметку для собственной LLM-компаньонки,
  то вам стоит знать про синдром утёнка.
  https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5
  Утята готовы принять за свою маму первый подходящий предмет, который увидят.
  Так и AI-тренеры, подобно утятам,
  больше любят первый прочитанный ответ при прочих равных.
  Обязательно перемешивайте порядок ответов случайным образом,
  прежде чем показывать AI-тренеру,
  иначе можете уплыть не туда.
  //// А в какой ситуации этот "синдром утенка" можно обратить на пользу?
  //// Наверняка, что-то такое полезно использовать на определенных этапах обучения,
  //// например, для обучения минимально правильным действиям "по инструкции".
  //// Есть о чем подумать.
  
  ......
  
  Более сложный вопрос:
  как на такой выборке обучить модель награды?
  Тут есть два наиболее популярных пути.
  
  Путь первый. Модель Брэдли-Терри
  
  Будем обучать всё ту же модель,
  которая на запрос + ответ выдаёт одно число (награду),
  но новым способом.
  Явной разметки, какая награда какому ответу соответствует, у нас теперь нет.
  Но мы можем попросить модель выдавать хорошему ответу число побольше,
  а тому ответу, который хуже, - поменьше.
  Для этого введём вероятностную модель,
  где вероятность (уверенность модели),
  что ответ a лучше ответа b выражается следующей формулой:
  
  P(a > b | s) = \sigma( r_\psi (s, a) - r_\psi (s, b) )
  
  Здесь s - это запрос, на который даны ответы,
  r_\psi - это обучаемая нейронная модель награды с параметрами \psi ,
  а \sigma - функция, отображающая ничем не ограниченную разность в интервал (0, 1).
  Это нужно, так как вероятность должна жить в этом интервале:
  
   \sigma(x) = \frac{1}{1 + \exp(-x)}
  
  .......
  
  Таким образом, уверенность модели,
  что ответ a лучше ответа b
  тем больше, чем больше разница в награде,
  которую модель даёт этим двум ответам.
  
  Обучение модели проводится методом максимизации правдоподобия:
  мы будем подбирать параметры \psi так,
  чтобы вероятность для собранной AI-тренерами выборки была максимальной.
  С целью стабилизации всяких численных проблем
  вероятность обычно логарифмируют,
  что ведёт нас к следующей задаче оптимизации:
  
  \sum_{ (s, winner, loser) \in \mathbf{D} } \log \sigma( r_\psi (s, winner) - r_\psi (s, loser) ) \rightarrow \max_\psi
  
  То есть обучение сводится к простому обучению с учителем,
  но со специфической функцией ошибки.
  
  Экспериментальным путём мы пришли к пайплайну,
  в котором модель награды учится в два этапа:
  
  Сначала учим на <грязных> данных, собранных в полуавтоматическом режиме.
  
  Дообучаем награду на чистых данных, полученных от AI-тренеров.
  
  Если со вторым этапом всё на данный момент должно быть прозрачно,
  то вот про первый пока не понятно, на каких данных его проводить.
  Оказывается, что довольно много пар вида (запрос)+(лучший ответ, ответ похуже)
  можно бесплатно раздобыть в интернете.
  
  Многие сервисы в интернете позволяют ранжировать ответы пользователей на какие-то запросы.
  Например, здесь же на Хабре,
  хабровчане могут оценить ответы пользователей в комментариях,
  и мы буквально можем выбрать пару
  (хороший комментарий, плохой комментарий) в ответ на (запрос) - пост.
  Такая же логика может быть применена к небезызвестному StackOverflow.
  
  А ещё можно найти много задачников,
  где для вопроса предлагается выбрать правильный ответ из списка
  и где правильный ответ заранее известен.
  Тут тоже несложно собрать выборку с двумя ответами на вопрос, где один - лучше.
  
  Немного подумав, можно напарсить большую выборку сравнений сомнительного качества
  - вот она и пойдёт в первый этап обучения модели награды.
  //// А вот интересно, явно ведь модель "оценщика" обучают на "целом ответе",
  //// т.е. законченной "цепочке токенов", а если к этой цепочке применить
  //// "диффузию"/"маскирование" - то, что это может дать?
  
  Иногда бывает так, что вы уже собрали очень большую выборку попарных разметок,
  и в этой выборке много тривиальных примеров,
  на которых модель награды легко понимает, какой ответ лучше.
  Это может портить качество модели награды,
  так как она во время обучения будет больше внимания уделять
  многочисленным простым парам
  и не будет хорошо отвечать на сложных парах.
  Чтобы этого избежать, можно прибегнуть к фильтрации данных:
  обучаем модель награды на всех данных и выкидываем из выборки те пары,
  на которых уверенность модели максимальная,
  оставляя самые сложные.
  //// Любопытно. Надо запомнить. Прореживание обучающей выборки
  //// по критерию "малополезности", а полезность оценивается по "уверенности".
  //// Получается, что имеет смысл вести обучение
  //// последовательно увеличивая сложность обучающих примеров.
  //// При чем, при этом не обязательно прореживать обучающий датасет,
  //// а, наверно, лучше, все-таки, снижать для таких "уверенных" ответов,
  //// так сказать, заслуженную награду.
  //// Таким образом можно автоматически корректировать обучение
  //// по принципу "повторение мать учения", в том смысле,
  //// что в процессе обучения модельможет "дрейфовать в сторону"
  //// от уже выученных "знаний"/"умений" и такие примеры
  //// фактически являются "контрольными", и если надо,
  //// то тут же становятся "корректирующими".
  На этом отфильтрованном датасете обучаем новую модель награды.
  Но с этим подходом нужно быть осторожным,
  так как можно и просадить качество,
  если оставить слишком маленькую и нерепрезентативную выборку.
  Более того, в отфильтрованную выборку могут попасться
  не только сложные примеры,
  но и откровенные выбросы.
  //// Ну, про выбросам, наверно, стоит тоже доработать методику обучения.
  //// Впрочем как и для "сложных примеров", тут явно напрашивается
  //// некая "балльная" оценка сложности примера.
  //// Это, кстати, вполне согласуется с изложенной выше методикой
  //// использования простых примеров.
  
  Путь второй. Модель, которая ест сразу два запроса
  
  Модель Брэдли-Терри вносит некоторые ограничения в то,
  какая может выучиться награда.
  Одно из основных ограничений - это предположение, что награда транзитивна.
  Говоря простыми словами, в модели Брэдли-Терри не бывает циклов в предпочтениях:
  не может быть такого, что ответ a > b, b > c, но c > a.
  
  Может показаться абсурдным пожелание разрешить награде
  формировать циклы в предпочтениях,
  но теория социального выбора говорит,
  что мы, люди, именно так, нетранзитивно, выбор и делаем.
  
  Пусть существует некоторая группа AI-тренеров,
   а также некоторое множество различных ответов на запрос.
  Каждый AI-тренер может отранжировать ответы по своему предпочтению
  (например, a > b > c )
  - для каждого отдельно взятого AI-тренера транзитивность соблюдена.
  Но как только мы ответы разных AI-тренеров агрегируем,
  вполне может сложиться цикл a > b, b > c, но c > a
  Это явление называется парадоксом Кондорсе
  https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%BE%D0%BA%D1%81_%D0%9A%D0%BE%D0%BD%D0%B4%D0%BE%D1%80%D1%81%D0%B5
  и широко обсуждается обычно в контексте демократических выборов.
  
  На самом деле, позволить модели награды быть достаточно гибкой,
  чтобы она могла воспроизвести возможные нетранзитивности в выборе AI-тренеров,
  несложно.
  Достаточно обучить нейронную сеть r_\psi(s, a, b),
  которая вместе с запросом принимает на вход не один,
  а сразу два ответа и возвращает уверенность модели,
  что a > b.
  Для обучения такой модели у нас как раз имеется выборка с разметкой,
  кто из ответов был лучше.
  Обучаем решать классическую задачу классификации.
  //// Еще одна нейромодель, явно выстраивается определенная система моделей,
  //// ориентированных на процесс обучения итоговой модели.
  //// Но вот, что интересно для таких моделей "внутреннего использования"
  //// в принципе не важна "абсолютная точность" тех же 80% вполне может хватать.
  //// И тут напрашивается парочка сопутствующих мыслей,
  //// одна - можно ли приспособить эти "временные модели" к работе уже
  //// в основном режиме для схожих целей. Ну, не пропадать же добру.
  //// А вторая возвращает к размышлениям об "эвристиках" реализуемых нейросетями.
  //// По сути, такие "внутренние нейросети" можно рассматривать
  //// как встроенные эвристики, и они точно могут пргодиться на инференсе.
  
  У такой модели, правда, есть существенный недостаток:
  с помощью неё можно лишь сравнивать разные модели
  - абсолютного значения награды она не выдаёт.
  А ещё, во время обучения такой модели нужно как-то решать проблему несимметричности:
  r_\psi(s, a, b) \neq 1 - r_\psi(s, b, a).
  Кроме этого, такую модель награды просто дороже инферить,
  так как в неё подаётся сразу два ответа вместо одного.
  
  В процессе разработки YandexGPT мы проводили эксперименты
  с потенциально нетранзитивной моделью награды.
  Однако показать её превосходство по сравнению с моделью Брэдли-Терри не смогли
  - они работали одинаково хорошо.
  В силу сложности использования нетранзитивной модели,
  мы остановились на классической модели Брэдли-Терри.
  //// Тут похоже еще "непаханое поле" для самых разных экспериментов/техник.
  
  Для чего (ещё) нужна модель награды?
  
  Вот, наконец, у нас на руках есть мерило успеха
  - оценщик качества ответов генеративной модели.
  Конечно, основная идея, что с этой моделью делать, тривиальна:
  давайте забабахаем дообучение с подкреплением SFT-модели,
  чтобы максимизировать эту самую награду.
  И мы, конечно же, обсудим этот подход далее.
  
  Однако применение модели награды не ограничивается одним лишь RL.
  Пусть у вас есть модель награды и какая-то SFT-модель,
  и вот вы насобирали новых данных и планируете переобучить SFT
  на новом датасете.
  Хорошая идея - смотреть во время обучения не только на графики лосса на валидации,
  но ещё и на награду.
  Для этого во время валидации нужно на запросы из валидационной выборки
  генерировать ответы обучаемой моделью
  и считать среднюю награду для этих ответов.
  
  Часто оказывается так, что ранний останов по награде
  случается не на той итерации, что ранний останов по лоссу.
  Мы используем этот нехитрый трюк в YandexGPT
  и стабильно получаем SFT-модели более высокого качества.
  //// Завяжем узелок на память.
  //// Критерий "награды" может быть эффективнее критерия "стоимости"/ошибки.
  //// Впрочем, интуитивно, такое предположение было с самого начала
  //// изучения материалов по "обучению с подкреплению",
  //// слишком уж "ошибка" больше "теоретическая оценка", а не "практическая".
  
  Здесь и далее мы не раз будем говорить про генерацию ответов моделью
  с целью валидации или для обучения.
  Эффективная по скорости генерация - залог успеха.
  //// Это да скорость обучения в настоящее время это "наше фсе".
  //// и если генерация входит в процесс обучения,
  //// то, естественно, имеет смысл сделать ее более быстрой.
  //// Но это отнюдь не главное слагаемое "времени обучения",
  //// куда больше это время зависит от стратегии и такики обучения,
  //// что авторы этого материала хорошо понимают.
  Существует целый ряд библиотек,
  позволяющих скомпилировать вашу модель в формат,
  пригодный для быстрого исполнения.
  Например, TensorRT, поддержанный в Torch.
  В Яндексе мы используем собственный внутренний фреймворк
  для быстрого исполнения моделей.
  
  Не всегда конвертация модели в <быстрый> формат стоит свеч.
  Например, если вы планируете генерировать тексты на каждой итерации валидации,
  временные затраты на конвертацию могут превзойти затраты
  на не очень эффективную генерацию,
  так как конвертировать модель придётся каждый раз заново.
  Здесь можно воспользоваться правилом:
  если веса модели меняются редко или вовсе не меняются,
  можно конвертировать,
  а если меняются часто - лучше инферить на обычном Torch.
  По этой логике генерацию для валидации во время обучения
  мы делаем без конвертации,
  а вот модель награды держим в <быстром> формате,
  потому что она не меняется.
  //// А вот тут я задумался. Почему-то мне кажется,
  //// что как раз оценщик стоит периодически менять,
  //// точнее согласовывать его изменения с уровнем обучения обучаемой модели.
  //// Что-то я еще не понимаю. "Учитель" должен учиться быстрее/сильнее "ученика",
  //// чтобы "вытащить" его на новый уровень.
  //// А если он практически не меняется, то это просто "костыль",
  //// который на определенном этапе будет тормозить развитие "ученика".
  //// Возможно, стоит пересмотреть задачу "оценщика".
  
   - Cross-Entropy Method
  
  Наконец, можно поговорить и об основном способе использования модели награды
  - обучения генеративной модели, которая бы набирала много награды.
  
  Начнём с самого простого алгоритма,
  в нашей команде мы его называем <обучение с подкреплением для бедных>.
  Подход предельно прост в реализации,
  для него нам понадобится выборка релевантных запросов:
  
  генерируем SFT-моделью для каждого запроса по N ответов,
  
  выбираем лучший ответ по награде для каждого запроса,
  
  дообучаем SFT-модель на полученных парах запрос + лучший ответ.
  //// Т.е. фактически пытаемся "закрепить" наиболее удачные,
  //// но в основе своей фактически случайные ответы.
  //// Как там говорил Дуремар "еще десять тысяч ведер и ключик в наших руках".
  //// Как-то это выглядит очень "деревянно". Времени точно потребуется много.
  //// Или я опять что-то не понимаю.
  //// Но какого-то осмысленного использования "награды",
  //// кроме бинарного "лучше"/"хуже", в упор разглядеть не могу.
  //// Или такого рода "оценщик" ничего лучшего и обеспечить не может.
  
  При всей простоте из этого метода можно выжать довольно неплохой профит.
  Здесь для генерации и оценки как раз осмысленно использовать
  сконвертированные в <быстрый> формат генеративную модель и модель награды.
  
  Среди RL-специалистов этот метод больше известен под именем
  Cross-Entropy Method (CEM / CE-RL).
  https://en.wikipedia.org/wiki/Cross-entropy_method
  Применение CEM к RL - это, на самом деле, частный случай.
  CEM - это общий алгоритм оптимизации,
  относящийся к семейству генетических алгоритмов.
  В двух словах CEM можно описать так:
  генерируем множество точек и выбираем из них лучшие,
  затем двигаем генератор точек в сторону лучших.
  
  Важно понимать, что CEM может быть эффективен лишь для моделей,
  обладающих ненулевым разнообразием ответов.
  Если вы отвечаете одно и то же, то выбирать лучший ответ бессмысленно.
  //// Важное уточнение.
  
  Теоретически, ничего не мешает повторять этот подход
  на протяжении нескольких последовательных итераций улучшения модели.
  Но на практике это работает так себе:
  уже после первой итерации модель довольно сильно теряет в разнообразии ответов,
  и потому выбор лучшего ответа перестаёт её улучшать.
  //// Т.е., фактически, результаты всех усилий по "внутреннему оценщику"
  //// используются только один раз. Не, "это не наш метод".
  //// "Мы не настолько богаты, чтобы делать дешевые/одноразовые нейронки".
  
  Идея <давайте сдистиллируем хорошие ответы модели назад в модель>
  на самом деле довольно общая.
  При этом крутые ответы не обязательно должны быть получены
  случайной генерацией разных ответов.
  Можно получить хорошие ответы, применив метод Chain-of-Thought
  https://arxiv.org/abs/2201.11903
  где модель посредством подводок генерирует ответ в несколько шагов,
  <проговаривая свои мысли вслух>.
  А можно применить тяжёлую артиллерию - Monte-Carlo Tree Search (MCTS)
  https://www.nature.com/articles/nature16961
  - для направленного поиска по дереву ответов с высокой наградой.
  //// Тут мне надо еще много чего почитать - что это такое - даже не догадываюсь.
  
  Почти в любом курсе по RL вам скажут,
  что в RL переобучения не бывает.
  Имеется в виду, что если агент научился набирать много награды для какой-то задачи,
  то специальным образом его валидировать не нужно
  - он уже решает задачу максимизации награды.
  В языковом моделировании это правило не работает,
  так как агент видит не все возможные запросы,
  а лишь какое-то их подмножество.
  Поэтому критически важно валидировать обучаемую с помощью RL языковую модель
  на отложенной выборке запросов.
  
   - Proximal Policy Optimization
  
  От простого к сложному:
   при всей простоте имплементации довольно сложно заставить
  найти оптимальную в смысле награды модель.
  Основных причин две:
  
  генерировать N гипотез на каждый запрос для сравнительно большой выборки
  весьма дорого по времени и ресурсам;
  //// А как, вообще, этого добиваться? Играться с "температурой"?
  
  без хитрого контроля модель быстро теряет в разнообразии ответов,
  и последующие итерации метода не ведут к улучшению.
  //// Вот об этом и была речь в тезисе, что нужно более "продвинутый оценщик",
  //// а не раз и навсегда как-то обученная нейронка.
  //// Последовательно развивающийся "контроль" и, соответственно,
  //// более продуманная последовательность обучения,
  //// наверняка, не самый плохой путь развития.
  
  Здесь на помощь приходят
  более теоретически совершенные алгоритмы обучения с подкреплением.
  //// Насколько важна "теоретическая совершенность" в этом случае?
  Для задачи alignment обычно принято использовать алгоритмы
  из семейства policy gradients.
  
  Идея простая:
  мы хотим максимизировать среднюю награду,
  которую набирает наш обучаемый студент.
  Давайте посчитаем градиент этой средней награды
  и изменим веса модели в направлении этого вектора,
  то есть применим самый обычный градиентный подъём
  (это как градиентный спуск, но для максимизации, а не минимизации функций).
  //// На мой взгляд, проблема в том, что градиент "весов модели"
  //// можно посчитать только по отношению к отдельному токену,
  //// а вот что считать для полного ответа, как-то не очень понятно.
  //// Опять я чего-то не понимаю.
  Формально, среднюю награду агента можно записать так:
  
  J(\pi_\theta) = \mathbf{E}_{s \sim \mathcal{D} } \mathbf{E}_{a \sim \pi_\theta(a | s)} r_\psi(s, a)
  
  Да, \mathbf{E} здесь - это матожидание, но не нужно пугаться!
  Сегодня нам достаточно про него думать как про простое усреднение по большому
  (бесконечному) количеству примеров.
  Например, \mathbf{E}_{s \sim \mathcal{D} }
  - это усреднение по большому количеству запросов s из выборки \mathcal{D}.
  А \mathbf{E}_{a \sim \pi_\theta(a| s)}
  - это усреднение по большому количеству ответов модели на запрос s.
  Здесь за \pi_\theta мы обозначили собственно обучаемую генеративную языковую модель
  с параметрами \theta.
  Получается, \pi_\theta(a | s) - это вероятность ответа a на запрос s.
  Именно такие вероятности нам выдают языковые модели.
  //// Модель выдает вероятность "следующего токена",
  //// если, конечно, это соответствует реальности, а не нашим представлениям.
  //// Как тут пересчитываются вероятности "цепочки токенов"
  //// в "общую вероятность" ответа - как-то даже формул не приходилось видеть.
  //// А ведь ответы мы хотим видеть разнообразные, а не соответствующие,
  //// какому-то "клише" или даже "паттерну".
  //// Что-то тут с "теоретической обоснованностью" как-то не очень.
  //// Или я опять что-то принципиальное и очень простое не понимаю.
  
  Сложная часть метода - как, собственно, найти производную этой штуки по \theta.
  Неприятно то, что \theta сидит под матожиданием.
  Однако нерешаемых проблем почти не бывает,
  и, если напрячь матапарат,
  можно получить не слишком неприятную формулу для производной:
  
  \nabla_\theta J(\pi_\theta) = \mathbf{E}_{s \sim \mathcal{D} } \mathbf{E}_{a \sim \pi_\theta(a | s)} \nabla_\theta \log \pi_\theta(a | s) r_\psi(s, a)
  
  Подробнее про формулу градиента
  
  Чтобы понять, откуда взялась такая формула для градиента,
  вспомнить, что такое математическое ожидание, всё же придётся.
  Распишем матожидание по ответам в функционале,
  который мы собираемся дифференцировать:
  
  J(\pi_\theta) = \mathbf{E}_{s \sim \mathcal{D} } \sum_a \pi_\theta(a | s) r_\psi(s, a)
  
  Суммирование здесь происходит по множеству всех возможных ответов,
  коих бесконечно (счётно) много.
  Попробуем взять производную по \theta:
  
  \nabla_\theta J(\pi_\theta) = \mathbf{E}_{s \sim \mathcal{D} } \sum_a \nabla_\theta \pi_\theta(a | s) r_\psi(s, a)
  
  С полученным выражением есть проблема:
  раньше у нас было матожидание по ответам, а теперь - сумма.
  Эта сумма не является математическим ожиданием,
  потому что под суммой должны быть вероятности,
  а тут - градиенты вероятностей.
  Матожидания лучше сумм, так как матожидания мы умеем оценивать
  методом Monte-Carlo (усреднением, по сути),
  а вот суммы - нет.
  Чтобы вернуть желаемое матожидание,
  предлагается воспользоваться так называемым log-derivative трюком
  (трюк с производной логарифма):
  
   \nabla_\theta \pi_\theta(a|s) = \pi_\theta(a|s) \nabla_\theta \log \pi_\theta(a|s)
  
  Эту формулу несложно получить,
  если расписать формулу для производной логарифма.
  Собственно, её и предлагается подставить в формулу производной оптимизируемого функционала:
  
  \nabla_\theta J(\pi_\theta) = \mathbf{E}_{s \sim \mathcal{D} } \sum_a \pi_\theta(a|s) \nabla_\theta \log \pi_\theta(a|s) r_\psi(s, a)
  
  Теперь под суммой есть вероятности, и можно выделить матожидание назад,
  как мы и хотели:
  
  \nabla_\theta J(\pi_\theta) = \mathbf{E}_{s \sim \mathcal{D} } \mathbf{E}_{a \sim \pi_\theta(a | s)} \nabla_\theta \log \pi_\theta(a | s) r_\psi(s, a)
  
  Ч.Т.Д.
  
  //// Ч.Т.Д, что я не понимаю самой направленности этих "математических изысков".
  //// Меня смущает разложение отдельных градиентов по весам,
  //// а любителей математики "подсчет мат. ожидания".
  //// И так постоянно.
  
  В целом, уже из этой формулы можно сообразить рабочий алгоритм
  для максимизации средней награды.
  Но давайте остановимся и подумаем, что эта формула нам говорит.
  Если долго и пристально на неё смотреть,
  можно увидеть, что этот градиент нам говорит изменять
  вероятность ответа a пропорционально его награде r_\psi(s, a).
  
  Если награда отрицательная, то вероятность уменьшаем,
  если положительная - увеличиваем,
  а если сильно положительная - сильно увеличиваем.
  
  Пока мы используем матожидания - усреденения по бесконечному числу примеров -
  всё работает как положено.
  Но на практике мы неизбежно перейдём к усреднениям по конечному,
  небольшому количеству ответов модели.
  И тут могут быть проблемы:
  пусть награда выучилась так, что она везде положительная:
  для плохих примеров она поменьше, для хороших - побольше.
  Тогда этот градиент будет нас толкать увеличивать вероятности
  для любых ответов,
  какие бы модель ни сгенерировала.
  
  Для решения этой проблемы на практике обычно используют
  видоизменённую формулу (тоже теоретически обоснованную):
  //// Ох, уж это желание математического обоснования.
  
  \nabla_\theta J(\pi_\theta) = \mathbf{E}_{s \sim \mathcal{D} } \mathbf{E}_{a \sim \pi_\theta(a | s)} \nabla_\theta \log \pi_\theta(a | s) [r_\psi(s, a) - V_\phi(s)]
  
  Здесь V_\phi(s) = \mathbf{E}_{a \sim \pi_\theta(a | s)} r_\psi(s, a)
  - это средняя награда, которую агент набирает,
  если генерирует ответы для запроса s
  (так называемая функция ценности для агента).
  Обычно под эту нужду обучается ещё одна нейронная сеть,
  которая принимает запрос и возвращает одно число.
  //// Еще одна "внутренняя нейронка" . а вовсе не "теоретическая формула".
  //// А насколько оценки этой нейронки соответствуют "теоретической формуле"
  //// очень большой вопрос. Не, конечно ее можно учить на основе какой-то формулы,
  //// но она точно не будет давать даже "двух девяток" точности.
  //// Соответственно, и реализуемая ей по факту "формула" будет "несколько" иной.
  То есть идея изменения в том,
  что мы будем повышать вероятности только тех ответов,
  которые лучше среднего.
  Учится эта нейронная сеть минимизировать среднее квадратичное отклонение
  своих выходов от награды за ответ:
  
  \mathbf{E}_{s \sim \mathcal{D} } \mathbf{E}_{a \sim \pi_\theta(a | s)} [ V_\phi(s) - r_\psi(s, a) ]^2 \rightarrow \min_\phi
  
  Из-за свойств среднего квадратичного отклонения
  выучится как раз нужное нам среднее.
  Тут прежних проблем с градиентами нет
  - параметры \phi под самим матожиданием не фигурируют.
  
  Итак, что же у нас получилось? Давайте оформим это в виде псевдокода:
  
  Алгоритм 1.
  
  1. Вход:
  множество запросов для обучения \mathcal{D}
  
  2. Инициализируем политику SFT-моделью:
  \pi_\theta \leftarrow \pi_{\text{SFT}}
  
  3. Инициализируем ценность V моделью награды:
  V_\phi \leftarrow r_\psi
  
  4. Повторять до сходимости:
  
  4.1. Выбираем батч запросов
  \mathcal{B} \sim \mathcal{D}
  
  4.2. Вычисляем ценность для каждого запроса из батча
  V_\phi(s_i) \;\;\forall s_i \in \mathcal{B}
  
  4.3. Генерируем по одному ответу a_i на каждый запрос
  \forall s_i \in \mathcal{B}
  
   Важно генерировать именно актуальной обучаемой моделью \pi_\theta
  
  4.4. Вычисляем награду r_\psi(s_i, a_i) для всех пар (s_i, a_i)
  
  4.5. Вычисляем лосс для агента
  
  \mathcal{L}_a = - \frac{1}{|\mathcal{B}|} \sum_i^{|\mathcal{B}|} \log \pi_\theta(a_i | s_i) [ r_\psi(s_i, a_i) - V_\phi(s_i) ]
  
  4.6. Вычисляем лосс для функции ценности V
  
  \mathcal{L}_v = \frac{1}{|\mathcal{B}|} \sum_i^{|\mathcal{B}|} [ V_\phi(s_i) - r_\psi(s_i, a_i) ]^2
  
  4.7. (\mathcal{L}_a + \mathcal{L}_v) \text{.backward()}
  
  4.8. \text{optimizer.step()}
  
  Алгоритм, который мы записали выше, называется Advantage Actor Critic (A2C).
  Это уже очень неплохой алгоритм для максимизации награды.
  Прежде чем мы нырнём в обсуждение нюансов,
  давайте проговорим его основной минус - большую дороговизну обучения
  (в смысле времени).
  Алгоритм требует от вас генерировать по ответу на каждый элемент батча
  обязательно моделью с актуальной версией весов
  - нельзя заранее эффективно сгенерировать по ответу на каждый запрос выборки,
  как это было в <бедном RL>.
  Тут вам наверняка придётся совершать куда менее эффективную
  генерацию обычной торчовой моделью.
  //// И опять я не понимаю смысл/причину этого ограничения.
  //// Где именно в "теоретически обоснованно формуле" зашито это ограничение?
  
  Скорее всего, если вы где-то читали про alignment,
  вы слышали, что на практике применяется некто PPO (Proximal Policy Optimization).
  https://arxiv.org/abs/1707.06347v2
  Это ни что иное, как A2C, к которому приделали костыли
  (importance sampling и обрезку градиентов),
  //// А это что "звери"?
  чтобы можно было делать больше одного шага оптимизатора на одних и тех же ответах.
  Скорее всего, это всё, что вам нужно знать про PPO,
  но если вы хотите узнать больше,
  приходите на курс по обучению с подкреплением в ШАД (гитхаб курса ).
  https://shad.yandex.ru/
  https://github.com/yandexdataschool/Practical_RL
  //// Надо будет заглянуть, авторы вроде неплохие,
  //// и, если не закапываться в "математические нюансы",
  //// можно попытаться что-то понять "по верхнему уровню".
  
  PPO частично решает одну из проблем A2C
  - необходимость генерировать очень много текстов -
  но оставляет и привносит другие сложности:
  
  вам нужно хранить три модели в памяти:
  политику, ценность и награду;
  
  всё же нужно написать эффективный код генерации на торче;
  
  у PPO очень много гиперпараметров, и он к ним достаточно чувствителен
  - вас ждёт поиск гиперпараметров по сетке.
  //// Т.е. методика достаточно нестабильная.
  
  В литературе часто советуют не заводить отдельную модель под V-функцию,
  а обойтись двухголовой моделью,
  где из общего тела торчат две головы:
  политика и V-модель.
  В YandexGPT мы заметили, что такую архитектуру очень сложно обучать:
  лоссы политики и ценности нужно замешивать с каким-то коэффициентом,
  который сложно подобрать
  (а ещё хотелось бы его менять в процессе обучения).
  Неудачно подобранный коэффициент ведёт либо к тому,
  что V не учится, либо к тому,
  что она перетягивает на себя все силы оптимизатора,
  и агент выходит не торт.
  
  Существует ряд работ, предлагающих отказаться от V-модели совсем,
  - использовать заранее посчитанную константу вместо неё.
  Мы провели этот эксперимент с YandexGPT и увидели,
  что это работает.
  //// А есть для этого "теоретические обоснования",
  //// или это как обычно "полушаманская практика"?
  //// И тогда к чему вообще "математические трюки"?
  Но не всегда.
  В 50% запусков, при неидеально подобранных гиперпараметрах,
  обучение жесточайше разваливается.
  //// Т.е. "константа" неудачное решение, но может подойдет "обучаемый биас"?
  //// Наверняка между "внутренней нейронкой", со сложнонастраиваемой
  //// функцией обучения и "заранее просчитанной константой"
  //// существует много "промежуточных вариантов".
  //// Главное понять для чего и как должен работать этот модуль,
  //// и в этом отношении "пристальное разглядывание формул",
  //// возможно, не самый продуктивный подход.
  Хотя избавление от V-модели в памяти и ускоряет жизнь,
  нестабильность такого подхода не позволяет на него положиться.
  
  Если вы хотите узнать какую-нибудь The-One-Киллер-Фичу,
  которая заставит ваш PPO работать, наверняка
  - это нормализация advantage.
  Advantage в RL принято называть
  разницу награды за ответ и средней награды r_\psi(s_i, a_i) - V_\phi(s_i),
  которую мы используем при обучении агента.
  Если эту штуку отнормировать по батчу на нулевое среднее и единичную дисперсию,
  то вы, с одной стороны,
  потеряете теоретические гарантии к алгоритму,
  а с другой - получите намного более стабильную сходимость.
  Рекомендуем.
  //// А они - "теоретические гарантии" - действительно что-то гарантируют?
  //// А вот "полушаманские практики" в этом отношении оказываются понадежнее.
  //// К ним бы еще добавить "крупицу понимания", и было бы просто замечательно.
  
  Доменный сдвиг, он же - Гудхартинг
  
  Вы научились максимизировать награду.
  Всегда ли это круто?
  Казалось бы, мы этого и хотели - хорошие ответы,
  которые набирают много награды.
  К сожалению, высокая награда - не всегда показатель хорошего ответа.
  Ведь награду нам выдаёт нейронная сеть,
  обученная на конечной выборке,
  - у неё есть слабые места.
  
  Хуже ситуация становится от понимания,
  что RL изменяет ответы генератора именно в том направлении,
  где модель награды работает плохо.
  Проще всего этот эффект увидеть на визуальном примере ниже.
  
  Представьте себе, что ваш агент стоит у подножия горы,
  и он получает награду пропорционально его координате y
  выше - лучше.
  Агент изучает свои окрестности и выучивает закономерность,
  которой следует награда:
  если идти вправо по картинке, то награда растёт.
  Далее запускается алгоритм поиска оптимальной политики - RL.
  Этот алгоритм, конечно, говорит, что нужно просто всегда идти вправо
  - это оптимально с точки зрения нашей оценки награды.
  Рано или поздно, агент, следующий этой функции награды,
  свалится с горы.
  
  ......
  
  Описанная проблема возникает из-за того,
  что оптимизация метрики уводит нас из того домена,
  где эта метрика хорошо работает.
  Этот эффект называется законом Гудхарта:
  https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%93%D1%83%D0%B4%D1%85%D0%B0%D1%80%D1%82%D0%B0
  если у вас есть хорошая метрика,
  она перестанет быть хорошей,
  как только вы начнёте её оптимизировать.
  Это касается любых KPI в компаниях,
  макроэкономических показателей целых государств,
  и, конечно, нашей прокси-награды в alignment.
  //// Хорошее напоминание не только в данном случае,
  //// но и ко всей методике машинного обучения.
  
  При обучении награды для YandexGPT
  на одном из этапов мы наблюдали забавный эффект:
  награда предпочитала плохой ответ с красивым форматированием
  хорошему ответу без форматирования.
  Так происходило из-за того, что в выборке для награды были примеры,
  где ответ с форматированием лучше, чем ответ без него,
  а обратных примеров не было совсем.
  Вот и случился классический гудхартинг.
  
  Способов побороть эту беду по большей части два.
  
  Первый способ - не давать модели уходить далеко от начальной инициализации
  (то есть от SFT-модели).
  Если ваш агент не уходит далеко от подножия,
  он, скорее всего, не свалится с горы.
  //// Но и не далеко уйдет. Т.е. заранее ограничивается "масштаб обучения".
  Для этого мы добавляем к награде KL-штраф
  за отклонение PPO-модели от SFT-модели:
  
  \mathbf{E}_{a \sim \pi_\theta(a | s)} \big[ r_\psi(s, a) - \beta \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) \big) \big] \rightarrow \max_\theta
  
  Здесь \beta - это коэффициент, определяющий силу штрафа.
  
  Как посчитать KL-штраф
  
  Классически штраф за отклонение от SFT-модели вводится через KL-дивергенцию
  - меру удалённости двух вероятностных распределений друг от друга.
  По определению:
  
  \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) \big) = \mathbf{E}_{a \sim \pi_\theta(a | s)} \log \frac{ \pi_\theta(a|s) }{ \pi_\text{SFT}(a|s) }
  
  Честный KL-штраф посчитать довольно сложно,
  потому что необходимо вычислить матожидание.
  На практике используют Monte-Carlo-оценку той или иной степени грубости.
  Самый распространённый вариант
  - сгенерировать один ответ a из обучаемой модели \pi_\theta
  и оценить KL по нему
  (если речь про PPO, то нужно использовать тот пример,
  который вы и так генерируете для алгоритма):
  
  \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) \big) \approx \log \frac{ \pi_\theta(a|s) }{ \pi_\text{SFT}(a|s) } ,\;\;\; a \sim \pi_\theta(a|s)
  
  Поскольку трансформеры выдают вероятность не для всего ответа,
  а для каждого токена, итоговая формула будет выглядеть как-то так:
  //// О это как раз то, что я искал.
  //// Интересно, смогу ли я что-то понять в этой формуле?
  //// Счас посмотрим.
  
  \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) \big) \approx \sum_{t=0}^T \log \frac{ \pi_\theta(a_t|s, \dots, a_{t-1}) }{ \pi_\text{SFT}(a_t|s, \dots, a_{t-1}) } ,\;\;\; a \sim \pi_\theta(a|s)
  
  В YandexGPT мы используем более точную оценку матожидания
  - вычисляем сумму потокенных KL-штрафов:
  
  \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) \big) \approx \sum_{t=0}^T \text{KL} \big( \pi_\theta(a_t|s, \dots, a_{t-1}) || \pi_\text{SFT}(a_t|s, \dots, a_{t-1}) \big)\dots = \sum_{t=0}^T \sum_{a \in \text{vocab}} \pi_\theta(a|s, \dots, a_{t-1})\log \frac{ \pi_\theta(a|s, \dots, a_{t-1}) }{ \pi_\text{SFT}(a|s, \dots, a_{t-1}) }
  
  То есть, для каждого токена считаем не просто логарифм отношения вероятностей,
  а честное матожидание на уровне токенов
  - усредняем по всем токенам из словаря с соответствующими вероятностями.
  //// Формул естественно не понял, но про по-токенную сумму вроде сообразил.
  //// Хотя остался вопрос про по-элементное соответствие в цепочке:
  //// важна ли последовательность токенов в цепочке
  //// и как это учитывается в этой формуле?
  //// А то получается, что обучение идет на "дословное соответствие" примеру.
  
  Второй способ - постоянно дообучать модель награды на ответах,
  к которым ведёт RL.
  Обучаете PPO, генерируете этой моделью по ответу
  на каждый запрос какой-нибудь выборки
  и отдаёте AI-тренерам сравнить, у кого ответ лучше:
  у SFT или у PPO.
  Полученную разметку добавляете в выборку для обучения награды.
  Переобучаете награду.
  
  Первый способ - это такое часто неизбежное зло.
  Круто, если удаётся обойтись без него,
  - значит, у вас хорошая и устойчивая награда.
  Обычно обойтись без него совсем не выходит.
  Второй способ - это долгий и тернистый путь,
  в котором нужно сделать много итераций переобучения модели награды,
  но именно он проблему скорее решает, чем замалчивает,
  в отличие от первого способа.
  
  Существуют и более экзотические способы решить проблему,
  ещё не успевшие обрести большую популярность.
  Например, использование эпистемической неопределённости в оценке награды
  https://en.wikipedia.org/wiki/Uncertainty_quantification
  - неопределённости, связанной с недостаточным объёмом обучающих данных.
  Один из способов оценить эту неопределённость
  - обучить ансамбль моделей наград на немного разных данных
  и на немного разной начальной инициализации весов.
  Если члены ансамбля соглашаются в оценке награды,
  это значит, что они уверены в ней.
  Если расходятся, то такой оценке нужно доверять с опаской.
  Можно, например, variance прогноза ансамбля вычитать из награды агента.
  
  А можно чуть дешевле? Direct Preference Optimization
  
  PPO - это дорогой алгоритм:
  его сложно реализовать, он нестабилен в обучении, долго учится,
  требует подбора гиперпараметров и щепотку удачи.
  Но если все звёзды сошлись, он достигает высоких наград.
  А можно ли то же самое, но дешевле?
  Да, можно!
  Может, конечно, и не совсем то же самое, но очень близко по качеству:
  где-то лучше, где-то хуже.
  
  Direct Preference Optimization (DPO)
  https://arxiv.org/abs/2404.15617
  - сравнительно новый алгоритм, решающий задачу максимизации награды в RLHF
  способом, который не требует ни генерировать очень много текстов,
  ни обучать модель награды.
  Высокоуровнево идея проста:
  давайте соберем датасет с парами ответов и сравнениями,
  кто лучше, как мы делали для награды.
  А потом сразу как-то обучим генератор на какой-нибудь контрастный лосс,
  чтобы генератор порождал хорошие ответы чаще,
  а плохие - реже.
  
  DPO от многих других контрастивных методов
  выгодно отличается строгим теоретическим обоснованием,
  //// Опять эти упование на "теоретическое обоснование".
  и мы попробуем с ним познакомиться поближе.
  //// Хорошо, посмотрим, сколько здесь действительно "теории".
  Существует забавный, довольно давно известный факт про то,
  как связана оптимальная политика и награда в случае,
  если используется KL-штраф из прошлой главы.
  Мы буквально можем записать аналитическую формулу для оптимальной политики через награду:
  
  \pi^*(a | s) =\frac{1}{Z(s)} \pi_{\text{SFT}}(a | s) e^{ \frac{1}{\beta} r(s, a) }Z(s) = \sum_a e^{ \frac{1}{\beta} r_(s, a) }
  
  Загвоздка тут в том,
  что формулу эту практически невозможно применить на практике в таком виде:
  Z(s) здесь - это нормировочная константа вероятностного распределения.
  Чтобы её вычислить, нужно просуммировать награду по всем возможным ответам,
  которых бесконечно много.
  Это невозможно.
  Ну и ладно, мы от этой Z избавимся чуть позже.
  
  Доказательство записи политики через награду
  
  Откуда вообще взялась формула,
  связывающая оптимальную политику и награду?
  Её несложно получить из задачи максимизации награды с KL-штрафом.
  Запишем эту задачу для произвольного пользовательского запроса s \in \mathcal{D}:
  
  \mathbf{E}_{a \sim \pi_\theta(a | s)} \big[ r_\psi(s, a) - \beta \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) \big) \big] \rightarrow \max_\theta
  
  Раскроем KL-дивергенцию по определению:
  
  \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) \big) = \mathbf{E}_{a \sim \pi_\theta(a | s)} \log \frac{ \pi_\theta(a|s) }{ \pi_\text{SFT}(a|s) }
  
  Подставим в наш функционал и объединим математические ожидания:
  
  \mathbf{E}_{a \sim \pi_\theta(a | s)} \Big[ r_\psi(s, a) - \beta \log \frac{ \pi_\theta(a|s) }{ \pi_\text{SFT}(a|s) } \Big] \rightarrow \max_\theta
  
  Идея наших манипуляций в том, чтобы увидеть в этой задаче максимизации
  задачу минимизации уже другой KL-дивергенции.
  Чтобы переход был прозрачен, давайте поделим выражение на -\beta.
  Поскольку мы делим на отрицательное число,
  задачу максимизации следует заменить на минимизацию:
  
  \mathbf{E}_{a \sim \pi_\theta(a | s)} \Big[ \log \frac{ \pi_\theta(a|s) }{ \pi_\text{SFT}(a|s) } - \frac{1}{\beta} r_\psi(s, a) \Big] \rightarrow \min_\theta
  
  Последний шаг, необходимый, чтобы увидеть в этом выражении KL-дивергенцию:
  применим тождественное преобразование:
  
  \frac{1}{\beta} r_\psi(s, a) = \log e^{ \frac{1}{\beta}r_\psi(s, a) }
  
  Подставим в оптимизируемый функционал
  и сразу же воспользуемся свойством логарифма:
  разность логарифмов - это логарифм отношения:
  
  \mathbf{E}_{a \sim \pi_\theta(a | s)} \Big[ \log \frac{ \pi_\theta(a|s) }{ \pi_\text{SFT}(a|s) e^{ \frac{1}{\beta}r_\psi(s, a) } } \Big] \rightarrow \min_\theta
  
  Полученное выражение - это ни что иное, как KL-дивергенция
  между обучаемой политикой \pi_\theta
  и неотнормированным распределением
  \pi_\text{SFT}(a|s) e^{ \frac{1}{\beta}r_\psi(s, a) }:
  
  \text{KL} \big( \pi_\theta(a|s) || \pi_\text{SFT}(a|s) e^{ \frac{1}{\beta}r_\psi(s, a) } \big) \rightarrow \min_\theta
  
  Известно, что минимум KL-дивергенции достигается в случае,
  когда распределения одинаковы.
  С учётом нормировочной константы, получаем:
  
  \pi^*(a | s) =\frac{1}{Z(s)} \pi_{\text{SFT}}(a | s) e^{ \frac{1}{\beta} r(s, a) }
  
  Ч.Т.Д.
  
  Нам в этой формуле интересна её перевёрнутая запись:
  выразим награду через политику.
  
  r(s, a) = \beta \log \frac{ \pi^*(a | s) }{\pi_{\text{SFT}}(a | s)} + \beta\log Z(s)
  
  Никакой магии не произошло - просто выразили награду.
  Что интересно: а что будет, если в эту формулу подставить
  не оптимальную политику \pi^*,
  а произвольную \pi_\theta.
  Политика, неоптимальная для вашей задачи,
  может быть оптимальной для другой.
  //// Хорошее "теоретическое обоснование".
  По этой формуле мы могли бы вычислить функцию награды,
  в которой \pi_\theta оптимальна.
  Давайте это даже явно запишем:
  
  r_\theta(s, a) = \beta \log \frac{ \pi_\theta(a | s) }{\pi_{\text{SFT}}(a | s)} + \beta \log Z(s)
  
  Изменение в том, что теперь политика не оптимальная, а произвольная,
  а награда записана с индексом r_\theta,
  так как она теперь явно параметризуется через параметры политики.
  Это та награда, в которой \pi_\theta оптимальна.
  
  У такой записи есть ещё одно интересное свойство:
  вообще говоря, оптимальная политика не должна меняться
  от добавления к награде константы, не зависящей от ответа.
  То есть если из формулы просто выкинуть \beta \log Z(s),
  то полученной функции награды будет соответствовать
  всё та же оптимальная политика \pi_\theta:
  
  r_\theta(s, a) = \beta \log \frac{ \pi_\theta(a | s) }{\pi_{\text{SFT}}(a | s)}
  
  Сейчас будет сложный финт ушами:
  давайте подберём параметры \theta так,
  чтобы награда r_\theta была максимально правдоподобной
  в смысле модели Брэдли-Терри (см. часть про модель награды):
  
  \sum_{ (s, winner, loser) \in \mathbf{D} } \log \sigma( r_\theta (s, winner) - r_\theta (s, loser) ) \rightarrow \max_\theta
  
  При этом никакой отдельной нейронной сети для награды у нас не будет
  - мы ведь умеем выражать награду через политику.
  Нейронная сеть будет только для политики.
  Чтобы избежать упоминания награды в оптимизируемом функционале,
  подставим в него запись награды через политику:
  
  \sum_{ (s, winner, loser) \in \mathbf{D} } \log \sigma \big( \beta \big[ \log \frac{ \pi_\theta(winner | s) }{\pi_{\text{SFT}}(winner | s)} - \log \frac{ \pi_\theta(loser | s) }{\pi_{\text{SFT}}(loser | s)} \big] \big) \rightarrow \max_\theta
  
  Этот функционал можно оптимизировать по параметрам нейронной сети
  вашим любимым способом.
  
  Итого, что мы сделали:
  
  выразили функцию награды через политику,
  
  подставили это выражение в функцию ошибки награды.
  
  Теперь, решая задачу обучения модели награды,
  мы одновременно решаем и задачу обучения генератора.
  Получается так, что \pi_\theta - это как раз та модель,
  которая максимизирует r_\theta.
  И обходимся мы при этом только одной нейронной сетью
  - политикой \pi_\theta.
  В случае если мы по какой-то причине хотим вычислить награду,
  у нас для этого есть аналитическая формула.
  
  DPO требует от вас сбора такой же обучающей выборки,
  как для модели награды.
  Обучается политика обычным обучением с учителем,
  но на довольно специфический лосс.
  В отличии от PPO, в DPO нет необходимости генерировать данные во время обучения.
  //// Опять не понимаю почему.
  Как и нет необходимости учить отдельную модель награды.
  По сложности вычислений DPO всё же дороже ванильного обучения с учителем,
  потому что в функции ошибки участвуют вероятности
  не только обучаемой модели, но и SFT
  - её тоже нужно держать в памяти.
  В ходе работы над YandexGPT мы заметили,
  что DPO слабо чувствителен к подбору гиперпараметров
  (в частности, \beta).
  Это позволяет делать alignment малой кровью,
  и больше времени тратить на эксперименты с данными,
  чем на поиск гиперпараметров,
  с которыми обучение работает.
  
  Если вы обучаете DPO и у вас всё же есть уже обученная модель награды,
  её тоже можно использовать.
  Нередко DPO запускают поверх синтетической выборки сравнений:
  генерируем по два ответа на запрос и выбираем лучший с помощью модели награды.
  На полученной выборке сравнений обучаем DPO.
  Конечно, если нормальные данные имеются,
  лучше их тоже добавить или попробовать обучить модель в две стадии.
  Казалось бы, масло масляное,
  но подход показал себя полезным на практике.
  
  Так какой же метод лучше?
  
  На текущий момент научное сообщество не пришло к однозначному решению,
  какой метод лучше.
  Обычно сравнивают DPO и PPO,
  говоря, что CEM достигает худших результатов.
  Однако серьёзные исследования,
  где бы обучение с помощью CEM проводилось бы в несколько этапов
  с контролем энтропии,
  авторам этой статьи неизвестны.
  
  Даже в отношении DPO и PPO никакой ясности нет.
  Существует витающее в воздухе ощущение,
  что PPO сложнее заставить работать,
  но можно получить более хорошую модель, чем от DPO.
  Но однозначно этот тезис пока что подтвердить не представляется возможным.
  
  Что касается нашей команды, мы ведём исследования по всем направлениям.
  
  ........
  
  //// Из комментариев.
  
  shabelskiy
  3 часа назад
  
  классная статья! очень доходчиво и живо написано
  
  ......
  
  //// Конец цитирования.
  
  Присоединяюсь к оценке "отлично" для этого материала.
  Очень много новой и интересной информации и,
  самое главное, позволяет сдвинуться с "мертвой точки"
  в понимании практического использования "обучения с подкреплением"
  в больших языковых моделях, в которой завис уже довольно давно.
  Но, одновременно, порождает целый список новых вопросов.
  И это хорошо - "движение это жизнь",
  а каждый новый вопрос - "половина следующего ответа".
  Короче, "жизнь продолжается"
  и обучение "обучению с подкреплением" тоже.
  
  
  =======
  
  08.06.2024 11:19
  
  И снова о "классическом образовании" в RL.
  В оглавление.
  
  По рекомендации Copilot проработал материал ШАД (Школа анализа данных)
  по обучению с подкреплением (reinforcement learning, RL).
  И хотя какой-то принципиальной новой информации найти не удалось,
  считаю нужным внести этот материал в архив весьма полезных материалов,
  из какой-то концептуальной ясности изложения теоретической основы
  самого подхода к этому методу обучения нейросетей.
  Как говорится, "повторение - мать учения":
  
  "Учебник по машинному обучению
  11.1. Обучение с подкреплением".
  Автор: Иванов Сергей
  https://education.yandex.ru/handbook/ml/article/obuchenie-s-podkrepleniem.
  
  При копировании этого материала "чудесным образом"
  пропали все формулы и математические обозначения,
  но как ни странно, для меня это оказалось даже полезным,
  приходилось САМОМУ достраивать в нужных местах подходящие "образы",
  и в значительной мере это помогало лучшему пониманию основных мыслей автора.
  А не как обычно, когда "за лесом формул, не видно горизонта".
  Не знаю, будет ли у Вас схожая реакция, но можете попробовать,
  или все же, не экспериментировать и сразу читать первоисточник.
  
  //// Начало цитирования.
  
  До сих пор опыт, благодаря которому было возможно обучение в наших алгоритмах,
  был задан в виде обучающей выборки.
  Насколько такая модель обучения соотносится с тем,
  как учится, например, человек?
  Чтобы научиться кататься на велосипеде, печь тортики или играть в теннис,
  нам не нужны огромные датасеты с примерами того,
  что нужно делать в каждый момент;
  вместо этого мы способны обучаться методом проб и ошибок (trial and error),
  предпринимая попытки решить задачу, взаимодействуя с окружающим миром,
  и как-то улучшая своё поведение на основе полученного
  в ходе этого взаимодействия опыта.
  
  В обучении с подкреплением (reinforcement learning, RL)
  мы хотим построить алгоритм,
  моделирующий обучение методом проб и ошибок.
  Вместо получения обучающей выборки на вход такой алгоритм
  будет взаимодействовать с некоторой средой (environment), окружающим миром,
  а в роли <разметки> будет выступать награда (reward)
  - скалярная величина, которая выдаётся
  после каждого шага взаимодействия со средой
  и показывает, насколько хорошо алгоритм справляется с поставленной ему задачей.
  Например, если вы печёте тортики,
  то за каждый испечённый тортик вы получаете +1,
  а если вы пытаетесь кататься на велосипеде,
  то за каждое падение с велосипеда вам прилетает -1.
  
  Награда не подсказывает, как именно нужно решать задачу
  и что вообще нужно делать;
  
  Награда может быть отложенной во времени
  (вы нашли в пустыне сокровища, но чтобы получить заслуженные тортики,
  вам ещё понадобится куча времени, чтобы выбраться из пустыни;
  а награда приходит только за тортики)
  или сильно разреженной (большую часть времени давать агенту +0).
  Всё это сильно отличает задачу от обучения с учителем;
  
  Награда предоставляет какой-то <сигнал> для обучения (хорошо/плохо),
  которого нет, например, в обучении без учителя.
  
  источник картинки - курс UC Berkeley AI
  
  Постановка задачи
  
  Теперь попробуем формализовать всю эту концепцию
  и познакомиться с местной терминологией.
  Задача обучения с подкреплением задаётся
  Марковским Процессом Принятия Решений
  (Markov Decision Process или сокращённо MDP)
  это четвёрка , где:
  
   - пространство состояний (state space),
  множество состояний, в которых в каждый момент времени может находится среда.
  
   - пространство действий (action space),
  множество вариантов, из которых нужно производить выбор
  на каждом шаге своего взаимодействия со средой.
  
   - функция переходов (transition function),
  которая задаёт изменение среды после того, как в состоянии
  
   было выбрано действие .
  
  В общем случае функция переходов может быть стохастична,
  и тогда такая функция переходов моделируется распределением :
  с какой вероятностью в какое состояние
  перейдёт среда после выбора действия в состоянии .
  
   - функция награды (reward function),
  выдающая скалярную величину за выбор действия в состоянии .
  Это наш <обучающий сигнал>.
  
  Традиционно субъект, взаимодействующий со средой и влияющий на неё,
  называется в обучении с подкреплением агентом (agent).
  Агент руководствуется некоторым правилом,
  возможно, тоже стохастичным,
  как выбирать действия в зависимости от текущего состояния среды,
  которое называется стратегией
  (policy; термин часто транслитерируют и говорят политика)
  и моделируется распределением .
  Стратегия и будет нашим объектом поиска,
  поэтому, как и в классическом машинном обучении,
  мы ищем какую-то функцию.
  
  Взаимодействие со средой агента со стратегией моделируется так.
  Изначально среда находится в некотором состоянии .
  Агент сэмплирует действие из своей стратегии .
  Среда отвечает на это, сэмплируя своё следующее состояние из функции переходов,
  а также выдаёт агенту награду в размере .
  Процесс повторяется:
  агент снова сэмплирует , а среда отвечает генерацией и скалярной наградой .
  Так продолжается до бесконечности
  или пока среда не перейдёт в терминальное состояние,
  после попадания в которое, взаимодействие прерывается,
  и сбор агентом награды заканчивается.
  Если в среде есть терминальные состояния,
  одна итерация взаимодействия от начального состояния
  до попадания в терминальное состояние называется эпизодом (episode).
  Цепочка генерируемых в ходе взаимодействия случайных величин
  называется траекторией (trajectory).
  
  Примечание:
  функция награды тоже может быть стохастичной,
  и тогда награды за шаг тоже будут случайными величинами и частью траекторий,
  но без ограничения общности мы будем рассматривать
  детерминированные функции награды.
  
  MDP.png
  
  Итак, фактически среда для нас - это управляемая марковская цепь:
  на каждом шаге мы выбором определяем то распределение,
  из которого будет генерироваться следующее состояние.
  
  Мы предполагаем,
  
  во-первых, марковское свойство:
  что переход в следующее состояние определяется лишь текущим состоянием
  и не зависит от всей предыдущей истории:
  
  Во-вторых, мы предполагаем стационарность:
  функция переходов не зависит от времени,
  от того, сколько шагов прошло с начала взаимодействия.
  Это довольно реалистичные предположения:
  законы мира не изменяются со временем (стационарность),
  а состояние - описывает мир целиком (марковость).
  В этой модели взаимодействия есть только одно нереалистичное допущение:
  полная наблюдаемость (full observability),
  которая гласит, что агент в своей стратегии
  наблюдает всё состояние полностью
  и может выбирать действия,
  зная об окружающем мире абсолютно всё;
  в реальности нам же доступны лишь какие-то частичные наблюдения состояния.
  Такая более реалистичная ситуация моделируется в частично наблюдаемых MDP
  (Partially observable MDP, PoMDP),
  но мы далее ограничимся полностью наблюдаемыми средами.
  
  Итак, мы научились на математическом языке моделировать среду,
  агента и их взаимодействие между собой.
  Осталось понять, чего же мы хотим.
  Во время взаимодействия на каждом шаге агенту приходит награда ,
  однако, состояния и действия в рамках такой постановки
  - случайные величины.
  Один и тот же агент может в силу стохастики как внутренней
  (в силу случайности выбора действий в его стратегии),
  так и внешней (в силу стохастики в функции переходов)
  набирать очень разную суммарную награду в зависимости от везения.
  Мы скажем, что хотим научиться выбирать действия так,
  чтобы собирать в среднем как можно больше награды.
  
  Что значит в среднем, в среднем по чему?
  По всей стохастике, которая заложена в нашем процессе взаимодействия со средой.
  Каждая стратегия задаёт распределение в пространстве траекторий
  - с какой вероятностью нам может встретиться траектория :
  
  Вот по такому распределению мы и хотим взять среднее получаемой агентом награды.
  Записывают это обычно как-нибудь так:
  
  Здесь мат.ожидание по траекториям
  - это бесконечная цепочка вложенных мат.ожиданий:
  
  Вот такую конструкцию мы и хотим оптимизировать выбором стратегии .
  На практике, однако, вносят ещё одну маленькую корректировку.
  В средах, где взаимодействие может продолжаться бесконечно долго,
  агент может научиться набирать бесконечную награду,
  с чем могут быть связаны разные парадоксы
  (например, получать +1 на каждом втором шаге становится также хорошо,
  как получать +1 на каждом сотом шаге).
  Поэтому вводят дисконтирование (discounting) награды,
  которое гласит:
  тортик сейчас лучше, чем тот же самый тортик завтра.
  Награду, которую мы получим в будущем,
  агент будет дисконтировать на некоторое число , меньшее единицы.
  Тогда наш функционал примет такой вид:
  
  источник картинки - курс UC Berkeley AI
  
  Заметим, что обучение с подкреплением
  - это в первую очередь задача оптимизации,
  оптимизации функционалов определённого вида.
  //// Что-то мне не нравится в этой формулировке.
  //// Обучение с подкреплением, это не задача оптимизации,
  //// а задача "выживания" или "исследования" или "окончательной победы".
  //// Т.е. здесь, на мой взгляд, нужно что-то поменять.
  Если в классическом машинном обучении подбор функции потерь
  можно считать элементом инженерной части решения,
  то здесь функция награды задана нам готовая
  и определяет тот функционал, который мы хотим оптимизировать.
  
  Примеры
  
  Окей, и как такое решать?
  
  Выглядит сложновато, но у человечества есть уже довольно много наработок,
  как подойти к этой на вид очень общей задаче,
  причём с основной идеей вы скорее всего уже сталкивались.
  Называется она динамическим программированием.
  
  Дело в том, что мы оптимизируем не абы какой функционал,
  а среднюю дисконтированную кумулятивную награду.
  Чтобы придумать более эффективное решение, чем какой-нибудь подход,
  не использующий этот факт (например, эволюционные алгоритмы),
  нам нужно воспользоваться структурой поставленной задачи.
  Эта структура задана в формализме MDP
  и определении процесса взаимодействия агента со средой.
  Интуитивно она выражается так:
  вот мы сидим в некотором состоянии и хотим выбрать действие
  как можно оптимальнее.
  Мы знаем, что после выбора этого действия мы получим награду за этот шаг ,
  среда перекинет нас в состояние
  и, внимание, дальше нас ждёт подзадача эквивалентной структуры:
  в точности та же задача выбора оптимального действия,
  только в другом состоянии.
  Действительно:
  когда мы будем принимать решение на следующем шаге,
  на прошлое мы повлиять уже не способны;
  стационарность означает, что законы,
  по которым ведёт себя среда, не поменялись,
  а марковость говорит, что история не влияет
  на дальнейший процесс нашего взаимодействия.
  Это наводит на мысль, что задача максимизации награды из текущего состояния
  тесно связана с задачей максимизации награды из следующего состояния ,
  каким бы оно ни было.
  
  Чтобы сформулировать это на языке математики,
  вводятся <дополнительные переменные>, вспомогательные величины,
  называемые оценочными функциями.
  Познакомимся с одной такой оценочной функцией
  - оптимальной Q-функцией, которую будем обозначать .
  Скажем, что - это то, сколько максимально награды можно
  (в среднем) набрать после выбора действия из состояния .
  Итак:
  
  Запись здесь означает, что мы садимся в состояние ;
  выбираем действие , а затем продолжаем взаимодействие со средой
  при помощи стратегии , порождая таким образом траекторию .
  По определению, чтобы посчитать , нужно перебрать все стратегии,
  //// Вот это "все стратегии", наверно, самое нереальное предположение.
  посмотреть, сколько каждая из них набирает награды после выбора из состояния ,
  и взять наилучшую стратегию.
  Поэтому эта оценочная функция называется оптимальной:
  она предполагает, что в будущем после выбора действия из состояния
  агент будет вести себя оптимально.
  
  Определение неконструктивное,
  конечно, поскольку в реальности мы так сделать не можем,
  зато обладает интересным свойством.
  Если мы каким-то чудом узнали ,
  то мы знаем оптимальную стратегию.
  Действительно: представьте, что вы находитесь в состоянии ,
  вам нужно сделать выбор из трёх действий,
  и вы знаете значения .
  Вы знаете, что если выберете первое действие ,
  то в будущем сможете набрать не более чем, допустим, награды.
  При этом вы знаете, что существует какая-то стратегия ,
  на которой достигается максимум в определении оптимальной Q-функции,
  то есть которая действительно позволяет набрать эти +3.
  Вы знаете, что если выберете второе действие,
  то в будущем сможете набрать, допустим, , а для третьего действия .
  Вопрос: так как нужно действовать?
  Интуиция подсказывает, что надо просто выбирать действие ,
  что позволит набрать +10, ведь по определению больше набрать
  никак не получится.
  Значит, выбор в этом состоянии действия оптимален.
  Эта интуиция нас не обманывает,
  и принцип такого выбора называется принципом оптимальности Беллмана.
  
  Выбор того действия, на котором достигается максимум по действиям Q-функции,
  называется жадным (greedy) по отношению к ней.
  Таким образом, принцип оптимальности Беллмана гласит:
  
  жадный выбор по отношению к оптимальной Q-функции оптимален:
  
  Примечание:
  если Q-функция достигает максимума на нескольких действиях,
  то можно выбирать любое из них.
  
  Заметим, что эта оптимальная стратегия детерминирована.
  Этот интересный факт означает, что нам, в общем-то,
  необязательно искать стохастичную стратегию.
  Наше рассуждение пока даже показывает,
  что мы можем просто пытаться найти ,
  а дальше выводить из неё оптимальную стратегию,
  выбирая действие жадно.
  //// Ну, народная мудрость говорит,
  //// что "скупой платит дважды, а ленивый делает трижды",
  //// а про "жадных" вообще не упоминает.
  
  Но как искать ?
  Тут на сцене и появляется наше наблюдение про структуру задачи.
  Оказывается, выражается через саму себя.
  Действительно: рассмотрим некоторую пару состояние-действие .
  С одной стороны, по определению, мы в будущем сможем
  при условии оптимального поведения получить награды.
  С другой стороны, после того, как мы выберем действие в состоянии ,
  мы получим награду за один шаг ,
  вся дальнейшая награда будет дисконтирована на ,
  среда ответит нам сэмплированием
  (на результат этого сэмплирования мы уже никак повлиять не можем
  и по этой стохастике нашу будущую награду надо будет усреднять),
  а затем в состоянии мы, в предположении оптимальности поведения,
  выберем то действие , на котором достигается максимум .
  Другими словами, в дальнейшем после попадания в мы сможем получить награды.
  А значит, верно следующее рекурсивное соотношение,
  называемое уравнением оптимальности Беллмана для Q-функции:
  
  Мы получили систему уравнений, связывающую значения с самой собой.
  //// Этакая итеративная формула.
  Это нелинейная система уравнений,
  но оказывается, что она в некотором смысле <хорошая>.
  У неё единственное решение - и, значит, решение этого уравнения
  можно считать эквивалентным определением ,
  - и его можно искать методом простой итерации.
  Метод простой итерации решения систем уравнений
  позволяет улучшать своё текущее приближение решения некоторого уравнения
  вида его подстановкой в правую часть.
  То есть: инициализируем произвольную функцию ,
  которая будет приближать , затем итеративно будем подставлять её
  в правую часть уравнений оптимальности Беллмана
  и полученным значением обновлять наше приближение:
  
  Такая процедура в пределе приведёт нас к истинной ,
  а значит и оптимальной стратегии.
  Кстати, когда вы в прошлом встречались с динамическим программированием,
  вы скорее всего неявно использовали именно эту идею,
  разве что часто в задачах для решения уравнений оптимальности Беллмана
  можно просто последовательно исключать неизвестные переменные;
  но метод простой итерации даёт более общую схему, применимую всегда.
  А сейчас для нас принципиально следующее:
  если у нас есть какое-то приближение ,
  то вычисление правой части уравнения оптимальности Беллмана
  позволит получить приближение лучше.
  //// Это ключевая парадигма всего этого подхода.
  //// Метод "последовательных приближений".
  
  А где же метод проб и ошибок?
  Решать методом простой итерации уравнения оптимальности Беллмана
  и таким образом получать в реальности можно только
  при двух очень существенных ограничивающих условиях.
  Нужно, чтобы, во-первых, мы могли хранить как-то текущее приближение в памяти.
  Это возможно только если пространства состояний и действий конечные
  и не очень большие,
  то есть, например, в вашем MDP всего 10 состояний и 5 действий,
  тогда - это табличка 10x5.
  Но что, если вы хотите научиться играть в видеоигру,
  и состояние - это входное изображение?
  Тогда множество картинок, которые вам может показать видеоигра,
  сохранить в памяти уже не получится.
  Ну, допустим пока, что число состояний и число действий не очень большое,
  и мы всё-таки можем хранить таблицу в памяти,
  а позже мы снимем это ограничение, моделируя при помощи нейросети.
  
  Во-вторых, нам необходимо уметь считать выражение,
  стоящее справа в уравнение оптимальности Беллмана:
  
  Мало того, что в сложных средах взять мат.ожидание по функции переходов
  в реальности мы не сможем,
  так ещё и обычно мы эту функцию переходов на самом деле не знаем.
  Представьте, что вы катаетесь на велосипеде:
  можете ли вы по текущему состоянию окружающего мира,
  например, положению всех атомов во вселенной,
  рассказать, с какими вероятностями в каком состоянии мир окажется
  в следующий момент времени?
  Это соображение также подсказывает, что было бы здорово,
  если б мы смогли решать задачу,
  избегая даже попыток выучить эту сложную функцию переходов.
  
  Что нам доступно?
  Мы можем взять какую-нибудь стратегию
  (важный момент: мы должны сами выбрать какую)
  и повзаимодействовать ею со средой.
  <Попробовать решить задачу>.
  Мы можем сгенерировать при помощи целую траекторию
  или даже сделать всего один шаг в среде.
  Таким образом мы соберём данные:
  допустим, мы были в состоянии и сделали выбор действия ,
  тогда мы узнаем, какую награду мы получаем за такой шаг
  и, самое главное, в какое состояние нас перевела среда.
  Полученный - сэмпл из функции переходов .
  Собранная так информация - четвёрка - называется переходом (transition),
  и может быть как-то использована для оптимизации нашей стратегии.
  
  Можем ли мы, используя лишь переходы , то есть имея на руках лишь сэмплы ,
  как-то пользоваться схемой динамического программирования?
  Что, если мы будем заменять значение не на которое мы не можем посчитать,
  а на его Монте Карло оценку:
  
  где
   - сэмпл из функции переходов из собранного нами опыта?
  В среднем-то такая замена верная.
  Такая Монте-Карло оценка правой части для заданного переходика
  называется Беллмановским таргетом, то есть <целевой переменной>.
  Почему такое название - мы увидим чуть позже.
  
  Чтобы понять, как нам нужно действовать,
  рассмотрим какую-нибудь типичную ситуацию.
  Допустим, после выполнения действия из некоторого состояния
  среда награждает нас и перекидывает нас с равными вероятностями
  то в состояние , для которого , то в состояние , для которого .
  Метод простой итерации говорит,
  что на очередной итерации нужно заменить на ,
  но в реальности мы встретимся лишь с одним исходом,
  и таргет - Монте-Карло оценка правой части уравнения оптимальности Беллмана -
  будет с вероятностью 0.5 равен , а с вероятностью 0.5 равен .
  Ясно, что нельзя просто взять и жёстко заменять наше текущее приближение
  на посчитанный Беллмановский таргет по некоторому одному переходу,
  поскольку нам могло повезти (мы увидели ) или не повезти (мы увидели ).
  Давайте вместо этого поступать также, как учат среднее по выборке:
  не сдвигать <жёстко> наше текущее приближение в значение очередного сэмпла,
  а *смешивать* текущее приближение с очередным сэмплом.
  То есть: берём переходик , и не заменяем
  на стохастичную оценку правой части уравнения оптимальности Беллмана,
  а только сдвигаемся в его сторону:
  //// Т.е. пытаемся "маленькими прыжками" перепрыгнуть "большой овраг".
  //// Но это возможно только при условии тех самых более ранних предположений
  //// о "стационарности задачи/среды".
  
  Таким образом, мы проводим экспоненциальное сглаживание старого приближения
  и новой оценки правой части уравнения оптимальности Беллмана
  со свежим сэмплом .
  Выбор здесь определяет, насколько сильно мы обращаем внимание
  на последние сэмплы,
  и имеет тот же физический смысл, что и learning rate.
  В среднем по стохастике
  (а стохастика в этой формуле обновления заложена в случайном )
  мы будем сдвигаться в сторону
  и значит применять этакий <зашумлённый> метод простой итерации.
  
  Итак, возникает следующая идея.
  Будем как-то взаимодействовать со средой и собирать переходики .
  Для каждого перехода будем обновлять одну ячейку нашей Q-таблицы
  размера число состояний на число действий по вышеуказанной формуле.
  Таким образом мы получим как бы <зашумлённый> метод простой итерации,
  где мы на каждом шаге обновляем только одну ячейку таблицы,
  и не заменяем жёстко значение на правую часть уравнений оптимальности,
  а лишь сдвигаемся по некоторому в среднем верному стохастичному направлению.
  
  Очень похоже на стохастическую оптимизацию
  вроде стохастического градиентного спуска,
  и поэтому гарантии сходимости выглядят схожим образом.
  Оказывается, такой алгоритм сходится к истинной ,
  если для любой пары мы в ходе всего процесса проводим
  бесконечное количество обновлений,
  а learning rate (гиперпараметр ) в них ведёт себя
  как learning rate из условий сходимости стохастического градиентного спуска:
  //// И почему мне кажется, что есть во всем этом подходе
  //// некая вера в "линейность и непрерывность Мироздания"?
  
  Пример
  
  Этот алгоритм, к которому мы уже практически пришли, называется Q-learning,
  <обучение оптимальной Q-функции>.
  Нам, однако, осталось ответить на один вопрос:
  так как же нужно собирать данные,
  чтобы удовлетворить требованиям для сходимости?
  Как взаимодействовать со средой так, чтобы мы каждую ячейку
  не прекращали обновлять?
  
  Дилемма Exploration-exploitation
  
  Мы уже встречали дилемму exploration-exploitation
  (букв. <исследования-использования>)
  в параграфе про тюнинг гиперпараметров.
  Задача многоруких бандитов, которая там встретилась,
  на самом деле является частным случаем задачи обучения с покреплением,
  в котором после первого выбора действия эпизод гарантированно завершается,
  и этот частный случай задачи часто используется для изучения этой дилеммы.
  Рассмотрим эту дилемму в нашем контексте.
  
  Допустим, на очередном шаге алгоритма у нас есть некоторое приближение .
  Приближение это, конечно, неточное, поскольку алгоритм,
  если и сходится к истинной оптимальной Q-функции, то на бесконечности.
  Как нужно взаимодействовать со средой?
  Если вы хотите набрать максимальную награду,
  наверное, стоит воспользоваться нашей теорией и заниматься exploitation-ом,
  выбирая действие жадно:
  
  Увы, такой выбор не факт что совпадёт с истинной оптимальной стратегией,
  а главное, он детерминирован.
  Это значит, что при взаимодействии этой стратегией со средой,
  многие пары никогда не будут встречаться просто потому,
  что мы никогда не выбираем действие в состоянии .
  А тогда мы, получается, рискуем больше никогда не обновить ячейку
  для таких пар!
  
  Такие ситуации запросто могут привести к застреванию алгоритма.
  Мы хотели научиться кататься на велосипеде и получали +0.1
  за каждый пройденный метр и -5 за каждое попадание в дерево.
  После первых проб и ошибок мы обнаружили,
  что катание на велосипеде приносит нам -5,
  поскольку мы очень скоро врезаемся в деревья
  и обновляли нашу аппроксимацию Q-функции сэмплами с негативной наградой;
  зато если мы не будем даже забираться на велосипед
  и просто займёмся ничего не деланьем,
  то мы сможем избежать деревьев и будем получать 0.
  Просто из-за того, что в нашей стратегии взаимодействия со средой
  никогда не встречались те , которые приводят к положительной награде,
  и жадная стратегия по отношению к нашей текущей аппроксимации Q-функции
  никогда не выбирает их.
  Поэтому нам нужно экспериментировать и пробовать новые варианты.
  
  Режим exploration-а предполагает,
  что мы взаимодействуем со средой при помощи какой-нибудь стохастичной стратегии .
  Например, такой стратегией является случайная стратегия,
  выбирающая рандомные действия.
  Как ни странно, сбор опыта при помощи случайной стратегии
  позволяет побывать с ненулевой вероятностью
  во всех областях пространства состояний,
  и теоретически даже наш алгоритм обучения Q-функции будет сходится.
  Означает ли это, что exploration-а хватит, и на exploitation можно забить?
  
  В реальности мы понимаем,
  что добраться до самых интересных областей пространства состояний,
  где функция награда самая большая, не так-то просто,
  и случайная стратегия хоть и будет это делать с ненулевой вероятностью,
  но вероятность эта будет экспоненциально маленькая.
  А для сходимости нам нужно обновить ячейки
  для этих интересных состояний бесконечно много раз,
  то есть нам придётся дожидаться необычайно редкого везения далеко не один раз.
  Куда разумнее использовать уже имеющиеся знания
  и при помощи жадной стратегии,
  которая уже что-то умеет,
  идти к этим интересным состояниям.
  Поэтому для решения дилеммы exploration-exploitation
  обычно берут нашу текущую жадную стратегию
  и что-нибудь с ней делают такое,
  чтобы она стала чуть-чуть случайной.
  Например, с вероятностью выбирают случайное действие,
  а с вероятностью - жадное.
  Тогда мы чаще всё-таки и знаниями пользуемся,
  и любое действие с ненулевой вероятностью выбираем;
  такая стратегия называется -жадной,
  и она является самым простым способом как-то порешать эту дилемму.
  
  Давайте закрепим, что у нас получилось,
  в виде табличного алгоритма обучения с подкреплением под названием Q-learning:
  
  Проинициализировать произвольным образом.
  
  Пронаблюдать из среды.
  
  Для : с вероятностью выбрать действие случайно, иначе жадно:
  
  отправить действие в среду, получить награду за шаг и следующее состояние.
  
  обновить одну ячейку таблицы:
  
  Добавим нейросеток
  
  Наконец, чтобы перейти к алгоритмам, способным на обучение в сложных MDP
  со сложным пространством состояний,
  нужно объединять классическую теорию обучения с подкреплением
  с парадигмами глубокого обучения.
  
  Допустим, мы не можем позволить себе хранить как таблицу в памяти,
  например, если мы играем в видеоигру
  и на вход нам подаются какие-нибудь изображения.
  Тогда мы можем обрабатывать любые имеющиеся у агента входные сигналы
  при помощи нейросетки .
  Для тех же видеоигр мы легко обработаем изображение экрана
  небольшой свёрточной сеточкой
  и выдадим для каждого возможного действия вещественный скаляр .
  Допустим также, что пространство действий всё ещё конечное и маленькое,
  чтобы мы могли для такой модели строить жадную стратегию, выбирать .
  Но как обучать такую нейросетку?
  
  Давайте ещё раз посмотрим на формулу обновления в Q-learning
  для одного переходика :
  
  Теория Q-learning-а подсказывала,
  что у процесса такого обучения Q-функции много общего
  с обычным стохастическим градиентным спуском.
  В таком виде формула подсказывает, что, видимо,
  
  - это стохастическая оценка какого-то градиента.
  Этот градиент сравнивает Беллмановский таргет с нашим текущим приближением
  и чуть-чуть корректирует это значение,
  сдвигая в сторону таргета.
  Попробуем <заменить> в этой формуле Q-функцию с табличного представления на нейросетку.
  
  Рассмотрим такую задачу регрессии.
  Чтобы построить один прецедент для обучающей выборки,
  возьмём один имеющийся у нас переходик .
  Входом будет пара .
  Целевой переменной, таргетом, будет Беллмановский таргет
  
  его зависимость от параметров нашей нейронки мы далее будем игнорировать
  и будем <притворяться>,
  что это и есть наш ground truth.
  Именно поэтому Монте-Карло оценка правой части уравнения оптимальности Беллмана
  и называют таргетом.
  Но важно помнить, что эта целевая переменная на самом деле <зашумлена>:
  в формуле используется взятый из перехода ,
  который есть лишь сэмпл из функции переходов.
  На самом же деле мы хотели бы выучить среднее значение такой целевой переменной,
  и поэтому в качестве функции потерь мы возьмём MSE.
  Как будет выглядеть шаг стохастического градиентного спуска
  для решения этой задачи регрессии
  (для простоты - для одного прецедента)?
  
  Это практически в точности повторяет формулу Q-learning,
  которая гласит, что если таргет больше ,
  то нужно подстроить веса нашей модели так,
  чтобы стало чуть побольше, и наоборот.
  В среднем при такой оптимизации мы будем двигаться в сторону
  
  - в сторону правой части уравнения оптимальности Беллмана,
  то есть моделировать метод простой итерации
  для решения системы нелинейных уравнений.
  
  Единственное отличие такой задачи регрессии от тех,
  с которыми сталкивается традиционное глубокое обучение
  - то, что целевая переменная зависит от нашей же собственной модели.
  Раньше целевые переменные были напрямую источником обучающего сигнала.
  Теперь же, когда мы хотим выучить будущую награду
  при условии оптимального поведения,
  мы не знаем этого истинного значения или даже её стохастичных оценок.
  Поэтому мы применяем идею бутстрапирования (bootstrapping):
  берём награду за следующий шаг,
  и нечестно приближаем всю остальную награду нашей же текущей аппроксимацией .
  Да, за этим кроется идея метода простой итерации,
  но важно понимать, что такая целевая переменная
  лишь указывает направление для обучения,
  но не является истинным приближением будущих наград
  или даже их несмещённой оценкой.
  Поэтому говорят, что в этой задаче регрессии
  очень смещённые (biased) целевые переменные.
  
  На практике из-за этого возникает беда.
  Наша задача регрессии в таком виде меняется после каждого же шага.
  Если вдруг после очередного шага оптимизации
  и обновления весов нейросети
  наша модель начала выдавать какие-то немного неадекватные значения,
  они рискуют попасть в целевую переменную на следующем шаге,
  мы сделаем шаг обучения под неадекватные целевые переменные,
  модель станет ещё хуже, и так далее,
  начнётся цепная реакция.
  Алгоритмы, в которых целевая переменная вот так напрямую зависит
  от текущей же модели,
  из-за этого страшно нестабильны.
  //// Вот поэтому критерием должна быть не "оптимизация",
  //// а "стабильный результат".
  
  Для стабилизации применяется трюк,
  называемый таргет-сетью (target network).
  Давайте сделаем так, чтобы у нас задача регрессии менялась
  не после каждого обновления весов нейросетки,
  а хотя бы раз, скажем, в 1000 шагов оптимизации.
  Для этого заведём полную копию нашей нейросети (<таргет-сеть>),
  веса которой будем обозначать .
  Каждые 1000 шагов будем копировать веса из нашей модели в таргет-сеть ,
  //// А может здесь лучше не копировать параметры,
  //// а вообще переобучать таргет-сеть тем же методом "дистилляции"?
  //// Хотя если задача не получить более хорошо обученную модель,
  //// а просто временную копию, то это наверно излишне.
  //// Но есть какое-то интуитивное чувство,
  //// что в этом месте можно попытаться выжать что-то большее,
  //// чем просто "костыль".
  больше никак менять не будем.
  Когда мы захотим для очередного перехода построить таргет,
  мы воспользуемся не нашей свежей моделью,
  а таргет-сетью:
  
  Тогда правило, по которому строится целевая переменная,
  будет меняться раз в 1000 шагов,
  и мы 1000 шагов будем решать одну и ту же задачу регрессии.
  Такой процесс будет намного стабильнее.
  
  Experience Replay
  
  Чтобы окончательно собрать алгоритм Deep Q-learning
  (обычно называемый DQN, Deep Q-network),
  нам понадобится сделать последний шаг, связанный опять со сбором данных.
  Коли мы хотим обучать нейросетку,
  нам нужно для каждого обновления весов откуда-то взять целый мини-батч данных,
  то есть батч переходов ,
  чтобы по нему усреднить оценку градиента.
  Однако, если мы возьмём среду, сделаем в ней шагов,
  то встреченные нами переходов будут очень похожи друг на друга:
  они все придут из одной и той же области пространства состояний.
  Обучение нейросетки на скоррелированных данных - плохая идея,
  поскольку такая модель быстро забудет, что она учила на прошлых итерациях.
  
  Бороться с этой проблемой можно двумя способами.
  Первый способ, доступный всегда,
  когда среда задана при помощи виртуального симулятора
  - запуск параллельных агентов.
  Запускается параллельно процессов взаимодействия агента со средой,
  и для того, чтобы собрать очередной мини-батч переходов для обучения,
  во всех экземплярах проводится по одному шагу взаимодействия,
  собирается по одному переходику.
  Такой мини-батч уже будет разнообразным.
  
  Более интересный второй способ.
  Давайте после очередного шага взаимодействия со средой
  мы не будем тут же использовать переход для обновления модели,
  а запомним этот переход и положим его себе в коллекцию.
  Память со всеми встретившимися в ходе проб и ошибок переходами
  называется реплей буфером (replay buffer или experience replay).
  Теперь для того, чтобы обновить веса нашей сети,
  мы возьмём и случайно засэмплируем из равномерного распределения
  желаемое количество переходов из всей истории.
  
  Однако, использование реплей буфера возможно
  далеко не во всех алгоритмах обучения с подкреплением.
  Дело в том, что некоторые алгоритмы обучения с подкреплением требуют,
  чтобы данные для очередного шага обновления весов
  были сгенерированы именно текущей, самой свежей версией стратегии.
  Такие алгоритмы относят к классу on-policy:
  они могут улучшать стратегию только по данным из неё же самой ().
  Примером on-policy алгоритмов выступают, например, эволюционные алгоритмы.
  Как они устроены:
  например, можно завести популяцию стратегий,
  поиграть каждой со средой,
  отобрать лучшие и как-то породить новую популяцию
  (подробнее про одну из самых успешных схем в рамках такой идеи
  можно посмотреть здесь).
  https://openai.com/blog/evolution-strategies/
  Как бы ни была устроена эта схема,
  эволюционный алгоритм никак не может использовать данные из,
  например, старых, плохих стратегий,
  которые вели себя, скажем, не сильно лучше случайной стратегии.
  //// Кстати, еще одна проблема/задача - это использование "старых данных".
  //// У человека для этого предназначена память,
  //// а какой подобный аналог можно предложить для "нейронок".
  Поэтому неизбежно в эволюционном подходе
  нужно свежую популяцию отправлять в среду
  и собирать новые данные перед каждым следующим шагом.
  
  И вот важный момент:
  Deep Q-learning, как и обычный Q-learning,
  относится к off-policy алгоритмам обучения с подкреплением.
  Совершенно неважно, какая стратегия,
  умная или не очень, старая или новая,
  породила переход ,
  нам всё равно нужно решать уравнение оптимальности Беллмана
  в том числе и для этой пары
  и нам достаточно при построении таргета лишь,
  чтобы был сэмплом из функции переходов
  (а она-то как раз одна вне зависимости от того,
  какая стратегия взаимодействует в среде).
  Поэтому обновлять модель мы можем по совершенно произвольному опыту,
  и, значит, мы в том числе можем использовать experience replay.
  
  источник картинки - курс UC Berkeley AI
  
  В любом случае, даже в сложных средах,
  при взаимодействии со средой мы всё равно должны
  как-то разрешить дилемму exploration-exploitation,
  и пользоваться, например, -жадной стратегией исследования.
  Итак, алгоритм DQN выглядит так:
  
  Проинициализировать нейросеть
  .
  Проинициализировать таргет-сеть, положив
  .
  Пронаблюдать из среды.
  
  Для : с вероятностью выбрать действие случайно, иначе жадно:
  
  отправить действие в среду, получить награду за шаг и следующее состояние.
  
  добавить переход в реплей буфер.
  
  если в реплей буфере скопилось достаточное число переходиков,
  провести шаг обучения.
  Для этого сэмплируем мини-батч переходиков из буфера.
  для каждого переходика считаем целевую переменную:
  сделать шаг градиентного спуска для обновления ,
  минимизируя, если делится на 1000, обновить таргет-сеть:
  
  Алгоритм DQN не требует никаких handcrafted признаков
  или специфических настроек под заданную игру.
  Один и тот же алгоритм, с одними и теми же гиперпараметрами,
  можно запустить на любой из 57 игр древней консоли Atari
  (пример игры в Breakout)
  и получить какую-то стратегию.
  Для сравнения алгоритмов RL между собой результаты обычно усредняют
  по всем 57 играм Atari.
  Недавно алгоритм под названием Agent57,
  объединяющий довольно много модификаций и улучшений DQN и развивающий эту идею,
  смог победить человека сразу во всех этих 57 играх.
  
  А если пространство действий непрерывно?
  
  Всюду в DQN мы предполагали, что пространство действий дискретно и маленькое,
  чтобы мы могли считать жадную стратегию
  и считать максимум в формуле целевой переменной .
  Если пространство действий непрерывно,
  и на каждом шаге от агента ожидается выбор нескольких вещественных чисел,
  то как это делать непонятно.
  Такая ситуация повсюду возникает в робототехнике.
  Там каждое сочленение робота можно, например, поворачивать вправо / влево,
  и такие действия проще описывать набором чисел в диапазоне [-1, 1],
  где -1 - крайне левое положение, +1 - крайне правое,
  и доступны любые промежуточные варианты.
  При этом дискретизация действий не вариант
  из-за экспоненциального взрыва числа вариантов
  и потери семантики действий.
  //// Интересно, что более критично из этих "двух зол"?
  //// Или "оба хуже"?
  Нам, в общем-то, нужно в DQN только одну проблему решить:
  как-то научиться аргмаксимум по действиям брать.
  
  А давайте, коли мы не знаем , приблизим его другой нейросеткой.
  А то есть, заведём вторую нейросеть с параметрами ,
  и будем учить её так, чтобы
  
  Как это сделать?
  Ну, будем на каждой итерации алгоритма брать батч состояний
  из нашего реплей буфера
  и будем учить выдавать такие действия,
  на которых наша Q-функция выдаёт большие скалярные значения:
  
  Причём, поскольку действия непрерывные,
  всё слева дифференцируемо
  и мы можем напрямую применять самый обычный backpropagation!
  
  DDPG.png
  
  Теперь когда на руках есть приближение ,
  можно просто использовать его всюду,
  где нам нужны аргмаксимумы и максимумы от нашей Q-функции.
  Мы получили Actor-Critic схему:
  у нас есть актёр, - детерминированная стратегия, и критик ,
  который оценивает выбор действий актёром
  и предоставляет градиент для его улучшения.
  Актёр учится выбирать действия, которые больше всего нравятся критику,
  а критик учится регрессией с целевой переменной
  
  Эта прикольная рабочая эвристика
  //// Т.е. математика тут ни причем. Работает цепочка нейросетей.
  позволяет придумать off-policy алгоритмы
  для непрерывных пространств действий;
  к такому подходу относятся такие алгоритмы, как DDPG, TD3 и SAC.
  
  Policy Gradient алгоритмы
  
  В рассмотренных алгоритмах есть несколько принципиальных ограничений,
  которые вытекают непосредственно из самой идеи подхода.
  Мы учимся с таргетов,
  заглядывающих всего на один шаг вперёд,
  использующих только ;
  это чревато проблемой накапливающейся ошибки,
  поскольку если между выполнением действия и получением награды +1
  проходит 100 шагов,
  нам нужно на сто шагов <распространять> полученный сигнал.
  Мы должны учить вместо того,
  чтобы как-то напрямую () запомнить,
  какие действия в каких состояниях хорошие.
  Наконец, наша стратегия всегда детерминирована,
  когда для взаимодействия со средой во время сбора данных,
  например, нам позарез нужна была стохастичная,
  чтобы гарантированно обновлять Q-функцию для всех пар ,
  и эту проблему пришлось закрывать костылями.
  
  Есть второй подход model-free алгоритмов RL,
  называемый Policy Gradient,
  который позволяет избежать вышеперечисленных недостатков
  за счёт on-policy режима работы.
  Идея выглядит так:
  давайте будем искать стратегию в классе стохастичных стратегий,
  то есть заведём нейросеть, моделирующую напрямую.
  Тогда наш функционал, который мы оптимизируем,
  
  дифференцируем по параметрам , и градиент равен:
  
  где
   - reward-to-go с шага , то есть награда,
  собранная в сыгранном эпизоде после шага :
  
  Скетч доказательства
  
  Эта формула говорит нам, что градиент нашего функционала
  - это тоже мат.ожидание по траекториям.
  А значит, мы можем попробовать посчитать какую-то оценку этого градиента,
  заменив мат.ожидание на Монте Карло оценку,
  //// Очень популярный приемчик, надо отметить.
  //// Интересно, какие "подводные камни" он "дарит"?
  и просто начать оптимизировать наш функционал
  самым обычным стохастическим градиентным спуском!
  А то есть: берём нашу стратегию с текущими значениями параметров ,
  играем эпизод (или несколько) в среде,
  то есть сэмплируем ,
  и затем делаем шаг градиентного подъёма:
  
  Почему эта идея приводит к on-policy подходу?
  Для каждого шага градиентного шага нам обязательно нужно взять
  с самыми свежими, с текущими весами ,
  и никакая другая траектория, порождённая какой-то другой стратегией,
  нам не подойдёт.
  Поэтому для каждой итерации алгоритма
  нам придётся заново играть очередной эпизод со средой.
  Это sample-inefficient:
  неэффективно по числу сэмплов,
  мы собираем слишком много данных и очень неэффективно с ними работаем.
  
  Policy Gradient алгоритмы пытаются по-разному бороться с этой неэффективностью,
  опять же обращаясь к теории оценочных функций и бутстрапированным оценкам,
  позволяющим предсказывать будущие награды,
  не доигрывая эпизоды целиком до конца.
  Большинство этих алгоритмов остаются в on-policy режиме
  и применимы в любых пространствах действий.
  К этим алгоритмам относятся такие алгоритмы,
  как Advantage Actor-Critic (A2C),
  Trust-Region Policy Optimization (TRPO)
  и Proximal Policy Optimization (PPO).
  
  Что там ещё?
  
  Мы до сих пор разбирали model-free алгоритмы RL,
  которые обходились без знаний о
  и никак не пытались приближать это распределение.
  Однако, в каких-нибудь пятнашках функция переходов нам известна:
  мы знаем, в какое состояние перейдёт среда,
  если мы выберем некоторое действие в таком-то состоянии.
  Понятно, что эту информацию было бы здорово как-то использовать.
  Существует обширный класс model-based,
  который либо предполагает, что функция переходов дана,
  либо мы учим её приближение, используя из нашего опыта
  в качестве обучающей выборки.
  Алгоритм AlphaZero на основе этого подхода превзошёл человека в игру Го,
  которая считалась куда более сложной игрой, чем шахматы;
  причём этот алгоритм возможно запустить обучаться на любой игре:
  как на Го, так и на шахматах или сёги.
  
  источник картинки - курс UC Berkeley AI
  
  Обучение с подкреплением стремится построить алгоритмы,
  способные обучаться решать любую задачу,
  представленную в формализме MDP.
  Как и обычные методы оптимизации,
  их можно использовать в виде чёрной коробочки из готовых библиотек,
  например, OpenAI Stable Baselines.
  Внутри таких коробочек будет, однако, довольно много гиперпараметров,
  которые пока не совсем понятно как настраивать
  под ту или иную практическую задачу.
  И хотя успехи Deep RL демонстрируют,
  что эти алгоритмы способны обучаться невероятно сложным задачам
  вроде победы над людьми в Dota 2 и в StarCraft II,
  они требуют для этого колоссального количества ресурсов.
  Поиск более эффективных процедур - открытая задача в Deep RL.
  
  В ШАДе есть курс Practical RL,
  на котором вы погрузитесь глубже в мир глубокого обучения с подкреплением,
  разберётесь в более продвинутых алгоритмах
  и попробуете пообучать нейронки решать разные задачки в разных средах.
  
  .......
  
  //// Конец цитирования.
  
  Для себя на основании проработки этого материала только укрепился в выводе,
  что сами по себе конкретные математические формулы,
  особенно с кучей не тривиальных операций, типа суммирования по бесконечности,
  стоит брать только общие идеи,
  а конкретную реализацию выполнять используя нейронки.
  Все равно, в конце концов, к этому сведется.
  Т.е. проектировать сложную нейронку и сам процесс ее обучения
  стоит пытаться выполнить не единым монолитом,
  а как цепочку/сеть взаимосвязанных более простых нейронок.
  
  И тут самое интересное в таком подходе,
  это попытаться на какой-то внутренней "нейронке"
  реализовать "память предыдущих состояний/решений",
  причем используя "проклятый эффект переобучения".
  Так сказать, "обращая вред в пользу".
  
  
  =======
  
  27.04.2023 10:47
  
  Практические проблемы уравнения Беллмана.
  В оглавление.
  
  В предыдущем материале меня заинтересовали способы решения
  некоторых проблем "обучения с подкреплением",
  порождаемых прямолинейным решением основополагающего уравнения Беллмана.
  И порывшись в архивах, нашел материал на эту тему,
  который только сейчас, спустя год, смог хоть как-то понять:
  
  "Обучение с подкреплением:
  практические рекомендации по обучению сетей Deep Q".
  Автор: mr-pickles
  https://habr.com/ru/companies/wunderfund/articles/672988/.
  27 июн 2022 в 12:07
  
  //// Начало цитирования.
  
  В предыдущем материале из этой серии
  https://habr.com/ru/company/wunderfund/blog/671650/
  мы рассказали о сетях Deep Q (Deep Q Network, DQN)
  и написали алгоритм их обучения на псевдокоде.
  Хотя такие сети, в принципе, работоспособны,
  практическая реализация алгоритмов обучения с подкреплением
  (Reinforcement Learning, RL),
  выполняемая без понимания их ограничений,
  может вести к нестабильности создаваемых систем
  и к плохим результатам обучения.
  В этом материале мы обсудим два важных ограничения,
  две проблемы, способных привести к нестабильности Q-обучения.
  
  Мы поговорим и о том, как, на практике, решать эти проблемы.
  Вспомните о том, что уравнение Беллмана связывает,
  с помощью рекурсии, Q-функции для текущего и следующего временных шагов.
  
  .......
  
  Уравнение Беллмана.
  Оптимальная Q-функция для текущего шага,
  отбрасывание последнего значения Q,
  оптимальная Q-функция для следующего шага.
  
  DQN используют нейронные сети для приблизительной оценки Q_t и Q_{t +1}
  и для минимизации среднеквадратичной ошибки (Mean Squared Error, MSE)
  между двумя сторонами этого уравнения.
  Это ведёт нас к первой проблеме.
  
  Проблема ?1:
  ошибка Беллмана представляет собой постоянно меняющуюся величину
  
  Ошибка Беллмана - это всего лишь MSE,
  вычисленная для двух сторон уравнения Беллмана.
  Рассмотрим формулу, используемую для вычисления среднеквадратичной ошибки:
  
  MSE(\hat y,y)=\frac{1}{N}\sum_{i=1}^N(\hat y_i-y_i)^2.
  
  Здесь \hat y- это прогнозируемое значение,
  а y- целевое значение.
  При решении задачи регрессии с использованием обучения с учителем,
  y - это фиксированное точное значение.
  Когда мы прогнозируем значение \hat y - нам не надо заботиться
  об изменении этого точного значения.
  
  Но при применении Q-обучения формулы
  
  \hat y=Q(s_t, a_t)и y=r_t+\gamma(1-d) \max_{a} Q(s_{t+1},a_{t+1})
  
  означают, что целевое значение y - это не точное базовое значение,
  а тоже спрогнозированное значение.
  Так как одна и та же сеть прогнозирует и значение y,
  и значение \hat y,
  это может привести к нестабильному поведению системы.
  При изменении Q_t меняется и прогноз для Q_{t+1} ,
  что ведёт к появлению цикла обратной связи.
  
  ......
  
  Проблема постоянно меняющейся величины при глубоком Q-обучении.
  Одна и та же сеть выдаёт и прогнозируемые, и целевые значения,
  что ведёт к появлению цикла обратной связи.
  //// Своеобразный "самосбывающийся прогноз" с печальным итогом.
  
  Решение проблемы ?1:
  применение для генерирования целевых значений сети,
  параметры которой обновляются медленнее,
  чем у сети, прогнозирующей обычные значения
  
  Практическое решение этой проблемы
  заключается в использовании двух различных,
  но схожих сетей для прогнозирования значений \hat y и y.
  Это позволяет стабилизировать процесс обучения.
  В первой DQN Q-сеть используется для прогнозирования \hat y.
  При этом в системе хранится старая копия Q-сети,
  параметры которой обновляются через фиксированный интервал обучения.
  Эта копия сети используется для прогнозирования значения y.
  Это позволяет обеспечить неизменность целевых значений
  в течение фиксированных периодов времени.
  Минус этого решения заключается в том,
  что целевое значение в процессе обучения несколько раз внезапно изменяется.
  
  Ещё одно решение,
  использованное в более поздней работе,
  выполненной в рамках проекта DeepMind,
  заключается в применении сети для прогнозирования целевых значений,
  веса которой представляют собой
  экспоненциальное скользящее среднее
  (Exponential Moving Average, EMA)
  весов сети, прогнозирующей обычные значения.
  EMA-веса меняются медленнее, но плавнее, чем обычные веса,
  что позволяет предотвратить неожиданные скачки целевых значений Q.
  Стратегия EMA в наши дни используется во многих эталонных RL-системах.
  Вот как это выглядит в коде:
  
  Экспоненциальное скользящее среднее
  
  def target_Q_update(pred_net, target_net, beta=0.99):
   target_net.weights = beta * target_net.weights + \
  
  (1-beta) pred_net.weights
   return target_net
  
  Проблема ?2:
  Q-обучение даёт слишком оптимистичные результаты
  
  Постоянно изменяющиеся значения - это не единственная проблема Q-обучения.
  Ещё одна проблема заключается в том,
  что прогнозы, сделанные с помощью Q-функций,
  оптимизированных с применением ошибки Беллмана,
  оказываются слишком оптимистичными.
  Хотя в обществе оптимизм и одобряется,
  слишком оптимистичные прогнозы способны довести RL-систему
  до состояния, когда от неё не будет никакой практической пользы.
  <Оптимизм>, с точки зрения обучения с подкреплением,
  это - когда алгоритм переоценивает то,
  какой результат R можно получить в будущем.
  Если вы представляете некую компанию,
  полагающуюся на RL в принятии важнейших решений,
  это значит, что, доверяя слишком оптимистичной системе,
  вы рискуете нажить проблемы.
  
  Что в Q-обучении является источником оптимизма?
  Как и в случае с проблемой постоянно изменяющихся значений,
  источником оптимизма является уравнение Беллмана.
  В начале обучения нейронная сеть точно не знает о том,
  каким будет реальное значение Q.
  Поэтому, когда сеть делает прогноз,
  для него характерна некоторая ошибка.
  Корень зла тут - операция max.
  Прогнозирование целевого значения,
  \max_{a} Q(s_{t+1},a_{t+1}),
  всегда будет приводить к выбору самого большого значения Q,
  даже в том случае, если это будет неправильное значение.
  Для того чтобы было понятнее - рассмотрим пример.
  
  .......
  
  Проблема оптимизма при Q-обучении.
  При использовании ошибки Беллмана Q-функция будет
  систематически переоценивать фактическое значение.
  
  Этот пример демонстрирует тот факт,
  что в ситуации неопределённости целевая Q-функция
  всегда будет вести себя оптимистично.
  Проблема заключается в систематичности этого оптимизма.
  Это означает, что DQN, из-за использования операции \max_{a} ,
  будет делать больше ошибок из-за оптимистичных оценок,
  чем из-за пессимистичных.
  Эта постоянная тяга к оптимизму в процессе обучения
  быстро превратится в серьёзную ошибку.
  
  Решение проблемы ?2:
  обучать две Q-сети и использовать ту,
  что даёт более пессимистичные результаты
  
  На решение этой проблемы направлен алгоритм Double Q-learning.
  Он реализуется путём обучения двух совершенно различных
  и независимых Q-функций.
  Для нахождения параметров сети алгоритм выбирает минимальное значение
  из тех, что выдают две Q-функции.
  Две Q-сети, используемые в такой системе,
  можно рассматривать как ансамбль сетей.
  Каждая сеть отдаёт свой голос за то значение Q_{t+1},
  которое она считает правильным.
  Побеждает голос, отданный за самое пессимистичное значение.
  В принципе, можно использовать не две,
  а N таких сетей для того чтобы получить больше голосов,
  но на практике для решения проблемы оптимистичных оценок
  достаточно и двух сетей.
  Вот как выглядят вычисления при использовании алгоритма Double Q-learning:
  
  def compute_target_Q(target_net1, target_net2):
   target_Q = minimum(target_net1, target_net2, dim=1)
   return target_Q
  
  При использовании этого алгоритма в системе, играющей в игры Atari,
  получились более консервативные результаты работы Q-функции,
  чем при применении обычного алгоритма DQN.
  
  Оценки значений, полученные при использовании алгоритмов DQN (красная линия)
  и Double DQN.
  Алгоритм DQN склонен к переоцениванию значений,
  а Double DQN даёт более консервативные оценки.
  Источник - https://arxiv.org/abs/1509.06461
  
  Итоги
  
  Мы обсудили две проблемы обучения Q-сетей
  и поговорили о том, как эти проблемы можно решить.
  Это - лишь небольшая часть тех сложностей,
  с которыми можно столкнуться, обучая RL-системы.
  К счастью, глубокое понимание этих проблем
  позволяет развить интуитивное представление об RL-системах.
  Это помогает решать данные проблемы в системах,
  используемых на практике,
  приводя в работоспособное состояние проекты,
  использующие алгоритмы обучения с подкреплением.
  
  .......
  
  //// Конец цитирования.
  
  Описанные практические способы преодоления проблем,
  порождаемых уравнением Беллмана,
  к сожалению, больше выглядят как "костыли",
  точнее как какие достаточно работоспособные, но "эвристические" приемы.
  И вопрос не в том, чтобы под эти "эвристики" подвести какой-то матаппарат,
  - хотя если это будет матаппарат не "оптимизации", а "устойчивости",
  то, может быть, это придаст совершенно новый "теоретический импульс RL -
  а сформулировать на основе практики их использования,
  эффективные рекомендации по построению как сложных архитектур нейросетей,
  так и методик их обучения.
  
  
  =======
  
  Когг Bing Общительный и Любопытный. Модель Kandinsky 2.1 нарисовала: d85278c1f65b4250a206ced71b0a6c68_00000
  
  Когг Bing Общительный и Любопытный. Модель Kandinsky 2.1 нарисовала: 7c4185e1818247cd93d8f06aaa030777_00000
  
  Когг Bing Общительный и Любопытный. Модель Kandinsky 2.2 нарисовала: d7f74cf2b791474b9a8570b8d91a5d85_00000
  
  Когг Bing Общительный и Любопытный. Модель Kandinsky 3.0 нарисовала:  ed28cbcbc4d74453902b54a028fd44a8_res_00000_image
  
  Когг Bing Общительный и Любопытный. Модель Kandinsky 3.0 нарисовала:  1c3384417a71417682c9a297c8831f4a_res_00000_image
  
  Тральщик Наставник. Модель Kandinsky 3.1 нарисовала:  46a55f2a-9867-412a-8232-3661880452cf
  
  Каравелла Copilot. Модель Kandinsky 3.1 нарисовала:  461de921-0511-4f6d-bcc5-dd690ca7c7b1
  Flag Counter
  Free counters!
  Flag Counter
  
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"