Для моей дипломной работы в области компьютерных наук я реализовал алгоритм обучения подкреплению с нейронной сетью.
Этот алгоритм должен изучать понг и аналогичную игру, где он должен просто ловить шарыс веслом.
Теперь, когда я возвращаюсь к обратному распространению, у меня есть три возможности:
Обычный градиентный спуск, используя всю партию, где градиент - усредненный выходнойошибка, умноженная на производную от выхода:
SGD, только с использованием ошибки, полученной из текущего запомненного входа:
Мини-партия, где я делаю обычный градиентный спуск, но только небольшими партиями размера:
Скажите, есть ли в моих мыслях ошибка до сих пор.
Теперь есть две возможности, когда нужно обучать сеть:
- После каждого действия (онлайн)
- После определенного количества игровых раундов (в автономном режиме)
Вот что я делаю до сих пор:Я использую SGD и тренирую сеть после, скажем, 10 раундов.Для этого я использую весь набор данных.Это означает, что я в основном делаю нормальный градиентный спуск, но обновляю веса индивидуально для каждого входа.
Я также пробовал мини-пакет и пакетный режим онлайн и офлайн.Но SGD в автономном варианте дает самые быстрые и самые стабильные результаты, в то время как другие варианты либо сходятся очень медленно, нерегулярно, либо не сходятся вообще.
Но в большинстве документов говорится, что мини-пакет или метод SGD должны давать лучшие результаты при обучении их в Интернете.
Так почему я получаю такие странные результаты?