Недавно я занялся проблемой обучения с подкреплением (я очень новичок в этой области). Проблема проста. у нас есть матрица размером NxN со всеми элементами, равными нулю. цель состоит в том, чтобы агент изменил все значения на 1. Я вижу, что агент обучается со временем, но что бы я ни делал, в моем выходном графике много шума, и я не вижу сходимости! с другой стороны, небольшие изменения в гиперпараметрах могут испортить мне процесс обучения! от обучения, чтобы не учиться вообще!
например, я использовал матрицу 5x5. Функция epsilon для компромисса между разведкой и эксплуатацией имеет следующий вид:
egreedy = 0.9
egreedy_final = 0.02
egreedy_decay = 5000
def calculate_epsilon(steps_done):
epsilon = egreedy_final + (egreedy - egreedy_final) * \
math.exp(-1 * steps_done / egreedy_decay)
return epsilon
Функция epsilon уменьшает случайность на каждом временном шаге (не эпизоде). Я установил 5000 эпизодов, и каждый эпизод имеет 50 временных шагов. Кроме того, я использую повтор опыта с целью net, по одному скрытому слою каждый. это мои гиперпараметры:
learning_rate = 0.01
num_episodes = 5000
gamma = 0.8
max_time_steps = 50
hidden_layer1 = 64
replay_mem_size = 1000000
batch_size = 32
update_target_frequency = 5000
egreedy = 0.9
egreedy_final = 0.02
egreedy_decay = 5000
И это сумма наград за эпизод по количеству эпизодов:
это видно что есть обучение, но есть две проблемы. во-первых, максимальная награда, которую агент может получить за эпизод, равна 25, но здесь мы можем видеть, что максимум, что он получил, составляет 20.
, изменив количество исследований на эпизод до 100 (в 4 раза больше пикселей), которые я получаю. до 25, но все же я не вижу никакой конвергенции, и решение не является стабильным:
, так как я пытался увеличить количество эпизодов, я не видел лучше результат. Кажется, что одна вещь, которая действительно влияет на результат, это количество исследований в эпизоде. но это не следует за линейным проходом. Например, если у меня есть матрица 3x3 (9 пикселей), для каждого эпизода достаточно 18 временных шагов (что составляет 2x количество пикселей). для 5x5 работают 100 временных шагов (я также поставил 200, но результаты не сильно изменились), но моя настоящая проблема намного сложнее! как в конфигурации цели, так и в размере (минимальная матрица 20x20), и это требует гораздо больше времени, потому что на каждом временном шаге в фоновом режиме выполняется сложное моделирование! Следовательно, просто поиграться с параметрами для этой проблемы для меня почти невозможно, если у меня есть время!
Есть ли общий способ оптимизации гиперпараметров без необходимости проверять все снова и снова? как есть какой-то рецепт? почему я не вижу сходимости здесь? (Я использовал гораздо больше эпизодов, и все же у меня есть проблема!) Как я могу решить эту проблему сходимости?
Спасибо большое! Если вам нужна дополнительная информация о моем коде, я также могу поставить его здесь!