Pull to refresh

Comments 34

Спасибо за перевод.

Как в свое время в статистических моделях была выявлена проблема «переобучения» (overfitting), так здесь вырисовывается аналогичная проблема пере-подкрепление.
Впрочем, толковым педагогам, дрессировщикам, да и просто родителям эти проблемы известны.

Выход, я думаю, будет найден в разработке очередного слоя функций «кнута-и-пряника», а те, в свою очередь, будут опираться на зависимость толерантности к стимулирующим факторам (снижение восторга от «печенек» и привыкание к «кнуту») от потенциально ВСЕГО. И пока по всем локальным экстремумам пропутешествуешь…

Ну или начнут учить студентов, как обучать робота, который будет учиться обучать роботов как обучать роботов людей. Денег-то вона сколько! Миллиарды!

и еще… Честно сказать, про наличие собственных хорошо (или плохо) воспитанных и обученных детей у авторов глубинного и прочих обучений мне иногда интереснее, чем знать то же самое у политиков.

Если бы мог — плюсанул бы перевод еще раз за спровоцированное обсуждение по ML


в сторону философии, но на самом деле, я считаю, по теме

Начнем издалека


  1. Мы все боимся алгоритмов, $$inline$$O(n)$$inline$$.
    Не дай бог, что-нить вычислительное растет $$inline$$O(n^2)$$inline$$. Непорядок! Люди тратят год, чтобы уменьшить время вычисления с 1.25сек до 1.18сек. За это же время по Закону-Не-Помню-Его-Имени доступная вычислительная мощность вырастает в два раза при таком же падении цены.


  2. В ML они смело добавляют слой абстракции.
    Круто! Вот сейчас мы как выпрыгнем, как выскочим! и всех разом победим.
    Да, вырастут требования к вычислительной мощности. Но ведь по Закону-Не-Помню-Его-Имени доступная вычислительная мощность вырастает в два раза.


  3. Ребят, скажу вам по секрету. Только между нами! Я сам это услышал 33 года назад в местах "под грифом".
    Добавление слоев абстракции, это, как правило, рост $$inline$$Fib(n)$$inline$$, где $$inline$$Fib(n)$$inline$$ — [ряд Фибоначи] (https://en.wikipedia.org/wiki/Fibonacci_number) (РФ).
    Объяснять почему?
    Почитайте про первое (из современных) применений РФ в описании размножения кроликов в Австралии. Это не экспонента, даже. Это быстрее любой экспоненты.
    Т.е. требования по вычислительным затратам по любому обгонят рост любых доступных вычислительных ресурсов, хоть они и растут по Закону-Не-Помню-Его-Имени


  4. Что делать?!!!

Убивать!!!


Убивать самые нижние ("тривиальные") слои в модели, чтоб не пожирали ресурсы. Строить эффективные фичи, и убивать все остальные.
В принципе, чем и объсняется, по-моему, относительный, пусть и кратковременный, успех DL.


Сам я в этой области уже не работаю. Но по старой памяти интересуюсь.
Вот этот кусочек знаний, которым я поделился… Я не знаю, найдете ли вы это на первых трех страницах гугла.


И еще.
Поскольку уже все равно кат запилил...


В обсуждении очень наглядно виден "водораздел" между "Type A Data Scientist" и "Type B Data Scientist" (классификация отсюда).


Я все жду, когда в названии вторых "отвалится" Science.
Впрочем, может и не отвалиться. Гордое сто пятьдесят лет назад слово "Инженер" в свое время стоптали до "инженер по технике безопасности" при помощи тогдашних политехов. Сейчас некогда гордое слово "Ученый" убивают разбавлением с помощью гугла и фэйсбука.


Удачи!


ЗЫ. Заранее прошу прощения, если мои попытки латеховских вставок не сработали. Предосмотр и редактирование комментариев с латехом не дружат. Было бы приятно, если бы поправил кто.

Я использую RL для локомоции антропоморфного робота изучаю RL, чтобы попытаться его использовать для локомоции антропоморфного робота IRL.


План: в отличие от паркур-бота не управлять всеми сочленениями, а получить лишь траектории ключевых точек, а дальше классическая инверсная кинематика и тому подобное. Размерность задачи проще, должно быть проще обучить. Наверное.


Почем? А почему бы и нет.


Текущее состояние: гм… изучение… Простейшие среды из gym. Как, черт возьми, они проектируют структуру самих сетей и подбирают гиперпараметры?

А где изучаете? Можете поделиться ссылками в ЛС?
А где изучаете? Можете поделиться ссылками в ЛС?

Я думаю да, если прицеливаться при помощи расстояния Левенштейна.

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


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

Вы, в прочем как и они, пытаетесь укрепить шаткий каркас при помощи палок и всяких липких штук. Грубо говоря, на алгоритм который оперирует множествами пикселей, вы пытаетесь прилепить философские абстракции из гораздо более высоких уровней.
Обобщение различных обученных моделей для совместного взаимодействия будет порождать хаос, и сложность будет расти в геометрической прогрессии к количеству моделей.
Попробуйте отойти от философии и изложить ваше виденье в виде конкретных алгоритмов на любом языке программирования. Не думаю что у вас выйдет что.
Нужны другие подходы к обобщению примитивных раздражителей. И изначально нужно понимать, что именно вы хотите получить в качестве результата. Причем желательно что бы это было максимально конкретизировано, а не " ну вот значит я говорю а оно такое хоба и бац".
Дальше можно развести беседу в которой рассмотреть нервную систему в виде «конечного автомата». Просто количество входящих/исходящих сигналов настолько огромно, что нам тяжело это структурировать.
Про сложность системы я с вами согласен. Однако те же компьютерные науки выработали вполне работающее решение — повышение уровня абстракции.

То есть, вместо выдумывания — как заставить один уровень нейросетей работать, можно попытаться реализовать многоуровневую систему, каждый следующий уровень которой будет оперировать уже обработанными данными с предыдущего уровня.

Насчет отхода от философии — даже в компьютерных науках есть такая отчасти философская штука как архитектура приложений и систем. Да, это теоретические построения. Просто на определенном уровне понимания приходит мысль, что лучше хорошей практики может быть только хорошая теория. В статье мы ясно видим — есть ряд хороших практик. Нужна хорошая теория, и психология может подсказать — в каком направлении ее искать. Междисциплинарная синергия — довольно надежная кладезь новых идей.
Именно через повышение уровня абстракции это и работает. Есть только одно большое такое НО. Я в своей модели реализовал автоматическое и неограниченное повышение уровней абстракции. После обобщения одной единственной книжки, получилось 93 уровня. Я хочу сказать, что предложенное вами решение с нейросетями сложно реализуемо. Уровни нарастают очень быстро. И при этом учитывайте что десяток элементов на одном уровне может отличаться всего парой элементов из уровня ниже.
С таким подходом очень быстро упретесь в нехватку железа.
К тому же предложенный вами подход будет сложно обучать чему либо. В связи с необходимостью понимания вами что именно обобщилось на каждом уровне и что с этим делать на следующем уровне.
Имхо. Но единственно решение это специализированная структура описывающая все разнообразие множеств и их отношений между собой. При этом ничего не мешает нам реализовать наши собственные действия( в виде множеств) в рамках этой структуры. И воздействовать посредством этих множеств на внешний мир. Но тут тоже не все просто. Есть масса нюансов.

"но по количеству термов". Совсем русский забыли? Количеству членов.

У людей такое тоже бывает. Максимальное подкрепление дает употребление героина. Поэтому, если агент (человек) откроет для себя героин, то сможет максимизировать награду без «лишних» телодвижений
Спасибо за перевод. Его нужно снабдить грифом "ЧИТАТЬ ВСЕМ!" (ИМХО особая польза будет дилетантам в ИИ, а то эйфория просто зашкаливает).

(Лично мне особо приятно было увидеть фразу:

Обучение с подкреплением способно на всё! Но это не значит, что нужно браться за всё сразу.


т.к. подкрепляет мое понимание:

слишком амбициозные проекты терпят крах, а более скромные неспешно, но все же продвигают ИИ к новым рубежам.
)
Так речь только о RL, обычное обучение с учителем вполне успешно решает реальные задачи
Пара моментов по существу, которые описаны не очень.

1) НС учится на игре ATARI несколько дней, а человек, мол, сел и за 5 минут освоил. Неверное логическая основа. Человек уже к этому моменту великолепно предобучен решать такие или похожие задачи (и джойстик наверное держал не раз). А вот нейронка с нуля воссоздает все.

2) Хорошо работают 25-30% из-за якобы случайных начальных условий. Из-за них тоже, но как-то совсем опущено несколько миллионов обновлений весов, конкретно уводящих модель в ту или иную сторону.
По поводу пункта #1, тоже удивляюсь когда начинают вот так напрямую сравнивать.
Скажем так, если новорожденного ребёнка посадить учиться играть в Atari, то он не научится ни за 5 минут, ни за несколько дней. Человеческий ребёнок сможет осознанно играть в такие игры, скажем, лет в шесть. К этому моменту он бодрствовал по меньшей мере 30000 часов, впитывая и обрабатывая всю поступающую сенсорную информацию, да и во сне, есть основания полагать, мозг тоже обучается. И это не считая миллионов лет предшествующей эволюции, которая «закодировала» многие компоненты мозга прямо в геном.
~Шести лет достаточно чтобы научиться абстрактному мышлению — выработать высокоуровневые концепции, которые легко переиспользовать для решения широкого круга задач. Так что, за последние 5 минут происходит незначительный fine tuning, не более того.
Ну, да! Понимание физики, восприятие объектов в пространстве вообще. Динамика тел. Это у нас с детства закладывается (плюс эволюционно — бананы ловить с пальмы, и т.д.). А тут на тебе — несколько миллионов векторов сырых пикселей — и готово!
На эту тему очень хорошо высказался автор ответной заметки himanshusahni.github.io/2018/02/23/reinforcement-learning-never-worked.html

RainbowDQN takes 83 hours to learn because it does not come preloaded with notions of what a video game is, that enemies shoot bullets at you, that bullets are bad, that a bunch of pixels that seem to stay together is a bullet, that bullets exist in the world, that objects exist, that the world is organized into anything more than a maximum entropic distribution. All of these are priors that help us, humans, dramatically limit our exploration to a small set of high quality states. DQN has to learn all of these by mostly random exploration. That it learns to beat expert humans, and centuries of wisdom in the case of AlphaZero, is still very surprising.
1) Так там же пишут «Вы можете настроить обученную DQN для новой игры Atari, но никакой гарантии, что такой перенос состоится, и обычно никто не ожидает этого.». Сеть предобучена решать такие задачи, но с новой возникают проблемы.
Поумничаю. Я сам уже около года делаю свою RL машину. Если вознаграждение разрежено и, в конкретном случае, дается агенту по окончании эпизода (пример из Pong): left-left-left-left-left-left-left-left-left-left-left-left-left-мleft-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-REWARD == +1, то для многих задач эта задержка создает большие проблемы в сходимости. По сути, человек дает машине огромное право выбора, что делать, но только чтобы сумма вознаграждений стремилась к своему возможному максимуму. Хоть чечетку пляши 50 итераций, но на 51 нужен +1.

Если дать машине мнгновенные вознаграждения, типа расстояние до мяча в Pong left-0,99-left-0,98-left-0,95-left-0,9-left-0,85-left-0,81-left-0,7-...left-0,01-REWARD == +1, то здесь еще одна большая проблема. От размера многвенных вознаграждений зависит та политика, которую агент усвоит. Он всегда будет стремится максимизировать сумму дисконтируемых вознаграждений, и если промежуточные значения слишком высокие — а точнее, если они пробивают какой-то заранее неизвестый порог, — то агенту проще максимизировать их, а не отложенное вознаграждение.

Для того же примера понга это может привести к тому, что (фантазирую), отбивая мяч он положит серию увеличивающся до него расстояний и будет получать меньше вознаграждения. А поэтому совсем не обязательно (не ОЧЕВИДНО), что он будет стараться мяч именно отбить.

Вот про эту сложность автор пишет много и подробно. И это очень нетривиально.
Действительно, нетривиально. В rl часто приходится заниматься вот таким инжинирингом reward-функции, что вообще говоря противоречит изначальной идее. Вместо этого хочется иметь алгоритм, который бы умел работать со sparse наградами, т.е. решать задачу которую мы действительно хотим решить. Тут пока всё грустно, хотя есть некоторые идеи.

  1. Составлять curriculum, т.е. сначала учить агента на самых простых версиях задачи, где награда достигается за несколько шагов, а потом постепенно отодвигать момент старта.
  2. Использовать какой-нибудь умный exploration, например curiosity module. Тогда агент должен методично исследовать мир, пока методом исключения не наткнется на награды.
  3. Можно делать какую-то иерархическую архитектуру системы, когда агент разделен на низкоуровневые модули, которые работают часто (на каждом шаге) и высокоуровневые модули, которые запускаются реже. Таким образом, вся система обучается быстрее, потому что высокоуровневым модулям нужно меньше шагов чтобы получить награду от среды, а низкоуровневые получают дополнительную плотную награду от высокоуровневых модулей. Надеюсь понятно написал :) На эту тему есть несколько статей.
1) Это я частично применяю, но не пробовал предобучить сеть на этом шаге, чтобы в дальнейшем использовать на более дальних примерах. Все это опять же нужно делать с промежуточными ручными проверками «а кто это у нас тут так плохо сошелся».

2) Частично это делается случайным заполнением буффера и использованием e-greedy (Boltzmann's exploration, etc.).

3) Вот это круто звучит, можно попробовать. hierarchical RL.

На простых моделях мира работает норм, на сложных — плохо.

Моя игрушка: обучение трейдингу на функции синуса )

данные:


трейды на обучении (нижние ряды — хорошо обученный агент):


А если сделать длину трейда 50-100 шагов, то сходимость будет гораздо хуже.
Круто :D

Я не специалист в этом, но трейдинг не проще интерпретировать как supervised learning? Скажем, сеть предсказывает цену через 5 минут. Или можно сделать задачу классификации, скажем на 5 классов (сильно вырастет, немного вырастет, не изменится, немного понизится, сильно понизится). Тогда сеть выдает класс и confidence, если, скажем, цена сильно повышается и confidence высокий, то покупаем.
Я несколько лет назад тренировал похожий ML алгоритм для форекса, правда без нейросетей. Ну так, он в нуле болтался несколько месяцев) Заработал 600 рублей :D

Если из научного интереса используете RL, то вопрос конечно отпадает.
Спасибо. Я ещё и практик. Описанный подход пробовал. Но он не даёт то, что даёт RL, а именно, непрерывный контроль. Точка входа это одно, а внутри тоейда нужен контроль за состояние float profit и на каждом баре оценка возможности закрытия. RL именно это делает (круто в теории). То есть последовательность действий из алфавита buy, hold, sell, приводящая к большому положительному непрерывному return. И это же эпизод.

Returns прогнозировал тоже с помощью много чего: RF, GBM, GLM. На практике переобучается и не выводит матожидание в плюс. Ноль в лучшем случае.

Правда подумал, может предобучить сеть предсказывать хорошие входы, а потом дообучить как RL.
Ноль — для меня Ваш результат великолепен! Делал бота по ценам на нефть, предсказывал хорошо до 80% совпадения, но иногда «немного» ошибался. В конечном счете за месяц уходит в минус процентов на 30 от стартовой суммы.
Делал для форекса предсказатель. Если представить, что накладные расходы на трейд = 2 пункта, то без учета накладных расходов получалось довести мат.ожидание на отложенных выборках (на 50 разных выборках, для получения выборочного значения точности) до примерно 1-1.5 пунктов. Предсказуемость есть, но сделать прибыльную предсказательную систему сложно.

Вот так, сравнение выборки точности на валидационных фолдах (на 50 выборках) и на отложенных. Для некоторых горизонтов очевидно в плюсе. Это nested crossvalidation:
Сам в последнее время разбираюсь с reinforcement learning, столкнулся со всеми этими проблемами. Оказывается, даже на простых задачах современные методы сложно чему-то обучить.
Однако надо признать, все эти dqn и a3c это очень простые алгоритмы. Например, их общая черта состоит в том, что нейронную сеть просят принять решение «моментально», за один проход. В то время как человек в трудных ситуациях произодит размышления, рефлексирует. Что-то подсказывает, что возможности софта в этой области ещё далеко не исчерпаны.

На странице репозитория есть интересные анимации: github.com/alex-petrenko/rl-experiments
Я больше всего фрустрирую из-за огромного пространства гипер-параметров. Перечислю только некоторые, которые есть в моем скрипте RL (для Double Q Learning, e-greedy, with prioritization of learning samples):

размер буффера,
количество нейронов в (1 пока) скрытом слое,
надо ли добавить второй,
надо ли вставить drop-out,
скорость обучения,
надо ли ее делать переменнной,
gamma,
epsilon (greedy),
feature engineering (что? где? когда?),
коэффициент alpha для выравнивания приоритизации,
если это не приоритезация, надо ли выбирать образцы из буффера равномерно или ближе к последнему образцу политики?

И это еще не все. (

А самое главное, сходимость можно оценить далеко не через 5 минут. Обычно, занимает несколько часов.
Да, всё как в обычном deep learning, только ещё хуже. Кстати, для своей задачки я перебирал гиперпараметры довольно долго, и нашёл что они почти не улучшают финальный результат. Ну, т.е. легко можно ухудшить, но не улучшить) Мои изначальные параметры, видимо, были ок.
Единственный параметр который долго тюнил — как часто и как «сильно» обновлять target network в double dqn. Если редко, то обучение получается стабильным, но очень уж медленно. Если слишком часто обновлять, то может в космос улететь)

Вот этой штукой перебирал, генетическим алгоритмом github.com/alex-petrenko/udacity-deep-learning/blob/master/hyperopt.py
Посмотрел. Спасибо!

Я изучаю RL на языке R )) Пишу с нуля обертки для НС, которые реализуют логику. Получается нормально, но A3C это очень сложно (у меня одна НС обучается на всех воркерах), а сделать параллельно разные НС — задачка сложная.
Спасибо за перевод!
Как раз начал изучать эту тему.
Попытался сделать что-то типа:https://www.youtube.com/watch?v=cyN-CRNrb3E, но только с одной палкой.
Обучил нейросеть держать палку почти вертикально, коэффициент вознаграждения за «вертикальность» подобрать было не супер-просто. Но когда я попытался обучить держать палку идеально ровно и чтобы энергии на движение тратилось минимум, оказалось что нужно подбирать коэффициент наказания за «не вертикальность», что оказалось очень не просто, я так и не подобрал. Нейросеть думает, что ему и так не плохо и не хочет обучаться дальше.
В общем для меня это пока боль, хотя казалось бы все должно быть просто и само по себе заработать.
Буду копать дальше по приведенным в статье ссылкам. Возможно такие вещи стоило бы сделать через ГА.
да, я тоже пытался держать палку вертикально… Ничего не вышло, похоже, без «базы» в этом вопросе сложно разобраться…
Я для начала хотел записать все воздействия (-100..+100 «силы», грубо говоря) и все результаты (угол и скорость) просто в файл а потом попробовать проанализировать с целью поиска максимальных значений… Функцию вознаграждения конечно же, пришлось задать самому — угол 90 градусов и скорость 0, но здесь что-то пошло не так, потому что «тележка» иногда пыталась ехать в одну сторону, медленно поднимая палку… В жизни же у нее были еще и ограничения — левый и правый борт. Сильно усложнившаяся модель — всё это сломало мозги и мне, и программе)
А почему никто не делает функцию вознаграждения на основании всё того же отдельно ML алгоритма на основе оценки от людей?
Ведь в реальности обучения без социума не бывает.
Sign up to leave a comment.

Articles