2015-04-17 3 views
1

Я энтузиаст программирования, поэтому, пожалуйста, извините меня и помогите заполнить любые пробелы. Из того, что я понимаю, хорошие результаты из нейронной сети требуют сигмоида и либо изучают скорость или скорость шага (в зависимости от метода обучения), которые должны быть установлены правильно вдоль с обучающими итерациями.Аппроксимация лучших настроек для нейронной сети?

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

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

Есть математический способ найти хорошую (приблизительную) отправную точку для сигмоида, узнать скорость, шаги, итерации и т. Д. На основе известных значений, таких как образцы, входы, выходы, слои и т. Д.?

+1

Если ваша модель обратного распространения, я могу сказать вам, что вам нужен только один скрытый слой. Что касается других вещей, о которых вы спрашиваете, я уверен, что правильные параметры зависят от (и настраиваются) входных и выходных пространств. По крайней мере, это то, что я помню из литературы 10 лет назад. – Robinson

+0

Даже если ваша модель использует обратное распространение, вы можете использовать более одного скрытого слоя. В то время как нейронные сети с одним скрытым слоем являются универсальными аппроксиматорами, большее количество слоев может быть полезным в зависимости от того, какую функцию активации вы используете, см. Глубокое обучение. – Cesar

ответ

2

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

Что касается уровня обучения/ступенчатости, проблема в том, что выбор небольшой скорости шага может сделать учебу заведомо медленной, в то время как большой шаг может привести к тому, что ваша сеть расходится. Таким образом, общей методикой было использование метода обучения, который мог бы автоматически корректировать скорость обучения, чтобы ускорить, когда это необходимо, и замедлить в определенных областях градиента.

Таким образом, общий способ изучения нейронных сетей при решении обеих проблем заключается в использовании Levenberg-Marquardt learning algorithm с Bayesian Regularization. Алгоритм Левенберга-Марквардта является адаптивным алгоритмом в том смысле, что он может корректировать скорость обучения после каждой итерации, имея возможность переключаться с обновлений Гаусса-Ньютона (используя информацию второго порядка) обратно на алгоритм градиентного спуска (используя только информацию первого порядка) по мере необходимости.

Он также может дать вам оценку количества параметров, которые вам действительно нужны в вашей сети. Количество параметров - это общее количество весов, учитывающее все нейроны в сети. Затем вы можете использовать этот параметр, чтобы оценить, сколько нейронов вы должны использовать в первую очередь.

Этот метод реализован MATLAB function trainbr. Однако, поскольку вы также включили тег accord-net, я также должен сказать, что он реализован в LevenbergMarquardtLearning class (вы можете использовать последнюю альфа-версию в NuGet в случае, если вы имеете дело с несколькими проблемами вывода).

+0

Спасибо Cesar за то, что нашли время, чтобы ответить, ваша библиотека и преданность ей очень ценятся. Я предполагаю, что по параметрам вы имеете в виду EffectiveParameters? – Catnaps909

+0

Да, это свойство должно дать приблизительное количество параметров, эффективно используемых сетью - кстати, спасибо! Я надеюсь, что структура может быть полезна для вас! – Cesar