Проектирование рекуррентных нейронных сетей уровня

Следующей динамической сетью, которая будет введена, является Layer-Recurrent Network (LRN). Более ранняя упрощённая версия этой сети была представлена Elman [Elma90]. В LRN существует цикл обратной связи с одной задержкой вокруг каждого слоя сети, за исключением последнего слоя. Первоначальная сеть Эльмана имела только два слоя, и использовала tansig передаточная функция для скрытого слоя и a purelin передаточная функция для уровня выхода. Исходная сеть Эльмана была обучена с помощью приближения к алгоритму обратного распространения. layrecnet команда обобщает сеть Эльмана, чтобы иметь произвольное количество слоев и иметь произвольные передаточные функции в каждом слое. Тулбокс обучает LRN, используя точные версии основанных на градиенте алгоритмов, обсуждаемых в Multilayer Shallow Neural Networks и Backpropagation Training. Следующий рисунок иллюстрирует двухуровневый LRN.

Строения LRN используются во многих уже обсуждаемых приложениях фильтрации и моделирования. Чтобы показать его операцию, этот пример использует задачу обнаружения «фонемы», обсуждаемую в Design Time Series Distributed Delay Neural Networks. Вот код для загрузки данных и создания и обучения сети:

load phoneme
p = con2seq(y);
t = con2seq(t);
lrn_net = layrecnet(1,8);
lrn_net.trainFcn = 'trainbr';
lrn_net.trainParam.show = 5;
lrn_net.trainParam.epochs = 50;
lrn_net = train(lrn_net,p,t);

После обучения можно построить график отклика с помощью следующего кода:

y = lrn_net(p);
plot(cell2mat(y))

Figure contains an axes. The axes contains an object of type line.

График показывает, что сеть смогла обнаружить «фонемы». Ответ очень похож на ответ, полученный с использованием TDNN.

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

Существует несколько других методов улучшения начальных решений, если желательна более высокая точность. Для получения дополнительной информации см. «Улучшение обобщения неглубокой нейронной сети» и «Избегайте избыточного оснащения».