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

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

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:


 Ваша оценка:
  • Аннотация:
    Выжимка информации из Инета по "обучению с подкреплением".
    Предварительный анализ.
    Крайнее изменение 03.03.2024

  
  "... И все же программный конструкт, в отличие от слов поэта,
  реален в том смысле, что он движется и работает,
  производя видимые результаты, отличные от него самого.
  Он печатает результаты, рисует картинки, издает звуки,
  двигает манипуляторами.
  В наше время волшебство мифов и легенд стало реальностью.
  Стоит набрать правильное заклинание на клавиатуре,
  и экран дисплея оживает,
  показывая вещи, которых никогда не было
  и не могло быть."
  
  Фредерик Брукс - "Мифический человеко-месяц".
  
  Оглавление:
   Вместо предисловия.
   Введение в "обучение с подкреплением".
   Еще одно введение в "обучение с подкреплением".
   Терминология "обучения с подкреплением".
   "Обучение с подкреплением" для "чайников".
   Проблемы обучения с подкреплением.
   Классическое изложение обучения с подкреплением.
   Комментарии Bing к "краеугольным постулатам" RL.
   Немного информации о лидере в области обучении AI-агентов играм.
   "Конституция роботов" и констатация реальной ситуации.
   ИИ-системы осваивают классическую геометрию.
   На пути к ИИ общего назначения - взгляд пятилетней давности.
   ROS - Robot Operating System.
   Обучение в воображении.
   Метод Policy Gradient для "чайников".
   Model-Based алгоритм для "чайников".
   Обучение в воображении для настоящих "героев-отморозков".
  
  Иллюстрации:
   Когг "Bing Общительный и Любопытный" от "Модели Кандинский 2.1".
   Когг "Bing Общительный и Любопытный" от "Модели Кандинский 2.2".
   Когг "Bing Общительный и Любопытный" от "Модели Кандинский 3.0".
  
  
  =========
  
  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".
  С чем Вас и поздравляю.
  
  А если серьезно, то только в таких дискуссиях и можно почувствовать
  всю сложность стоящих перед "обучением с подкреплением" задач и проблем.
  
  
  =======
  
  Когг 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
  Flag Counter
  Free counters!
  
 Ваша оценка:

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

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

Как попасть в этoт список
Сайт - "Художники" .. || .. Доска об'явлений "Книги"