Существует ли стандартный и общепринятый метод выбора количества слоев и количества узлов в каждом слое в нейронной сети с прямой связью? Я заинтересован в автоматизированных способах построения нейронных сетей.
model-selection
neural-networks
Роб Хиндман
источник
источник
Ответы:
Я понимаю, что на этот вопрос дан ответ, но я не думаю, что существующий ответ действительно затрагивает вопрос, помимо указания ссылки, обычно связанной с предметом вопроса. В частности, ссылка описывает один метод для программной конфигурации сети, но это не « стандартный и принятый метод » для конфигурации сети.
Следуя небольшому набору четких правил, можно программно установить компетентную сетевую архитектуру (т. Е. Количество и тип нейронных слоев и количество нейронов, составляющих каждый слой). Следуя этой схеме, вы получите грамотную архитектуру, но, вероятно, не оптимальную.
Но после инициализации этой сети вы можете итеративно настраивать конфигурацию во время обучения, используя ряд вспомогательных алгоритмов; одно из этих семейств работает путем обрезания узлов на основе (малых) значений вектора веса после определенного количества тренировочных эпох - иными словами, устранение ненужных / избыточных узлов (подробнее об этом ниже).
Таким образом, каждый NN имеет три типа слоев: входной , скрытый и выходной .
Поэтому создание архитектуры NN означает получение значений для числа уровней каждого типа и количества узлов в каждом из этих уровней.
Входной слой
Просто - у каждого NN есть ровно один из них - никаких исключений, о которых я знаю.
Что касается количества нейронов, составляющих этот слой, этот параметр полностью и однозначно определяется, как только вы узнаете форму ваших тренировочных данных. В частности, количество нейронов, составляющих этот слой, равно количеству объектов (столбцов) в ваших данных . Некоторые конфигурации NN добавляют один дополнительный узел для термина смещения.
Выходной слой
Как и входной слой, каждый NN имеет ровно один выходной слой. Определить его размер (количество нейронов) просто; это полностью определяется выбранной конфигурацией модели.
Работает ли ваш NN в машинном режиме или в режиме регрессии (соглашение ML об использовании термина, который также используется в статистике, но присвоение ему другого значения, очень сбивает с толку). Режим машины: возвращает метку класса (например, «Премиум-аккаунт» / «Базовая учетная запись»). Режим регрессии возвращает значение (например, цена).
Если NN является регрессором, то выходной слой имеет один узел.
Если NN является классификатором, то он также имеет один узел, если не используется softmax, и в этом случае выходной слой имеет один узел на метку класса в вашей модели.
Скрытые слои
Таким образом, эти несколько правил устанавливают количество слоев и размер (нейроны / слой) для входного и выходного слоев. Это оставляет скрытые слои.
Сколько скрытых слоев? Хорошо, если ваши данные линейно разделимы (что вы часто знаете, когда начинаете кодировать NN), тогда вам вообще не нужны никакие скрытые слои. Конечно, вам также не нужен NN для разрешения ваших данных, но он все равно сделает свою работу.
Помимо этого, как вы, вероятно, знаете, есть множество комментариев по вопросу о конфигурации скрытого слоя в NN (см. Безумно подробный и проницательный FAQ по NN для превосходного резюме этого комментария). Одной из проблем в этой теме, по которой существует консенсус, является разница в производительности от добавления дополнительных скрытых слоев: ситуации, в которых производительность улучшается со вторым (или третьим и т. Д.) Скрытым слоем, очень немногочисленны. Один скрытый слой достаточно для большинства проблем.
Так как насчет размера скрытого слоя (слоев) - сколько нейронов? Существуют эмпирически полученные эмпирические правила, из которых наиболее часто полагаются на то, что « оптимальный размер скрытого слоя обычно находится между размером входных данных и размером выходных слоев ». Джефф Хитон, автор книги « Введение в нейронные сети на Java», предлагает еще несколько.
В целом, для большинства проблем можно, вероятно, получить приличную производительность (даже без второго шага оптимизации), установив конфигурацию скрытого слоя, используя только два правила: (i) количество скрытых слоев равно одному; и (ii) число нейронов в этом слое является средним значением нейронов во входном и выходном слоях.
Оптимизация конфигурации сети
Обрезкаописывает набор методов для подрезания размера сети (по узлам, а не по уровням), чтобы улучшить вычислительную производительность и иногда производительность разрешения. Суть этих методов заключается в удалении узлов из сети во время обучения путем определения тех узлов, которые, если их удалить из сети, не окажут заметного влияния на производительность сети (т. Е. Разрешение данных). (Даже не используя формальную технику сокращения, вы можете получить приблизительное представление о том, какие узлы не важны, посмотрев на вашу матрицу весов после тренировки; посмотрите веса очень близко к нулю - это узлы на обоих концах этих весов, которые часто удалено во время сокращения.) Очевидно, что если вы используете алгоритм сокращения во время обучения, начните с конфигурации сети, которая с большей вероятностью будет иметь избыточные (то есть «сокращаемые») узлы - другими словами,
Иными словами, применяя алгоритм сокращения к вашей сети во время обучения, вы можете приблизиться к оптимальной конфигурации сети; можете ли вы сделать это за один шаг вперед (например, алгоритм, основанный на генетическом алгоритме), я не знаю, хотя знаю, что пока эта двухэтапная оптимизация встречается чаще.
источник
Ответ @ Дуга сработал для меня. Есть еще одно практическое правило, которое помогает при контролируемых проблемах в обучении. Обычно вы можете предотвратить перенапряжение, если будете держать количество нейронов ниже:
Другие рекомендуют устанавливать на значение от 5 до 10, но я считаю, что значение 2 будет часто работать без переобучения. Вы можете рассматривать альфа как эффективный фактор ветвления или число ненулевых весов для каждого нейрона. Выпадающие слои принесут «эффективный» коэффициент ветвления намного ниже фактического среднего коэффициента ветвления для вашей сети.alpha
Как объясняется в этом превосходном тексте NN Design , вы хотите ограничить количество свободных параметров в вашей модели (его степень или количество ненулевых весов) небольшой частью степеней свободы в ваших данных. Степени свободы в ваших данных - это число выборок * степеней свободы (измерений) в каждой выборке или (при условии, что они все независимы). Таким образом, - это способ указать, насколько общей должна быть ваша модель, или насколько вы хотите предотвратить переоснащение.Ns∗(Ni+No) α
Для автоматизированной процедуры вы должны начать с альфа-2 (вдвое больше степеней свободы в ваших тренировочных данных по сравнению с вашей моделью) и работать до 10, если ошибка (потеря) для вашего учебного набора данных значительно меньше, чем для ваш тестовый набор данных.
источник
N_h
(среднее количество скрытых нейронов на слой)N_s = (N_i + N_o) * N_h ^ N_hidden_layers
. Но я все еще не использовал бы эту формулу. Это только для очень простых проблем (игрушечных проблем), когда вы не планируете реализовывать какие-либо другие подходы к регуляризации.От Введение в нейронные сети для Java (второе издание) по Джефф Хитон - предварительный просмотр в свободном доступе на Google Books и ранее на сайте автора :
Мне также нравится следующий фрагмент из ответа, который я нашел на researchgate.net , который очень много говорит в нескольких словах:
источник
В данный момент я работаю над эмпирическим исследованием этого вопроса (приближаясь к столетию моделирования процессора на нашем объекте HPC!). Мой совет - использовать «большую» сеть и регуляризацию, если вы используете регуляризацию, тогда сетевая архитектура становится менее важной (при условии, что она достаточно велика для представления базовой функции, которую мы хотим захватить), но вам нужно настроить регуляризацию параметр правильно.
Одна из проблем, связанных с выбором архитектуры, заключается в том, что она представляет собой дискретный, а не непрерывный контроль сложности модели, и поэтому может быть немного тупым инструментом, особенно когда идеальная сложность мала.
Однако все это зависит от теорем «без бесплатного обеда», в то время как регуляризация эффективна в большинстве случаев, всегда будут случаи, когда выбор архитектуры работает лучше, и единственный способ выяснить, верно ли это для рассматриваемой проблемы. это попробовать оба подхода и перекрестной проверки.
Если бы я строил автоматизированный построитель нейронных сетей, я бы использовал байесовский подход Рэдфорда Нила на основе гибридной методики Монте-Карло (HMC) и использовал бы большую сеть и интегрировал бы по весам, а не оптимизировал вес одной сети. Однако это вычислительно дорого и немного «черное искусство», но результаты, достигнутые профессором Нилом, говорят о том, что оно того стоит!
источник
Насколько я знаю, нет способа автоматически выбирать количество слоев и нейронов в каждом слое. Но есть сети, которые могут автоматически строить свою топологию, например EANN (эволюционные искусственные нейронные сети, которые используют генетические алгоритмы для развития топологии).
Есть несколько подходов, более или менее современный, который, казалось, дал хорошие результаты, был NEAT (Neuro Evolution of Augmented Topologies) .
источник
Ref:
1 Мастера, Тимофей. Практические рецепты нейронной сети на С ++. Морган Кауфманн, 1993.
[2] http://www.iitbhu.ac.in/faculty/min/rajesh-rai/NMEICT-Slope/lecture/c14/l1.html
источник
Автоматизированные способы построения нейронных сетей с использованием глобального поиска гиперпараметров:
Входной и выходной слои имеют фиксированный размер.
Что может варьироваться:
Для этой задачи дискретной оптимизации можно использовать несколько методов , в которых ошибка выборки в сети является функцией стоимости.
источник
Извините, я не могу оставить комментарий, поэтому, пожалуйста, потерпите меня. В любом случае, я наткнулся на эту дискуссионную ветку, которая напомнила мне статью, которую я видел совсем недавно. Я думаю, что это может быть интересно для людей, участвующих здесь:
источник
Я перечислил много способов изучения топологии в своей магистерской диссертации, глава 3 . Большие категории:
источник
Я хотел бы предложить менее распространенный, но супер эффективный метод .
По сути, вы можете использовать набор алгоритмов, называемых «генетическими алгоритмами», которые пробуют небольшое подмножество потенциальных опций (случайное количество слоев и узлов на слой). Затем он рассматривает эту совокупность вариантов как «родителей», которые создают детей путем объединения / мутации одного или нескольких родителей, очень похожих на эволюцию организмов. Лучшие дети и несколько случайных детей содержатся в каждом поколении и поколениях, самые сильные выживают.
Для ~ 100 или менее параметров (таких как выбор количества слоев, типов слоев и количества нейронов на слой) этот метод является суперэффективным. Используйте его, создавая несколько потенциальных сетевых архитектур для каждого поколения и обучая их частично до тех пор, пока не будет оценена кривая обучения (100-10 тыс. Мини-пакетов обычно зависят от многих параметров). Через несколько поколений вы, возможно, захотите рассмотреть точку, в которой поезд и валидация начинают существенно отличаться по частоте ошибок (переоснащению), в качестве вашей целевой функции при выборе детей. Это может быть хорошая идея использовать очень маленькое подмножество ваших данных (10-20%), пока вы не выберете окончательную модель, чтобы быстрее прийти к выводу. Кроме того, используйте единственное начальное число для инициализации вашей сети, чтобы правильно сравнить результаты.
10-50 поколений должны дать отличные результаты для приличной сети.
источник
Количество скрытых слоев и что они могут достичь:
0 - Способен только представлять линейные отделимые функции или решения.
1 - может аппроксимировать любую функцию, которая содержит непрерывное отображение из одного конечного пространства в другое.
2 - Может представлять произвольную границу решения с произвольной точностью с помощью рациональных функций активации и может приближать любое гладкое отображение с любой точностью.
Более 2 - Дополнительные слои могут изучать сложные представления (своего рода автоматическое проектирование объектов) для слоев слоев.
источник