Группировка вывода нейронной сети 0,5?

Я пытался написать систему нейронной сети, но даже при выполнении простых задач типа AND/OR/NOR выходы группируются около 0,5 (для смещения -1) и 0,7 (для смещения 1). Это не выглядит совсем "неправильным"... 1,1 в шаблоне И кажется выше, чем остальные, а 0,0 в ИЛИ выглядит ниже, но все они все еще сгруппированы, так что это спорно.

Мне было интересно: а) есть ли какая-то очевидная ошибка, которую я сделал, или б) есть ли какие-либо советы по отладке нейронных сетей... поскольку вы не всегда можете точно отследить, откуда пришел ответ...

Спасибо!

Майк


person Micheal    schedule 08.04.2010    source источник
comment
Это может быть немного поздно спрашивать, но я должен видеть гораздо больший диапазон на моих выходах, верно? Это не должно быть похоже на... округление 0,56 до 1 и 0,49 до 0? Каждый раз, когда я проверяю отдельные формулы, все проходит нормально, поэтому я думаю, что это скорее реализация, чем алгоритм :) Что больше раздражает :)   -  person Micheal    schedule 08.04.2010
comment
ваша сигмовидная функция отвечает только за нормализацию значений, и вы должны округлять значения, только если они находятся в пределах вашего порога точности. Сначала просто попытайтесь получить очень маленькую среднеквадратичную ошибку, когда эта ошибка упадет ниже порога, тогда и только тогда вы пометите экземпляр как правильно классифицированный.   -  person Kiril    schedule 08.04.2010
comment
Я много с этим играл... Я думаю, что алгоритмы верны. DeltaWeightHiddenToOutput (getLearningRate() * dHiddenValues[j] * dErrorGradients[1][i]) + (dWeightDelta[1][j][i] * getMomentum()); ErrorGradientForOutput = inline double CalculateErrorGradient ( double dExpected, double dOutput ) { return dOutput * ( 1 - dOutput) * ( dExpected - dOutput ); } ErrorHiddenLayers for ( unsigned int i = 0; i ‹ getOutputCount(); i++ ) dWeighted += dWeightValues[1][x][i] * dErrorGradients[1][i]; return dHiddenValues[x] * ( 1- dHiddenValues[x] ) * dWeighted;   -  person Micheal    schedule 09.04.2010
comment
Кажется, это работает для линейно разделимых проблем... в конце концов... И для изучения требуется более 15000 эпох... Но для XOR, похоже, это не приближается...   -  person Micheal    schedule 09.04.2010


Ответы (2)


Я ответил на аналогичный вопрос и опубликовал некоторые значения, которые вы можете проверить:

Эталонный анализ искусственных нейронных сетей

Используйте эти значения для тестирования вашей нейронной сети. Ваши выходные данные должны ОЧЕНЬ точно соответствовать значениям, даже если вы используете разные языки... вы должны без проблем сопоставлять как минимум 6 цифр после запятой.

person Kiril    schedule 08.04.2010
comment
Извините за невежество, но разве мои значения веса не будут отличаться в зависимости от таких вещей, как ... импульс (который я использую 0,1) и то, что я использую сигмоид в качестве моей активации, тогда как на вашем скриншоте сигмоид не выбран? - person Micheal; 08.04.2010
comment
@Mike, на самом деле снимок экрана просто для демонстрации архитектуры узлов сети ... Я указываю веса и значения в описании и, конечно же, использую сигмовидную функцию. Не должно быть расхождений между вашими результатами, если вы начинаете с одинаковыми весами и значениями в своих узлах и используете обратное распространение. - person Kiril; 08.04.2010

для а) невозможно сказать без дополнительной информации.

для б) лучший способ, который я нашел, - это иметь предварительно рассчитанный набор векторов и весов для небольшой тестовой версии моей сетевой архитектуры и иметь некоторый код отладки, который выгружает состояние сети в CSV-файл, чтобы я мог посмотреть у него в экселе.

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

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

удачи.

P.S. бессовестная вставка в запись блога backprop здесь...

person Simon    schedule 08.04.2010