Ответ 1
сколько скрытых слоев?
модель с нулевыми скрытыми слоями будет разрешать линейно разделяемые данные. Поэтому, если вы уже не знаете, что ваши данные не являются линейно разделяемыми, это не мешает проверить это - зачем использовать более сложную модель, чем требует задача? Если он линейно разделен, тогда будет работать более простой метод, но Perceptron также выполнит эту работу.
Предполагая, что ваши данные требуют разделения по нелинейной методике, тогда всегда начинается с одного скрытого слоя. Почти наверняка все, что вам нужно. Если ваши данные разделяются с помощью MLP, то MLP, вероятно, нужен только один скрытый слой. Для этого есть теоретическое обоснование, но моя причина чисто эмпирическая: многие сложные проблемы классификации/регрессии решаются с использованием MLP с одним скрытым слоем, но я не помню, чтобы сталкивались с MLP с несколькими скрытыми слоями, которые использовались для успешного моделирования данных, - на досках объявлений ML, книгах ML, научных статьях и т.д. Они существуют, конечно, но обстоятельства, которые оправдывают их использование, эмпирически довольно редки.
Сколько узлов в скрытом слое?
Из академической литературы MLP. мой собственный опыт и т.д., я собрал и часто полагаюсь на несколько эмпирических правил (RoT), и которые я также нашел надежными проводниками (т.е. руководство было точным, и даже когда оно не было, обычно было понятно, что делать дальше):
RoT, основанный на улучшении конвергенции:
Когда вы начинаете построение модели, ошибаетесь на стороне узлов большев скрытом слое.
Почему? Во-первых, несколько дополнительных узлов в скрытом слое вряд ли нанесут какой-либо вред - ваш MLP все равно сходится. С другой стороны, слишком мало узлов в скрытом слое могут предотвратить конвергенцию. Подумайте об этом таким образом, дополнительные узлы обеспечивают некоторую избыточную мощность - дополнительные веса для хранения/отпускания сигнала в сети во время итерации (обучение или построение модели). Во-вторых, если вы начинаете с дополнительных узлов в своем скрытом слое, тогда их легко обрезать позже (во время выполнения итерации). Это обычное явление, и вам помогут диагностические методы (например, диаграмма Хинтона, которая представляет собой просто визуальное изображение весовых матриц, "тепловую карту" весовых значений).
RoTs в зависимости от размера входного слоя и размера выходного слоя:
Правило большого пальца - это размер этого [скрытого] слоя, где-то между размером входного слоя... и размером выходного слоя....
Чтобы вычислить количество скрытых узлов, мы используем общее правило: (Количество входов + выходов) x 2/3
RoT на основе основных компонентов:
Как правило, мы указываем столько скрытых узлов, сколько размеров [основной компоненты], необходимые для захвата 70-90% дисперсии входных данных набор.
И тем не менее NN FAQ автор называет эти Правила "бессмыслицей" (буквально), потому что они: игнорируют количество учебных экземпляров, шум в целевые значения (значения переменных ответа) и сложность пространства функций.
По его мнению (и мне всегда казалось, что он знает, о чем он говорит), выберите количество нейронов в скрытом слое, исходя из того, включает ли ваш MLP какую-то форму регуляризации или раннюю остановку.
Единственный допустимый метод оптимизации числа нейронов в скрытом слое:
Во время вашего построения модели проверяйте навязчиво; тестирование выявит подписи "неправильной" сетевой архитектуры. Например, если вы начинаете с MLP со скрытым слоем, состоящим из небольшого количества узлов (которые вы будете постепенно увеличивать по мере необходимости, исходя из результатов теста), ваша ошибка обучения и обобщения будет высокой, вызванной смещением и недоукомплектованием.
Затем увеличьте количество узлов в скрытом слое, по одному за раз, пока ошибка обобщения не начнет увеличиваться, на этот раз из-за переопределения и высокой дисперсии.
На практике я делаю это следующим образом:
уровень ввода: размер моего данных vactor (количество функций в моей модели) + 1 для смещения node и не включая переменную ответа, конечно
уровень вывода: soley определяется моей моделью: регрессия (одна node) по сравнению с классификацией (количество узлов, эквивалентное количеству классов, при условии softmax)
скрытый слой: для запуска один скрытый слой с числом узлов, равным размеру входного слоя. "Идеальный" размер скорее всего будет меньше (т.е. Некоторое количество узлов между числом во входном слое и числом в выходном слое), а не больше - опять же, это просто эмпирическое наблюдение, а основная масса этого наблюдения - мой собственный опыт. Если проект оправдывает дополнительное время, то я начинаю с одного скрытого слоя, состоящего из небольшого числа узлов, а затем (как я объяснил чуть выше) добавляю узлы к скрытому слою, по одному за раз, вычисляя обобщение ошибки, ошибки обучения, смещения и дисперсии. Когда ошибка обобщения опустилась и как раз перед тем, как она снова начнет увеличиваться, количество узлов в этой точке является моим выбором. См. Рисунок ниже.