Я пытаюсь сравнить оптимизацию нейронной сети с помощью обратного распространения и оптимизации Particle Swarm (PSO). Я хочу использовать относительно большие наборы данных, поэтому я использую полностью подключенную сеть для классификации набора данных MNIST.
Я использую https://stats.stackexchange.com/questions/376312/mnist-digit-recognition-what-is-the-best-we-can-get-with-a-fully-connected-nn-o для реализации обратного распространения.
Моя реализация PSO является адаптацией https://github.com/kuhess/pso-ann.
Используя обратное распространение, я достиг 90% точности благодаря структурированной сети [784, 15, 10], т.е. одному скрытому слою с 15 узлами. На данный момент лучшее, что я сделал с PSO, оптимизировав эту архитектуру, - это точность около 30%.
Мой вопрос: Как я могу приблизить производительность Backpropagation с помощью PSO?
Что я пробовал:
В большинстве моих тестов я вижу медленную сходимость после первых 15-50 итераций. Либо мои частицы больше не обновляются (когда инерция высока, а частицы не находят лучших решений), либо каждое обновление настолько минимально, что практически отсутствует сходимость (для низкой инерции).
Видеть как Реализация обратного распространения может легко получить точность 85 +%, используя эту простую структуру сети, мы знаем, что можно получить гораздо более высокую точность, но сейчас я застрял в настройке этих параметров.
Итак,
- Пробую ли я правильные вещи?
- Нужно ли добавлять дополнительные параметры для постепенного изменения инерции во время тренировки?
- Как настроить параметры PSO для приблизительной производительности Backpropagation?