Если у нас есть 10 собственных векторов, то у нас может быть 10 нейронных узлов во входном слое. Если у нас есть 5 выходных классов, то у нас может быть 5 узлов в выходном слое. Но каковы критерии выбора количества скрытых слоев в MLP и сколько нейронных узлы в 1 скрытом слое?
machine-learning
neural-network
deep-learning
perceptron
Абхишек Кумар
источник
источник
Ответы:
сколько скрытых слоев ?
модель с нулевыми скрытыми слоями разрешит линейно разделяемые данные. Так что, если вы уже не знаете, что ваши данные нельзя разделить линейно, не повредит проверить это - зачем использовать более сложную модель, чем требует задача? Если он линейно разделен, тогда будет работать более простой метод, но перцептрон также выполнит эту работу.
Предполагая, что ваши данные действительно требуют разделения нелинейным методом, всегда начинайте с одного скрытого слоя . Почти наверняка это все, что вам нужно. Если ваши данные разделяются с помощью MLP, то для этого MLP, вероятно, нужен только один скрытый слой. Для этого есть теоретическое обоснование, но моя причина чисто эмпирическая: многие сложные задачи классификации / регрессии решаются с использованием MLP с одним скрытым слоем, но я не припоминаю, чтобы встречал какие-либо многослойные MLP с несколькими скрытыми слоями, используемые для успешного моделирования данных - - Будь то на досках объявлений ML, учебниках ML, академических статьях и т. д. Они, безусловно, существуют, но обстоятельства, оправдывающие их использование, эмпирически довольно редки.
Сколько узлов в скрытом слое?
Из академической литературы MLP. мой собственный опыт и т. д., я собрал и часто полагаюсь на несколько практических правил ( RoT ), которые я также считаю надежными руководящими принципами (т. е. руководство было точным, и даже когда это не было так, оно обычно было ясно, что делать дальше):
RoT на основе улучшения сходимости:
Зачем? Во-первых, несколько дополнительных узлов в скрытом слое вряд ли причинят вред - ваш MLP все равно будет сходиться. С другой стороны, слишком мало узлов в скрытом слое может помешать сходимости. Подумайте об этом так: дополнительные узлы обеспечивают некоторую избыточную емкость - дополнительные веса для хранения / передачи сигнала в сеть во время итерации (обучение или построение модели). Во-вторых, если вы начнете с дополнительных узлов в скрытом слое, то позже (во время итерации) их легко удалить. Это обычное дело, и существуют диагностические методы, которые могут вам помочь (например, диаграмма Хинтона, которая представляет собой просто визуальное изображение весовых матриц, «тепловую карту» весовых значений).
RoT на основе размера входного слоя и размера выходного слоя:
RoT на основе основных компонентов:
И все же автор часто задаваемых вопросов NN называет эти Правила «чепухой» (буквально), потому что они: игнорируют количество обучающих экземпляров, шум в целях (значения переменных ответа) и сложность пространства функций.
По его мнению (и мне всегда казалось, что он знает, о чем он говорит), выберите количество нейронов в скрытом слое в зависимости от того, включает ли ваш MLP некоторую форму регуляризации или раннюю остановку. .
Единственный действенный метод оптимизации количества нейронов в скрытом слое:
Во время построения модели, одержимо тестируйте; тестирование выявит признаки «неправильной» сетевой архитектуры. Например, если вы начинаете с MLP, имеющего скрытый слой, состоящий из небольшого количества узлов (которые вы будете постепенно увеличивать по мере необходимости, в зависимости от результатов тестирования), ваша ошибка обучения и обобщения будет высокой как из-за смещения, так и из-за недостаточного соответствия.
Затем увеличивайте количество узлов в скрытом слое по одному, пока ошибка обобщения не начнет увеличиваться, на этот раз из-за переобучения и высокой дисперсии.
На практике я делаю так:
входной уровень : размер моего фактора данных (количество функций в моей модели) + 1 для узла смещения, не включая, конечно, переменную ответа
выходной слой : единственно определяется моей моделью: регрессия (один узел) по сравнению с классификацией (количество узлов, эквивалентное количеству классов, при условии softmax)
скрытый слой : для начала , один скрытый слойс количеством узлов, равным размеру входного слоя. «Идеальный» размер, скорее всего, будет меньше (т. Е. Некоторое количество узлов между числом во входном слое и числом в выходном слое), а не больше - опять же, это просто эмпирическое наблюдение, и основная масса этого наблюдения - мой собственный опыт. Если проект оправдал необходимое дополнительное время, то я начинаю с одного скрытого слоя, состоящего из небольшого количества узлов, затем (как я объяснил чуть выше) я добавляю узлы к скрытому слою по одному, вычисляя обобщение. ошибка, ошибка обучения, систематическая ошибка и дисперсия. Когда ошибка обобщения снизилась и непосредственно перед тем, как она снова начнет увеличиваться, я выбираю количество узлов в этой точке. См. Рисунок ниже.
источник
Очень сложно выбрать количество нейронов в скрытом слое и выбрать количество скрытых слоев в вашей нейронной сети.
Обычно для большинства приложений достаточно одного скрытого слоя. Кроме того, количество нейронов в этом скрытом слое должно быть между количеством входов (10 в вашем примере) и количеством выходов (5 в вашем примере).
Но лучший способ подобрать количество нейронов и скрытых слоев - это поэкспериментировать. Обучите несколько нейронных сетей с разным количеством скрытых слоев и скрытых нейронов и измерьте производительность этих сетей с помощью перекрестной проверки . Вы можете придерживаться числа, которое дает наиболее эффективную сеть.
источник
Чтобы автоматизировать выбор лучшего количества слоев и лучшего количества нейронов для каждого из слоев, вы можете использовать генетическую оптимизацию. .
Ключевые элементы:
Вы также можете рассмотреть:
источник
Недавно появилась теоретическая работа над этим https://arxiv.org/abs/1809.09953 . Предполагая, что вы используете RELU MLP, все скрытые слои имеют одинаковое количество узлов, а ваша функция потерь и истинная функция, которые вы аппроксимируете нейронной сетью, подчиняются некоторым техническим свойствам (в документе), вы можете выбрать глубину порядок $ \ log (n) $ и ширина скрытых слоев должны быть порядка $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Здесь $ n $ - размер вашей выборки, $ d $ - размер вашего входного вектора, а $ \ beta $ - параметр гладкости для вашей истинной функции. Поскольку $ \ beta $ неизвестно, вы, вероятно, захотите рассматривать его как гиперпараметр.
Поступая так, вы можете гарантировать, что с вероятностью, которая сходится к $ 1 $ в зависимости от размера выборки, ваша ошибка аппроксимации сходится к $ 0 $ в зависимости от размера выборки. Ставят ставку. Обратите внимание, что это не гарантированно лучшая архитектура, но, по крайней мере, она может дать вам хорошее место для начала. Кроме того, мой собственный опыт подсказывает, что такие вещи, как отсев из школы, все еще могут помочь на практике.
источник