Как улучшить стабильность нейронной сети?


11

Я использую нейронную сеть в R, чтобы построить NN с 14 входами и одним выходом. Я строю / обучаю сеть несколько раз, используя одни и те же входные данные обучения и ту же архитектуру / настройки сети.

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

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


Можете ли вы дать нам немного больше подробностей об алгоритме обучения и архитектуре, которые вы (или пакет R) использовали? Сколько слоев у NN?
Лукас

Привет Лукас, я использую neuralnet R пакет ссылку , которая имеет хорошую объяснительную статью здесь ссылку . Я использую один скрытый слой из 8 нейронов. Алгоритм обучения является устойчивым обратным распространением с возвратом веса.
TFB

Ответы:


8

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

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

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

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


Интересно, что я переключил обучение сети на функцию 'nnet' (доступную в одноименном пакете), и результаты на тестовом наборе данных стали намного более стабильными - возможно, что-то связанное с другим способом определения весов. инициализируется между двумя пакетами?
TFB

В nnetначальных весах все инициализируются равным случайному числу от -0,7 до 0,7, если я правильно помню. И вы можете контролировать величину в параметре. Мне, честно говоря, повезло с nnetпакетом, и я никогда не пробовал другие варианты. Удачи!
Ши Паркс

1

Я не работал с R, поэтому я могу дать только более общие советы.

Вы проверили, сходился ли алгоритм? Одним из возможных объяснений может быть то, что разные наборы параметров находятся где-то на полпути к одному и тому же оптимуму.

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


Подобно тому , как FYI, до тех пор , как он использует nnetиз базы R, он использует метод оптимизации BFGS от R - х optim. Он фактически рассчитывает градиенты, чтобы получить изображение поверхности. В его реализации нет пакетной обработки и параметра с фиксированным импульсом. Сказав все это, он может легко не сойтись; особенно с мусором.
Шеа Паркс

@SheaParkes спасибо за комментарии и ответы Ши. Я на самом деле использую пакет neuralnet - см. Комментарий выше. Он использует устойчивый алгоритм обратного распространения с отслеживанием веса
tfb

Тогда мои извинения, Лукас, я пропустил этот лакомый кусочек. Я рад, что у тебя все получилось, тфб.
Ши Паркс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.