После выбора конкретной топологии необходимо выбрать параметры обучения
нейронной сети. Этот этап особенно важен для сетей, обучающихся с учителем. От
правильного выбора параметров зависит не только то, насколько быстро ответы
сети будут сходиться к правильным ответам. Например, выбор низкой скорости
обучения увеличит время схождения, однако иногда позволяет избежать паралича
сети. Увеличение момента обучения может привести как к увеличению, так и к
уменьшению времени сходимости, в зависимости от формы поверхности ошибки.
Исходя из такого противоречивого влияния параметров, можно сделать вывод, что
их значения нужно выбирать экспериментально, руководствуясь при этом критерием
завершения обучения (например, минимизация ошибки или ограничение по времени
обучения).
В процессе обучения сеть в определенном порядке просматривает обучающую выборку. Порядок просмотра может быть последовательным, случайным и т. д. Некоторые сети, обучающиеся без учителя (например, сети Хопфилда), просматривают выборку только один раз. Другие (например, сети Кохонена), а также сети, обучающиеся с учителем, просматривают выборку множество раз, при этом один полный проход по выборке называется эпохой обучения. При обучении с учителем набор исходных данных делят на две части - собственно обучающую выборку и тестовые данные; принцип разделения может быть произвольным. Обучающие данные подаются сети для обучения, а проверочные используются для расчета ошибки сети (проверочные данные никогда для обучения сети не применяются). Таким образом, если на проверочных данных ошибка уменьшается, то сеть действительно выполняет обобщение. Если ошибка на обучающих данных продолжает уменьшаться, а ошибка на тестовых данных увеличивается, значит, сеть перестала выполнять обобщение и просто "запоминает" обучающие данные. Это явление называется переобучением сети или оверфиттингом. В таких случаях обучение обычно прекращают. В процессе обучения могут проявиться другие проблемы, такие как паралич или попадание сети в локальный минимум поверхности ошибок. Невозможно заранее предсказать проявление той или иной проблемы, равно как и дать однозначные рекомендации к их разрешению.
Все выше сказанное относится только к итерационным алгоритмам поиска
нейросетевых решений. Для них действительно нельзя ничего гарантировать и
нельзя полностью автоматизировать обучение нейронных сетей. [источник не указан
330 дней] Однако, наряду с итерационными алгоритмами обучения, существуют не
итерационные алгоритмы, обладающие очень высокой устойчивостью и позволяющие
полностью автоматизировать процесс обучения.
Даже в случае успешного, на первый взгляд, обучения сеть не всегда обучается именно тому, чего от неё хотел создатель. Известен случай, когда сеть обучалась распознаванию изображений танков по фотографиям, однако позднее выяснилось, что все танки были сфотографированы на одном и том же фоне. В результате сеть "научилась" распознавать этот тип ландшафта, вместо того, чтобы "научиться" распознавать танки [18]. Таким образом, сеть "понимает" не то, что от неё требовалось, а то, что проще всего обобщить.
Тестирование качества обучения нейросети необходимо проводить на
примерах, которые не участвовали в её обучении. При этом число тестовых
примеров должно быть тем больше, чем выше качество обучения. Если ошибки
нейронной сети имеют вероятность близкую к одной миллиардной, то и для
подтверждения этой вероятности нужен миллиард тестовых примеров. Получается,
что тестирование хорошо обученных нейронных сетей становится очень трудной
задачей.
4. Реализация
Проект полноценно реализован на Visual Studio 2013 Ultimate. Для начала
создадим облачную службу в Visual Studio подключим её к уже имеющейся службе в
Azure. Для создания облачной службы необходимо установить SDK пакеты на Visual
Studio. После чего подключить VS к Azure. Только после этих операций появится
возможность создания облачной службы в VS, результат показан на рисунке 4.
Рисунок 4 - Создание облачной службы
Следующим нашим этапом будет создание сайта и базы. Этот этап реализуется
уже в самом облаке. Для создания базы можно воспользоваться конструктором или
написать код вручную. Необходима база для хранения информации для обучения
нейронной сети. База представлена на рисунке 5.
Рисунок 5- База данных в Azure
После создания сайта и базы данных необходимо их связать. Это операция тоже реализуется через возможности Azure.
microsoft azure нейронный сеть
Рисунок 6 -Создание сайта
Аналогично создаем облачную службу в Azure и привязываем ее к нашему проекту в Visual Studio.
Настраиваем конфигурации сайта и мы можем опубликовывать наш пустой. Одна
из интересных особенностей - возможность предоставление доступа к сайту.

После написания дизайна переходим к начинке сайта приложениями.
Для загрузки данных на сайт создадим отдельный класс. Используя этот класс, мы будем загружать данные на сайт, а уже потом их отображать.
После прохождения данных этапов у нас есть система, изображенная на
рисунке 8.
Рисунок 8 - Структура приложения
Для реализации нейронной сети буду использовать свободно распространяемую библиотеку C#: Neuro.
Библиотека содержит шесть основных сущностей:
¾ Neuron - базовый абстрактный класс для всех нейронов, инкапсулирующих такие общие сущности, как вес нейрона, выходное значение и входное значение. Другие классы нейрона наследуются от базового класса, чтобы расширить его дополнительными свойствами и специализировать его.
¾ Layer - представляет коллекцию нейронов. Это базовый абстрактный класс, инкапсулирующий общий функционал всех слоев нейронов.
¾ Network - представляет нейронную сеть, является коллекцией слоев нейронов. Это базовый абстрактный класс, предоставляющий общий функционал типовой нейронной сети. Для реализации конкретной архитектуры нейронной сети требуется унаследовать класс, расширив его специфичным функционалом любой архитектуры нейронной сети.
¾ IActivationFunction - интерфейс функции активации. Функции активации используются в нейронах активации - типе нейрона, где вычисляется взвешенная сумма его входов, и затем значение передается на вход функции активации, и выходное значение становится выходным значением нейрона.
¾ IUnsupervisedLearning - интерфейс для алгоритмов неуправляемого обучения - типа алгоритмов обучения, где системе даются образцы входов только на этапе обучения, но без желаемых выходов. Задача системы - организоваться так, чтобы найти взаимосвязь и сходства между выборками данных.
¾ ISupervisedLearning - интерфейс для алгоритмов управляемого
обучения - типа алгоритмов обучения, где системе на этапе обучения даются
образцы входов вместе с желаемыми выходными значениями. Задача системы -
обобщить учебные данные и научиться предоставлять правильное выходное значение,
когда ей предъявляется только входное значение.
Рисунок 9 - Библиотека Neuro
¾ Сеть активации - нейронная сеть, где каждый нейрон вычисляет свой выход как выход функции активации, и аргумент является взвешенной суммой его входов в сочетании с пороговым значением. Сеть может состоять из одного слоя или из нескольких слоев. Обученная по алгоритму управляемого обучения, сеть позволяет решать такие задачи, как приближение, предсказание, классификация и распознавание.
¾ Сеть дистанции - нейронная сеть, где каждый нейрон вычисляет свой выход как дистанцию между своими весовыми значениями и входными значениями. Сеть состоит из одного слоя и может служить основой для таких сетей, как самоорганизующаяся карта Кохонена, эластичная сеть и сеть Хемминга.
Для написания приложения был использован алгоритм обратного
распространения, задача: аппроксимация. Так как сам процесс обучения нейронной
сети нельзя разбить на несколько параллельных процессов, то была принята идея обучать
сеть на одних и тех же входных данных но с разными параметрами одновременно.
Используя библиотеку Neoro было написал 3 программы, каждая из которых обучает
нейронную сеть методом обратного распространения, но с разными весами: рисунок
10,11.
Рисунок 10- Аппроксимация с весом 0.1
Рисунок 11 - Аппроксимация с весом 0.2
Заключение
При исследовании задачи разработки системы распределенного обучения нейронной сети были изучены возможности облачной платформы Microsoft Azure: создание и размещение облачных служб, баз данных и публикация сайтов; среды программирования Ultimate Visual Studio 2013: создание веб-приложений, подключение облачных служб.
Разработана система, использующая облачные службы для распределенной
аппроксимации, с помощью нейронных сетей и имеющая веб-интерфейс.
Список используемой литературы
1. Windows Azure. URL: http://azure.microsoft.com/en-us/documentation/articles <http://ru.wikipedia.org/wiki/Информационный_поиск> (дата обращения 24.05.2014)
2. Visual Studio <http://www.visualstudio.com/get-started/create-your-app-vs>
. SQL Server <http://msdn.microsoft.com/en-us/data/tools.aspx%20>
4. Обучение нейронных сетей <http://life-prog.ru/1_7556_obuchenie-neyronnih-setey>
. Библиотека Neuro <http://www.cyberguru.ru/algorithms/algorithms-theory>
. Распределенные вычисления
<http://ru.wikipedia.org/wiki/Распределенные_вычисления>