Knowledge Accumulator – Telegram
Knowledge Accumulator
5.45K subscribers
138 photos
277 links
Реалистичный взгляд на технологии и мир
Download Telegram
Reinforcement Learning - самое главное.

Это обобщённая постановка задачи для обучения интеллектуальной системы.
В ней происходит обмен информацией между агентом (системой) и средой (внешним миром).

Поочерёдно среда отправляет агенту какую-то информацию о своём состоянии и награду агента, а агент в ответ выбирает действие и отправляет его в среду. Награда при этом может не зависеть от сделанного только что действия. Среда в общем случае является чёрным ящиком.

Наша цель - построить агента, максимизирующего суммарную получаемую награду из среды.

Прелесть данной постановки в том, что в таких терминах можно описать абсолютно что угодно - компьютерную игру, рекомендации музыки, футбол, выживание в природе, жизнь (если вы придумали себе награду).

Но что многие не замечают - прелесть постановки является её же проклятием. Про это будет в вечерном посте.
👍9
Reinforcement Learning - главная проблема

То, что в терминах RL можно описать всё, что угодно, показывает, как мало априорной информации нам известно в данной постановке задачи.
- Среда - это чёрный ящик, про неё может быть ничего не известно.
- Награды могут жить своей жизнью, или могут быть сколь угодно редкими.
- Среда может быть рандомной, а информация о состоянии может быть неполной.

На это RL отвечает специфичными методами, которые это берут в расчёт.
При этом в реальных задачах это очень часто не так.

Именно поэтому применений RL в реальности меньше, чем у простого DL - очень часто мы можем, используя информацию о задаче, свести её к частному случаю, в котором есть гораздо более эффективные методы.

Конечно, есть ситуации, когда мы не можем никак свести к более простой постановке, и в этом случае RL как крайняя мера может нам помочь.

В канале я разберу набор статей про применение RL, и аргументирую свою позицию из этого поста.
👍10👾4
Playing Atari with Deep Reinforcement Learning [2013] - с чего начался хайп

Игры из набора Atari 2600 - это около 50 отлично вписывающихся в RL задач:
1) Каждый кадр мы получаем картинку из игры на входе
2) Мы можем нажать одну из 18 комбинаций кнопок в ответ
3) Каждый кадр среда нам отдаёт награду - изменение "очков" в игре.

Мысль о том, что играть в компьютерную игру система можно научиться сама с полного нуля, ускоряет сердцебиение и сводит с ума всех мечтающих о создании GLaDOS в реальной жизни.

В рамках научпопа могу дать такую интуицию принципа обучения:

Собирая траектории "<>-действие-состояние-награда-действие-состояние-награда-<>" мы можем пробрасывать информацию об отложенных наградах "назад во времени" с помощью хитрого способа обучения - таким образом можно научить систему совершать цепочку правильных действий, даже если положительная награда за них будет только в конце цепочки.

Метод в статье был использован достаточно базовый, но его хватило, чтобы обойти человека в ряде игр, требующих простой стратегии для победы - например, Pong или Breakout (первые 2 игры на картинке).
👍10👾4
Обратная сторона игры в Atari

Посмотрим на кривую обучения, приведённую в статье, для игры Breakout - это та, где нужно отбивать красный "кубик" доской, которую вы перемещаете в нижней части экрана.

Одна эпоха по оси времени - это 50000 апдейтов весов, то есть нужно больше миллиона апдейтов, чтобы выучить элементарную стратегию - поддерживать доску на одном уровне с мячом.

В режиме Supervised learning при размеченном датасете мы бы могли обучить такую нейросеть гораздо быстрее и используя гораздо меньше данных - всего для обучения в каждой игре было сыграно по 10 миллионов кадров. Но в рамках поставленной задачи предполагается, что такого датасета у нас нет, и нейросеть учится сама методом проб и ошибок, что и делает процесс обучения чудовищно жадным в плане данных.

Отмечу, что революции в data-efficiency с тех пор не произошло, и все следующие годы количество данных для обучения только росло. Но про те безумные числа мы поговорим в другой раз.

Конечно, это не приговор - всего лишь нужно научиться переносить знания между доменами и средами. А это уже совсем другая история.

@knowledge_accumulator
👍6💩4🔥1😢1
Проблема Montezuma's Revenge

Большие проблемы у базовых RL-алгоритмов возникают тогда, когда награды за действия возникают редко, и нет шансов получить положительную награду просто случайным нажатием кнопок - а значит, вы не выучите абсолютно ничего с момента инициализации.

Это называют проблемой exploration - нам нужно "исследовать" среду и побывать в как можно большем наборе состояний среды, и уже в них пытаться нажимать случайные кнопки 😄

Для решения изобрели, пожалуй, десятки методов на основе intrinsic motivation - это когда вы конструируете искусственную награду за исследование новых состояний, сами её считаете и добавляете к настоящей награде. Обучение на такую награду позволяет мотивировать агента совершать действия, приводящие к новому состоянию среды.

В 2018 году был предложен абсурдно простой и при этом эффективный метод, который закрепился во многих последующих работах. Про такой эффект я уже говорил.

Завтра я про него расскажу, не переключайтесь!

@knowledge_accumulator
👍7
Как мы пытаемся сводить RL к Supervised Learning

Представьте, что вы разрабатываете рекомендательную систему для интернет-магазина.
Действия агента - это показы пользователю товаров, а положительной наградой является покупка.

Покупка может произойти через время после показа, и в результате награда будет отложена с точки зрения показа этого товара.

Мы могли бы применить в данном случае RL, но благодаря пониманию задачи мы можем привязать награду к нужному действию с помощью lookahead - заглядыванию в будущее при расчёте награды каждого показа. Не 100% надёжно, но близко.

Если у каждого действия есть конкретная награда, то при некотором предположении мы можем отказаться от "долгосрочного" RL-планирования и решать задачу с помощью Supervised Learning - по векторам фичей пользователя и товара предсказывать награду, и потом по предсказанию ранжировать в проде.

Это предположение - независимость пользовательского состояния от наших действий - не совсем верно, но такая декомпозиция позволяет нам радикально уменьшить шумность обучения, а при ограниченных данных это важно.

@knowledge_accumulator
👍5
Exploration by Random Network Distillation [2018]

Как нам решить проблему исследования среды и награждать агента за посещение новых состояний?

1) Берёте две случайные свёрточные сети. Одна - учитель, другая - ученик.
2) На встречающихся данных тренируете ученика предсказывать то же, что и учитель. Учителя не трогаем.
3) Если наша ошибка высокая, значит мы подали более новое состояние, если низкая, то более баянистое.
4) Добавляем MSE предсказания ученика с весом к обычной награде из среды.

Удивительно на первый взгляд, но результат прорывной - даже без настоящей награды нейросеть может научиться бродить и исследовать "мир" в игре с врагами и препятствиями.

На картинке можно посмотреть иллюстрацию того, как оно работает в реальности, с пояснениями, наслаждайтесь :)

@knowledge_accumulator
👍9😱3
Подскажите, сколько постов в день вам комфортно читать?
Я не очень в курсе признанных практик...
С одной стороны, хочется многое рассказать, а с другой, есть страх вас утомить
Anonymous Poll
30%
1 каждый день
24%
2 каждый день
35%
1 каждый будний день
4%
2 каждый будний день
8%
Особое мнение в комментах
R2D2 [ICLR 2019]: много железа + смекалка = прорыв

В данной работе мы наблюдаем революцию в итоговой производительности - если посчитать очки в каждой из 57 игр Атари, нормализовать их на человеческий результат и взять медиану, получается 2000%. У ближайшего конкурента 400%, а у далёкого предка только 50%.

Всё благодаря комбинации нескольких удачных решений:
1) Под капотом теперь LSTM, которую учат на сохранённых траекториях агента в среде, грамотно обходя проблему холодного старта скрытого состояния LSTM.
2) Огромное количество "воркеров", собирающих данные - алгоритмы в RL любят, когда данные для обучения собраны свежей стратегией и их много. Особенно, когда у вас LSTM.
3) Набор хорошо закрепившихся RL-специфичных улучшений, про которые я не рассказывал.

Для обучения были собраны десятки миллиардов кадров. Без симулятора такой подход не имеет смысла.

Картинки: на первой производительность алгоритмов в зависимости от времени обучения в часах, на второй - в зависимости от количества кадров (угадайте, какая из них в аппендиксе).

@knowledge_accumulator
👍4🔥1🍓1
Never Give Up [2020] - следующее поколение exploration в RL.

Random Network Distillation (RND) создаёт награду для агента за посещение новых состояний в рамках всего обучения. В этой работе добавляют награду за посещение новых состояний в течение одного эпизода.

Как определить новизну?
1) Учат хитрый эмбеддинг состояния - обучаемые эмбеддинги (из отдельной модели) от 2 соседних состояний подают в MLP для предсказания совершённого агентом действия. Учат так для того, чтобы в эмбеддинге содержалась только релевантная для агента информация.
2) В течение эпизода хранят в памяти эмбеддинги всех посещённых состояний.
3) Чем ближе полученный эмбеддинг на каждом новом шаге к эмбеддингам из памяти, тем ниже бонус.

2 вида бонусной награды - эпизодическую и глобальную - умножают друг на друга и добавляют к обычной награде. Глобальную клипают, потому что хотят сделать её влияние более мягким.

Схема бонусной награды на картинке. По результатам обходит на 50% R2D2 и RND на играх со сложным исследованием среды.

@knowledge_accumulator
👍5🔥3
Agent57 [2020] - Atari повержен

Нам важно не столько то, как мы обходим человека в среднем по всем играм, а то, как мы работаем в худшем случае - именно здесь и добивается прорыва Agent57, который обходит человека во всех 57 играх Atari.

Данный алгоритм - это модификация Never Give Up (NGU), со следующими изменениями:

1) Мы теперь учимся предсказывать отдельными нейросетями 2 вида награды - настоящую и исследовательскую (из NGU). А смешивать их уже будем во время применения, обозначим вес NGU-награды как beta.

2) Используется многорукий бандит, который для каждого воркера, собирающего данные, сэмплирует значения beta и горизонт планирования (gamma). Таргетом для выбора этих значений является производительность в игре - набранная суммарная награда.

У каждого воркера при этом есть своя неизменная "рандомизация" (epsilon) - вероятность, с которой будет выбрано случайное действие во время применения.
Такое кол-во степеней свободы позволяет системе адаптивно выбирать такой набор параметров, который помогает лучше всего обучаться в данный момент.

80 миллиардов кадров - и готово.

@knowledge_accumulator
👍11
General Problem Solver - наконец-то AI способен решать задачи в произвольном домене.

С новыми возможностями искусственного интеллекта нас ждёт всеобщая автоматизация и потеря рабочих мест - утверждают известные экономисты. Во второй раз в истории термин "технологическая безработица" резко набирает популярность - на этот раз мы уже видим для этого реальную причину.

Как пользоваться алгоритмом? Нужно всего лишь:

1) Задать пространство состояний
2) Задать возможные переходы между ними
3) Задать начальное и целевое состояние
4) Запустить и через какое-то время программа найдёт решение.

Всё описанное произошло в 1959 году. В алгоритме используется поиск по всему графу состояний в поиске целевой вершины. Проклятие размерности, влияющее на размер графа, видимо, казалось каким-то легко обходимым препятствием.

Оставайтесь с нами, ибо в ближайшее время я расскажу про то, как обстоят дела с интеллектом у машин спустя >60 лет после появления брут-форс-ИИ. Вы удивитесь, насколько всё недалеко ушло.

@knowledge_accumulator
👍14😁2
Недавно совершенно внезапно я оказался в новой для себя роли - поучаствовал в съёмке видео про нейросети на канале моего друга Влада. Влад не работает в этой сфере, и это видео может стать для вас хорошим взглядом извне.

Давать комментарий было интересно, и я надеюсь, что в момент коллективного помешательства это поможет кому-то увидеть точку зрения, отличную от того, что вы можете часто наблюдать.

Всем хорошей пятницы! ❤️
👍5🔥4👏1
On the Measure of Intelligence [2019]

Что такое интеллект? Этот вопрос становится всё более важным, так как человечество начинает создавать системы, демонстрирующие свойства, которыми до сих пор обладали только люди.

В такие моменты картины мира в наших головах начинают давать сбой - в отсутствие строгих определений мы начинаем путаться и не очень понимаем происходящую ситуацию.

На мой взгляд, отличную попытку определить интеллект делает автор данной работы (F. Chollet, создатель Keras):
The intelligence of a system is a measure of its skill-acquisition efficiency over a scope of tasks, with respect to priors, experience, and generalization difficulty.

Проще говоря, интеллект это про приобретение умений, а не про то, что умеет делать та или иная система. Такой подход позволяет осознать, что мы всё ещё работаем с низкоинтеллектуальными системами, потому что их способность приобретать умения сильно ограничена.

Очень советую к прочтению эту работу всем, кого интеллект интересует как то свойство системы, которое он когда-то хочет увидеть в компьютерах.

О предлагаемом способе измерять интеллект поговорим в следующем посте.

@knowledge_accumulator
👍11🔥3
Abstraction and Reasoning Challenge [2019] - простейший тест на интеллект

Способна ли система понимать простые зависимости по нескольким примерам? Именно это проверяет данный бенчмарк.

Говоря формальнее, тестируемый субъект должен посмотреть на несколько (1-5) пар образцов "вход-выход", понять, в чём закономерность, и научиться генерировать правильный выход по тестовому входу.

"Задачки" являются очень простыми для любого человека, и он решит около 90% из датасета, понимая решение почти всегда за несколько секунд.

Одна из таких задачек есть на картинке - что нужно сделать с картинкой слева, чтобы она стала картинкой справа? Вы понимаете, как будет выглядеть выход, если, например, подвигать зелёные прямоугольники, или заменить цвета на другие?

На основе этого бенчмарка было организовано весьма необычное соревнование на Kaggle, где я с командой даже взял золото 😄

А в следующем посте я расскажу его итоги и решение, которое заняло первое место!

@knowledge_accumulator
👍103🔥1
Самый умный ИИ в Abstraction and Reasoning Challenge

1) Определим 142 операции вида *картинка -> картинка*.
Это преобразования картинки, такие как "соедини точки одинакового цвета", "отрази картинку", "отфильтруй цвет" и т.д. Список операций был составлен, смотря на тренировочные задачки из соревнования.

2) Когда система встречает новую задачку, она пытается применить всевозможные последовательности этих операций (не длиннее 4) к входам-образцам. Ищем те последовательности, которые дают правильный ответ на всех образцах.

3) Применяем найденные верные программы к тестовому входу.

4) Всё это пишем на плюсах очень аккуратно и эффективно, чтобы влезть по ограничениям.

5) Решаем 20% задачек и получаем первое место!

Моё решение было на питоне и я пытался применять эволюционный алгоритм для поиска программы, что, вероятно, только испортило результат...

Другой класс решений был заточен под конкретный подкласс задачек, в которых нужно было выбрать один из объектов на картинке и выдать его как ответ. Там кто-то даже применял ML, и в итоге мы с одним из таких решений объединились в команду.

Ну как вам, далеко мы продвинулись за 60 лет?

@knowledge_accumulator
👍5😁4🔥2😢1
Что можно вынести из Abstraction and Reasoning Challenge

Если прочитать статью и посмотреть глазами на задачки, можно заметить, что априорные концепции, зашитые в тест, очень простые - понятие "объектности", элементарная арифметика, элементарная геометрия объектов. Никакого языка, зрительных образов, сложной логики. Программа на C++, генерирующая ответ почти на любую задачу, займёт не так много строк.

При этом определить такой набор "подпрограмм", склеивая которые, можно сгенерировать решение, оказалось слишком сложно:
1) Если они будут слишком простые, мы не сможем сгенерировать достаточно длинные программы
2) Если они будут слишком сложные, мы не покроем большое количество задач
3) Если их будет слишком много, мы сможем генерировать только очень короткие программы.

Так что, поиск (перебор) это тупик в развитии машинного интеллекта?

Я считаю, что нет. Тупиком является только поиск по всем вариантам. Но если нам удалось бы каким-то образом направлять поиск так, чтобы перебирать как можно меньше программ в поиске решения, то наша система научилась бы решать тест за адекватное время. И именно направлять поиск человечество пока ещё только учится делать.

Когда это получается - результат получается потрясающий. О примерах такого мы и поговорим в следующих постах.

@knowledge_accumulator
👍13
AlphaZero [2018] - история о плодотворной дружбе поиска и глубокого обучения

Обобщая, есть 2 поколения подходов в настольных играх:

1) Поиск по всем вариантам с оптимизациями
Шахматные алгоритмы, начиная с появления компьютеров, как минимум до Deep Blue [1997], работали на основе таких подходов. В глубине души они по эффективности похожи на полный перебор, но засчёт хитростей (вроде дебютной книги и эвристических оценок позиций в листьях дерева поиска) алгоритмам удаётся как-то работать.

2) Направленный поиск с помощью обучаемой функции полезности
Именно в этом и состояла революция AlphaGo (и её потомка AlphaZero). Оказалось, что обучаемая функция полезности действия в данной позиции позволяет перебирать радикально меньше вариантов ходов из каждой позиции. Она позволяет строить дерево поиска на больше ходов вперёд, потому что мы грамотно выбираем ходы при переборе.
Что интересно, обучается данная функция довольно просто - достаточно генерировать данные, садя алгоритм играть против себя же и своих прошлых итераций, и учить её предсказывать результат игры. В результате система легко обходит человека в шахматы и го.

Слабые точки AlphaZero понятны - требует много данных, обучается отдельно под одну игру. Но все революции за раз не совершить!

@knowledge_accumulator
👍7🔥61
MuZero [2020] - AlphaZero выходит из плена настольных игр

Попытка моделировать динамику среды (то, какими состояние и награда у среды будут следующими, если знаем текущее состояние и действие агента) - это отдельная песня в рамках RL, которая обычно не даёт такого профита, который позволяет компенсировать сложность подхода. Всё потому, что генерировать состояния слишком трудно из-за неопределённости в среде и высокой размерности состояния.

Тем не менее, в рамках MuZero пытаются применить подход к выбору действий с помощью планирования, как в AlphaZero, в ситуации, когда доступа к модели среды нет.

Что делают с проблемой сложности среды? Оказывается, можно просто забить на состояния, и при обучении своей модели динамики среды пытаться предсказывать только будущие награды и действия нашей стратегии. Ведь чтобы их предсказывать, нужно извлечь всё самое полезное из динамики и не более. Удивительно, но это работает! Более того, эта система может играть в Го на уровне AlphaZero, у которой доступ к модели есть.

Я думаю, что отказ от попытки предсказывать будущее состояние это верно, потому что убирает ненужную сложность. От этого отказались в RND, NGU, в MuZero и не только.
Глобально говоря, от этого имеет смысл отказываться всегда, когда генерация не является самоцелью. И я думаю, что это рано или поздно будут делать во всех доменах, даже в текстах.

@knowledge_accumulator
👍7🤔2
AlphaStar [2019] - мы упёрлись в лимит self-play learning?

С одной стороны, перед нами романтичная история о том, как Oriol Vinyals, будучи в юности крутым Starcraft-игроком, стал ML-исследователем и через полтора десятка лет изобрёл первую Grandmaster-level-систему для Starcraft. В этом подкасте у Lex Fridman он рассказывает много интересного об этом проекте, советую интересующимся.

С другой стороны, при переходе на такой уровень сложности среды мы начинаем видеть пределы такого метода обучения, который используется здесь (он похож на AlphaZero):

1) Без использования человеческих знаний и данных это не работает.
В отличие от Go, в Starcraft вы не можете обучить сильный алгоритм, плавно меняя вашу стратегию, начиная с рандомной. В Go вы можете начать из рандома, потом играть лучше рандома, потом ещё лучше и так далее. В Starcraft вы сразу же натыкаетесь на локальный максимум, в котором вы берёте всех своих стартовых юнитов и идёте бить морду противнику, а не строить базу.

2) Количество данных, которое тут требуется, безумно. Увеличение размерности печально влияет на способность алгоритмов обучаться. Тут мы и видим проблему низкого интеллекта таких систем - они не могут использовать данные так же эффективно, как это делает человек.

В общем, применение прикольное, но технологии у нас пока ещё совсем слабенькие.

@knowledge_accumulator
👍5🔥1