УДК 519.95
ИСКУССТВЕННЫЕ НЕЙРОННЫЕ СЕТИ И КЛАСТЕРНЫЕ СИСТЕМЫ. РЕАЛИЗАЦИЯ НЕЙРОСЕТЕВОГО СИМУЛЯТОРА
© О.В. Крючин
Ключевые слова: параллельные алгоритмы; искусственные нейронные сети.
Статья описывает применение технологии параллельного программирования к искусственным нейронным сетям. Описываются параллельные алгоритмы обучения искусственных нейронных сетей и используемые для этого средства. Производится сравнения данного подхода с другими.
Введение. С момента появления компьютера людям хотелось научить его человеческому мышлению. Особое мышление компьютера всегда приводило к большим трудностям, т. к. требовало подробного объяснения алгоритма решения поставленной задачи. Так, например, для моделирования каких-либо социальных или биологических систем необходимо создавать сложные математические системы и затем программировать их. Системы могут быть различного типа (дискретные или непрерывные и т. д.) или иметь смешанные типы. Часто каждый из вариантов имеет как преимущества, так и недостатки перед другими, и выбор характеристики модели затруднителен. Способность компьютера самостоятельно подбирать параметры модели могла бы решить эту проблему. Одним из решений было изобретение искусственных нейронных сетей.
Искусственная нейронная сеть (ИНС) представляет собой математическую модель человеческого мозга. Как известно, мозг состоит из множества частиц - нейронов, соединенных между собой связями, передающими сигналы. Проходя через нейроны, сигналы изменяются. Наличие множества таких нейронов позволяет человеку решать сложные задачи, запоминать большие объемы информации и принимать решения. Создание такой модели позволило научить компьютер некоторым произвольным действиям, например сложению чисел. Для обучения нейронной сети предъявляется обучающая выборка, и сеть самостоятельно подстраивает свою структуру для оптимального моделирования данной выборки. После обучения сеть оказывается способной вычислять результат, имея на входе данные, отсутствующие в обучающей выборке.
Способность нейронной сети действовать по принципу черного ящика во многом облегчает моделирование систем. Необходимо всего лишь принять решение, что является входными данными, а что выходными, собрать экспериментальные данные и позволить сети обучаться. Способность сети самостоятельно изменять свою структуру избавляет от необходимости управлять обучением. Очевидно, что решение масштабных задач требует значительных вычислительных ресурсов [3]. Но мощность современных компьютеров существенно уступает мозгу человека и в большинстве случаев для
обучения нейронной сети необходимы значительные временные затраты, что часто недопустимо. Решением этой проблемы могло бы стать увеличение мощности процессоров, но даже при нынешней динамике развития компьютер еще долго не сможет конкурировать с мозгом. Другим решением является кластеризация -распределение нагрузки на несколько машин, объединенных в вычислительную сеть. Нейронная сеть, обучающаяся не на персональном компьютере, а на кластере требует значительно меньше времени на обучение.
Для того чтобы ИНС могла использовать ресурсы нескольких машин, необходимо создание нейросетево-го симулятора, поддерживающего кластеризацию, то есть способного локализовать независимые друг от друга подзадачи и запустить их на разных процессорах.
Целью данной работы является создание реализации ИНС, способной обучаться на параллельных машинах. Для решения этой задачи необходимо решить ряд подзадач.
- Выделить этапы обучения, на которых может быть произведено распараллеливание.
- Разработать эффективные инструменты межпроцессорной передачи данных.
- Реализовать параллельные алгоритмы обучения ИНС.
Выделение уровней распараллеливания. Параллельная программа имеет особый принцип работы, поскольку, в отличие от последовательной, где одновременно выполняется только одно действие, в параллельных программах одновременно выполняются несколько операций. Поскольку параллельная программа выполняется на многопроцессорной машине, то необходимо задействовать все процессоры, т. е. дать им на выполнение какую-то часть задачи, которая может выполняться самостоятельно (не задействуя при этом другие части задачи).
Таким образом, необходимо добиться того, чтобы несколько действий выполнялись независимо друг от друга, следовательно, проектировать алгоритм с учетом этой особенности. Алгоритм разделяется на блоки, которые одновременно выполняются на разных процессорах и обмениваются между собой данными. Блоки должны быть достаточно большими, т. к. в противном
случае временные затраты на передачу данных будут больше, чем выигрыш во времени из-за одновременного выполнения блоков. С другой стороны, чем больше блоки, тем, как правило, сложнее их выделить, особенно учитывая то, что их выполнение должно занимать одинаковое время (иначе получается простаивание процессоров).
Таким образом, можно заметить, что произвольный алгоритм не может быть выполнен на параллельной машине, более того, не каждый алгоритм может быть переписан для параллельной машины.
Обучение ИНС сводится к минимизации целевой функции
Id - у
11
N -l p -l
IId - y,.j У
1=0 ,=0
і
N -l p -l
I - F (x1’w)jу
1=0 j=0
(l)
Здесь ё , у представляют собой выходные значения самого объекта (таблица эмпирических данных) и ИНС при одинаковых и заданных входах, N - число строк данных в обучающей выборке, р - размерность вектора выходных координат объекта, V - вектор коэффициентов синаптических (межнейронных) связей. Минимизация функции (1) обычно заключается в подборе вектора весовых коэффициентов V при помощи какого-либо метода. Таким образом, представляется оче-
видным выделить два уровня, на которых можно производить распараллеливание - вычисление значения функции (1) и подбор значений вектора w .
Используемые средства. Наиболее высокопроизводительным машинами на данный момент являются суперкомпьютеры и кластерные системы. В качестве интерконекта обычно применяется Fast Ethernet). В 1994 г. был принят стандарт механизма передачи сообщений MPI (Message Passing Interface). Он готовился с 1992 по 1994 г. группой Message Passing Interface Forum, в которую вошли представители более чем 40 организаций из Америки и Европы. Основная цель, которую ставили перед собой разработчики MPI, - это обеспечение полной независимости приложений, написанных с использованием MPI, от архитектуры многопроцессорной системы, без какой-либо существенной потери производительности. По замыслу авторов это должно было стать мощным стимулом для разработки прикладного программного обеспечения и стандартизованных библиотек подпрограмм для многопроцессорных систем с распределенной памятью. Подтверждением того, что эта цель была достигнута, служит тот факт, что в настоящее время этот стандарт поддерживается практически всеми производителями многопроцессорных систем. Реализации MPI успешно работают не только на классических MPP системах (многопроцессорных системах с массовым параллелизмом), но также на SMP системах (симметричных мультипроцессорных системах) и на сетях рабочих станций (в т. ч. и неоднородных) [1]. Таким образом, на данный момент большая часть кластерных систем поддерживает данный механизм.
8
Рис. 1. Упрощенная диаграмма классов библиотки CrVMpi
З07
Рис. 2. Упрощенная диаграмма классов
MPI является мощной, но вместе с тем низкоуровневой технологией. Разрабатывая программу на каком либо языке высокого уровня, например C++, при использовании MPI программист вынужден писать фактически на чистом С. Например, для передачи массива встроенного типа, такого как int или double, необходимо выполнить ряд подготовительных действий перед отправкой на посылающем узле, произвести отправку, на принимающем узле также вызвать ряд подготовительных функций, затем отдельно принять длину массива и лишь затем сам массив. Наличие такого количества действий увеличивает время разработки и способно привести к появлению ошибок, которые в силу особенностей архитектуры параллельных программ обнаружить труднее, чем в последовательных. Кроме того, MPI позволяет передавать лишь массивы встроенных типов, и при необходимости передать пользовательский тип его необходимо разложить на простые типы, а после принятия снова собрать. Также MPI требует указывать тип передаваемых данных, что делает невозможным передачу параметризованных типов, широко используемых программистами С++, затрудняя тем самым позднее связывание программ.
Учитывая вышесказанное, для межпроцессорной передачи данных была создана высокоуровневая надстройка, получившая название CrVMpi. Эта библиотека состоит из класса CrVMpiSender, содержащего методы передачи/приема данных встроенных типов, набора функций конвертации пользовательских типов (контейнеров) в встроенные типы. Также библиотека содержит класс CrVMpiManager, предназначенный для управления MPI. При необходимости использования шаблонных типов можно применять CrVTMpiSender и CrVTMpiManager - параметризованные наследники CrVMpiSender и CrVMpiManager. На рис. 1 изображена диаграмма классов этой библиотеки. Тип ArrayStructure представляет собой структуру, содержащую массивы-указатели следующих типов: signed char, unsigned char, bool, signed short, unsigned short, signed int, unsigned int, signed long, unsigned long, float, double, long double, а также массив, хранящий количество элементов в каждом из указанных массивов-указателей.
Архитектура. Структура нейросетевого симулятора состоит из трех основных частей:
1. библиотеки служебных инструментов scrvl (включающей ЄгУМрі),
2. структур ИНС и алгоритмов обучения -сгутЬтт,
3. параллельных алгоритмов обучения ИНС -crvmpamllel.
Данная ИНС поддерживает три типа структур:
1. многослойный персептрон,
2. сеть каскадной корреляции Фальмана,
3. сеть Вольтери.
ИНС поддерживает следующие алгоритмы подбора весовых коэффициентов:
1. метод полного сканирования,
2. метод Монте-Карло,
3. градиентный метод.
Распараллеливание на уровне вычисления значения целевой функции. При обучении сети вычисление выходных сигналов требуется для их сравнения с выходными данными из обучающей выборки, которое в свою очередь необходимо для вычисления погрешности (1). Поскольку обучающая выборка, как правило, состоит из нескольких сотен (или даже тысяч) строк данных, а количество процессоров не превышает нескольких десятков, можно равномерно распределить строки обучающей выборки по процессорам с тем, чтобы после передачи с управляющего узла структуры сети все процессоры одновременно вычисляли выходные сигналы, сравнивали их с значениями из обучающей выборки и передавали обратно на ведущий процессор лишь значение погрешности. Процессор управляющего узла суммирует эти погрешности и получает таким образом результат - значение целевой функции. Таким образом, при необходимости вычислить эту функцию управляющий узел рассылает на все узлы структуру нейронной сети и получает от них погрешность, полученную на той части обучающей выборки, которая была передана на этот вычислительный узел [4].
Таким образом, формулу (1) можно представить в виде:
п-1 п-1 (к+і)т р-1 -------------^—
е=Ё^=Ё Ё -Е( Ч-}, (2)
k=0 к=0 і=кN }=0
СриО Сри1 Сри2 СриЫ
1 1 1 1 1 . 1 передача весовых коэффициентов . I 2: передача весовых коэффициентов | I I I | і .1 і і
I , N1 передача весовых козффициенов , і -і
1 1 I N+1: передача значения невязки і і
1 1 1 N+2 передача значения невязки 1 і
1 | 2М: передача значения невязки і
Г 1
Рис. 3. Диаграмма последовательности вычисления значения невязки
где Єк - погрешность, вычисленная на к-ом процессоре, N = — - количество строк обучающей выборки, п
передаваемой на каждый процессор.
В случае, когда в процессе обучения ИНС структура не меняется, т. е. происходит только подбор весовых коэффициентов, то для получения значения невязки на вычислительные узлы передаются только значения весовых коэффициентов (рис. 3), а обучающая выборка и структура сети передаются один раз до начала обучения.
Распараллеливание на уровне изменения весовых коэффициентов при использовании алгоритма полного сканирования. Одним из самых простых является алгоритм полного сканирования. Как известно, алгоритм полного сканирования работает следующим образом: поскольку весовые коэффициенты обычно задаются в ограниченном интервале [і0 ;11] (как правило 10 = -1, 11 = 1), то вначале происходит инициализация всех весовых коэффициентов минимальным значением, а на следующих итерациях происходит последовательное изменение.
М = (10> (0 ,(0 '•••'10 ,(0 )
М = (10 (0 ,(0 ’•••’l0 ’10 + 5)
М = (10 ,(0,(0 ’•••’10 ’ 10 + 2§)
М = ((0 >(0 ,(0 ,•••, (0 ,(1 - 5)
М = (0 (0 ,(0 ’•••’(0 ,(1 )
М = (0 (0 ,(0 ’•••’(0 + Я’(0 ) М= (0 >10 ,(0..........(0 + 5,(0 +5)
М = ((1 ,(1 .••,(1,(1 - 5)
М ( (1 ,(1 ’•••>(1 ,(1)
(3)
Таким образом, после вычисления значения целевой функции при существующей конфигурации значение последнего весового коэффициента увеличивается на величину шага 5 , и снова происходит вычисление значения целевой функции. После того как значение последнего весового коэффициента достигнет верхнего предела (1 , предпоследний коэффициент увеличивается на величину шага, а последний устанавливается минимальным пределом (0 и т. д. После того, как значения всех весовых коэффициентов будут установлены верхним пределом, перебор заканчивается. Таким образом, происходит полный перебор всех возможных комбинаций значений весовых коэффициентов.
Этот способ, с одной стороны, является довольно надежным, а с другой - очень медленным. Количество итераций можно вычислить по формуле:
+ 1
(4)
где Ь - количество весовых коэффициентов, 5 - величина приращения весового коэффициента.
Параллельное выполнение этого метода заключается в том, что для каждого процессора значения Ь первых весовых коэффициентов являются фиксированными (на первом процессоре м0 = 10,м>х = 10,..,м ь_ = 10 ,
10 +5 и т. д.), а
остальные подбираются обычным способом. После того, как все процессоры переберут возможные варианты и каждый из них выберет оптимальную структуру и вычислит погрешность при этой структуре, эти результаты передаются ведущему процессору, который сравнивает значения невязки и выбирает наименьшее, соответствующее оптимальной структуре [4].
на втором м0 = (0 ,м1 = (0 ,.;М ^-1 = »0
і
1
Рис. 4. Схема размещения весовых коэффициентов по вычислительным узлам
[передача структуры на вычислительные узлы]
[подбор оптимальной структуры]
\
Сбор значений невязки и структур с вычислительных узлов
[выбор минимального значения невязки]
Рис. 5. Диаграмма действий подбора весовых коэффициентов методом полного сканирования
Распараллеливание на уровне изменения весовых коэффициентов при использовании алгоритма Монте-Карло. Алгоритм подбора весовых коэффициентов Монте-Карло так же, как и другие методы Монте-Карло, основан на генерации случайных чисел. Вна-
чале значения весовых коэффициентов инициализируются случайным образом, а затем происходит последовательное их уточнение. Происходит это следующим образом: генерируется случайное число и вычисляется новое значение весового коэффициента
Ащ =5 * г ж, = ж + Аж- ’
(5)
где г - сгенерированное случайным образом число.
После этого вычисляется значение погрешности при новом значении веса, и если разница между текущей и вычисленной погрешностью не отрицательна, то весовой коэффициент не меняется, в противном случае, он возвращается к предыдущему состоянию
Ж = Ж - Аж .
(6)
Таким образом, на каждой итерации происходит уточнение всех весовых коэффициентов. Подбор завершается, когда будет выполнено условие остановки (достигнута заданная погрешность, пройдено определенное количество итераций и т. д.).
Модификация метода заключается в том, что для каждого веса генерируется не одно, а п случайных чисел г = (г0, г1,....гп-1), вычисляются м = (м,.,0 м-д ...Мп-1 Ку =
= м^ + 5 * гу у = 0,..,п -1, а затем выбирается минимальный е(м1), и если это значение меньше предыдущего значения целевой функции, то соответствующий ему м. становится новым значением весового коэффициента.
Каждый процессор независимо генерирует гу-, вычисляет у и ег у и посылает их на ведущий. Ведущий процессор сравнивает е,у и, в зависимости от результата, устанавливает новое значение м. и посылает его на все вычислительные узлы.
Рис. 6. Диаграмма последовательности подбора ,-ого весового коэффициента на одной итерации
Распараллеливание на уровне изменения весовых коэффициентов при использовании градиентного алгоритма. Градиентный метод подбора весовых коэффициентов лежит в основе многих других очень распространенных методов. Суть его заключается в вычислении вектора градиента и изменении значений весовых коэффициентов в направлении антиградиента.
дє
dw
f
дєК) дє(1) ^(wL-l)
А
dw0
dwl
dw
L-l
дє(wi■) e(wl + Aw,) - є()
dw, Aw, Aw,
(7)
(8)
дє(м>і)
Следовательно, для вычисления —1—- необходи-
дж,
мо вычислить значение целевой функции при текущем значении весовых коэффициентов, а затем при измененном Щ = м>і + Аж, . После вычисления вектора градиента происходит изменение весовых коэффициентов
w
дє^-)
dw,
(9)
Как можно заметить, одно из главных отличий этого метода от метода Монте-Карло заключается в том, что для вычисления нового значения одного из весовых коэффициентов используются старые значения остальных весовых коэффициентов, т. е. те, которые были на предыдущей итерации. Исходя из этого, можно сделать вывод, что элементы вектора градиентов могут быть вычислены одновременно, следовательно, этот вектор может быть разделен на п частей, каждая из которых вычисляется на отдельном процессоре (для этого процессору необходимо лишь передать текущие значения весовых коэффициентов). После окончания вычисления процессоры не возвращают полученные
Рис. 7. Схема распределения весовых коэффициентов по процессорам
результаты на ведущий, а изменяют значения приписанных к ним весовых коэффициентов, а уже после этого возвращают результат (новые весовые коэффициенты).
Заключение. Созданный нейросетевой симулятор позволяет использовать ресурсы кластеров для уменьшения временных затрат на обучение ИНС. В настоящее время ведется тестирование с целью определения коэффициента эффективности.
ЛИТЕРАТУРА
1. Букатов А А., Дацюк, В.Н., Жугуло А.И. Программирование многопроцессорных вычислительных систем. Ростов н/Д, 2003. 31 с.
2. Горбань А.Н. и др. Нейроинформатика. Новосибирск: Наука, 1998.
296 с.
3. Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи. М.: Мир, 1982. 416 с.
4. Крючин О.В., Арзамасцев АА, Королев А.Н., Горбачев С.И., Семенов Н.О. Универсальный симулятор, базирующийся на технологии искусственных нейронных сетей, способный работать на параллельных машинах // Вестн. Тамб. ун-та. Сер. Естеств. и техн. науки. Тамбов, 2008. Т. 13. Вып. 5. С. 372-375.
Поступила в редакцию 12 ноября 2009 г.
Kryuchin O.V. Artificial neural networks and cluster systems. Realization of the neuro-net simulator.
Article describes application of technology of parallel programming in artificial neural networks. Parallel algorithms of artificial neural networks training and means used for this are described. Comparisons of the given approach with other ones is performed.
Key words: parallel algorithms; artificial neural networks.