К сожалению, нет универсального способа определить априори наилучшее количество нейронов и количество слоев для нейронной сети, имея только описание проблемы. Существует даже не так много указаний, чтобы определить хорошие значения, которые можно попробовать в качестве отправной точки.
=========================
Наиболее распространенный подход, по-видимому, состоит в том, чтобы начать с приблизительного предположения, основанного на предыдущем опыте работы с сетями, используемыми для решения подобных задач. Это может быть ваш собственный опыт или опыт из вторых/третьих рук, который вы получили из учебного курса, блога или исследовательской работы. Затем попробуйте несколько вариантов и тщательно проверьте производительность, прежде чем выбрать лучший.
========================
Размер и глубина нейронных сетей также взаимодействуют с другими гиперпараметрами, так что изменение одной вещи в другом месте может повлиять на то, где находятся наилучшие значения. Таким образом, невозможно выделить «лучший» размер и глубину для сети, а затем продолжать настраивать другие параметры изолированно. Например, если у вас очень глубокая сеть, она может эффективно работать с функцией активации ReLU, но не так хорошо с сигмовидной — если вы нашли лучший размер/форму сети, а затем попробовали поэкспериментировать с различными функциями активации, вы можете прийти к неправильному выводу о том, что работает лучше всего.
Иногда вы можете прочитать об «эмпирических правилах», которые исследователи используют, начиная проектирование нейронной сети с нуля. Эти вещи могут работать для ваших проблем или нет, но они, по крайней мере, имеют то преимущество, что начинают решать проблему. Варианты, которые я видел, следующие:
=========================
1.Создайте сеть со скрытыми слоями в том же порядке, что и на входе, и все того же размера, на том основании, что нет особой причины изменять размер (если, возможно, вы не создаете автоэнкодер).
2.Начните с простого и усложняйте, чтобы увидеть, что улучшит простую сеть.
3.Попробуйте изменить глубину сети, если вы ожидаете, что выходные данные будут хорошо объясняться входными данными, но со сложной взаимосвязью (в отличие от просто зашумленных).
4.Попробуйте добавить "dropout", это самая близкая вещь, которую нейронные сети имеют к волшебной волшебной пыли, которая делает все лучше (предостережение: добавление отсева может улучшить обобщение, но также может увеличить требуемые размеры слоев и время обучения).
==========================
Если вы читаете это или что-то подобное ему в любом тексте, то относитесь к ним с долей скептицизма. Однако в худшем случае они помогут вам преодолеть эффект пустой страницы, написать какую-то сеть и заставить вас начать процесс тестирования и уточнения.
==========================
Кроме того, постарайтесь не слишком увлечься настройкой нейронной сети, когда какой-то другой подход может быть лучше и сэкономить вам много времени. Рассмотрите и используйте другие подходы к машинному обучению и науке о данных. Исследуйте данные, возможно, сделайте несколько графиков. Сначала попробуйте несколько простых линейных подходов, чтобы получить лучшие результаты, линейную регрессию, логистическую регрессию или регрессию softmax в зависимости от вашей проблемы. Рассмотрите возможность использования другого алгоритма ML для NNs — подходы на основе дерева решений, такие как XGBoost, могут быть быстрее и эффективнее, чем глубокое обучение для многих проблем.