Size: a a a

RL reading group

2019 April 16

AP

Alexey Poddiachyi in RL reading group
Привет.

Объясните кто-то, пожалуйста, почему во всех реализация PPO (Proximal Policy Optimization) финальным слоем для policy используется или категориальное распределение, или диагональное гауссовское распределение?
Смотрел несколько реализаций, везде именно эти распределения.

Почему нельзя воспользоваться, например, софтмаксом? А если можно, то тогда как именно нужно взять у распределения log_prob (в русской литературе идет как плотность вероятности, насколько я знаю)?

Что если мне нужно наложить некую маску на мои actions, как это лучше сделать? Имею в виду, что не все actions доступны в разных states, и мне нужно убрать их из распределения (обнулить вероятность), чтобы агент не мог делать запрещенные действия.
источник

AG

Aleksey Grinchuk in RL reading group
Так категориальное и есть же софтмакс
источник

AG

Aleksey Grinchuk in RL reading group
Чтоб убирать actions можно использовать маску — это правда. Выдавать log_probs, например, слоем с софтмаксом, накладывать на них маску и потом перенормировывать.
источник

AP

Alexey Poddiachyi in RL reading group
Насколько я понимаю, софтмакс является как бы подвидом категориального распределения, но не соответствует ему полностью.

Например, в baselines от OpenAI экшены сэмплируются из multinomial distribution (которое является общим случаем категориального распределения). И там даже слова нет о софтмакс.
источник

АС

Артём С in RL reading group
У вас каша в голове, посмотрите какие-нибудь годные курсы.
Софтмакс — это функция, которая произвольный вектор превращает в вектор вероятностей (неотрицательных чисел, суммирующихся в единицу)
Распределение — это абстракция из теории вероятности, которую можно в том числе однозначно задать вероятностями всех возможных исходов (в дискретном случае). Чтобы задать категориальное распределение нужно K чисел от 0 до 1, суммирующихся в единицу. Откуда они пришли — из софтмакса или какой-то другой функции — не важно.
Так что софтмакс и категориальное распределение, вообще говоря, ортогональные понятия, но первое почти всегда используется для задания второго.

Правда, на практике, нужно писать код с поправкой на численную устойчивость, поэтому на практике почти всегда вычисления ведутся в log домене, так что реализации распределений во всех годных фреймворках обычно принимает на вход не сами вероятности, а их логарифмы в ненормированном виде (вероятности не обязаны суммироваться в 1, но всё же должны быть неотрицательны, правда, после логарифма могут стать такими), эти штуки называются логитами (logits). Логиты — что удобно — могут быть произвольными, никаких ограничений на них нет, софтмакс сделает их какими нужно, а софтмакс уже встроен в реализацию категориального распределения.

Из multinomial экшены семплируются, скорее всего, потому что в американской литературе люди не рассматривают категориальные (и Бернуллиевские) распределения как полноправные распределения сами по себе, они почему-то вместо этого говорят о мультиномиальных (и биномиальных) распределениях с одним испытанием. Ну или там странная среда, где нужно не одно из K действий сделать, а что-то более хитрое (слабо представляю, зачем может пригодиться мультиномиальное распределение с более чем одним испытанием)
источник

AM

Aleksandr Mikhailov ... in RL reading group
Артём С
У вас каша в голове, посмотрите какие-нибудь годные курсы.
Софтмакс — это функция, которая произвольный вектор превращает в вектор вероятностей (неотрицательных чисел, суммирующихся в единицу)
Распределение — это абстракция из теории вероятности, которую можно в том числе однозначно задать вероятностями всех возможных исходов (в дискретном случае). Чтобы задать категориальное распределение нужно K чисел от 0 до 1, суммирующихся в единицу. Откуда они пришли — из софтмакса или какой-то другой функции — не важно.
Так что софтмакс и категориальное распределение, вообще говоря, ортогональные понятия, но первое почти всегда используется для задания второго.

Правда, на практике, нужно писать код с поправкой на численную устойчивость, поэтому на практике почти всегда вычисления ведутся в log домене, так что реализации распределений во всех годных фреймворках обычно принимает на вход не сами вероятности, а их логарифмы в ненормированном виде (вероятности не обязаны суммироваться в 1, но всё же должны быть неотрицательны, правда, после логарифма могут стать такими), эти штуки называются логитами (logits). Логиты — что удобно — могут быть произвольными, никаких ограничений на них нет, софтмакс сделает их какими нужно, а софтмакс уже встроен в реализацию категориального распределения.

Из multinomial экшены семплируются, скорее всего, потому что в американской литературе люди не рассматривают категориальные (и Бернуллиевские) распределения как полноправные распределения сами по себе, они почему-то вместо этого говорят о мультиномиальных (и биномиальных) распределениях с одним испытанием. Ну или там странная среда, где нужно не одно из K действий сделать, а что-то более хитрое (слабо представляю, зачем может пригодиться мультиномиальное распределение с более чем одним испытанием)
логит != логарифм вероятности
источник

АС

Артём С in RL reading group
В случае с софтмаксом это так (речь про ненормированные вероятности)
источник

AM

Aleksandr Mikhailov ... in RL reading group
логит - это функция обратная к сигмоиде, наверное и обратная к софтмаксу?
источник

AM

Aleksandr Mikhailov ... in RL reading group
кажется логарифм вероятности не обратен софтмаксу
источник

АС

Артём С in RL reading group
А ты проверь
источник

AM

Aleksandr Mikhailov ... in RL reading group
ну хз, мб ты прав)
источник
2019 April 17

AP

Alexey Poddiachyi in RL reading group
Артём С
У вас каша в голове, посмотрите какие-нибудь годные курсы.
Софтмакс — это функция, которая произвольный вектор превращает в вектор вероятностей (неотрицательных чисел, суммирующихся в единицу)
Распределение — это абстракция из теории вероятности, которую можно в том числе однозначно задать вероятностями всех возможных исходов (в дискретном случае). Чтобы задать категориальное распределение нужно K чисел от 0 до 1, суммирующихся в единицу. Откуда они пришли — из софтмакса или какой-то другой функции — не важно.
Так что софтмакс и категориальное распределение, вообще говоря, ортогональные понятия, но первое почти всегда используется для задания второго.

Правда, на практике, нужно писать код с поправкой на численную устойчивость, поэтому на практике почти всегда вычисления ведутся в log домене, так что реализации распределений во всех годных фреймворках обычно принимает на вход не сами вероятности, а их логарифмы в ненормированном виде (вероятности не обязаны суммироваться в 1, но всё же должны быть неотрицательны, правда, после логарифма могут стать такими), эти штуки называются логитами (logits). Логиты — что удобно — могут быть произвольными, никаких ограничений на них нет, софтмакс сделает их какими нужно, а софтмакс уже встроен в реализацию категориального распределения.

Из multinomial экшены семплируются, скорее всего, потому что в американской литературе люди не рассматривают категориальные (и Бернуллиевские) распределения как полноправные распределения сами по себе, они почему-то вместо этого говорят о мультиномиальных (и биномиальных) распределениях с одним испытанием. Ну или там странная среда, где нужно не одно из K действий сделать, а что-то более хитрое (слабо представляю, зачем может пригодиться мультиномиальное распределение с более чем одним испытанием)
Спасибо за ответ. Вы, кажется, натолкнули меня на верный ход. И прошу прощения, наверное, я не до конца правильно поставил вопрос. Объясню, что вышло в конце. Надеюсь, что все мои размышления привели к правильному понимаю.

Все реализации PPO используют те распределения, которые мы обсуждали как последний этап выбора экшена.
Касательно категориального распределения. Большая путанница в названиях.
"The categorical distribution is the generalization of the Bernoulli distribution."
"On the other hand, the categorical distribution is a special case of the multinomial distribution"
При этом, если посмотреть реализацию этого распределения в pytorch, то под капотом у distributions.categorical делается сэмплирование из multinomial probability distribution. И да, делается одно испытание.  

Что касается софтмакса, меня интересовало, почему нельзя убрать из реализации PPO сэмплирование из одного из случайных распределений. Ответ - можно. Можно применить софтмакс, получить вектор вероятностей и взять экшн с максимальной вероятностью. Но, исходя из всего прочитаного за это короткое время, применение сэмплирования из одного из случайных распределений помогает улучшить исследование среды, а так как к концу обучения вероятности найлучших экшенов в стейтах будут близки к 1, то шанс выбора плохого экшена минимален.
Поэтому ход действий выходит следующим:
1. Получить feature vector из алгоримта (например, нейронной сети).
2. Применить к нему софтмакс и получить вектор веротяностей экшенов.
3. Передать этот вектор в выбранное распределение как probs и сделать из него сэмплирование.
Таким образом я могу легко наложить маску на свои экшены. И можно также сразу передать feature vector в распределение как logits.
источник

c

cydoroga in RL reading group
Alexey Poddiachyi
Спасибо за ответ. Вы, кажется, натолкнули меня на верный ход. И прошу прощения, наверное, я не до конца правильно поставил вопрос. Объясню, что вышло в конце. Надеюсь, что все мои размышления привели к правильному понимаю.

Все реализации PPO используют те распределения, которые мы обсуждали как последний этап выбора экшена.
Касательно категориального распределения. Большая путанница в названиях.
"The categorical distribution is the generalization of the Bernoulli distribution."
"On the other hand, the categorical distribution is a special case of the multinomial distribution"
При этом, если посмотреть реализацию этого распределения в pytorch, то под капотом у distributions.categorical делается сэмплирование из multinomial probability distribution. И да, делается одно испытание.  

Что касается софтмакса, меня интересовало, почему нельзя убрать из реализации PPO сэмплирование из одного из случайных распределений. Ответ - можно. Можно применить софтмакс, получить вектор вероятностей и взять экшн с максимальной вероятностью. Но, исходя из всего прочитаного за это короткое время, применение сэмплирования из одного из случайных распределений помогает улучшить исследование среды, а так как к концу обучения вероятности найлучших экшенов в стейтах будут близки к 1, то шанс выбора плохого экшена минимален.
Поэтому ход действий выходит следующим:
1. Получить feature vector из алгоримта (например, нейронной сети).
2. Применить к нему софтмакс и получить вектор веротяностей экшенов.
3. Передать этот вектор в выбранное распределение как probs и сделать из него сэмплирование.
Таким образом я могу легко наложить маску на свои экшены. И можно также сразу передать feature vector в распределение как logits.
Если не придираться к терминологии, то в целом вы правильно все написали
С распределениями там путаницы нет на самом деле
Рекомендую нырнуть туда поглубже - пригодится
источник

AP

Alexey Poddiachyi in RL reading group
cydoroga
Если не придираться к терминологии, то в целом вы правильно все написали
С распределениями там путаницы нет на самом деле
Рекомендую нырнуть туда поглубже - пригодится
Спасибо
Как раз ныряю)
источник

АС

Артём С in RL reading group
Семплирование можно убрать, если обучаться на соответствующей траектории не планируете, иначе градиенты сломаются
источник
2019 April 18

SK

Sergey Kolesnikov in RL reading group
хай гайз,
<вы видите красивое приветствие>

в :catalyst:-team настали тяжкие времена, когда в dl - уже 4 человека, а в rl - только 2
между тем планов и идей за развитие RL много.... прям очень много

tl;dr
только мы выпустили paper за RL (` https://github.com/catalyst-team/catalyst-rl-framework ), как сразу взяли и глобально отрефакторили это дело ( `https://github.com/catalyst-team/catalyst/pull/145 )
а в планах еще прикрутить SQL ( https://arxiv.org/abs/1702.08165 ) и IQR (` https://arxiv.org/abs/1806.06923 `), а также достать старый private пайплайн за self-play PPO и добавить весь стандартный on-policy (REINFORCE, TRPO, PPO), благо архитектурные наработки уже есть
как можно видеть, планов много, а рук что-то маловато...

в общем, если кто горит RL и хочет развивать RL in the wild - пишите, у нас есть божественные конфиги, которые описываются и дают конфигурировать просто все ( https://github.com/catalyst-team/catalyst/blob/refactoring/rl-2.0/examples/rl_gym/config_sac.yml ) + чтобы можно было легко добавлять туда что-то свое
goto ODS #tool_catalyst
источник
2019 April 20

П

Пётр in RL reading group
Про Dota 2 и OpenAI

ИИ OpenAI недавно победил профессиональную команду игроков в Dota 2. Сейчас они захостили эксперимент, где предлагают всем желающим поиграть с этим ИИ. Эксперимент закончится ночью с воскресенья на понедельник по Московскому времени. Если кто-то хочет поиграть, то вам сюда: https://arena.openai.com/

- Они делают свой стрим, где показывают некоторые из игр ИИ: https://www.twitch.tv/openai
- Лидерборд, где можно посмотреть лучшие результаты людей https://arena.openai.com/results
На данный момент ИИ наиграл уже 12400 игр с людьми, ИИ выигрывает в 99.3% случаев.
- Запись стрима игрока, который несколько раз уже победил OpenAI: https://www.twitch.tv/videos/413471944
Они научились выигрывать просто убегая от ИИ, постепенно вынося их базу. ИИ при этом непрерывно за ними бегает, а поймать не может.

- По поводу запуска арены есть блогпост в блоге OpenAI: https://openai.com/blog/how-to-train-your-openai-five/
- Есть AMA (Ask me anything) на Reddit: https://www.reddit.com/r/DotA2/comments/bf49yk/hello_were_the_dev_team_behind_openai_five_we/

Некоторые комментарии от меня
- Цель эксперимента — понять, возможно ли проэксплуатировать данный ИИ и научиться всегда выигрывать.
Их предыдущий 1vs1 ИИ проигрывал людям, так как те нашли несколько стратегий абуза ИИ. AlphaStar от DeepMind так же была успешно проэксплуатирована человеком в лайв-игре. Стратегия с убеганием — это тоже абуз, человек бы что-то на такое придумал по ходу игры.
- Агенты ИИ общаются между собой сообщениями из некоторого конечного набора в чате.
На стриме от OpenAI можно заметить сообщения в чате: "Я играю в поддержку и иду покупать предметы", "Я буду сейчас главным, все за мной".

Про алгоритмы, как со стороны человека, который в этом немного шарит
- Очень простой алгоритм PPO показывает себя намного лучше, чем какие-то более сложные, типа иерархического RL. Они показали, что выгоднее было увеличить число параметров в 100 или 1000 раз, чем использовать более сложный алгоритм.
- OpenAI пришлось создать систему распределённого RL, которая называется Rapid. При помощи данной системы уже был обучен другой агент управления роботизированной рукой. Подробнее тут: https://openai.com/blog/learning-dexterity/
- Им пришлось научиться, как говорят исследователи, выполнять хирургию над весами сети: вручную вставлять веса одной сети в другую.
Этот процесс был очень неприятный и несколько раз всё ломалось и ИИ начинал действовать очень странно.
- Обучение агента заняло примерно 10 месяцев.
Суммарно это занимает 800 петафлопс-дней тренировки. Стоимость обучения — приблизительно $110тыс долларов. Во время этого обучения, ИИ играет примерно 45 тысяч лет непрерывной игры в Dota 2.

Я очень жду статью как от DeepMind про AlphaStar, так и про OpenAI Five.
источник

IB

Ilya Boldyrev in RL reading group
Жаль там нашли уже победную стратегию, с которой боты не могут справиться, так что винрейт текущей версии алгоритма, как мне кажется, будет только падать (к слову, он уже упал, с 99,8% до 99,3% за день). Интересно будет посмотреть как разработчики справятся с этой "уязвимостью".
источник

EZ

Evgenii Zheltonozhsk... in RL reading group
Ilya Boldyrev
Жаль там нашли уже победную стратегию, с которой боты не могут справиться, так что винрейт текущей версии алгоритма, как мне кажется, будет только падать (к слову, он уже упал, с 99,8% до 99,3% за день). Интересно будет посмотреть как разработчики справятся с этой "уязвимостью".
Никак, они не будут менять ничего
источник

EZ

Evgenii Zheltonozhsk... in RL reading group
Более того вроде как больше никаких соревнований не планируется
источник