Байесовская нейронная сеть: вычисление гессиана

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

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

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

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

В более общем плане: возможно ли применить байесовский подход с этой (238200 весов) или даже более крупной архитектурой? А может, он подходит только для относительно небольших сетей?


person Nikolay    schedule 06.11.2015    source источник


Ответы (1)


Вы можете попробовать алгоритм BFGS для градиентного подъема, который приближается к шкале Гессе и имеет тенденцию к экономии (значительной) памяти. В Scipy есть реализация. .

person James Atwood    schedule 06.11.2015
comment
Думаю, вы думаете о L-BFGS (en.wikipedia.org/wiki/Limited-memory_BFGS), BFGS требует того же объема памяти, что и типичные гессианские методы, поэтому, если проблема OP заключается в потреблении памяти - BFGS тоже выйдет из строя. - person lejlot; 06.11.2015
comment
Ага. Спасибо за разъяснения. - person James Atwood; 08.11.2015