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
3363
г. Чехов
Вы пытаетесь обучить машину понятию "приращение", то бишь интегрированию, а это динамическая операция. Вы нейронные сети устанете этому обучать. Сами-то во сколько лет поняли, что такое интегрирование? ;)

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


11/04/08
2749
Физтех
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
3363
г. Чехов
Подсказка: ну вы так взяли с потолка 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
3363
г. Чехов
Вы еще с небалансированным датасетом поборитесь.
Суть проблемы: у вас вознаграждение почти всегда 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
3363
г. Чехов
Постройте гистограмму, показывающую распределение вознаграждений. (Это я к тому, что вы должны понять важное про небаланс классов или небаланс датасетов.)

Когда вы обучили алгоритм на 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, Супермодераторы



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

Сейчас этот форум просматривают: Rasool


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

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