Когда вы пишете свой алгоритм, как вы узнаете, сколько нейронов нужно на один слой? Существуют ли какие-либо методы для определения оптимального количества из них, или это практическое правило?
источник
Когда вы пишете свой алгоритм, как вы узнаете, сколько нейронов нужно на один слой? Существуют ли какие-либо методы для определения оптимального количества из них, или это практическое правило?
Не существует прямого способа найти оптимальное количество из них: люди пытаются эмпирически увидеть и посмотреть (например, используя перекрестную проверку). Наиболее распространенными методами поиска являются случайный, ручной поиск и поиск по сетке.
Существуют более продвинутые методы, такие как гауссовские процессы, например, Оптимизация гиперпараметров нейронной сети с помощью гауссовских процессов для классификации актов диалога , IEEE SLT 2016 .
Для более интеллектуального подхода, чем случайный или исчерпывающий поиск, вы можете попробовать генетический алгоритм, такой как NEAT http://nn.cs.utexas.edu/?neat . Однако это не дает гарантии на поиск глобальной оптимумы, это просто алгоритм оптимизации, основанный на производительности, и поэтому он уязвим для застрять в локальной оптимуме.
Paper Szegedy C, Vanhoucke V, Ioffe S, et al. Переосмысление начальной архитектуры для компьютерного зрения [J]. Препринт arXiv arXiv: 1512.00567, 2015. дает некоторые общие принципы проектирования:
Эти предложения не могут дать вам оптимальное количество нейронов в сети.
Тем не менее, еще есть некоторые исследования сжатия моделей, например, Структурное изучение разреженности (SSL) глубоких нейронных сетей , SqueezeNet , Pruning network, которые могут пролить некоторый свет на то, как оптимизировать нейроны для одного слоя.
Особенно в структурированном разреженном обучении глубоких нейронных сетей , он добавляет
Group Lasso
термин регуляризации в функцию потерь, чтобы упорядочить структуры (т. Е. Фильтры, каналы, формы фильтров и глубину слоя) DNN, а именно обнуление некоторых компонентов ( т. е. фильтры, каналы, формы фильтров и глубина слоя) структуры сети и обеспечивает замечательное сжатие и ускорение сети, сохраняя при этом небольшую потерю точности классификации.источник
Вы знаете, когда у вас слишком много нейронов, это когда вы перебираете. Это означает, что это не работает хорошо, потому что NN пытается активировать на самом идеальном совпадении, которое невозможно. Как две разные кошки с одинаковым количеством атомов, или, скажем так, это детектор NN, который активирует только изображение вашей любимой кошки и ничего больше. Вы хотите, чтобы nn активировал более широкий диапазон. Как и на любой картинке кота.
Переоснащение - это проблема, которая не может быть быстро решена. Вы можете начать с небольшого количества, а затем продолжать добавлять больше. Или начните с большого количества и затем удаляйте их, пока это не работает правильно.
источник