2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Reinforcement learning работает?
Сообщение16.10.2020, 17:20 


11/04/08
632
Марс
Наслышан об успехах RL в шахматы, Го и игры Atari. Но вот беда, как пытаешься на своей задаче обучить - ничего не работает! В интернете сплош и рядом приводятся примеры, как они обучали свой алгоритм для CartPole, ну вот например https://pytorch.org/tutorials/intermedi ... rning.html но тут вообще всего 2 действия и фактически один параметр - угол наклона. А мне надо рабочую реализацию хотя бы для Go или Atari.

Опишу свою задачу (абстрактно и упрощенно). Допустим есть три кнопки, расположенные в ряд. Задача алгоритма - нажать на все кнопки поочередно.
observation выглядит так:
[1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
первые 15 чисел кодируют кнопки (1 означает "ненажатая кнопка"), остальные 15 чисел - внутреннее состояние агента, показывают на какую кнопку установлен курсор.
Всего 3 действия: 0 - поместить курсор на первую кнопку, 1 - сместить курсор вправо на следующую кнопку, 2 - нажать кнопку, на которую установлен курсор.
(при попытке смести курсор правее 3-ей кнопки, срабатывать не будет, но это не суть важно).
Если все три кнопки нажаты, то приписывается некое вознаграждение, и конец игры. А также конец игры, если больше 100 ходов, но без вознаграждения
Итого задача алгоритма просто-напросто сгенерировать последовательность действий: 021212. Но это в идеале. У меня получается результат примерно такой же, как при рандомном переборе действий. Где-то 10-40 итераций. Бывает, что и за 6 справляет, бытает и 100, но это редко. Это было на основе нейросети Deep Q-Network (DQN). Пытался еще muzero обучать, но там и того хуже получает (хуже, чем при рандомном выборе).

Как-то так. Может у кого-то получалось обучать RL для чего-нибудь, кроме CartPole?

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение16.10.2020, 19:24 


12/07/15
2907
г. Чехов
Вы пытаетесь обучить машину понятию "приращение", то бишь интегрированию, а это динамическая операция. Вы нейронные сети устанете этому обучать. Сами-то во сколько лет поняли, что такое интегрирование? ;)

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение16.10.2020, 19:46 
Заслуженный участник
Аватара пользователя


11/04/08
2736
Физтех
spyphy
Не вчитывался в Вашу ситуацию, но имея некоторый опыт обучения с подкреплением могу сказать, что даже когда все правильно реализовано -- методы обучения с подкреплением сходятся очень медленно, и это очень естественно для этого класса методов. Кривые обучения -- стохастические, то есть при каждом новом запуске кривая обучения получается разной. И для того, чтобы действительно оценить свойства применяемого метода, следует запустить его с нуля сотни, а то и тысячи раз, и получить усредненную кривую обучения. Отмечу еще, что в обучении с подкреплением особенно важным является способ задания вознаграждения. Иногда приходится функцию вознаграждения вводить довольно искусственно и криво, зато метод работает. Я встречался с ситуациями, когда неудачно выбранная функция вознаграждения приводила к тому, что обучение с подкреплением не давало никаких преимуществ перед "рандомным перебором действий".

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

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение17.10.2020, 03:08 


11/04/08
632
Марс
Mihaylo в сообщении #1487502 писал(а):
Вы пытаетесь обучить машину понятию "приращение", то бишь интегрированию, а это динамическая операция. Вы нейронные сети устанете этому обучать. Сами-то во сколько лет поняли, что такое интегрирование? ;)

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

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение18.10.2020, 10:16 


12/07/15
2907
г. Чехов
Подсказка: ну вы так взяли с потолка 1000 попыток, но может 1000000? Вы по формулам комбинаторики посчитайте...

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

Если вы не сделаете так, то ваш интеллект вынужден искать закономерности в огромнейшем пространстве, где этих закономерностей всего, грубо говоря, 15. Я не говорю о той нелинейности получения вознаграждения, которое приводит к сильнейшей несбалансированности датасетов (unbalanced datasets).

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

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение18.10.2020, 12:02 


11/04/08
632
Марс
Mihaylo в сообщении #1487647 писал(а):
Не пытайтесь использовать RL в сложных задачах, эти методы никогда там не будут работать хорошо.

а что насчет го и шахмат, или они считаются недостаточно сложными?

Mihaylo в сообщении #1487647 писал(а):
ну вы так взяли с потолка 1000 попыток, но может 1000000?

Я наблюдаю за процессом обучения (какой reward и за сколько шагов достигается цель). И каких-то улучшений не замечаю с течением времени.

Mihaylo в сообщении #1487647 писал(а):
это намекает на включение предыдущего состояния в текущий обучающий пример, то есть добавьте туда ещё 15 элементов

ок, попробую

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение18.10.2020, 15:10 


12/07/15
2907
г. Чехов
Вы еще с небалансированным датасетом поборитесь.
Суть проблемы: у вас вознаграждение почти всегда 0, и очень-очень редко вознаграждение присутствует.
Так как у вас датасет синтетический, то нагенерируйте примеров побольше, а потом выбросьте случайным образом избыток примеров без вознаграждения, чтобы было 50/50 (без вознаграждения/с вознаграждением).

И что-то еще не продумано в вашем подходе. Может вознаграждением считать величину, обратную числу шагов к успеху в данной партии?

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение18.10.2020, 16:01 


11/04/08
632
Марс
Mihaylo в сообщении #1487686 писал(а):
И что-то еще не продумано в вашем подходе. Может вознаграждением считать величину, обратную числу шагов к успеху в данной партии?

Про это не сказал, но именно так и считаю, то есть
Код:
reward = 1 - 0.9*(step_count / MAX_STEPS)
(MAXSTEPS = 100)

А что за датасет? У меня начальные условия всегда одни и те же: три кнопки, которые нужно нажать (можно в произвольном порядке нажимать). Почти всегда цель достигается, только количество шагов разное (и пока большое).
Да, нет промежуточного вознаграждения, но в этом и суть эксперимента. Изначально планировать использовать muzero, но то совсем не зашло. Поэтому начал с чего попроще - DQN.

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение18.10.2020, 22:17 


11/04/08
632
Марс
Стал измерять среднее значение необходимых шагов за последние 100 итераций (игр). Так можно более-менее оценить успешность модели.
Получается, что при рандомных значения action количество шагов в среднем составляет 24-25.
А при использовании нейросети сначала это значение составляет 30, а при обучении уменьшается до 24-25, что эквивалентно рандомному выбору.
Лучше работает модель, если кроме конечного вознаграждения, задавать также промежуточное вознаграждение за успешное нажание на кпонку. В этом случае среднее количество шагов уменьшается до 10 (требуется около 200 итераций), а после чего начинает увеличивать опять до 24-25. Это получается переобучение что ли?

Может дело в нейронке? Она сейчас маленькая: используется только 2 полносвязных слоя по 16 нейронов. В играх Atari использовали сверточные сети. Но у меня вроде и задача попроще (не так много пикселей).

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение22.10.2020, 22:26 


12/07/15
2907
г. Чехов
Постройте гистограмму, показывающую распределение вознаграждений. (Это я к тому, что вы должны понять важное про небаланс классов или небаланс датасетов.)

Когда вы обучили алгоритм на 1 млн. примеров и 990 тысяч раз втюхали алгоритму примеры с нулевым вознаграждением, то он понял просто: "Что не делай - все равно получишь шиш!". Поэтому результаты близки к тому, если бы выбор делался случайно.

 Профиль  
                  
 
 Re: Reinforcement learning работает?
Сообщение24.10.2020, 16:47 


11/04/08
632
Марс
ок, вроде начала догонять, о чем вы. То есть надо обновлять веса нейросети не после каждой игры, а пропускать часть их них, где reward=0.

Но похоже основная проблема была в другом - в абсолютном значении reward. Я думал, это никак не влияет. Но оказывается, если задать побольше, то результат намного лучше. То есть сейчас считаю его по такой формуле:
Код:
reward = 100*(1 - 0.9*(step_count / MAX_STEPS))

и так работает, по крайней мере для DQN. Буду пробывать для других сетей.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group