2012-05-04 8 views
0

Кто-нибудь здесь, кто знаком с сетями эхо-состояний? Я создал сеть состояний эха в C#. Цель заключалась только в том, чтобы классифицировать вклады в ХОРОШИЕ и НЕ ХОРОШИЕ. Вход представляет собой массив двойных чисел. Я знаю, что, возможно, для этой классификации сеть эхо-состояний не лучший выбор, но я должен сделать это с помощью этого метода.Эхо-состояние нейронной сети?

Моя проблема в том, что после обучения сети она не может обобщить. Когда я запускаю сеть с иностранными данными (а не с учебным вводом), я получаю только около 50-60% хорошего результата.

Подробнее: Моя сеть эхо-состояний должна работать как аппроксиматор функции. Входной сигнал функции представляет собой массив из 17 двойных значений, а выход равен 0 или 1 (я должен классифицировать ввод на плохой или хороший ввод).

Так что я создал сеть. Он содержит входной слой с 17 нейронами, слой резервуара, номер которого не регулируется, и выходной слой, содержащий 1 нейрон для нужного выхода 0 или 1. В более простом примере не используется выходная обратная связь (я попытался использовать обратную связь также, но ничего не изменилось).

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

Входной слой полностью подключен к слою резервуара со случайными значениями. Таким образом, в состоянии тренировки я запускаю вычисление внутренних активаций активатора (n) с данными тренировки, собирая их в матричную строку. Используя желаемую матрицу выходных данных (которая теперь является вектором с 1 ot 0 значениями), я вычисляю выходные весы (от резервуара до выхода). Резервуар полностью подключен к выходу. Если кто-то использовал сети эхо-состояний, то понимает, о чем они говорят. Для этого я использую псевдо-обратный метод.

Вопрос в том, как я могу настроить сеть, чтобы она лучше обобщала? Чтобы получить более 50-60% желаемых результатов с помощью внешнего набора данных (а не учебного). Если я снова запустил сеть с помощью набора учебных материалов, это даст очень хорошие результаты, 80-90%, но я хочу, чтобы лучше обобщить.

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

+0

«Если кто-то может, пожалуйста, ответьте, чтобы я мог более подробно объяснить свою проблему». как насчет того, чтобы вы более подробно объяснили, тогда мы отвечаем? – Annabelle

ответ

2

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

Как люди это делают, у них есть обучающий набор A, набор для проверки B и тестовый набор C. Вы знаете правильную классификацию A и B, но не C (потому что вы разделили свои известные данные на A и B и C - значения, которые вы хотите найти в сети). Когда вы тренируетесь, вы показываете только сеть A, но на каждой итерации, чтобы вычислить успех, вы используете как A, так и B. Таким образом, во время обучения сеть пытается понять отношения, присутствующие в A и B, глядя только на A. Потому что он не может видеть фактические значения входных и выходных данных в B, но только знает, точно ли его текущее состояние описывает B или нет, это помогает уменьшить переобучение.

Обычно люди, похоже, разбивают 4/5 данных на A и 1/5 из них на B, но, конечно, вы можете попробовать разные соотношения.

В конце концов, вы закончите обучение и посмотрите, что сеть скажет о вашем неизвестном наборе C.

Извините за общий и базовый ответ, но, возможно, это поможет лучше описать проблему.

+0

Спасибо за ваш ответ, но я не уверен, что понимаю его правильно. Таким образом, вы говорите, что после того, как я обучил сеть с помощью A и вычислил Резервуар для вывода соединений, запустите сеть с A и B, и из этого я могу рассчитать скорость cuccess. Таким образом, внутреннее состояние резервуара X (n) изменится так, как оно будет «хорошим» для набора данных C? Я попробую это спасибо! :) Надеюсь, это поможет. –

+0

Добро пожаловать. возможно, это было бы полезно: http://stackoverflow.com/questions/2976452/whats-the-diference-between-train-validation-and-test-set-in-neural-networks – Superbest

+0

Хм, проблема в том, что я не использую обратное распространение. Мой метод diffrenet.I использовать автономный алгоритм для вычисления выходных весов. –

0

Если ваша сеть не обобщает, это означает, что она перерабатывает.

Для уменьшения переобучения на нейронной сети, есть два способа:

  • получить больше подготовки данных
  • уменьшить число нейронов

Вы также можете подумать об особенностях вас питание сети. Например, если это временный ряд, который повторяется каждую неделю, то одна функция - это что-то вроде «дня недели» или «часа недели» или «минуты недели».

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

0

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

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

Решение Superbest состоит в том, чтобы использовать проверку, чтобы прекратить обучение, как только производительность на проверке перестает улучшаться, метод называется early stopping. Но, как вы отметили, поскольку вы используете автономную регрессию для вычисления весов вывода вашего ESN, вы не можете использовать набор проверки, чтобы определить, когда прекратить обновление параметров вашей модели. Ранняя остановка работает только для онлайн-алгоритмов обучения.

Однако вы можете использовать проверку, установленную другим способом: упорядочить коэффициенты вашей регрессии! Вот как это работает:

  • Split данные обучения в «обучения» части (как правило, 80-90% от данных, которые вы имеете в наличии) и «проверки» части (остальные 10-20%).
  • Когда вы вычисляете свою регрессию, вместо использования линейной регрессии ванили, используйте регулярную технику, например ridge regression, lasso regression или elastic net regression. Используйте только «обучающую» часть вашего набора данных для вычисления регрессии.
  • Все эти регуляризованные методы регрессии имеют один или несколько «гиперпараметров», которые уравновешивают модель, соответствующую ее сложности. Набор данных «валидация» используется для установки этих значений параметров: вы можете сделать это с помощью grid search, эволюционных методов или любого другого метода оптимизации гиперпараметров. Вообще говоря, эти методы работают, выбирая значения для гиперпараметров, подгоняя модель с помощью «обучающего» набора данных и измеряя производительность установленной модели в наборе данных «валидация». Повторите N раз и выберите модель, которая лучше всего подходит для набора «валидация».

Подробнее о регуляризации и регрессии вы можете узнать по адресу http://en.wikipedia.org/wiki/Least_squares#Regularized_versions, или просмотрев его в учебнике по обучению или статистике.

Кроме того, читайте больше о методах перекрестной проверки на уровне http://en.wikipedia.org/wiki/Cross-validation_(statistics).

Смежные вопросы