Мне было интересно, как мы должны решить, сколько узлов в скрытых слоях и сколько скрытых слоев разместить при построении архитектуры нейронной сети.
Я понимаю, что уровень ввода и вывода зависит от имеющегося у нас обучающего набора, но как нам определить скрытый уровень и общую архитектуру в целом?
machine-learning
neural-network
user7677413
источник
источник
Ответы:
К сожалению, нет общего способа априори определить наилучшее количество нейронов и количество слоев для нейронной сети, учитывая только описание проблемы. Нет даже большого руководства для определения хороших ценностей в качестве отправной точки.
Наиболее распространенный подход, по-видимому, заключается в том, чтобы начать с приблизительного предположения, основанного на предыдущем опыте, касающемся сетей, используемых для решения аналогичных проблем. Это может быть ваш собственный опыт или опыт из вторых / третьих рук, который вы получили из учебного курса, блога или исследовательской статьи. Затем попробуйте несколько вариантов и тщательно проверьте производительность, прежде чем выбрать лучший.
Размер и глубина нейронных сетей также взаимодействуют с другими гиперпараметрами , поэтому изменение одной вещи в другом месте может повлиять на лучшие значения. Таким образом, невозможно определить «наилучший» размер и глубину для сети, а затем продолжать настраивать другие параметры изолированно. Например, если у вас очень глубокая сеть, она может эффективно работать с функцией активации ReLU, но не очень хорошо с сигмоидом - если вы нашли лучший размер / форму сети, а затем попытались провести эксперимент с различными функциями активации, вы можете прийти неверный вывод о том, что работает лучше всего.
Иногда вы можете прочитать о «эмпирических правилах», которые используют исследователи при создании дизайна нейронной сети с нуля. Эти вещи могут работать на ваши проблемы или нет, но они, по крайней мере, имеют преимущество в том, чтобы начать проблему. Варианты, которые я видел:
Создайте сеть со скрытыми слоями, схожими по размеру с входными данными и одинаковыми по размеру на том основании, что нет особых причин изменять размер (возможно, если вы не создаете автоэнкодер).
Начните с простого и создайте сложность, чтобы увидеть, что улучшает простую сеть.
Попробуйте изменить глубину сети, если вы ожидаете, что выход будет хорошо объяснен входными данными, но со сложными отношениями (в отличие от просто по своей сути шумных).
Попробуйте добавить несколько выпадений, ведь нейронные сети ближе всего к волшебной волшебной пыли, которая делает все лучше (предостережение: добавление выпадения может улучшить обобщение, но также может увеличить требуемые размеры слоев и время обучения).
Если вы читаете эти или что-то подобное в любом тексте, то возьмите их с щепоткой соли. Однако в худшем случае они помогут вам преодолеть эффект пустой страницы, написать какую-то сеть и заставить вас начать процесс тестирования и уточнения.
Кроме того, постарайтесь не слишком заблудиться в настройке нейронной сети, если какой-то другой подход может быть лучше и сэкономит вам много времени. Рассмотрите и используйте другие подходы машинного обучения и науки о данных. Изучите данные, возможно, сделайте несколько сюжетов. Сначала попробуйте несколько простых линейных подходов, чтобы получить эталонные показатели, линейную регрессию, логистическую регрессию или регрессию softmax в зависимости от вашей проблемы. Рассмотрите возможность использования алгоритма ML, отличного от NN - подходы, основанные на дереве решений, такие как XGBoost, могут быть быстрее и эффективнее, чем глубокое изучение многих проблем.
источник