Моделирование нейронных сетей в Matlab. Федотов А.В.

Нейронные сети, «вредные» советы

Моделирование нейронных сетей в Matlab. Федотов А.В.

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

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

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

Профессиональные ученые-биологи наблюдают эти дискуссии со стороны, периодически срываясь и восклицая «Да такого же в реальной природе не бывает!» – и без особого эффекта, поскольку нейросетевики-математики слушают биологов, как правило, только тогда, когда факты биологов согласуются с их собственными теориями.

Однако, с течением времени, постепенно накапливается пул задач, на которых нейронные сети работают откровенно плохо и энтузиазм людей остывает.

В наши дни нейронные сети снова в зените славы благодаря изобретению метода предобучения «без учителя» на основе Ограниченных Больцмановских Машин (Restricted Bolzmann Machines, RBM), что позволяет обучать глубокие нейронные сети (т.е. с экстра-большим, порядка десятков тысяч, количеством нейронов) и успехам глубоких нейронных сетей в практических задачах распознавания устной речи [1] и изображений [2]. К примеру, распознавание речи в Android реализовано именно на глубоких нейронных сетях. Как долго это продлится и насколько сильно глубокие нейронные сети оправдают возложенные на них ожидания – неизвестно.

Между тем, параллельно всем научным спорам, течениям и тенденциям, отчетливо выделяется сообщество пользователей нейронных сетей – инженеров-программистов-практиков, которых интересует прикладной аспект нейросетей, их способность обучаться на собранных данных и решать задачи распознавания. Со многими практическими задачами классификации и прогнозирования великолепно справляются хорошо проработанные, относительно небольшие модели многослойных персептронов (Multilayer Perceptron, MLP) и сети радиальных базисных функций (Radial Basis Function network, RBF). Эти нейронные сети многократно описаны, я бы посоветовать следующие книжки, в порядке моей личной симпатии к ним: Осовский [3], Бишоп [4], Хайкин [5]; также есть хорошие курсы на Coursera и подобных ресурсах. Однако, что касается общего подхода использования нейронных сетей на практике, он кардинально отличается от обычного детерминированного девелоперского подхода «запрограммировал, работает – значит, работает всегда». Нейронные сети по своей природе являются вероятностными моделями, и подход к ним должен быть совершенно иной. К сожалению, многие программисты-новички технологий машинного обучения вообще и нейронных сетей в частности делают системные ошибки при работе с ними, разочаровываются и забрасывают это дело. Идея написания настоящего трактата на Хабр возникла после общения с такими разочарованными пользователями нейронных сетей – отличными, опытными, уверенными в себе программистами. Вот мой список правил и типичных ошибок использования нейронных сетей.

1. Если есть возможность не использовать нейронные сети – не используйте их.

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

2. Сложность нейронных сетей должна быть адекватна сложности задачи.

Современные персональные компьютеры (к примеру, Core i5, 8 GB RAM) позволяют за комфортное время обучать нейронные сети на выборках объемом в десятки тысяч примеров, с размерностью входных данных до сотни. Большие выборки – задача для упомянутых выше глубоких нейронных сетей, которые обучают на многопроцессорных GPU. Эти модели очень интересны, но находятся вне фокуса внимания настоящей хабр-статьи.

3. Данные для обучения должны быть репрезентативными.

Обучающая выборка должна полно и разносторонне представлять описываемый феномен, включать в себя различные возможные ситуации. Хорошо, когда данных много, но это само по себе тоже не всегда помогает. В узких кругах широко распространен анекдот, когда к распознавальщику приходит геолог, выкладывает перед ним кусок минерала и просит разработать по нему систему распознавания такого вещества. «А можно ли еще примеров данных?» — спрашивает распознавальщик. «Конечно!» — отвечает геолог, достает кирку и раскалывает свой кусок минерала еще на несколько штук. Как вы понимаете, проку от такой операции не будет – никакой новой информации такая увеличившаяся выборка в себе не несет.

4. Перемешивайте выборку.

После того, как входные и выходные векторы данных собраны, если измерения независимы между собой – поменяйте порядок следования векторов произвольным образом. Это критично для корректного разделения выборки на Train/Test/Validation и всех методов обучения типа «пример-за-примером» («sample-by-sample»).

5. Нормируйте и центрируйте данные.

Для многослойных персептронов, и для многих других моделей значения входных данных должны лежать в пределах [-1;1]. Перед тем, как подавать их на нейросеть, вычтите из данных среднее и поделите все значения на максимальное значение.

6. Делите выборку на Train, Test и Validation.

Основная ошибка новичков – обеспечить минимальную ошибку работы нейросети на обучающей выборке, попутно адски ее переобучив и затем желать такого же хорошего качества на новых реальных данных. Это особенно легко сделать, если данных мало (или они все «из одного куска»). Результат может очень расстроить: нейросеть максимально подстроится под выборку и потеряет работоспособность на реальных данных. Для того, чтобы контролировать обобщающие способности вашей модели – разделите все данные на три выборки соотношении 70: 20: 10. Обучайтесь на Train, периодически проверяя качество модели на Test. Для финальной непредвзятой оценки – Validation. Техника кросс-валидации, когда Train и Test несколько раз формируется по очереди произвольным способом из одних и тех же данных, может проявить коварство и дать ложное впечатление о хорошем качестве работы системы – например, если данные взяты из разных источников и это критично. Используйте правильный Validation!

7. Применяйте регуляризацию.

Регуляризация – это техника, которая позволяет избежать переобучения нейросети во время обучения, даже если данных мало. Если вы обнаружили галочку с таким словом, обязательно ее ставьте. Признак переобучившейся нейросети – большие значения весов, порядка сотен и тысяч, такая нейросеть не будет нормально работать на новых, не виденных ранее, данных

8. Не нужно дообучать нейронную сеть в режиме он-лайн.

Идея дообучать нейросеть перманентно все время на новых поступающих данных – сама по себе правильная, в реальных биологических системах все именно так и происходит. Мы учимся каждый день и редко сходим с ума. Тем не менее, для обычных искусственных нейронных сетей на современном этапе технического развития такая практика является рискованной: сеть может переобучиться или подстроиться под самые последние поступившие данные данные – и потеряет свои обобщающие способности. Для того, чтобы систему можно было использовать на практике, нейросеть нужно: 1) обучить, 2) протестировать качество на тестовых и валидационных выборках, 3) выбрать удачный вариант сети, зафиксировать ее веса и 4) использовать обученную нейросеть на практике, веса в процессе использования не менять.

9. Используйте новые алгоритмы обучения: Левенберга-Марквардта, BFGS, Conjugate Gradients и др.

Я глубоко убежден, что реализовать обучение методом обратного распространения ошибки (backpropagation) – святой долг каждого, кто работает с нейронными сетями. Этот метод самый простой, относительно легко программируется и позволяет хорошо изучить процесс обучения нейронных сетей. Между тем, backpropagation был изобретен в начале 70-х и стал популярен в середине 80-х годов прошлого столетия, с тех пор появились более продвинутые методы, которые могут в разы улучшить качество обучения. Лучше используйте их.

10. Обучайте нейронные сети в MATLAB и подобных дружественных средах.

Если вы не ученый, разрабатывающий новые методы обучения нейронных сетей, а программист-практик, я бы не рекомендовал кодировать процедуру обучения нейронных сетей самостоятельно. Существует большое количество программных пакетов, в основном на MATLAB и Python, которые позволяют обучать нейронные сети, при этом контролировать процесс обучения и тестирования, используя удобные средства визуализации и отладки. Пользуйтесь наследием человечества! Мне лично нравится подход «обучение в MATLAB хорошей библиотекой – реализация обученной модели руками», он достаточно мощный и гибкий. Исключение – пакет STATISTICA, который содержит продвинутые методы обучения нейросетей и позволяет генерировать их в виде программного кода на С, удобного для иплементации. В следующей статье я планирую подробно описать реализованный на основе описанных выше принципов полный промышленный цикл подготовки нейросети, использующейся для задач распознавания в коммерческом программном продукте. Желаю удачи!

Литература

[1] Hinton G., Deng L., Yu D., Dahl G., Mohamed A., Jaitly N., Senior A., Vanhoucke V., Nguyen P., Sainath T. and Kingsbury B. Deep Neural Networks for Acoustic Modeling in Speech Recognition, IEEE Signal Processing Magazine, Vol. 29, No. 6, 2012, pp. 82 – 97. [2] Ciresan D., Meier U., Masci J and Schmidhuber J.

Multi-column Deep Neural Network for Traffic Sign Classification. Neural Networks, Vol. 34, August 2012, pp. 333 – 338 [3] С. Осовский. Нейронные сети для обработки информации – пер. с польского. М.: Финансы и статистика, 2002. – 344с. [4] Bishop C.M. Pattern Recognition and Machine Learning. Springer, 2006 – 738 p.

[5] С. Хайкин.

Нейронные сети: полный курс. Вильямс, 2006.

  • нейронные сети
  • машинное обучение

Источник: https://habr.com/post/211610/

Нейронные сети в MatLab

Моделирование нейронных сетей в Matlab. Федотов А.В.

В этой статье мы рассмотрим возможности использования одного из основных инструментов MatLab для проектирования и обучения нейронных сетей Neural Time Series (ntstool) как с помощью GUI, так и с помощью программного кода (а также коснемся расширения возможностей проектирования с помощью программного кода)

Выбор типа сети

Рис. 1 – Экран приветствия утилиты ntstool

При запуске утилиты ntstool пользователя встречает экран приветствия со следующем текстом приветствия:

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

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

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

Этот инструмент позволяет решать три типа нелинейных временных рядов, показанных на правой панели. Выберите одно и нажмите [Next].

На правой панели находится панель выбора типа нейронной сети:

  1. Нелинейная авторегрессионная с внешним входом
  2. Нелинейная вход-выход (Без обратных связей)
  3. Нелинейная авторегрессионная (Генератор)

Однако с помощью программного кода можно реализовать большее количество архитектур сети, например:

1. Нелинейная авторегрессионная с внешним входом:

Рис. 2 – NARX NN

Является реализацией одного из простейших типов нейронных сетей, в частности, сетей прямого распространения, однако реализуется временное окно получения данных.

Для генерации с помощью программного кода нужно использовать следующую команду:

narxnet(inputDelays,feedbackDelays,hiddenSizes,trainFcn)

narxnet(inputDelays,feedbackDelays,hiddenSizes,trainFcn)

Аргументы:

  • inputDelays — Входной вектор задержки (По умолчанию = 1:2)
  • feedbackDelays — Вектор обратных задержек (По умолчанию = 1:2)
  • hiddenSizes — Количество скрытых нейронов (По умолчанию = 10)
  • trainFcn — Метод обучения ( По умолчанию = ‘trainlm’)

С помощью команды closeloop(net), есть возможность замкнуть контур этой сети для получения рекуррентной сети.

Рис. 3 – NARX NN

2. Нелинейная вход-выход (Без обратных связей ):

Реализует простейшую сеть прямого распространения.

Рис. 4 – NIO NN

Для генерации с помощью программного кода нужно использовать следующую команду:

narnet(feedbackDelays,hiddenSizes,trainFcn)

narnet(feedbackDelays,hiddenSizes,trainFcn)

Аргументы:

  • inputDelays — Входной вектор задержки (По умолчанию = 1:2)
  • hiddenSizes — Количество скрытых нейронов (По умолчанию = 10)
  • trainFcn — Метод обучения ( По умолчанию = ‘trainlm’)

С помощью команды closeloop(net), есть возможность замкнуть контур этой сети для получения рекуррентной сети — генератора.

Рис. 5 – NAR NN

Пример создания нейронных сетей с помощью кода

inputDelays = 1:10; feedbackDelays = 1:10; hiddenLayerSize = 20; %Нейронные сети без обратных связей netx = narxnet(inputDelays,feedbackDelays,hiddenLayerSize); net = narnet(feedbackDelays,hiddenLayerSize); %Нейронные сети с обратными связями netxc = closeloop(netx); netc = closeloop(net); %Для просмотра полученных сетей: view(net)

%Нейронные сети без обратных связейnetx =  narxnet(inputDelays,feedbackDelays,hiddenLayerSize);net =  narnet(feedbackDelays,hiddenLayerSize);%Нейронные сети с обратными связями%Для просмотра полученных сетей:

Выбор данных для обучения, и их подготовка

Рис. 6 – Окно выбора параметров

В утилите ntstool выбор данных для обучения не составляет проблем, поэтому рассмотрим выбор параметров в коде:

Прежде чем начать, разберемся что такое подготовка данных (Из официальной документации):

Подготовка данных для обучения и имитации.

 Функция PREPARETS подготавливаем временные ряды для части сети, изменяя время до минимума, чтобы “чувствовать” входные данные и внутренние переменные.

Использование PREPARETS позволяет оставить исходные временные ряды неизменными, легко настраивая их для сети с разными размерами задержек как для открытых, так и закрытых нейронных сетей.

Синтаксис команды:

[Xs,Xi,Ai,Ts,EWs,shift] = preparets(net,Xnf,Tnf,Tf,EW)

[Xs,Xi,Ai,Ts,EWs,shift] = preparets(net,Xnf,Tnf,Tf,EW)

Аргументы:

  • Net —Нейронная сеть
  • Xnf — Не возвращаемые входные данные
  • Tnf — Не возвращаемые выходные данные
  • Tf — Выходные данные
  • EW — Вес ошибок (По умолчанию = {1})

Возвращаемые значения:

  • Xs — Перемещенные входы
  • Xi — Изначальные состояния входных задержек
  • Ai — Изначальные состояния скрытых нейронов
  • Ts — Перемещенные выходы
  • EWs — Перемещенные веса ошибок

Также, перед применение preparets может потребоваться использование функции tonndata, которая конвертирует данные в стандартный тип для нейронных сетей.

Синтаксис команды tonndata:

[y,wasMatrix] = tonndata(x,columnSamples,cellTime)

[y,wasMatrix] = tonndata(x,columnSamples,cellTime)

Аргументы:

  • x — Матрица или ячейка – массив матриц
  • columnSamples — True если исходные данные представлены в виде колонок, false если в виде строк
  • cellTime — True если исходные данные представлены в виде колоноками ячеек матрицы, false если в виде матрицы

Возвращаемые значения:

  •  y— Исходные данные, конвертированные в стандартный вид
  • wasMatrix — True если исходные данные представлены в виде матриц

Выбор назначения данных

В этой части рассматривается выбор процентного соотношения данных: Тренировка, Проверка, Тестирование

Рис. 7 – Окно выбора процентного соотношения

Как и предыдущие шаги, работа с ntstool очень проста и требует простого выбора значений. В том случае, если вы проектируете нейронную сеть с помощью программного кода используйте следующие команды:

net.divideParam.trainRatio = 85/100; %Тренировка net.divideParam.valRatio = 15/100; %Проверка net.divideParam.testRatio = 5/100; %Тестирование

net.divideParam.trainRatio = 85/100; %Тренировкаnet.divideParam.valRatio = 15/100; %Проверкаnet.divideParam.testRatio = 5/100; %Тестирование

Выбор количества скрытых нейронов и задержек

Последним шагом перед обучением сети в ntstool  является выбор количества скрытых нейронов и количество нейронов задержки.

Рис. 8 – Окно выбора размера сети

Заметим, что размеры сети при проектировании в программном кде определяются на первом шаге.

Обучение нейросети

Рис. 9 –  Окно обучения нейронной сети

Операция обучения кодом выглядит так:

[net,tr] = train(net,inputs,targets,inputStates,layerStates);

[net,tr] = train(net,inputs,targets,inputStates,layerStates);

Для обучения сети в обоих случаях используется nntraintool:

Рис.10 — Окно nntraintool

При помощи которого можно получить различные графики, характеризующие процесс и качество обучения сети.
Графики также можно вызывать с помощью команд:

outputs = net(inputs,inputStates,layerStates); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs)

outputs = net(inputs,inputStates,layerStates);errors = gsubtract(targets,outputs);performance = perform(net,targets,outputs)

Для более подробной информации о дополнительных возможностях train, воспользуйтесь официальным руководством (возможностей там много).

Получение нейронной сети

Для работы с обученной сетью необходимо выполнить экспорт полученной нейросети.

Рис. 11 — Окно экспорта нейронной сети

Главный вопрос, который встает на этом шаге: можно ли установить конкретное время дискретизации для нейронной сети. Ответ: да можно, но не с использованием ntstool, где всегда по будет шаг дискретизации 1 секунда.

Для получения Simulink модели после всех операций над нейронной сетью с использованием кода, необходимо вызвать функцию :

где time – время дискретизации, а net – нейронная сеть.

После вызова будет получена модель в Simulink, с заданной частотой дискретизации.

Примерный программный код для проектирования простейшей нейронной сети в MatLab

%Исходные данные inputSeries = con2seq(In'); targetSeries = con2seq( F'); %Создание нейросети inputDelays = 1:10; feedbackDelays = 1:10; hiddenLayerSize = 20; net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize); %Задание процентного соотношения net.divideParam.trainRatio = 85/100; net.divideParam.valRatio = 15/100; net.divideParam.

testRatio = 5/100; %Обучение нейросети [net,tr] = train(net,inputs,targets,inputStates,layerStates); %Графики результатов outputs = net(inputs,inputStates,layerStates); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs) %Экспорт полученной нейросети gensim(net,0.

001)

inputSeries = con2seq(In');targetSeries = con2seq( F');net =  narxnet(inputDelays,feedbackDelays,hiddenLayerSize);%Задание процентного соотношенияnet.divideParam.trainRatio = 85/100;net.divideParam.valRatio = 15/100;net.divideParam.testRatio = 5/100;[net,tr] = train(net,inputs,targets,inputStates,layerStates);outputs = net(inputs,inputStates,layerStates);errors = gsubtract(targets,outputs);performance = perform(net,targets,outputs)%Экспорт полученной нейросети

Ссылка по ГОСТ:

Ефименко Г.А., Синица А.М.: Нейронные сети в MatLab [Электронный ресурс] // Digiratory. 2017 г. URL: https://digiratory.ru/508 (дата обращения: ДД.ММ.ГГГГ).

Источник: https://digiratory.ru/508

Нейронные сети в matlab

Моделирование нейронных сетей в Matlab. Федотов А.В.

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

  • Нейросети – это мощнейший метод имитации явлений и процессов, который позволяет показывать сложнейшие зависимости. Нейронные сети являются нелинейными по своей природе, в то же время как на протяжении нескольких лет для создания моделей применялся линейный подход. А также, во многих случаях нейронные сети помогали преодолеть, так называемое, «проклятие размерности», которая обусловлена тем, что создание модели нелинейных явлений требует большого количества вычислительных ресурсов (в случае большого числа переменных).
  • Следующая особенность нейросетей связана с тем, что используется механизм обучения. Пользователь нейронной системы подбирает представительные данные и запускает обучающий алгоритм, который сам настраивает параметры сети без участия пользователя. От пользователя только требуется набор эвристических знаний о том, как следует подготавливать и отбирать данные, выбирать необходимую архитектуру нейронной сети и интерпретировать полученные результаты. Однако следует заметить, что уровень знаний, требующийся от пользователя, который необходим для успешного применения нейронной системы, намного меньше, чем, к примеру, при использовании традиционных методов.

Предлагаемый вниманию читателя сайт входит в серию «Пакеты прикладных программ». Этот сайт посвящен описанию прикладного программного обеспечения фирмы MathWorks, функционирующего под управлением ядра системы MATLAB.

Искусственные нейронные сети в Matlab представляют новое направление в практике создания технических систем.

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

Теория нейронных сетей развивается в течение последнего полувека, но практическое ее применение стало возможно только в последние 10–15 лет, когда была создана необходимая элементная база для реализации нейронных сетей.

Тем не менее данный сайт занимает особое место, поскольку в ней описан реальный инструмент для расчета и проектирования нейронных сетей.  Этот сайт содержит теорию и описание конкретных нейронных сетей. На нем также включен раздел по системе MATLAB 6 и GUI-интерфейсу для работы с ППП NNT, а также вклю­чает справочный материал по описанию М-функций пакета.

Значительное внимание уделено проектированию контроллеров для систем управления на основе нейронных сетей. Рассмотрено несколько весьма сложных систем управления, для которых процедура проектирования контроллера занимает значительное время.

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

Здесь в качестве модели управляемого процесса используется нелинейная авторегрессионная модель со скользящим средним, которая входит в состав регулятора

и реализуется в виде нейронной сети. Еще один пример связан с управлением роботом, здесь нейронные сети используются для построения как модели управляемого объекта, так и самого регулятора. Работа с этими системами возможна только при наличии ядра системы MATLAB версии 6 и системы Simulink версий 4 (R12) или 5.

Читателю следует выбрать стиль работы с сайтом. Начинающему знакомиться
с теорией и практикой нейронных сетей рекомендуется в первую очередь просмотр демонстрационных примеров и формирование сетей с помощью GUI-интерфейса NNTool.

Опытному пользователю, создающему собственные архитектуры искусственных нейронных сетей, следует применять режим работы из командного окна, который позволяет воспользоваться всеми возможностями ППП NNT.

Следует также обратить внимание на интерфейс ППП NNT с системой SIMULINK, что позволяет наглядно отображать архитектуру сети и выполнять моделирование как статических, так и динамических нейронных сетей.

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

Также на этот ресурс предназначен для подробного изучения раздела — искусственные нейронные сети в Matlab, а именно изучение моделей нейрона и их архитектуры, обучение нейронных сетей, изучение персептронов, линейных сетей, радиальных базисных сетей, сетей кластеризации и классификации данных, сетей Кохонена, LVQ-сетей, рекурентных сетей (Элмана, Хопфилда). Поэтому к выбору правильной архитектуры необходимо подойти основательно и просмотреть много альтернатив! Поэтому из выше всего сказанного можно сделать вывод, что вам необходимо просмотреть много дополнительной информации и альтернатив!

Сайт создан в Seo-Dubna.ru

Источник: http://xn----itbabpc0acaivro5j.xn--p1ai/

Свойства и параметры нейронной сети как объекта MATLAB

Моделирование нейронных сетей в Matlab. Федотов А.В.

При разработке Neural Network Toolbox использованы принципы объектно-ориентированного программирования. Основной объект – нейронная сеть. В этом разделе описаны основные свойства сети. Автор материала — Ю.П.Маслобоев.

Архитектура сети

Структура подобъектов

Функции

Параметры

Значения весов и смещений

Другие свойства

Архитектура сети

Эти свойства определяют количество подобъектов сети (таких как слои, выходы, эталоны, смещения и веса), и каким образом они объединяются в сеть.

  • numInputs — определяет количество входов сети.

net.numInputs — может принимать значения 0 или положительное число.

Пояснение.

Количества входов сети и размерность входа разные вещи. Количество входов определяет, сколько групп векторов принимает сеть в качестве входов. Размерность каждого входа (т.е. количество элементов в каждом векторе) определяется размерностью входа (net.inputs{i}.size). Большинство сетей имеет один вход, размерность которого определяется поставленной задачей.

Сопутствующие эффекты.

Любое изменение этого свойства приводит к изменению размера матрицы, определяющей связи входов со слоями, (net.inputConnect) и размер массива ячеек входных подобъектов (net.inputs).

  • numLayers — определяет количество слоев сети.

net.numLayers — может принимать значения от 0 до любого положительного целого.

Сопутствующие эффекты.

Любое изменение этого свойства приводит к изменению размера каждой из булевых матриц, которые определяют связи между слоями: 

net.biasConnect

net.inputConnect

net.layerConnect

net.outputConnect

net.targetConnect

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

net.biases

net.inputWeights

net.layerWeights

net.outputs

net.targets

А также изменяет размеры каждого из настраиваемых параметров:

net.IW

net.LW

net.b

  • biasConnect — определяет, какие слои имеют смещения.

net.biasConnect — может принимать значения Булевой матрицы Nlx1, где Nl – количество слоев (net.numLayers). Наличие (или отсутствие) смещения у i-го слоя определяется 1 (или 0) в: net.biasConnect(i)

Сопутствующие эффекты.

Любое изменение этого свойства влияет на наличие или отсутствие структур в массиве ячеек смещений (net.biases) и, в наличии или отсутствии в массиве элементов векторов смещений (net.b).

  • inputConnect — определяет, какие слои обладают связями со входами.

net.inputConnect – определяет Булеву матрицу Nl x Ni, где Nl – количество слоев сети (net.numLayers), а Ni – количество входов сети (net.numInputs). Наличие (или отсутствие) связи i – го слоя с j – м слоем определяется 1 (или 0) в net.inputConnect(i,j).

Сопутствующие эффекты.

Любое изменение этого свойства влияет на наличие или отсутствие структур в массивах ячеек подобъектов входных весов (net.inputWeights) и на наличие или отсутствие матриц в массиве ячеек входных весов (net.IW).

  • layerConnect — определяет какие слои связаны с другими слоями.

net.layerConnect — определяет Булеву матрицу Nl x Nl , где Nl – количество слоев в сети (net.numLayers). Наличие (или отсутствие ) связи к I-го слоя с j-м слоем определяется 1 (или 0) в net.layerConnect(i,j).

Сопутствующие эффекты.

Любое изменение этого свойства влияет на наличие или отсутствие структур в массивах ячеек подобъектов весов слоев (net.layerWeights) и в наличии или отсутствии матриц в массиве ячеек весов слоев (net.LW).

  • outputConnect — определяет какие слои генерируют выходы сети.

net.outputConnect – задается в виде матрицы Булевых значений 1 x N , где N – количество слоев в сети (net.numLayers). Наличие (или отсутствие ) выхода от i-го слоя определяется 1 (или 0) в net.outputConnect(i).

Сопутствующие эффекты.

Любые изменения этого свойства будут влиять на количество выходов сети (net.numOutputs) и наличие или отсутствие структур в массиве ячеек выходных подобъектов (net.outputs).

  • targetConnect — определяет какие слои связаны с эталонами.

net.targetConnect — задается в виде матрицы Булевых значений 1 x N , где N – количество слоев в сети (net.numLayers). Наличие (или отсутствие ) эталонного значения, связанного с i- м слоем определяется 1 (или 0) в net.targetConnect(i).

Сопутствующие эффекты.

Любые изменения этого свойства будут изменять количество эталонных значений сети (net.numTargets) и наличие или отсутствие структур в массиве ячеек эталонных подобъектов (net.targets).

  • numOutputs (только для чтения) — указывает сколько выходов имеет сеть.

net.numOutputs — возвращает значение, соответствующее количеству единиц в матрице выходных соединений: numOutputs=sum(net.outputConnect).

  • numTargets (только для чтения) — указывает сколько эталонных значений имеет сеть.

net.numTargets — возвращает значение, соответствующее количеству единиц в матрице соединений с эталонами: numTargets=sum(net.targetConnect).

  • numInputDelays (только для чтения) — указывает какое количество временных шагов последних входов должно быть реализовано для того, чтобы смоделировать сеть.

net.numInputDelays — возвращает значение величины максимальной задержки, связанной с входными весами сети:

numInputDelays = 0;

for i=1:net.numLayers

for j=1:net.numInputs

if net.inputConnect(i,j)

numInputDelays = max( …

[numInputDelays net.inputWeights{i,j}.delays]);

end

end

end

  • numLayerDelays (только для чтения) — указывает какое количество временных шагов последних выходов должно быть реализовано для того, чтобы смоделировать сеть.

net.numLayerDelays — возвращает значение величины максимальной задержки, связанной с весами слоев сети:

numLayerDelays = 0;

for i=1:net.numLayers

for j=1:net.numLayers

if net.layerConnect(i,j)

numLayerDelays = max( …

[numLayerDelays net.layerWeights{i,j}.delays]);

end

end

end

Структура подобъектов

Эти свойства определяют массивы ячеек структур, которые определяют каждый из входов сети, слои, выходы, эталоны, смещения и веса.

  • inputs — содержит структуры свойств для каждого из входов сети.

net.inputs — матрица Ni x1 ячеек входных структур, где Ni- число входов сети (net.numInputs).

Структура, определяющая свойства i-го сетевого входа, определена в: net.inputs{i}

  • layers — содержит структуры свойств для каждого из слоев сети.

net.layers — массив Ni x1 ячеек входных структур, где Ni- число слоев сети (net.numLayers).

Структура, определяющая свойства i-го слоя определена в: net.layers{i}.

  • outputs — содержит структуры свойств для каждого из выходов сети.

net.outputs — массив 1xNi ячеек входных структур, где Ni- число слоев сети (net.numLayers).

Структура, определяющая свойства i-го выхода, определена в: net.outputs{i}

если соответствующее выходное соединение net.outputConnect(i)- 1 (или 0):.

  • targets — содержит структуры свойств для каждого из эталонов сети.

net.targets – массив 1xNi ячеек входных структур, где Ni- число слоев сети (net.numLayers).

Структура, определяющая свойства эталона связанного с i-ым слоем (или нулевая матрица) определена в: net.targets{i} если соответствующее выходное соединение net.targetConnect(i) — 1 (или 0).

  • biases — содержит структуры свойств для каждого из смещений сети.

net.biases — массив Nix1 ячеек, где Ni- число слоев сети (net.numLayers).

Структура, определяющая свойства смещений i-го слоя (или нулевая матрица) расположена в: net.biases{i} если соответствующее соединение для смещения net.biasConnect(i) — 1 (или 0).

  • inputWeights – содержит структуры свойств для каждого из входных весов.

net.inputWeights — массив NlxNi ячеек, где Nl- число слоев сети (net.numLayers), а Ni — число входов сети (net.numInputs).

Структура, определяющая свойства весов к i-му слоя от j го слоя (или нулевая матрица) определена в: net.inputWeights{i,j}, если соответствующее соединение входа net.inputConnect(i,j) — 1 (или 0).

  • layerWeights — содержит структуры свойств для каждого из весов слоя сети.

net.layerWeights — массив NlxNl ячеек, где Nl- число слоев сети (net.numLayers).

Структура, определяющая свойства связей i-го слоя с j м слоем (или нулевая матрица) определена в: net.layerWeights{i,j}, если соответствующая связь слоя net.layerConnect(i,j) — 1 (или 0).

Функции

Эти свойства определяют алгоритмы, которые используются при адаптации, инициализации, тренировке и оценке ее функционирования.

  • adaptFcn — определяет функцию, которая будет использована для адаптации сети.

net.adaptFcn — задается в виде названия функции адаптации сети из настоящего тулбокса:

trains – функция адаптации весов и смещений.

Функция адаптации сети используется, чтобы выполнить адаптацию всякий раз, когда вызывается adapt:

[net,Y,E,Pf,Af] = adapt(NET,P,T,Pi,Ai)

Сопутствующие эффекты.

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

  • initFcn — определяет функцию, используемую для инициализации матриц весов и векторов смещений сети.

net.initFcn — задается в виде названия функции инициализации сети из настоящего тулбокса:

initlay — функция инициализации весов и смещений.

Функция инициализации сети используется, чтобы выполнить инициализацию всякий раз, когда вызывается init:

net = init(net)

Сопутствующие эффекты.

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

  • performFcn – определяет функцию, используемую для оценки функционирования сети.

net.performFcn — задается в виде названия функции функционирования сети из настоящего тулбокса:

Функции функционирования
maeСредняя абсолютная ошибка
mseСредняя квадратичная ошибка
mseregСредняя квадратичная ошибка w/reg
sseСуммарная квадратичная ошибка

Функция функционирования сети используется, чтобы вычислить оценку функционирования сети всякий раз, когда вызывается train:

[net,tr] = train(NET,P,T,Pi,Ai)

Сопутствующие эффекты.

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

  • trainFcn — определяет функцию, используемую для тренировки сети.

net.trainFcn — задается в виде названия функции тренировки сети из настоящего тулбокса:

Функции тренировки
trainbПакетная тренировка с использованием правил обучения для весов и смещений
trainbfgТренировка сети с использованием квази –Ньютоновского метода BFGS
trainbrРегуляризация Bayesian
traincИспользование приращений циклического порядка
traincgbМетод связанных градиентов Пауэлла-Била (Powell-Beale)
traincgfМетод связанных градиентов Флетчера-Пауэлла (Fletcher-Powell)
traincgpМетод связанных градиентов Полака-Рибира (Polak-Ribiere)
traingdМетод градиентного спуска
traingdaМетод градиентного спуска с адаптивным обучением
traingdmМетод градиентного спуска с учетом моментов
traingdxМетод градиентного спуска с учетом моментов и с адаптивным обучением
trainlmМетод Левенберга-Маркара (Levenberg-Marquardt)
trainossОдноступенчатый метод секущих
trainrМетод случайных приращений
trainrpАлгоритм упругого обратного распространения
trainsМетод последовательных приращений

Функция используется, чтобы тренировать сеть всякий раз, когда вызывается train:

[net,tr] = train(NET,P,T,Pi,Ai)

Сопутствующие эффекты.

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

Параметры

  •   adaptParam — определяет параметры и значения текущей функции адаптации.

net.adaptParam — поля этого свойства зависят от текущей функции адаптации (net.adaptFcn). Вызовите вышеупомянутую ссылку, чтобы увидеть поля текущей функции адаптации.

Вызовите help на текущую функцию адаптации, чтобы получить описание каждого из полей: help(net.adaptFcn).

  • initParam — определяет параметры и значения текущей функции инициализации.

net.initParam — поля этого свойства зависят от текущей функции инициализации (net.initFcn). Вызовите вышеупомянутую ссылку, чтобы увидеть поля текущей функции адаптации.

Вызовите help на текущую функцию инициализации, чтобы получить описание каждого из полей: help(net.initFcn)

  • performParam — определяет параметры и значения текущей функции функционирования.

net.performParam — поля этого свойства зависят от текущей функции функционирования (net.performFcn). Вызовите вышеупомянутую ссылку, чтобы увидеть поля текущей функции функционирования.

Вызовите help на текущую функцию функционирования, чтобы получить описание каждого из полей: help(net.performFcn)

  • trainParam — определяет параметры и значения текущей функции тренировки.

net.trainParam — поля этого свойства зависят от текущей функции тренировки (net.trainFcn). Вызовите вышеупомянутую ссылку, чтобы увидеть поля текущей функции функционирования.

Вызовите help на текущую функцию тренировки, чтобы получить описание каждого из полей: help(net.trainFcn)

Значения весов и смещений

Эти свойства определяют модифицируемые параметры сети: матрицы весов и векторы смещений.

  • IW — определяет матрицы входных весов.

net.IW – массив NlxNi ячеек, где Nl- число слоев в сети (net.numLayers), а Ni- число входов сети (net.numInputs).

Матрица весов для связи i го слоя с j м входом (или нулевая матрица []) описывается в: net.IW{i,j}, если соответствующее входное соединение. net.inputConnect(i,j)- 1 (или 0).

Матрица весов имеет количество строк, равное размеру слоя, к которому она относится (net.layers{i}.size). Содержит количество столбцов равное произведению размерности входа на количество задержек, ассоциированных с весом:

net.inputs{j}.size * length(net.inputWeights{i,j}.delays)

Эти размеры могут также быть получены из свойств входных весов:

net.inputWeights{i,j}.size

  • LW — определяет матрицы весов связей мехду слоями.

net.LW — массив Nl xNl ячеек, где Nl- число слоев в сети (net.numLayers).

Матрица весов для связи i го слоя. с j м слоем (или нулевая матрица []) представлена в: net.LW{i,j}, если соответствующее соединение слоя net.layerConnect(i,j) — 1 (или 0).

Матрица весов имеет количество строк, равное размеру слоя, к которому она относится (net.layers{i}.size). Содержит количество столбцов равное произведению размерности слоя на количество задержек, ассоциированных с весом:

net.layers{j}.size * length(net.layerWeights{i,j}.delays)

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

net.layerWeights{i,j}.size

  • b — определяет векторы смещений для каждого слоя со смещением.

net.b — массив Nl x1 ячеек, где Nl- число слоев в сети (net.numLayers).

Вектор смещения для i-го слоя (или нулевая(пустая) матрица []) определен в net.b{i} если соответствующее соединение смещения net.biasConnect(i)- 1 (или 0).

Число элементов в векторе смещения всегда равно размеру слоя, с которым он связан (net.layers{i}.size). Этот размер может также быть получен из свойств смещения: net.biases{i}.size.

Другие свойства

Единственное другое свойство — свойство для данных пользователя.

  • userdata — Это свойство обеспечивает место для пользователей, чтобы добавить пользовательскую информацию о сети.

net.userdata

Только одно поле предопределено. Оно содержит секретное сообщение всем пользователям Neural Network Toolbox:

net.userdata.note

Источник: https://hub.exponenta.ru/post/svoystva-i-parametry-neyronnoy-seti-kak-obekta-matlab407

Лабораторная работа 3 реализация нейронных сетей в пакете matlab. Графический интерфейс тулбокса nntool

Моделирование нейронных сетей в Matlab. Федотов А.В.

Цель и содержание:приобретение практических навыков применения нейронных сетей при решенииплохо формализованных задач сиспользованием пакета Matlab,выявление важных показателей в обучающейвыборке, в наибольшей степени влияющихна результат.

Теоретическое обоснование

NNTool– графический интерфейс для работы снейронными сетями пакета Matlabпозволяет выбирать структуры НС изобширного перечня и предоставляетмножество алгоритмов обучения длякаждого типа сети.

В лабораторнойработе рассмотрены следующие вопросы,относящиеся к работе с NNTool:

  • назначение графических управляющих элементов;

  • подготовка данных;

  • создание нейронной сети;

  • обучение сети;

  • прогон сети.

Методика и порядок выполнения работы

Чтобы запуститьNNTool, необходимо выполнить одноимённуюкоманду в командном окне MATLAB:

>> nntool

После этого появитсяглавное окно NNTool, именуемое «Окномуправления сетями и данными»(Network/Data Manager) (рис. 3.1).

Рисунок3.1 – Главное окно NNTool

Панель «Сети иданные» (Networks and Data) имеет функциональныеклавиши со следующими назначениями:

  • Помощь (Help) − краткое описание управляющих элементов данного окна;

  • Новые данные (New Data…) − вызов окна, позволяющего создавать новые наборы данных;

  • Новая сеть (New Network…) − вызов окна создания новой сети;

  • Импорт (Import…) − импорт данных из рабочего пространства MATLAB в пространство переменных NNTool;

  • Экспорт (Export…) − экспорт данных из пространства переменных NNTool в рабочее пространство MATLAB;

  • Вид (View) − графическое отображение архитектуры выбранной сети;

  • Удалить (Delete) − удаление выбранного объекта.

На панели «Толькосети» (Networks only) расположены клавишидля работы исключительно с сетями. Привыборе указателем мыши объекта любогодругого типа, эти кнопки становятсянеактивными.

При работе с NNToolважно помнить, что клавиши View, Delete,Initialize, Simulate, Train и Adapt (изображены на рис.3.1 как неактивные) действуют применительнок тому объекту, который отмечен в данныймомент выделением. Если такого объектанет, либо над выделенным объектом

невозможно произвестиуказанное действие, соответствующаяклавиша неактивна.

Рассмотрим созданиенейронной сети с помощью NNTool на примере.

Пусть требуетсясоздать нейронную сеть, выполняющуюлогическую функцию «И».

Создание сети

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

Итак, перед созданиемсети необходимо заготовить наборобучающих и целевых данных. Составимтаблицу истинности для логическойфункции «И», где P1 и Р2 — входы, а А –желаемый выход (табл. 3.1).

Таблица 3.1. Таблицаистинности логической функции «И»

Р1

Р2

А

0

0

0

0

1

0

1

0

0

1

1

1

Чтобы задать матрицу,состоящую из четырёх векторов-строк,как входную, воспользуемся кнопкой NewData. В появившемся окне следует произвестиизменения (рис. 3.2), и нажать клавишу»Создать» (Create).

Рисунок3.2 – Задание входных векторов

После этого в окнеуправления появится вектор data1 в разделеInputs. Вектор целей задаётся схожим образом(рис. 3.3).

Рисунок 3.3 – Заданиецелевого вектора

После нажатия наCreate в разделе Targets появится векторtarget1. Данные в поле «Значение»(Value) могут быть представлены любымпонятным MATLAB выражением. К примеру,предыдущее определение вектора целейможно эквивалентно заменить строкойвида

bitand([0 0 1 1], [0 1 0 1]).

Теперь следуетприступить к созданию нейронной сети.Выбираем кнопку New Network и заполняем форму(рис. 3.4).

Рисунок 3.4 – Окно«Создание нейронной сети»

При этом поля несутследующие смысловые нагрузки:

  • Имя сети (Network Name) − это имя объекта создаваемой сети.

  • Тип сети (Network Type) − определяет тип сети и в контексте выбранного типа представляет для ввода различные параметры в части окна, расположенной ниже этого пункта. Таким образом, для разных типов сетей окно изменяет своё содержание. Для удобства список НС повторен в нижеследующей таблице. Интерфейс NNTool позволяет создавать нейронные сети только с одним или двумя слоями.

  • Входные диапазоны (Input ranges) − матрица с числом строк, равным числу входов сети.

    Каждая строка представляет собой вектор с двумя элементами: первый – минимальное значение сигнала, которое будет подано на соответствующий вход сети при обучении, второй − максимальное.

    Для упрощения ввода этих значений предусмотрен выпадающий список «Получить из входа» (Get from input), позволяющий автоматически сформировать необходимые данные, указав имя входной переменной.

  • Количество нейронов (Number of neurons) − число нейронов в слое.

  • Передаточная функция (Transfer function) − в этом пункте выбирается передаточная функция (функция активации) нейронов.

  • Функция обучения (Learning function) − функция, отвечающая за обновление весов и смещений сети в процессе обучения.

Таблица 3.2. Типынейронных сетей NNTool

№ п/п

Тип сети

Название сети

Число слоев

Обучаемые параметры

1

Competitive

Конкурирующая сеть

1

IW{1, 1}, b{ 1}

2

Cascade-forward backprop

Каскадная сеть с прямым распространением сигнала и обратным распространением ошибки

2

IW{1, 1}, b{1}

LW{2, 1}

IW{2, 1}, b{2}

3

Elman backprop

Сеть Элмана с обратным распространением ошибки

2

IW{1, 1}, b{1}

LW{2, 1}, b{2}

LW{2, 1},

4

Feed-forward backprop

Сеть с прямым распространением сигнала и обратным распространением ошибки

2

IW{1, 1}, b{1}

LW{2, 1}, b{2}

5

Time delay backprop

Сеть с запаздыванием и обратным распространением ошибки

2

IW{1, 1}, b{1},

LW{2, l},b{2}

6

Generalized regression

Обобщенная регрессионная сеть

2

IW{1, 1}, b{1},

LW{2, l}

7

Hopfield

Сеть Хопфилда

1

LW{l, l},b{l}

8

Linear layer (design)

Линейный слой (создание)

1

IW{1, 1}, b{1}

9

Linear layer (train)

Линейный слой (обучение)

1

IW{1, 1}, b{1}

10

LVQ

Сеть для классификации входных векторов

2

IW{1, 1}, LW{2, 1}

11

Perceptron

Персептрон

1

IW{1, 1), b{l}

12

Probabalistic

Вероятностная сеть

2

IW{1, 1}, b{l}, LW{2, 1}

13

Radial basis (exact fit)

Радиальная базисная сеть с нулевой ошибкой

2

IW{ 1, 1}, b{ 1},

LW{2, 1}

14

Radial basis (fewer neurons)

Радиальная базисная сеть с минимальным числом нейронов

2

IW{1, 1}, b{ 1},

LW{2, 1}, b{2}

15

Self-organizing map

Самоорганизующаяся карта Кохонена

1

IW{1, 1}

С помощью клавиши»Вид» (View) можно посмотреть архитектурусоздаваемой сети (рис. 3.5). Так, мы имеемвозможность удостовериться, все лидействия были произведены верно. Нарис.

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

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

Рисунок 3.5 –Предварительный просмотр создаваемойсети

Итак, структура сетисоответствует нашему заданию. Теперьможно закрыть окно предварительногопросмотра, нажав клавишу «Закрыть»(Close), и подтвердить намерение создатьсеть, нажав «Создать» (Create) в окнесоздания сети. В результате проделанныхопераций в разделе «Сети» (Networks)главного окна NNTool появится объект сименем network1.

Обучение

Наша цель – построитьнейронную сеть, которая выполняетфункцию логического «И». Очевидно,нельзя рассчитывать на то, что сразупосле этапа создания сети последняябудет обеспечивать правильный результат(правильное соотношение «вход/выход»).

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

Создавая сеть, мы указали LEARNP вкачестве функции, реализующей алгоритмобучения (рис. 3.3).

Вернёмся в главноеокно NNTool. На данном этапе интереспредставляет нижняя панель «Толькосети» (Networks only). Нажатие любой из клавишна этой панели вызовет окно, на множествевкладок которого представлены параметрысети, необходимые для её обучения ипрогона, а также отражающие текущеесостояние сети.

Отметив указателеммыши объект сети network1, вызовем окноуправления сетью нажатием кнопки Train.Перед нами возникнет вкладка «Train»окна свойств сети, содержащая, в своюочередь, ещё одну панель вкладок (рис.3.6). Их главное назначение — управлениепроцессом обучения.

На вкладке «Информацияобучения» (Training info) требуется указатьнабор обучающих данных в поле «Входы»(Inputs) и набор целевых данных в поле «Цели»(Targets). Поля «Выходы» (Outputs) и «Ошибки»(Errors) NNTool заполняет автоматически.

Приэтом результаты обучения, к которымотносятся выходы и ошибки, будутсохраняться в переменных с указаннымиименами.

Рисунок 3.6 – Окнопараметров сети, открытое на вкладке»обучение» (Train)

Завершить процессобучения можно, руководствуясь разнымикритериями. Возможны ситуации, когдапредпочтительно остановить обучение,полагая достаточным некоторый интервалвремени. С другой стороны, объективнымкритерием является уровень ошибки. Навкладке «Параметры обучения»(Training parame-ters) для нашей сети (рис. 3.7) можноустановить следующие поля:

  • Количество эпох (epochs) – определяет число эпох (интервал времени), по прошествии которых обучение будет прекращено. Эпохой называют однократное представление всех обучающих входных данных на входы

  • сети.

  • Достижение цели или попадание (goal) – здесь задаётся абсолютная величина функции ошибки, при которой цель будет считаться достигнутой.

  • Период обновления (show) – период обновления графика кривой обучения, выраженный числом эпох.

  • Время обучения (time) – по истечении указанного здесь временного интервала, выраженного в секундах, обучение прекращается.

Рисунок 3.7 – Вкладкапараметров обучения

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

Следующая вкладка»Необязательная информация»(Optional Info) показана на рис. 3.8.

Рисунок 3.8 – Вкладканеобязательной информации

Рассмотрим вкладкуобучения (Train). Чтобы начать обучение,нужно нажать кнопку «Обучить сеть»(Train Network). После этого, если в текущиймомент сеть не удовлетворяет ни одномуиз условий, указанных в разделе параметровобучения (Training Parameters), появится окно,иллюстрирующее динамику целевой функции- кривую обучения. В нашем случае графикможет выглядеть так, как показано нарис. 3.9.

Рисунок 3.9 – Криваяобучения

Кнопкой «Остановитьобучение» (Stop Training) можно прекратитьэтот процесс. Из рисунка видно, чтообучение было остановлено, когда функцияцели достигла установленной величины(goal = 0).

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

Для этогонеобходимо открыть вкладку «Прогон»(Simulate) и выбрать в выпадающем списке»Входы» (Inputs) заготовленные данные.В данной задаче естественно использоватьтот же набор данных, что и при обученииdata1. При желании можно установить флажок»Задать цели» (Supply Targets).

Тогда врезультате прогона дополнительно будутрассчитаны значения ошибки. Нажатиекнопки «Прогон сети» (Simulate Network)запишет результаты прогона в переменную,имя которой указано в поле «Выходы»(Outputs). Теперь можно вернуться в основноеокно NNTool и, выделив мышью выходнуюпеременную network1, нажать кнопку «Просмотр»(View).

Содержимое окна просмотра совпадаетсо значением вектора целей − сетьработает правильно.

Следует заметить,что сеть создаётся инициализированной,то есть значения весов и смещенийзадаются определённым образом.

Передкаждым следующим опытом обучения обычноначальные условия обновляются, для чегона вкладке «Инициализация»(Initialize) предусмотрена функция инициализации.

Так, если требуется провести нескольконезависимых опытов обучения, инициализациявесов и смещений перед каждым из нихосуществляется нажатием кнопки»Инициализировать веса» (InitializeWeights).

Вернёмся к вкладке»Необязательная информация»(Optional Info) (рис. 8). Чтобы понять, какойцели служат представленные здесьпараметры, необходимо обсудить двапонятия: переобучение и обобщение.

При выборе нейроннойсети для решения конкретной задачитрудно предсказать её порядок. Есливыбрать неоправданно большой порядок,сеть может оказаться слишком гибкой иможет представить простую зависимостьсложным образом. Это явление называетсяпереобучением.

В случае сети с недостаточнымколичеством нейронов, напротив,необходимый уровень ошибки никогда небудет достигнут. Здесь налицо чрезмерноеобобщение. Для предупреждения переобученияприменяется следующая техника. Данныеделятся на два множества: обучающее(Training Data) и контрольное (Validation Data).Контрольное множество в обучении неиспользуется.

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

Остановка на этом этапе называетсяранней остановкой (Early stopping). Такимобразом, необходимо провести сериюэкспериментов с различными сетями,прежде чем будет получена подходящая.При этом чтобы не быть введённым взаблуждение локальными минимумамифункции ошибки, следует несколько разобучать каждую сеть.

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

В такойситуации рекомендуется применять ещёодно множество − тестовое множествонаблюдений (Test Data), которое представляетсобой независимую выборку из входныхданных. Итоговая модель тестируется наэтом множестве, что даёт дополнительнуювозможность убедиться в достоверностиполученных результатов.

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

Обучение сети можнопроводить в разных режимах. В связи сэтим, в NNTool предусмотрено две вкладки,представляющие обучающие функции:рассмотренная ранее вкладка Train и»Адаптация» (Adapt).

Adapt вмещает вкладкуинформация адаптации (Adaption Info), на которойсодержатся поля, схожие по своемуназначению с полями вкладки Training Info ивыполняющие те же функции и вкладкупараметры адаптации (Adaption Parameters).Последняя содержит единственное поле»Проходы» (passes).

Значение, указанноев этом поле, определяет, сколько раз всевходные векторы будут представленысети в процессе обучения. Параметрывкладок «Train» и «Adapt» в MATLABиспользуются функциями train и adapt,соответственно.

Выявлениепоказателей, влияющих на валовую прибыльпредприятия

Пусть требуется наоснове экспертных данных выявитьфакторы, наиболее сильно влияющие наежемесячную прибыль предприятия (табл.3.3).

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

– объем реализациипо линии бюджета – поскольку данныеявляются неполными, содержат пропуски;

– затраты – посколькумы уже рассматриваем их по частям: наматериалы и зарплату;

– объем реализованнойпродукции, рентабельность, так как онисвязаны жесткой аналитической зависимостьюс другими показателями;

– численность –практически постоянная величина;

– цена единицыпродукции – никак не связана с прибыльюи другими показателями.

В результате оставленыфакторы: затраты на материалы, объемзаработной платы, производительность,курс доллара.

При выполнениилабораторной работы используйте навыки,приобретенные при выполнении предыдущейлабораторной работы.

Таблица 3.3 −Показатели, характеризующие деятельностьпредприятия

Фактор

ед. изм.

1

2

3

4

5

6

7

8

9

10

11

12

Объем реализации (без НДС)

тыс. руб.

354

310

277

302

327

211

263

168

278

292

305

326

в том числе бюджет

тыс. руб.

20

37

27

30

18

10

19

Затраты, в том числе

тыс. руб.

255

281

319

251

215

203

208

172

323

262

239

475

материалы

тыс. руб.

53

58

44

63

38

32

41

33

45

50

39

58

заработная плата

тыс. руб.

122

126

126

104

112

74

102

76

123

117

107

218

Численность

чел.

59

62

62

63

62

62

62

63

63

62

62

62

Производительность

руб./чел.

6003

5002

4474

4798

5273

3410

4237

2673

4406

4711

4833

5253

Цена ед. продукции

руб.

0,08

0,08

0,08

0,06

0,07

0,06

0,08

0,08

0,12

0,10

0,15

0,15

Рентабель­ность

%

38,9

10,4

20,4

52,0

4,1

26,3

11,5

27,4

Курс $

руб.

6,0

6,1

6,1

6,1

6,2

6,2

6,2

7,9

16,1

16,0

17,9

20,1

Прибыль валовая

тыс. руб.

99

29

-42

51

112

8

55

-4

-45

30

66

Задание

  1. Реализовать с помощью NNTool нейронную сеть прямого распространения.

  2. Обучить сеть, основываясь на важных показателях из таблицы 3.3.

  3. Спрогнозировать валовую прибыль за 12 отчетный период.

  4. Сделать выводы, объяснить положительный или отрицательный результат.

Цель работы– не точность прогноза, а знакомство сосновными понятиями и принципамифункционирования нейронных сетей.

Обязательно дляизучения:

  1. Задачи, решаемые искусственными нейронными сетями.

  2. Виды искусственных нейронных сетей.

  3. Математическая модель нейрона.

  4. Биологический нейрон.

Источник: https://studfile.net/preview/4605192/

Biz-books
Добавить комментарий