Алгоритм PPO сводится только к одному действию

Я взял несколько эталонных реализаций алгоритма PPO и пытаюсь создать агента, который может играть в космических захватчиков. К сожалению, начиная со второго испытания (после обучения актера и критика N Networks в первый раз) распределение вероятностей действий сходится только на действии, а потеря PPO и потеря критика сходятся только на одном значении.

Хотел понять вероятные причины, по которым это могло произойти. Я действительно не могу запустить код на своих облачных виртуальных машинах, не будучи уверенным, что я ничего не упускаю, поскольку виртуальные машины очень дороги в использовании. Я был бы признателен за любую помощь или совет в этом отношении ... при необходимости я также могу опубликовать код. Используются следующие гиперпараметры:

clipping_val = 0,2 crit_discount = 0,5 entropy_beta = 0,001 гамма = 0,99 лямбда = 0,95


person JAYDEEP GHOSE    schedule 03.05.2020    source источник
comment
Мне нужно увидеть код, пожалуйста. Используете ли вы подход с использованием необработанных пикселей с использованием CNN? Если да, взяли ли вы это из учебника?   -  person MarcusRenshaw    schedule 03.05.2020
comment
Да, я использую необработанный пиксельный подход. На самом деле я взял это из нескольких руководств и встроил свой собственный код.   -  person JAYDEEP GHOSE    schedule 03.05.2020
comment
Репозиторий кода: github.com/superchiku/ReinforcementLearning. Код все еще очень не доработан, но в нем есть вся основная логика. Проблема остается неизменной независимо от того, какую игру Atari я использую, я пробовал это на pacman и космических захватчиках.   -  person JAYDEEP GHOSE    schedule 03.05.2020


Ответы (1)


Одна из причин может заключаться в том, что вы не нормализуете входные данные CNN в диапазоне [0,1] и, таким образом, не насыщаете ваши нейронные сети. Я предлагаю вам использовать в своем коде функцию preprocess () для преобразования ваших состояний (входов) в сеть.

def preprocess(self,img):
    width = img.shape[1]
    height = img.shape[0]
    dim = (abs(width/2), abs(height/2))
    resized = cv2.resize(img,(80,105) ) #interpolation = cv2.INTER_AREA)
    resized = resized/255.0 # convert all pixel values in [0,1] range
    resized = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
    resized = resized.reshape(resized.shape+(1,))
    return resized
person nsidn98    schedule 06.05.2020
comment
Спасибо за этот совет. Да, я начал использовать это, но все еще не получаю желаемой производительности ... Как вы думаете, что еще можно улучшить? Я также заметил, что прогноз вознаграждения критика также остается неизменным между 0,99 и 1 ... - person JAYDEEP GHOSE; 06.05.2020