Нейронная сеть репликатора для обнаружения выбросов, пошаговая функция, вызывающая такое же прогнозирование

В моем проекте одна из моих целей - найти выбросы в данных авиационного двигателя, и я решил использовать для этого нейронную сеть Replicator и прочитать следующий отчет об этом (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.12.3366&rep=rep1&type=pdf), и у меня возникла небольшая проблема с пониманием пошаговой функции (стр. 4, рис. 3) и связанных с ней значений прогноза.

Объяснение репликаторной нейронной сети лучше всего описано в вышеприведенном отчете, но в качестве фона построенная мною репликаторная нейронная сеть работает, имея такое же количество выходов, что и входные, и 3 скрытых слоя со следующими функциями активации:

Скрытый слой 1 = tanh сигмоид S1 (θ) = tanh, Скрытый слой 2 = пошаговый, S2 (θ) = 1/2 + 1 / (2 (k - 1)) {суммирование каждой переменной j} tanh [a3 ( θ −j / N)] Скрытый слой 3 = tanh сигмоид S1 (θ) = tanh, выходной уровень 4 = нормальный сигмоид S3 (θ) = 1/1 + e ^ -θ Я реализовал алгоритм и, похоже, обучается (поскольку среднеквадратичная ошибка неуклонно уменьшается во время обучения). Единственное, чего я не понимаю, так это того, как делаются прогнозы, когда применяется средний уровень с пошаговой функцией активации, поскольку он приводит к тому, что активации 3 средних узлов становятся конкретными дискретными значениями (например, мои последние активации на 3 средние были 1.0, -1.0, 2.0), это приводит к прямому распространению этих значений, и каждый раз я получаю очень похожие или точно такие же прогнозы.

Раздел отчета на странице 3-4 лучше всего описывает алгоритм, но я понятия не имею, что мне делать, чтобы исправить это, у меня тоже мало времени :(

Любая помощь будет принята с благодарностью.

Спасибо


person Daniel Takyi    schedule 24.04.2014    source источник


Ответы (1)


Я столкнулся с проблемой реализации этого алгоритма, и вот мое понимание проблемы, которая могла возникнуть у вас: средний уровень, используя пошаговую функцию, по сути, выполняет кластеризацию данных. Каждый слой преобразует данные в дискретное число, которое можно интерпретировать как координату в системе сетки. Представьте, что мы используем два нейрона в среднем слое с пошаговыми значениями от -2 до +2 с шагом 1. Таким образом мы определяем сетку 5x5, в которой будет размещен каждый набор функций. Чем больше шагов вы позволите, тем больше сеток. Чем больше сеток, тем больше у вас «кластеров».

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

Однако у этой пошаговой функции есть большая проблема: обратное распространение не работает (теоретически) с пошаговыми функциями. Дополнительную информацию об этом можно найти в этом документе. В этой последней статье они предлагают переключить пошаговую функцию на линейную. То есть иметь почти бесконечное количество кластеров.

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

Кстати, есть ли у вас какой-либо из этих кодов где-нибудь для использования другими исследователями?

person UndeadKernel    schedule 15.10.2015
comment
Вау, извините за длинный ответ! и функция рампы имеет большой смысл, поскольку я возвращаюсь к проблеме и также благодарю вас. - person Daniel Takyi; 18.10.2016
comment
(Случайно нажал ввод). Я постараюсь откопать написанный мною код. Я в основном создал универсальную программу нейронной сети на C ++, где вы могли указать слои и узлы. Это было на моем старом жестком диске, который в то время было сложно использовать, но я постараюсь найти его и опубликовать в Интернете для любого другого исследователи, когда у меня будет возможность. - person Daniel Takyi; 18.10.2016