Как определить архитектуру нейронной сети?

19

Мне было интересно, как мы должны решить, сколько узлов в скрытых слоях и сколько скрытых слоев разместить при построении архитектуры нейронной сети.

Я понимаю, что уровень ввода и вывода зависит от имеющегося у нас обучающего набора, но как нам определить скрытый уровень и общую архитектуру в целом?

user7677413
источник
Обычно мы экспериментируем, используя нашу интуицию; Считай это гиперпараметром . Существуют способы изучения архитектуры, но я не знаю, насколько они практичны: blog.acolyer.org/2017/05/10/…
Эмре,
2
Я искал дубликат к этому, потому что я уверен, что он появлялся много раз прежде на этом сайте. Однако не удалось найти чистую версию, которая не была привязана к какому-либо набору данных или проблеме. Может быть, это общий вопрос, на который мы указываем другим? К сожалению, не существует большого «как» ответа, который нужно иметь вообще, но это распространенный вопрос, когда сталкиваешься с таким большим выбором.
Нил Слэйтер
Это очень интересный вопрос (исследователь начал работать над вашим вопросом). Какова будет оптимальная архитектура для набора данных A и набора данных B. Пожалуйста, прочитайте ниже статью, в которой пытались ответить на ваш вопрос. Добро пожаловать в мир поиска нейронной архитектуры (NAS). arxiv.org/abs/1611.01578
iDeepVision

Ответы:

17

К сожалению, нет общего способа априори определить наилучшее количество нейронов и количество слоев для нейронной сети, учитывая только описание проблемы. Нет даже большого руководства для определения хороших ценностей в качестве отправной точки.

Наиболее распространенный подход, по-видимому, заключается в том, чтобы начать с приблизительного предположения, основанного на предыдущем опыте, касающемся сетей, используемых для решения аналогичных проблем. Это может быть ваш собственный опыт или опыт из вторых / третьих рук, который вы получили из учебного курса, блога или исследовательской статьи. Затем попробуйте несколько вариантов и тщательно проверьте производительность, прежде чем выбрать лучший.

Размер и глубина нейронных сетей также взаимодействуют с другими гиперпараметрами , поэтому изменение одной вещи в другом месте может повлиять на лучшие значения. Таким образом, невозможно определить «наилучший» размер и глубину для сети, а затем продолжать настраивать другие параметры изолированно. Например, если у вас очень глубокая сеть, она может эффективно работать с функцией активации ReLU, но не очень хорошо с сигмоидом - если вы нашли лучший размер / форму сети, а затем попытались провести эксперимент с различными функциями активации, вы можете прийти неверный вывод о том, что работает лучше всего.

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

  • Создайте сеть со скрытыми слоями, схожими по размеру с входными данными и одинаковыми по размеру на том основании, что нет особых причин изменять размер (возможно, если вы не создаете автоэнкодер).

  • Начните с простого и создайте сложность, чтобы увидеть, что улучшает простую сеть.

  • Попробуйте изменить глубину сети, если вы ожидаете, что выход будет хорошо объяснен входными данными, но со сложными отношениями (в отличие от просто по своей сути шумных).

  • Попробуйте добавить несколько выпадений, ведь нейронные сети ближе всего к волшебной волшебной пыли, которая делает все лучше (предостережение: добавление выпадения может улучшить обобщение, но также может увеличить требуемые размеры слоев и время обучения).

Если вы читаете эти или что-то подобное в любом тексте, то возьмите их с щепоткой соли. Однако в худшем случае они помогут вам преодолеть эффект пустой страницы, написать какую-то сеть и заставить вас начать процесс тестирования и уточнения.


Кроме того, постарайтесь не слишком заблудиться в настройке нейронной сети, если какой-то другой подход может быть лучше и сэкономит вам много времени. Рассмотрите и используйте другие подходы машинного обучения и науки о данных. Изучите данные, возможно, сделайте несколько сюжетов. Сначала попробуйте несколько простых линейных подходов, чтобы получить эталонные показатели, линейную регрессию, логистическую регрессию или регрессию softmax в зависимости от вашей проблемы. Рассмотрите возможность использования алгоритма ML, отличного от NN - подходы, основанные на дереве решений, такие как XGBoost, могут быть быстрее и эффективнее, чем глубокое изучение многих проблем.

Нил Слэйтер
источник
Это отличное объяснение. Благодарю. Мне также интересно, есть ли хороший способ решить, какой подход ML использовать? Вы упомянули, что может быть лучший способ, чем нейронная сеть, но как мы можем определить это легко?
user7677413
@ user7677413: применяется то же самое. Вы должны попробовать и увидеть, хотя опыт может дать вам руководство по знакомым проблемам.
Нил Слэйтер
1
когда нужна нейронная сеть?
user7677413
1
Нейронные сети редко нужны . Однако они лучше справляются с некоторыми проблемами. Они отлично справляются с задачами обработки сигналов, такими как распознавание аудио и изображений, а также способны выявлять тонкие отличия от больших объемов данных, когда более простые алгоритмы могут достичь предела. Однако никто не может предсказать, является ли NN правильным инструментом для вас, и какую бы проблему вы ни столкнулись в определенный день.
Нил Слэйтер
1
@ user7677413 Я думаю, вы предполагаете, что не существует 40 лет глубоких и глубоких исследований в области машинного обучения. Похоже, вы просто царапаете поверхность. Я рекомендую найти учебник и посмотреть, как все это связано друг с другом, что помогло бы построить вашу интуицию для многих алгоритмов машинного обучения.
Алекс Л