Аннотация и ключевые слова
Аннотация (русский):
Проведен анализ существующих методов прогнозирования энергопотребления. Обоснован выбор метода прогнозирования с использованием искусственной нейронной сети. Описано применение параллельных вычислений на GPU. Предложен новый алгоритм прогнозирования энергопотребления на основе теории искусственных нейронных сетей с применением технологии CUDA для оптимизации процесса прогнозирования потребления электроэнергии на промышленном предприятии. Для практического использования нового алгоритма разработана компьютерная программа для операционных систем Windows, написанная на языке программирования С++. Поставлен эксперимент, на основе которого проводится анализ работы программы и расчет потребляемых ресурсов. По результатам экспериментов разработанный параллельный алгоритм достиг необходимой точности прогноза за значительно меньший промежуток времени. Применение алгоритма позволит предприятиям получить более точный прогноз и сократить издержки, связанные с оплатой электроэнергии.

Ключевые слова:
методы прогноза, прогнозирование энергопотребления, нейронная сеть, параллельный алгоритм, технология CUDA
Текст
Введение У крупных промышленных предприятий в современных условиях потребления электроэнергии возникает задача составления заявки в энергоснабжающую организацию на объем электроэнергии, необходимый в определенный период времени. Если реальные показания потребления будут отличаться от заявленных сумм больше чем на 5 %, на предприятие будут наложены штрафы [1]. Известные методы прогнозирования электрической нагрузки плохо «работают» с «зашумленными» и неполными данными. Наиболее распространен метод прогноза, основанный на удельных нормах расхода электроэнергии с экспертной корректировкой (корреляционно-регрессионный анализ). В качестве модели для аппроксимации графика нагрузки и его прогноза могут успешно использоваться также полиномиальные разложения [2]. Если необходим прогноз на длительный интервал времени, то в таких случаях могут использоваться авторегрессионные методы [3]. Все эти методы обладают существенными недостатками: - их применение требует непосредственного участия аналитиков; - отличаются сложностью вычислений; - характеризуются недостаточной точностью прогноза; - могут применяться только к определенному типу прогноза; - отличаются чувствительностью к входным данным. В настоящее время разрабатываются и внедряются новые подходы к прогнозированию электрической нагрузки. В частности, изучаются проблемы применения нейронных сетей для решения задач прогнозирования энергопотребления [4-12]. Задача нашего исследования - рассмотреть классический персептрон - искусственную нейронную сеть (ИНС). Описание модели нейронной сети Классический персептрон - одна из самых распространённых моделей нейронной сети благодаря способности отражать сложные нелинейные отношения между входными и выходными параметрами [8]. Персептрон состоит из множества сенсорных элементов, которые образуют входной слой; одного или нескольких скрытых слоев вычислительных нейронов и одного выходного слоя нейронов. Входной сигнал распространяется по сети в прямом направлении, от слоя к слою [13]. Каждый нейрон сети имеет нелинейную функцию активации: , (1) где ; - входы нейрона; - синаптические веса входов; - количество входов нейрона. Обучение методом обратного распространения ошибки предполагает два прохода по всем слоям сети: прямой и обратный. Принцип функционирования алгоритма обратного распространения ошибки заключается в использовании метода градиентного спуска и корректировки весов для минимизации ошибки нейронной сети [13]. Множество весовых коэффициентов инициализируется произвольными значениями в диапазоне от 0 до 0,1. Формула коррекции весов для выходного слоя имеет следующий вид: , где - номер итерации обучения; - синаптический вес, соединяющий нейрон скрытого слоя с нейроном выходного слоя; ; - коэффициент скорости обучения; - выход нейрона; - целевое значение выхода нейрона. Формула для коррекции весов скрытого слоя записывается в виде , где - синаптический вес, соединяющий нейрон предыдущего слоя с нейроном скрытого слоя; - выход нейрона; ; - количество нейронов следующего слоя. Существует много различных алгоритмов, которые могут быть использованы для обучения ИНС. Так как в данной работе моделируется алгоритм прогнозирования потребления электроэнергии, в качестве исторических данных мы можем использовать, как обучающие выборки, значения расхода электроэнергии за предыдущие периоды. Под обучающей выборкой понимается набор данных, состоящий из входных параметров и соответствующего им известного значения прогнозируемого параметра, поэтому нами рассматривается метод обратного распространения ошибки, относящийся к парадигме контролируемого обучения. Основной недостаток алгоритма обратного распространения ошибки - медленная сходимость, поэтому процесс обучения ИНС часто занимает очень много времени. В сложных задачах, к которым относится прогнозирование электропотребления, для обучения сети могут потребоваться дни или даже недели [14]. Модификация модели В настоящее время не существует общего алгоритма определения структуры ИНС, подходящего для каждой рассматриваемой проблемы. Часто такую структуру выбирают методом проб и ошибок, который отнимает у исследователей много времени [15]. Поскольку для каждой структуры необходимо подбирать значения весовых коэффициентов, то сокращение времени этого подбора должно ускорить процесс обучения ИНС. Нами предлагается модель, основанная на параллельном прохождении нейронов как при прямом распространении сигналов, так и в обратном направлении при корректировке весов. Тот факт, что нейроны, находящиеся в одном слое, не зависят друг от друга, позволяет распараллелить вычислительный процесс. На рис. 1 представлена блок-схема модифицированного алгоритма. Блоки алгоритма, в которых предполагаются параллельные вычисления, отмечены штрихпунктирной линией. Для реализации распараллеливания нами была применена технология CUDA. Рис. 1. Алгоритм обучения ИНС с распараллеливанием вычислений по технологии CUDA: GRU - графический процессор CUDA - это архитектура параллельных вычислений от NVIDIA, позволяющая существенно увеличить вычислительную производительность благодаря использованию GPU. В настоящее время разработчики программного обеспечения, ученые и исследователи широко используют CUDA в различных областях, включая обработку видео и изображений, вычислительную биологию и химию, моделирование динамики жидкостей, восстановление изображений, полученных путем компьютерной томографии, сейсмический анализ, трассировку лучей и многое другое [16]. CUDA не использует графические API и свободна от ограничений, свойственных им. Основным преимуществом является её простота - все программы пишутся на «расширенном» языке С++. Дополнительные плюсы - наличие хорошей документации, набор готовых инструментов и библиотек, кроссплатформенность. Для решения задач CUDA использует очень большое количество параллельно выполняемых нитей, при этом каждой нити соответствует обычно один элемент вычисляемых данных [17]. CUDA разбивает задачу в сети блоков, каждый блок содержит несколько потоков. Блоки могут работать в любом порядке. Блок должен выполнить от начала до завершения всю задачу, и может быть запущен на одном из N процессоров. Каждый процессор получает равное распределение задач [18]. Постановка задачи Рассмотрим пример помесячного прогнозирования электропотребления предприятием «Ставропольский электротехнический завод «Энергомера» (СЭТЗ «Энергомера») с применением ИНС. Входными параметрами являются следующие величины: - средняя месячная температура; - количество выходных в месяце; - продолжительность дня; - плановые объемы производства на месяц; - потребление электроэнергии за предыдущий месяц; - максимальное и минимальное месячные значения потребления за предыдущий год. Искусственная нейронная сеть будет состоять из входного слоя, одного скрытого слоя нейронов и выходного слоя. Входной слой будет состоять из 11 нейронов: по одному нейрону на среднемесячную температуру, количество выходных в месяце, продолжительность дня, потребление за предыдущий месяц, значения максимального и минимального месячного расхода за год, а также 5 нейронов, характеризующие плановые объемы производства для 5 разных типов выпускаемой продукции (характерно для конкретного предприятия). Выходной слой будет представлен одним нейроном, т. к. надо спрогнозировать только один параметр - месячный расход электроэнергии. Необходимо определить оптимальное количество нейронов в скрытом слое практическим путем. Для этого надо поставить несколько экспериментов с разной конфигурацией сети по количеству нейронов в скрытом слое и сравнить результаты обучения. Для обучения сети будет использован алгоритм обратного распространения ошибки и его модификация с распараллеливанием вычислений. Для реализации модифицированного алгоритма с распараллеливанием прохождения сигнала по сети необходимо разработать программу, которая будет производить вычисления на графическом процессоре с использованием технологии CUDA. Так как задача состоит в прогнозировании месячного значения, то минимальное количество обучающих выборок 12 - значения потребления электроэнергии для каждого месяца прошедшего года, используемые в качестве обучающих выборок при обучении сети. Выходное значение - это потребление электроэнергии за прошедший месяц из выбранного периода для обучения, а входные параметры - характеристики этого же месяца, которые могут повлиять на расход электроэнергии. Все входные параметры необходимо нормализовать на отрезке значений от 0 до 1. Нормализация достигается за счет деления каждой компоненты входного вектора на длину самого вектора. Длина вектора находится извлечением квадратного корня из суммы квадратов всех компонент вектора: . Цель процесса обучения заключается в нахождении оптимальных значений весовых коэффициентов, при которых нейронная сеть выдаёт значение в пределах заданной погрешности для всех обучающих выборок. Реализация искусственной нейронной сети на языке программирования С++ Нейронная сеть реализована на языке программирования С++. Для реализации параллельного алгоритма использовались библиотеки CUDA. На рис. 2 представлен фрагмент кода, реализующий функцию активации (в коде функция ActiveSigm(intiter)) по формуле (1). Функция ProcNeuro(intiter) выполняет последовательное суммирование произведений входных параметров на весовые коэффициенты нейронов. Функция вызывается циклически для всех нейронов слоя. Параметр функции iter - номер итерации прохождения слоя, т. е. номер нейрона в слое. Цикл for(){} внутри функции реализует последовательное прохождение всех весовых коэффициентов, относящихся к текущему нейрону. INCOUT - количество обучающих выборок, задается пользователем. При реализации функции активации для возведения основания натурального логарифма в степень используется функция pow() вместо exp(). Выбор обусловлен тем, что функция exp() в своем алгоритме использует функцию pow(), в результате чего появляется мелкая погрешность [19]. Но при многочисленном перемножении значений в длительном итерационном процессе обучения ИНС эта погрешность может многократно увеличиться. Рис. 2. Листинг программы. Функция активации. Последовательная реализация На рис. 3 представлен фрагмент кода, реализующий функцию активации для алгоритма параллельного прохождения сигнала по сети средствами расширений библиотек CUDA. Рис. 3. Листинг программы. Функция активации. Параллельная реализация Функция MainKernel<<<>>>() - функция-ядро, выполняется на графическом процессоре (GPU). Переменная blockIdx - индекс текущего блока в вычислении на GPU. Переменная blockDim - размерность текущего блока в вычислении на GPU. Переменная threadIdx - индекс текущей нити в вычислении на GPU. Цикл for(){} выполняет суммирование произведений весовых коэффициентов на входные параметры. Эта функция выполняется одновременно (параллельно) для всех нейронов слоя. Эксперименты Все вычисления производились на персональном компьютере: - процессор (CPU): Intel(R) Core(TM) i5 760 2.8 GHz; - ОЗУ: 8,00 Гб; - тип системы: Windows 7 Профессиональная 64-разрадная. Программы написаны в среде Microsoft Visual Studio 2013 и скомпилированы на встроенном компиляторе. При компиляции программы для параллельного алгоритма использовался компилятор, входящий в состав дополнительного набора инструментов CUDA Toolkit 6.5. Исполняемые файлы 64-разрядные. Для выполнения программы с параллельной реализацией алгоритма обучения ИНС необходимо наличие графического процессора (видеокарты) NVIDIA. Нами использовалась видеокарта NVIDIA GeForce GT 240. На рис. 4 представлен результат обучения сети в течение 10 секунд при проведении эксперимента, целью которого было сравнение полученной погрешности за равный интервал времени для алгоритмов с последовательной и параллельной реализацией вычислений. Очевидно, что уже с первых секунд процесса обучения сети результат алгоритма с параллельным прохождением сигнала по сети ближе к эталонному значению обучающей выборки. Это объясняется тем, что параллельный алгоритм успевает произвести больше эпох обучения, чем последовательный алгоритм и, следовательно, получает более точный результат. В обоих случаях использовались одни и те же данные и одна структура сети с идентичными параметрами. Рис. 4. Результаты обучения сети в течение первых 10 секунд (по вертикали - шкала выходных значений) При реализации параллельного алгоритма незначительная часть мощности тратится на перенос данных в память GPU и обратно. Это схематично показано на рис. 5. Рис. 5. Затраты вычислительной мощности Время, затраченное на копирование данных при реализации параллельного обучения, будет значительно больше, чем при реализации последовательного алгоритма, но итоговое время обучения сети при параллельном алгоритме - во много раз меньше. В таблице представлены результаты работы алгоритмов, полученные в ходе эксперимента, целью которого было достижения заданной точности (меньше 3 %). Сравнение результатов выполнения последовательного и параллельного алгоритмов Параметр Алгоритм последовательный параллельный Количество эпох обучения 1 млн 1 млн Время выполнения, с 10365,5 1418,6 Абсолютная погрешность, % 2,9999 2,9999 Среднеквадратичное отклонение (MSE) 0,01689 0,01689 Согласно данным таблицы, очевидно значительное преимущество параллельного алгоритма обучения ИНС по времени выполнения. Заключение Таким образом, в ходе исследования были получены следующие результаты. Обзор популярных методов прогнозирования расхода электроэнергии позволил привести доводы в пользу метода прогнозирования с использованием ИНС. Проведено исследование теории ИНС, построен алгоритм обучения нейронной сети. Полученный алгоритм был оптимизирован путем распараллеливания отдельных блоков. На языке программирования С++ разработаны программы, реализующие оба алгоритма. Программы были оптимизированы с точки зрения производительности, функциональности и надежности. Процесс распараллеливания осуществлен с использованием платформы параллельных вычислений CUDA, которая обеспечивает набор расширений для языков C и С++. Поставлен практический эксперимент с использованием реальных показателей СЭТЗ «Энергомера» и выполнено сравнение результатов работы программ. В процессе исследования предложенной модели ИНС удалось добиться значения средней относительной погрешности прогноза на месяц меньше 3 % за значительно меньший интервал времени. Время обучения до заданной точности сокращается за счет параллельного выполнения вычислений алгоритма. Данная модель легко может быть перенастроена для любого предприятия. Внедрённая в модель технология распараллеливания вычислительного процесса CUDA позволила получить преимущество даже при обработке небольших объемов данных. Полученные результаты говорят о том, что в условиях ограниченности ресурсов разработанная модель параллельного обучения нейронной сети позволит получить более высокую точность прогнозирования при тех же ресурсах.
Список литературы

1. Об электроэнергетике: Федеральный закон РФ от 26.03.2003 № 35-Ф3 // Рос. газета. 2003. 1 апр. С. 1.

2. Ахметьянов Р. Р., Делегодина Л. А., Копылова Н. П. и др. Задачи прогнозирования энергопотребления в интегрированной АСКУЭ Новосибирского научного центра // Энергосбережение. 2007. № 1. С. 42-47.

3. Ахметьянов Р. Р., Делегодина Л. А., Копылова Н. П., Луценко Б. Н., Собстель Г. М., Чейдо Г. П. Мультипликативная модель сезонного энергопотребления предприятий // Автометрия. 2008. Т. 44, № 3. С. 106-118.

4. Hong T., Shahidehpour M. Load Forecasting Case Study. National Association of Regulatory Utility Commissioners, 2015. 171 p.

5. Francisco V. Cipolla-Ficarra. Handbook of Research on Interactive information Quality in Expanding Social Network Communications. Latin Association of Human-Computer Interaction, Spain & International Association of Interactive Communication, Italy, 2015. 449 p.

6. Hyndman R. J., Athanasopoulos G. Forecasting: principles and practice. Publisher: OTexts, 2013. 291 p.

7. Zelinka I., Chen G., Rössler O. E., Snášel V., Abraham A. Nostradamus 2013: Prediction, Modeling and Analysis of Complex Systems. Springer International Publishing, Switzerland, 2013. 550 p.

8. Надтока И. И., Аль Зихери Б. М. Байесовская нейросетевая модель для краткосрочного прогнозирования электропотребления региона // Студ. науч. весна: материалы регион. науч.-практ. конф. студ., аспирантов и молодых ученых вузов Ростов. обл. Новочеркасск: ЮРГПУ (НПИ), 2012. С. 136-138.

9. Соловьева И. А., Дзюба А. П. Прогнозирование электропотребления с учетом факторов технологической и рыночной среды // Научный диалог. 2013. № 7 (19). C. 97-111.

10. Гофман А. В., Ведерников А. С., Ведерникова Е. С. Повышение точности краткосрочного и оперативного прогнозирования электропотребления энергосистемы с применением искусственной нейронной сети // Электрические станции. 2012. №. 7. С. 36-41.

11. Алексеева И. Ю. Краткосрочное прогнозирование электропотребления в электроэнергетических системах с использованием искусственных нейронных сетей: автореф. дис. … канд. техн. наук. Иваново, 2014. 20 с.

12. Shayeghi H. STLF Based on Optimized Neural Network Using PSO // International Journal of Electrical and Computer Engineering. 2009. 4:10. P. 1190-1199.

13. Хайкин С. Нейронные сети: полный курс. М.: Изд. дом «Вильямс», 2006. 1104 с.

14. Уоссермен Ф. Нейрокомпьютерная техника: Теория и практика. М.: Мир, 1992. 240 с.

15. Арзамасцев А. А., Крючин О. В., Азарова П. А., Зенкова Н. А. Универсальный программный комплекс для компьютерного моделирования на основе искусственной нейронной сети с самоорганизацией структуры // Вестн. Тамбов. ун-та. Сер.: Естественные и технические науки. 2006. Т. 11, вып. 5. С. 372-375.

16. Таранов Р. В. Вычисления на GPU. Применение библиотек ускоренных по технологии CUDA // Фундаментальные и прикладные исследования в современном мире: материалы IX Междунар. науч.-практ. конф. 2015. Т. 1. С. 100-109.

17. Боресков А. В., Харламов А. А. Основы работы с технологией CUDA. М.: ДМК Пресс, 2010. C. 26-44.

18. Shane Cook. CUDA Programming. A Developer’s Guide to Parallel Computing with GPUs. Elsevier Inc., 2013. P. 69-104.

19. Microsoft Software Developer Network. URL: https://msdn.microsoft.com/ru-ru/library/system.math.exp (v=vs.110).aspx (дата обращения: 09.04.2016).


Войти или Создать
* Забыли пароль?