Как найти оптимальное количество нейронов на слой?

28

Когда вы пишете свой алгоритм, как вы узнаете, сколько нейронов нужно на один слой? Существуют ли какие-либо методы для определения оптимального количества из них, или это практическое правило?

kenorb
источник

Ответы:

15

Не существует прямого способа найти оптимальное количество из них: люди пытаются эмпирически увидеть и посмотреть (например, используя перекрестную проверку). Наиболее распространенными методами поиска являются случайный, ручной поиск и поиск по сетке.

Существуют более продвинутые методы, такие как гауссовские процессы, например, Оптимизация гиперпараметров нейронной сети с помощью гауссовских процессов для классификации актов диалога , IEEE SLT 2016 .

Франк Дернонкур
источник
7

Для более интеллектуального подхода, чем случайный или исчерпывающий поиск, вы можете попробовать генетический алгоритм, такой как NEAT http://nn.cs.utexas.edu/?neat . Однако это не дает гарантии на поиск глобальной оптимумы, это просто алгоритм оптимизации, основанный на производительности, и поэтому он уязвим для застрять в локальной оптимуме.

Тим Аткинсон
источник
1
В любом случае, он будет близок к глобальному оптимуму.
jjmerelo
4

Paper Szegedy C, Vanhoucke V, Ioffe S, et al. Переосмысление начальной архитектуры для компьютерного зрения [J]. Препринт arXiv arXiv: 1512.00567, 2015. дает некоторые общие принципы проектирования:

  1. Избегайте узких мест, особенно в начале сети;

  2. Баланс ширина и глубина сети. Оптимальная производительность сети может быть достигнута путем балансировки количества фильтров на каждом этапе и глубины сети. Увеличение как ширины, так и глубины сети может способствовать повышению качества сетей. Тем не менее, оптимальное улучшение для постоянного объема вычислений может быть достигнуто, если оба увеличиваются параллельно. Таким образом, вычислительный бюджет должен быть распределен сбалансированным образом между глубиной и шириной сети.

Эти предложения не могут дать вам оптимальное количество нейронов в сети.

Тем не менее, еще есть некоторые исследования сжатия моделей, например, Структурное изучение разреженности (SSL) глубоких нейронных сетей , SqueezeNet , Pruning network, которые могут пролить некоторый свет на то, как оптимизировать нейроны для одного слоя.

Особенно в структурированном разреженном обучении глубоких нейронных сетей , он добавляет Group Lassoтермин регуляризации в функцию потерь, чтобы упорядочить структуры (т. Е. Фильтры, каналы, формы фильтров и глубину слоя) DNN, а именно обнуление некоторых компонентов ( т. е. фильтры, каналы, формы фильтров и глубина слоя) структуры сети и обеспечивает замечательное сжатие и ускорение сети, сохраняя при этом небольшую потерю точности классификации.

Дол
источник
3

Вы знаете, когда у вас слишком много нейронов, это когда вы перебираете. Это означает, что это не работает хорошо, потому что NN пытается активировать на самом идеальном совпадении, которое невозможно. Как две разные кошки с одинаковым количеством атомов, или, скажем так, это детектор NN, который активирует только изображение вашей любимой кошки и ничего больше. Вы хотите, чтобы nn активировал более широкий диапазон. Как и на любой картинке кота.

Переоснащение - это проблема, которая не может быть быстро решена. Вы можете начать с небольшого количества, а затем продолжать добавлять больше. Или начните с большого количества и затем удаляйте их, пока это не работает правильно.


источник