Рассмотрен процесс разработки программного обеспечения для работы с нейронными сетями. Осуществлен подбор оптимальных параметров обучения и типа нейронной сети для обеспечения наибольшей точности прогнозирования показателей, характеризующих аграрные регионы РФ.
АПК как система может управляться с помощью управляющих и наблюдаемых параметров. Для того чтобы проследить динамику изменения наблюдаемых параметров при манипулировании управляемыми факторами была использована технология нейронных сетей, которая подходит для решения данной задачи.
Необходимо найти оптимальный тип и параметры нейронной сети. Тип сети и параметры должны сохраняться для дальнейшего использования.
Принято решение разработать программный продукт позволяющий работать с нейронными сетями, гибко подстраивать параметры обучения, получать информацию о процессе обучения нейронной сети в ходе самого обучения. Обеспечить возможность сохранения готовых файлов нейронной сети для их дальнейшего использования, нормализации входных параметров, регулировки соотношения тестовой и обучаемой выборки, подбора типа нейронной сети и функций активации ее слоев, отображения карты связей готовой нейронной сети. Возможность использования нейронной сети для прогнозирования значений в нескольких режимах:
Разработка программного продукта произведена в среде Borland C++ Builder 6. Для обеспечения поддержки технологии нейронных сетей использована библиотека с открытым исходным кодом FANN. Fast Artificial Neural Network (FANN) это библиотека которая поддерживает языки программирования C, C++, PHP, Python, Delphi и Mathematica и является мощным инструментом для разработчиков программного обеспечения. (1) Библиотека может быть использована для разработки искусственного интеллекта в компьютерных играх, идентификации объектов и изображений, помощи брокерам акций на биржах для выявления трендов и тенденций на рынке и, безусловно, для решения поставленной задачи.
Программный продукт имеет несколько экранных форм. Каждая форма обеспечивает отдельный режим работы приложения.
На главной форме «Создание сети», рисунок 1, расположены сгруппированные элементы нормализации нейронной сети, автоматического подбора параметров обучения, задания параметров нейронной сети и лог операций. Переключение между режимами работы (экранными формами) осуществляется через меню «Инструменты».

Рисунок 1. Главная форма приложения. «Создание сети»
Следующая форма и режим работы называется «Карта связей», рисунок 2. В этом режиме при выборе ранее созданного файла нейронной сети можно просмотреть следующую информацию о нейронной сети:
Основную часть экранной формы занимает поле для вывода таблицы о структуре и силе связей между нейронами в готовой нейронной сети. На форме присутствует блок управления размером шрифта в поле для вывода таблицы, на случай если сеть содержит большое количество нейронов и слоев и информация о ее структуре и силе связей в ней не помещается в отведенное для этого поле.

Рисунок 2. Форма «Карта связей»
Информация о силе и структуре связей между нейронами в нейронной сети представлена в виде компактной матрицы для удобного просмотра внутреннего устройства нейронной сети.
Данная нейронная сеть имеет всего 15 нейронов, 3 слоя (входной, выходной и скрытый слой). Во входном слое 9 нейронов, в скрытом 5, в выходном 1. Общее количество связей в сети 34. Связи между нейронами представлены в матрице. «.» (точка) означает отсутствие связи. Сила связи характеризуется буквой a-z. 3 реальных нейрона в скрытом слое (нейроны 10, 11 и 12 в слое 1) имеют связи с 10 нейронами из предыдущего слоя, как это видно в первых трех строках матрицы. Нейрон 14 в выходном слое имеет соединение с четырьмя нейронами скрытого слоя 11-14 нейроны, как это видно на пятой строке матрицы.
Для упрощения матрицы нейроны во входном слое и bias нейроны и их связи не отображаются в матрице.
На рисунке 2 представлен вывод информации о структуре сети построенной на основе выборки из данных «База АПК» по следующим показателям за 10 лет с 1995 по 2005 гг.:
В выборку вошли регионы РФ, отобранные в предыдущих исследованиях (2), (3) с помощью кластерного анализа методом самоорганизующихся карт Кохонена на основе результатов всероссийской сельскохозяйственной переписи 2006 года. В лидирующий кластер вошли следующие регионы, показатели которых использованы при обучении нейронной сети:
Следующий режим работы (экранная форма) называется «Использование сети». В приложении нейронную сеть используется:

Рисунок 3. Форма «Использование сети». Прогноз одного значения.
Использовать обученную нейронную сеть в этом режиме очень просто. Выбираем сохраненный файл нейронной сети. Вводим нормализованные значения в таблицу в блоке «Прогноз значения». В столбец «input» необходимо ввести столько значений, сколько принимает на вход нейронная сеть, и нажать кнопку «Проверить». В столбце «output» появится спрогнозированное значение.

Рисунок 4. Форма «Использование сети». Циклический прогноз множества значений с построением графиков.
Прогноз множества значений позволяет импортировать ненормализованные значения из csv файла сразу по множеству показателей. Нормализовать их. Ввести необходимое количество итераций прогнозирования. Построить графики полученных значений.

Рисунок 5. Форма «Использование сети». Сравнение оригинальных и полученных с помощью нейронной сети значений. Оценка качества обучения нейронной сети и прогнозирования.
Необходимо выбрать файл с обучающими данными, которые будут использоваться в качестве входных значений для нейронной сети, и нажать кнопку «Сравнить». Для удобства сравнения значений строится график.
Первый тип нейронной сети, который был испытан – линейная двухслойная нейронная сеть. Параметры сети изображены на рисунке 6.
Метод обучения – FANN_TRAIN_RPROR. Более совершенный алгоритм обучения, показывающий хорошие результаты на большинстве задач. Алгоритм обучения RPROP — адаптивный. Некоторые параметры обучения могут быть изменены, однако делать это рекомендуется только для пользователей понимающих работу алгоритма RPROP. Если быть точнее это реализация алгоритма iRPROP.
Функции активации скрытого и выходного слоя FANN_LINEAR. Сигнал на выходе нейрона линейно связан с взвешенной суммой сигналов на его входе.
f(x) = tx
где t — параметр функции. В искусственных нейронных сетях со слоистой структурой нейроны с передаточными функциями такого типа, как правило, составляют входной слой. (4) Область значений (-∞, ∞).

Рисунок 6. Обучение двухслойной нейронной сети с линейной функцией активации скрытого и выходного слоев
Число нейронов в сети 5, соединений 6, слоев 2. Ошибка обучения 0,167253659566243 – достаточно велика. Число ошибочных битов 123. Число ошибочных битов показывает количество превышений максимально допустимой разницы между прогнозируемым значением и реальным значением в течение обучения. Результат, показанный данным типом нейронной сети при линейной функции активации, не позволяет использовать эту нейронную сеть для адекватного прогнозирования значений поставленной задачи.
Следующий тип нейронной сети, который был испытан – нейронная сеть с одним скрытым слоем (трехслойная). Параметры сети и результаты обучения изображены на рисунке 7. Метод обучения FANN_TRAIN_RPROR. Функции активации скрытого и выходного слоев – FANN_SIGMOID_SYMMETRIC. Сигмоидальная функция активации одна из самых часто используемых, на данный момент, типов активационных функций. Введение функций сигмоидального типа было обусловлено ограниченностью нейронных сетей с пороговой функцией активации нейронов — при такой функции активации любой из выходов сети равен либо нулю, либо единице, что ограничивает использование сетей не в задачах классификации. Использование сигмоидальных функций позволило перейти от бинарных выходов нейрона к аналоговым выходам. Функции передачи такого типа, как правило, присущи нейронам, находящимся во внутренних слоях нейронной сети. (4)

Рисунок 7. Нейронная сеть с одним скрытым слоем (трехслойная)
Количество нейронов в сети 15, число соединений в сети 34, слоев 3. Ошибка обучения 0,000978241524388713. Число ошибочных битов 0.

Рисунок 8. Карта связей нейронной сети с одним скрытым слоем (трехслойной)
Информация о силе и структуре связей между нейронами в нейронной сети с одним скрытым слоем (трехслойной) представлена в виде компактной матрицы на рисунке 8.
Данная нейронная сеть имеет всего 15 нейронов, 3 слоя (входной, выходной и скрытый слой). Во входном слое 9 нейронов, в скрытом 5, в выходном 1. Общее количество связей в сети 34. Связи между нейронами представлены в матрице. «.» (точка) означает отсутствие связи. Сила связи характеризуется буквой a-z. 3 реальных нейрона в скрытом слое (нейроны 10, 11 и 12 в слое 1) имеют связи с 10 нейронами из предыдущего слоя, как это видно в первых трех строках матрицы. Нейрон 14 в выходном слое имеет соединение с четырьмя нейронами скрытого слоя 11-14 нейроны, как это видно на пятой строке матрицы. Все связи достаточно сильные.
Качество обучения нейронной сети на примере сравнения оригинальных и полученных сетью значений приведено на рисунке 9.

Рисунок 9. Сравнение оригинальных и полученных значений с помощью нейронной сети с одним скрытым слоем (трехслойной)
Проведенные испытания выявили пригодность для дальнейшего использования (прогнозирования значений показателей) нейронной сети следующего типа и параметрами:
АПК как система может управляться с помощью управляющих и наблюдаемых параметров. Для того чтобы проследить динамику изменения наблюдаемых параметров при манипулировании управляемыми факторами была использована технология нейронных сетей, которая подходит для решения данной задачи.
Необходимо найти оптимальный тип и параметры нейронной сети. Тип сети и параметры должны сохраняться для дальнейшего использования.
Разработка программного продукта
Принято решение разработать программный продукт позволяющий работать с нейронными сетями, гибко подстраивать параметры обучения, получать информацию о процессе обучения нейронной сети в ходе самого обучения. Обеспечить возможность сохранения готовых файлов нейронной сети для их дальнейшего использования, нормализации входных параметров, регулировки соотношения тестовой и обучаемой выборки, подбора типа нейронной сети и функций активации ее слоев, отображения карты связей готовой нейронной сети. Возможность использования нейронной сети для прогнозирования значений в нескольких режимах:
- прогноз одного значения на основе входных параметров;
- циклический прогноз множества значений, когда спрогнозированное значение подается на вход сети и снова запускается прогнозирование, с возможностью задания количества итераций;
- сравнение реальных и полученных нейронной сетью значений;
- построение графиков сразу по нескольким показателям.
Разработка программного продукта произведена в среде Borland C++ Builder 6. Для обеспечения поддержки технологии нейронных сетей использована библиотека с открытым исходным кодом FANN. Fast Artificial Neural Network (FANN) это библиотека которая поддерживает языки программирования C, C++, PHP, Python, Delphi и Mathematica и является мощным инструментом для разработчиков программного обеспечения. (1) Библиотека может быть использована для разработки искусственного интеллекта в компьютерных играх, идентификации объектов и изображений, помощи брокерам акций на биржах для выявления трендов и тенденций на рынке и, безусловно, для решения поставленной задачи.
Программный продукт имеет несколько экранных форм. Каждая форма обеспечивает отдельный режим работы приложения.
На главной форме «Создание сети», рисунок 1, расположены сгруппированные элементы нормализации нейронной сети, автоматического подбора параметров обучения, задания параметров нейронной сети и лог операций. Переключение между режимами работы (экранными формами) осуществляется через меню «Инструменты».

Рисунок 1. Главная форма приложения. «Создание сети»
Следующая форма и режим работы называется «Карта связей», рисунок 2. В этом режиме при выборе ранее созданного файла нейронной сети можно просмотреть следующую информацию о нейронной сети:
- Количество слоев;
- Общее количество нейронов;
- Количество нейронов во входном слое;
- Количество нейронов в скрытых слоях;
- Количество нейронов в выходном слое;
- Общее количество связей в сети.
Основную часть экранной формы занимает поле для вывода таблицы о структуре и силе связей между нейронами в готовой нейронной сети. На форме присутствует блок управления размером шрифта в поле для вывода таблицы, на случай если сеть содержит большое количество нейронов и слоев и информация о ее структуре и силе связей в ней не помещается в отведенное для этого поле.

Рисунок 2. Форма «Карта связей»
Информация о силе и структуре связей между нейронами в нейронной сети представлена в виде компактной матрицы для удобного просмотра внутреннего устройства нейронной сети.
Данная нейронная сеть имеет всего 15 нейронов, 3 слоя (входной, выходной и скрытый слой). Во входном слое 9 нейронов, в скрытом 5, в выходном 1. Общее количество связей в сети 34. Связи между нейронами представлены в матрице. «.» (точка) означает отсутствие связи. Сила связи характеризуется буквой a-z. 3 реальных нейрона в скрытом слое (нейроны 10, 11 и 12 в слое 1) имеют связи с 10 нейронами из предыдущего слоя, как это видно в первых трех строках матрицы. Нейрон 14 в выходном слое имеет соединение с четырьмя нейронами скрытого слоя 11-14 нейроны, как это видно на пятой строке матрицы.
Для упрощения матрицы нейроны во входном слое и bias нейроны и их связи не отображаются в матрице.
На рисунке 2 представлен вывод информации о структуре сети построенной на основе выборки из данных «База АПК» по следующим показателям за 10 лет с 1995 по 2005 гг.:
- Численность населения всего, тыс.чел.;
- Среднегодовая численность, занятых в сельском хозяйстве, млн.чел.;
- Среднегодовая численность занятого населения в экономике, всего тыс.чел.;
- Денежные доходы населения (в среднем на душу в месяц), руб.;
- Денежные расходы населения ( в среднем на душу в месяц), тыс.руб.;
- Количество сельскохозяйственных предприятий, ед.;
- Общая площадь сельскохозяйственных угодий, тыс.га;
- Посевная площадь всего;
- Производство валовой продукции сельского хозяйства во всех категориях хозяйств, в факт. ценах, млн.руб. после 1998;
- Число крестьянских (фермерских) хозяйств, единиц;
- Площадь участков, предоставленных крестьянским (фермерским) хозяйствам, тыс.га;
- Посевные площади сельскохозяйственных культур, тыс.га;
- Инвестиции в основной капитал, млн.руб.;
- Капитальные вложения за счет федерального бюджета, млн.руб.;
- Капитальные вложения за счет бюджетов субъектов федерации, млн.руб.;
- Удельный вес убыточных предприятий в общем их числе, %;
- Прибыль (до налогооблажения) по всей деятельности сельхозпредприятий, млн.руб.;
- Бюджетные субсидии относимые на результаты хоз. деятельности сельхозпредприятий Минсельхоза, млн.руб.;
- Уровень рентабельности по всей деятельности сельхозпредприятий (с дотациями и компенсациями), %;
- Уставный капитал, тыс.руб.;
- Прибыль до налогообложения, тыс.руб.;
- Убыток до налогообложения, тыс.руб.;
- Валовой доход, тыс.руб.
В выборку вошли регионы РФ, отобранные в предыдущих исследованиях (2), (3) с помощью кластерного анализа методом самоорганизующихся карт Кохонена на основе результатов всероссийской сельскохозяйственной переписи 2006 года. В лидирующий кластер вошли следующие регионы, показатели которых использованы при обучении нейронной сети:
- Архангельская область;
- Астраханская область;
- Белгородская область;
- Брянская область;
- Владимирская область;
- Волгоградская область;
- Вологодская область;
- Воронежская область;
- Ивановская область;
- Кабардино-Балкарская Республика;
- Калининградская область;
- Калужская область;
- Карачаево-Черкесская Республика;
- Кировская область;
- Костромская область;
- Краснодарский край;
- Курская область;
- Ленинградская область;
- Липецкая область;
- Московская область;
- Мурманская область;
- Нижегородская область;
- Новгородская область;
- Оренбургская область;
- Орловская область;
- Пензенская область;
- Пермская область;
- Псковская область;
- Республика Адыгея (Адыгея);
- Республика Башкортостан;
- Республика Дагестан;
- Республика Ингушетия;
- Республика Калмыкия;
- Республика Карелия;
- Республика Коми;
- Республика Марий Эл;
- Республика Мордовия;
- Республика Северная Осетия-Алания;
- Республика Татарстан;
- Ростовская область;
- Рязанская область;
- Самарская область;
- Саратовская область;
- Смоленская область;
- Ставропольский край;
- Тамбовская область;
- Тверская область;
- Тульская область;
- Удмуртская Республика;
- Ульяновская область;
- Чеченская Республика;
- Чувашская Республика-Чувашия;
- Ярославская область.
Следующий режим работы (экранная форма) называется «Использование сети». В приложении нейронную сеть используется:
- прогноза единственного значения, рисунок 3;
- циклического прогноза множества значений заданное количество раз, рисунок 4;
- сравнение реальных значений и полученных с помощью нейронной сети, рисунок 5.

Рисунок 3. Форма «Использование сети». Прогноз одного значения.
Использовать обученную нейронную сеть в этом режиме очень просто. Выбираем сохраненный файл нейронной сети. Вводим нормализованные значения в таблицу в блоке «Прогноз значения». В столбец «input» необходимо ввести столько значений, сколько принимает на вход нейронная сеть, и нажать кнопку «Проверить». В столбце «output» появится спрогнозированное значение.

Рисунок 4. Форма «Использование сети». Циклический прогноз множества значений с построением графиков.
Прогноз множества значений позволяет импортировать ненормализованные значения из csv файла сразу по множеству показателей. Нормализовать их. Ввести необходимое количество итераций прогнозирования. Построить графики полученных значений.

Рисунок 5. Форма «Использование сети». Сравнение оригинальных и полученных с помощью нейронной сети значений. Оценка качества обучения нейронной сети и прогнозирования.
Необходимо выбрать файл с обучающими данными, которые будут использоваться в качестве входных значений для нейронной сети, и нажать кнопку «Сравнить». Для удобства сравнения значений строится график.
Подбор оптимального типа и параметров нейронной сети
Двухслойная нейронная сеть с линейной функцией активации
Первый тип нейронной сети, который был испытан – линейная двухслойная нейронная сеть. Параметры сети изображены на рисунке 6.
Метод обучения – FANN_TRAIN_RPROR. Более совершенный алгоритм обучения, показывающий хорошие результаты на большинстве задач. Алгоритм обучения RPROP — адаптивный. Некоторые параметры обучения могут быть изменены, однако делать это рекомендуется только для пользователей понимающих работу алгоритма RPROP. Если быть точнее это реализация алгоритма iRPROP.
Функции активации скрытого и выходного слоя FANN_LINEAR. Сигнал на выходе нейрона линейно связан с взвешенной суммой сигналов на его входе.
f(x) = tx
где t — параметр функции. В искусственных нейронных сетях со слоистой структурой нейроны с передаточными функциями такого типа, как правило, составляют входной слой. (4) Область значений (-∞, ∞).

Рисунок 6. Обучение двухслойной нейронной сети с линейной функцией активации скрытого и выходного слоев
Число нейронов в сети 5, соединений 6, слоев 2. Ошибка обучения 0,167253659566243 – достаточно велика. Число ошибочных битов 123. Число ошибочных битов показывает количество превышений максимально допустимой разницы между прогнозируемым значением и реальным значением в течение обучения. Результат, показанный данным типом нейронной сети при линейной функции активации, не позволяет использовать эту нейронную сеть для адекватного прогнозирования значений поставленной задачи.
Нейронная сеть с одним скрытым слоем (трехслойная)
Следующий тип нейронной сети, который был испытан – нейронная сеть с одним скрытым слоем (трехслойная). Параметры сети и результаты обучения изображены на рисунке 7. Метод обучения FANN_TRAIN_RPROR. Функции активации скрытого и выходного слоев – FANN_SIGMOID_SYMMETRIC. Сигмоидальная функция активации одна из самых часто используемых, на данный момент, типов активационных функций. Введение функций сигмоидального типа было обусловлено ограниченностью нейронных сетей с пороговой функцией активации нейронов — при такой функции активации любой из выходов сети равен либо нулю, либо единице, что ограничивает использование сетей не в задачах классификации. Использование сигмоидальных функций позволило перейти от бинарных выходов нейрона к аналоговым выходам. Функции передачи такого типа, как правило, присущи нейронам, находящимся во внутренних слоях нейронной сети. (4)

Рисунок 7. Нейронная сеть с одним скрытым слоем (трехслойная)
Количество нейронов в сети 15, число соединений в сети 34, слоев 3. Ошибка обучения 0,000978241524388713. Число ошибочных битов 0.

Рисунок 8. Карта связей нейронной сети с одним скрытым слоем (трехслойной)
Информация о силе и структуре связей между нейронами в нейронной сети с одним скрытым слоем (трехслойной) представлена в виде компактной матрицы на рисунке 8.
Данная нейронная сеть имеет всего 15 нейронов, 3 слоя (входной, выходной и скрытый слой). Во входном слое 9 нейронов, в скрытом 5, в выходном 1. Общее количество связей в сети 34. Связи между нейронами представлены в матрице. «.» (точка) означает отсутствие связи. Сила связи характеризуется буквой a-z. 3 реальных нейрона в скрытом слое (нейроны 10, 11 и 12 в слое 1) имеют связи с 10 нейронами из предыдущего слоя, как это видно в первых трех строках матрицы. Нейрон 14 в выходном слое имеет соединение с четырьмя нейронами скрытого слоя 11-14 нейроны, как это видно на пятой строке матрицы. Все связи достаточно сильные.
Качество обучения нейронной сети на примере сравнения оригинальных и полученных сетью значений приведено на рисунке 9.

Рисунок 9. Сравнение оригинальных и полученных значений с помощью нейронной сети с одним скрытым слоем (трехслойной)
Выводы
Проведенные испытания выявили пригодность для дальнейшего использования (прогнозирования значений показателей) нейронной сети следующего типа и параметрами:
- Метод обучения FANN_TRAIN_RPROR;
- Функции активации скрытого и выходного слоев – FANN_SIGMOID_SYMMETRIC;
- Число слоев 3;
- Соотношение обучающей и тестовой выборок 60/40.
Список литературы
- Nissen, Stefen. Neural Networks Made Simple. Software 2.0. 2005 г., 2, стр. 14.
- Воронин, Евгений Алексеевич и Захаров, Дмитрий Никанорович. Кластерный анализ результатов сельскохозяйственной переписи. Вестник МГАУ. 2010 г., 41, стр. 90.
- Воронин, Евгений Алексеевич и Захаров, Дмитрий Никанорович. Анализ результатов сельскохозяйственной переписи агропромышленного комплекса. Международный научный журнал. Вопросы экономики. 2010 г., 3, стр. 31.
- Wikipedia. Искусственный нейрон. Википедия — свободная энциклопедия. [В Интернете] 2011 г. ru.wikipedia.org/wiki/Искусственный_нейрон.