2

Я пытаюсь кодировать в Python несколько типов алгоритмов ANN, чтобы получить лучшее понимание/интуицию этих. Я не использую Scikit-learn или любые другие готовые пакеты, так как моя цель скорее образовательная, чем практическая. В качестве примера проблемы я использую базу данных MNIST (http://yann.lecun.com/exdb/mnist/).Байесовская нейронная сеть: вычисление Hessian

Пока я выполнял простой 1-скрытый слой NN и сверточный NN, я успешно избегал любых методов оптимизации второго порядка и, следовательно, не вычислял матрицу Гессиана. Однако затем я попал в байесовский NN, где, чтобы оптимизировать гиперпараметры, вычисление Гессиана является принудительным.

В моей полностью подключенной сети имеется 784 входа, 300 скрытых блоков и 10 единиц вывода. Все они приводят к 238200 весам (+ смещения). Когда я пытаюсь вычислить или даже приблизить гессиан (по внешнему произведению градиентов), Python уведомляет об «MemoryError». Даже если я уменьшу количество весов до ~ 40000 и сообщение об ошибке не появится, мой компьютер застрянет через несколько минут. Насколько я понимаю, проблема в том, что желаемая матрица чрезвычайно велика. Я просмотрел несколько статей по байесовским NN и заметил, что авторы обычно используют сетевые архитектуры не более 10 или 20 входов и скрытых блоков, поэтому у меня намного меньше параметров, чем у меня. Однако я не видел никаких явных заявлений о таких ограничениях.

Что я могу сделать, чтобы применить байесовский подход к NN для MNIST?

В целом: Можно ли применять байесовский подход с этим (238200 весов) или даже более крупную архитектуру? Или, может быть, он подходит только для относительно небольших сетей?

ответ

1

Вы можете попробовать the BFGS algorithm для градиентного восхождения, который приближается к гессианскому и имеет тенденцию экономить (значительную) память. Есть implementation in Scipy.

+1

Я думаю, вы думаете о L-BFGS (https://en.wikipedia.org/wiki/Limited-memory_BFGS), BFGS требует того же объема памяти, что и типичные методы hessian, поэтому, если проблема OPs лежит в памяти потребление - BFGS тоже не сработает – lejlot

+0

Yup. Спасибо за разъяснения. –

 Смежные вопросы

  • Нет связанных вопросов^_^