Comments 34
Как в свое время в статистических моделях была выявлена проблема «переобучения» (overfitting), так здесь вырисовывается аналогичная проблема пере-подкрепление.
Впрочем, толковым педагогам, дрессировщикам, да и просто родителям эти проблемы известны.
Выход, я думаю, будет найден в разработке очередного слоя функций «кнута-и-пряника», а те, в свою очередь, будут опираться на зависимость толерантности к стимулирующим факторам (снижение восторга от «печенек» и привыкание к «кнуту») от потенциально ВСЕГО. И пока по всем локальным экстремумам пропутешествуешь…
Ну или начнут учить студентов, как обучать робота, который будет учиться обучать роботов как обучать
и еще… Честно сказать, про наличие собственных хорошо (или плохо) воспитанных и обученных детей у авторов глубинного и прочих обучений мне иногда интереснее, чем знать то же самое у политиков.
Если бы мог — плюсанул бы перевод еще раз за спровоцированное обсуждение по ML
Начнем издалека
Мы все боимся алгоритмов, $$inline$$O(n)$$inline$$.
Не дай бог, что-нить вычислительное растет $$inline$$O(n^2)$$inline$$. Непорядок! Люди тратят год, чтобы уменьшить время вычисления с 1.25сек до 1.18сек. За это же время по Закону-Не-Помню-Его-Имени доступная вычислительная мощность вырастает в два раза при таком же падении цены.
В ML они смело добавляют слой абстракции.
Круто! Вот сейчас мы как выпрыгнем, как выскочим! и всех разом победим.
Да, вырастут требования к вычислительной мощности. Но ведь по Закону-Не-Помню-Его-Имени доступная вычислительная мощность вырастает в два раза.
Ребят, скажу вам по секрету. Только между нами! Я сам это услышал 33 года назад в местах "под грифом".
Добавление слоев абстракции, это, как правило, рост $$inline$$Fib(n)$$inline$$, где $$inline$$Fib(n)$$inline$$ — [ряд Фибоначи] (https://en.wikipedia.org/wiki/Fibonacci_number) (РФ).
Объяснять почему?
Почитайте про первое (из современных) применений РФ в описании размножения кроликов в Австралии. Это не экспонента, даже. Это быстрее любой экспоненты.
Т.е. требования по вычислительным затратам по любому обгонят рост любых доступных вычислительных ресурсов, хоть они и растут по Закону-Не-Помню-Его-Имени
- Что делать?!!!
Убивать!!!
Убивать самые нижние ("тривиальные") слои в модели, чтоб не пожирали ресурсы. Строить эффективные фичи, и убивать все остальные.
В принципе, чем и объсняется, по-моему, относительный, пусть и кратковременный, успех DL.
Сам я в этой области уже не работаю. Но по старой памяти интересуюсь.
Вот этот кусочек знаний, которым я поделился… Я не знаю, найдете ли вы это на первых трех страницах гугла.
И еще.
Поскольку уже все равно кат запилил...
В обсуждении очень наглядно виден "водораздел" между "Type A Data Scientist" и "Type B Data Scientist" (классификация отсюда).
Я все жду, когда в названии вторых "отвалится" Science.
Впрочем, может и не отвалиться. Гордое сто пятьдесят лет назад слово "Инженер" в свое время стоптали до "инженер по технике безопасности" при помощи тогдашних политехов. Сейчас некогда гордое слово "Ученый" убивают разбавлением с помощью гугла и фэйсбука.
Удачи!
ЗЫ. Заранее прошу прощения, если мои попытки латеховских вставок не сработали. Предосмотр и редактирование комментариев с латехом не дружат. Было бы приятно, если бы поправил кто.
Я использую RL для локомоции антропоморфного робота изучаю RL, чтобы попытаться его использовать для локомоции антропоморфного робота IRL.
План: в отличие от паркур-бота не управлять всеми сочленениями, а получить лишь траектории ключевых точек, а дальше классическая инверсная кинематика и тому подобное. Размерность задачи проще, должно быть проще обучить. Наверное.
Почем? А почему бы и нет.
Текущее состояние: гм… изучение… Простейшие среды из gym. Как, черт возьми, они проектируют структуру самих сетей и подбирают гиперпараметры?
Интересно, а когда все наработки психологии попробуют применить — не только любопытство и набивание шишек? Страхи, подсознательная страхи (простые обученные сторонние модели с защитой от сильно неправильного поведения), лень, пресыщение, эмоции в целом — это же все важные части обучения.
Понимаю, что есть мнение о психологии как о недонауке, но вижу тут как раз поле для экспериментов. Возможно, что прививанием человеческих механизмов психики нейросетям мы сможем и механизмы психики изучить!
Обобщение различных обученных моделей для совместного взаимодействия будет порождать хаос, и сложность будет расти в геометрической прогрессии к количеству моделей.
Попробуйте отойти от философии и изложить ваше виденье в виде конкретных алгоритмов на любом языке программирования. Не думаю что у вас выйдет что.
Нужны другие подходы к обобщению примитивных раздражителей. И изначально нужно понимать, что именно вы хотите получить в качестве результата. Причем желательно что бы это было максимально конкретизировано, а не " ну вот значит я говорю а оно такое хоба и бац".
Дальше можно развести беседу в которой рассмотреть нервную систему в виде «конечного автомата». Просто количество входящих/исходящих сигналов настолько огромно, что нам тяжело это структурировать.
То есть, вместо выдумывания — как заставить один уровень нейросетей работать, можно попытаться реализовать многоуровневую систему, каждый следующий уровень которой будет оперировать уже обработанными данными с предыдущего уровня.
Насчет отхода от философии — даже в компьютерных науках есть такая отчасти философская штука как архитектура приложений и систем. Да, это теоретические построения. Просто на определенном уровне понимания приходит мысль, что лучше хорошей практики может быть только хорошая теория. В статье мы ясно видим — есть ряд хороших практик. Нужна хорошая теория, и психология может подсказать — в каком направлении ее искать. Междисциплинарная синергия — довольно надежная кладезь новых идей.
С таким подходом очень быстро упретесь в нехватку железа.
К тому же предложенный вами подход будет сложно обучать чему либо. В связи с необходимостью понимания вами что именно обобщилось на каждом уровне и что с этим делать на следующем уровне.
Имхо. Но единственно решение это специализированная структура описывающая все разнообразие множеств и их отношений между собой. При этом ничего не мешает нам реализовать наши собственные действия( в виде множеств) в рамках этой структуры. И воздействовать посредством этих множеств на внешний мир. Но тут тоже не все просто. Есть масса нюансов.
"но по количеству термов". Совсем русский забыли? Количеству членов.
(Лично мне особо приятно было увидеть фразу:
Обучение с подкреплением способно на всё! Но это не значит, что нужно браться за всё сразу.
т.к. подкрепляет мое понимание:
слишком амбициозные проекты терпят крах, а более скромные неспешно, но все же продвигают ИИ к новым рубежам.)
1) НС учится на игре ATARI несколько дней, а человек, мол, сел и за 5 минут освоил. Неверное логическая основа. Человек уже к этому моменту великолепно предобучен решать такие или похожие задачи (и джойстик наверное держал не раз). А вот нейронка с нуля воссоздает все.
2) Хорошо работают 25-30% из-за якобы случайных начальных условий. Из-за них тоже, но как-то совсем опущено несколько миллионов обновлений весов, конкретно уводящих модель в ту или иную сторону.
Скажем так, если новорожденного ребёнка посадить учиться играть в Atari, то он не научится ни за 5 минут, ни за несколько дней. Человеческий ребёнок сможет осознанно играть в такие игры, скажем, лет в шесть. К этому моменту он бодрствовал по меньшей мере 30000 часов, впитывая и обрабатывая всю поступающую сенсорную информацию, да и во сне, есть основания полагать, мозг тоже обучается. И это не считая миллионов лет предшествующей эволюции, которая «закодировала» многие компоненты мозга прямо в геном.
~Шести лет достаточно чтобы научиться абстрактному мышлению — выработать высокоуровневые концепции, которые легко переиспользовать для решения широкого круга задач. Так что, за последние 5 минут происходит незначительный fine tuning, не более того.
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.
Если дать машине мнгновенные вознаграждения, типа расстояние до мяча в 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, то здесь еще одна большая проблема. От размера многвенных вознаграждений зависит та политика, которую агент усвоит. Он всегда будет стремится максимизировать сумму дисконтируемых вознаграждений, и если промежуточные значения слишком высокие — а точнее, если они пробивают какой-то заранее неизвестый порог, — то агенту проще максимизировать их, а не отложенное вознаграждение.
Для того же примера понга это может привести к тому, что (фантазирую), отбивая мяч он положит серию увеличивающся до него расстояний и будет получать меньше вознаграждения. А поэтому совсем не обязательно (не ОЧЕВИДНО), что он будет стараться мяч именно отбить.
Вот про эту сложность автор пишет много и подробно. И это очень нетривиально.
- Составлять curriculum, т.е. сначала учить агента на самых простых версиях задачи, где награда достигается за несколько шагов, а потом постепенно отодвигать момент старта.
- Использовать какой-нибудь умный exploration, например curiosity module. Тогда агент должен методично исследовать мир, пока методом исключения не наткнется на награды.
- Можно делать какую-то иерархическую архитектуру системы, когда агент разделен на низкоуровневые модули, которые работают часто (на каждом шаге) и высокоуровневые модули, которые запускаются реже. Таким образом, вся система обучается быстрее, потому что высокоуровневым модулям нужно меньше шагов чтобы получить награду от среды, а низкоуровневые получают дополнительную плотную награду от высокоуровневых модулей. Надеюсь понятно написал :) На эту тему есть несколько статей.
2) Частично это делается случайным заполнением буффера и использованием e-greedy (Boltzmann's exploration, etc.).
3) Вот это круто звучит, можно попробовать. hierarchical RL.
На простых моделях мира работает норм, на сложных — плохо.
Моя игрушка: обучение трейдингу на функции синуса )
данные:

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

А если сделать длину трейда 50-100 шагов, то сходимость будет гораздо хуже.
Я не специалист в этом, но трейдинг не проще интерпретировать как supervised learning? Скажем, сеть предсказывает цену через 5 минут. Или можно сделать задачу классификации, скажем на 5 классов (сильно вырастет, немного вырастет, не изменится, немного понизится, сильно понизится). Тогда сеть выдает класс и confidence, если, скажем, цена сильно повышается и confidence высокий, то покупаем.
Я несколько лет назад тренировал похожий ML алгоритм для форекса, правда без нейросетей. Ну так, он в нуле болтался несколько месяцев) Заработал 600 рублей :D
Если из научного интереса используете RL, то вопрос конечно отпадает.
Returns прогнозировал тоже с помощью много чего: RF, GBM, GLM. На практике переобучается и не выводит матожидание в плюс. Ноль в лучшем случае.
Правда подумал, может предобучить сеть предсказывать хорошие входы, а потом дообучить как RL.
Вот так, сравнение выборки точности на валидационных фолдах (на 50 выборках) и на отложенных. Для некоторых горизонтов очевидно в плюсе. Это nested crossvalidation:

Однако надо признать, все эти dqn и a3c это очень простые алгоритмы. Например, их общая черта состоит в том, что нейронную сеть просят принять решение «моментально», за один проход. В то время как человек в трудных ситуациях произодит размышления, рефлексирует. Что-то подсказывает, что возможности софта в этой области ещё далеко не исчерпаны.
На странице репозитория есть интересные анимации: github.com/alex-petrenko/rl-experiments
размер буффера,
количество нейронов в (1 пока) скрытом слое,
надо ли добавить второй,
надо ли вставить drop-out,
скорость обучения,
надо ли ее делать переменнной,
gamma,
epsilon (greedy),
feature engineering (что? где? когда?),
коэффициент alpha для выравнивания приоритизации,
если это не приоритезация, надо ли выбирать образцы из буффера равномерно или ближе к последнему образцу политики?
И это еще не все. (
А самое главное, сходимость можно оценить далеко не через 5 минут. Обычно, занимает несколько часов.
Единственный параметр который долго тюнил — как часто и как «сильно» обновлять 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, но здесь что-то пошло не так, потому что «тележка» иногда пыталась ехать в одну сторону, медленно поднимая палку… В жизни же у нее были еще и ограничения — левый и правый борт. Сильно усложнившаяся модель — всё это сломало мозги и мне, и программе)
Ведь в реальности обучения без социума не бывает.
Глубинное обучение с подкреплением пока не работает