Распространение неожиданных действий для пользовательской среды RL

Я работаю над созданием настраиваемой среды и обучаю на ней агента RL.

Я использую стабильные базовые показатели, потому что они, кажется, реализуют все новейшие алгоритмы RL и, кажется, максимально приближены к принципу "подключи и работай" (я хотел бы сосредоточиться на создании среды и функции вознаграждения, а не на деталях реализации самой модели)

В моей среде есть пространство действий размером 127, и я интерпретирую его как горячий вектор: принимая индекс самого высокого значения в векторе в качестве входного значения. Для отладки я создаю гистограмму, показывающую, сколько раз каждое значение было "вызвано"

Перед тренировкой я ожидал, что график покажет примерно равномерное распределение "событий":

но вместо этого "события" в нижней части спецификации действия гораздо более вероятны, чем другие:

Я создал колаб, чтобы объяснить и воспроизвести проблему

Я задал этот вопрос в проблеме с github, но они рекомендовали опубликовать вопрос здесь

1 ответ

В model.predict(obs) фиксирует каждое действие в диапазоне [-1, 1](потому что именно так вы определили свое пространство действий). Таким образом, ваш массив значений действий выглядит примерно так

print(action)
# [-0.2476,  0.7068,  1.,          -1.,           1.,           1., 
#   0.1005,  -0.937,   -1. , ...]

То есть все действия, которые были больше 1, усекаются / обрезаются до 1, и, таким образом, существует несколько максимальных действий. В своей среде вы вычисляете numpy argmaxpitch = np.argmax(action), который возвращает индекс первого максимального значения, а не случайно выбранного (если есть несколько максимумов).

Вы можете выбрать "случайный argmax" следующим образом.

max_indeces = np.where(action == action.max())[0]
any_argmax = np.random.choice(max_indeces)

Я соответствующим образом изменил ваш env здесь.

Другие вопросы по тегам