Я использую нейронную сеть в R, чтобы построить NN с 14 входами и одним выходом. Я строю / обучаю сеть несколько раз, используя одни и те же входные данные обучения и ту же архитектуру / настройки сети.
После создания каждой сети я использую ее на отдельном наборе тестовых данных для вычисления некоторых прогнозируемых значений. Я обнаружил, что существует большая разница в каждой итерации прогнозируемых данных, несмотря на то, что все входные данные (и данные обучения, и тестовые данные) остаются неизменными каждый раз, когда я строю сеть.
Я понимаю, что будут существовать различия в весовых коэффициентах, производимых в пределах NN каждый раз, и что никакие две нейронные сети не будут идентичны, но что я могу попытаться создать сети, которые являются более согласованными для каждой последовательности, учитывая идентичные данные?
Ответы:
В целом, вы получите большую стабильность, увеличив количество скрытых узлов и используя соответствующее снижение веса (иначе как штраф за гребень).
В частности, я бы порекомендовал использовать этот
caret
пакет, чтобы лучше понять вашу точность (и даже неопределенность в вашей точности). Кроме того, следует обратить внимание наavNNet
то, что делает ученика из множества нейронных сетей для уменьшения эффекта начальных семян. Лично я не видел огромного улучшения при использовании,avNNet
но это могло бы ответить на ваш оригинальный вопрос.Я бы также позаботился о том, чтобы все ваши данные были должным образом обусловлены. Вы ортогонализировали, а затем пересчитали их? Caret также может выполнить эту предварительную обработку для вас с помощью своей
pcaNNet
функции.Наконец, вы можете рассмотреть возможность добавления некоторых пропущенных соединений. Вы должны убедиться, что в ваших данных отсутствуют выбросы / рычаги для перекоса этих соединений.
источник
nnet
начальных весах все инициализируются равным случайному числу от -0,7 до 0,7, если я правильно помню. И вы можете контролировать величину в параметре. Мне, честно говоря, повезло сnnet
пакетом, и я никогда не пробовал другие варианты. Удачи!Я не работал с R, поэтому я могу дать только более общие советы.
Вы проверили, сходился ли алгоритм? Одним из возможных объяснений может быть то, что разные наборы параметров находятся где-то на полпути к одному и тому же оптимуму.
Если алгоритм всегда сходится, но с другим локальным оптимумом, то есть много эвристик, которые вы могли бы попытаться избежать. Одна из простых стратегий при использовании стохастического градиентного спуска (SGD) состоит в том, чтобы использовать меньшие партии и больший импульс . Меньшие размеры партий эффективно вносят некоторый шум в тренировку, что может помочь избежать некоторых локальных оптимумов. Гораздо более сложной стратегией будет инициализация весов с использованием автоэнкодеров .
источник
nnet
из базы R, он использует метод оптимизации BFGS от R - хoptim
. Он фактически рассчитывает градиенты, чтобы получить изображение поверхности. В его реализации нет пакетной обработки и параметра с фиксированным импульсом. Сказав все это, он может легко не сойтись; особенно с мусором.