Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Эффективные методы решения задач кинематики и динамики робота-станка параллельной структуры

..pdf
Скачиваний:
3
Добавлен:
20.11.2023
Размер:
7.84 Mб
Скачать

4,2. Подбор алгоритма обучения нейронной сети

121

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

для каждого входного вектора и связанного выходного вектора выполнять, пока «not STOP» STOP = TRUE;

для каждого входного вектора выполнить прямой проход и найти реальный выход;

получить вектор ошибок путем сравнения реальных и целевых значений;

если реальный выход не попадает в допустимые рамки;

установить STOP=FALSE;

выполнить обратный проход для вектора ошибок;

в результате обратного прохода определить величины изменения значения весов;

обновить значения весов.

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

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

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

Алгоритм обратного распространения ошибки опирается на обобщен­

ное дельта-правило [9]. Производная ошибки представляется в виде:

dE

_ dE doj

dnetj

(4 1)

dwij

doj dnetj

dwuj

 

му для

122 Гл. 4, Управление движением робота-станка на основе нейронных,,.

Вводится обозначение S,

 

 

 

 

S - _ дЕ

(4.2)

 

 

 

 

 

j

дпе—

 

 

 

 

 

 

Тогда равенство можно переписать в виде

 

 

 

 

 

Л

дЕ

до,

(4.3)

 

 

 

 

j

 

до,

дnet,

 

 

 

 

 

 

Поскольку E

p ~

1 ^

(tj — Oj)2, имеем

 

 

2 ^

v

j

j

 

 

 

 

 

 

 

дЕ

 

(tj

Oj )

(4.4)

 

 

 

 

до,

 

 

 

 

 

 

 

 

 

Д ля функции активации f выходом является Oj — f (netj)

f ' получаем:

доj

дпеТ f ' (netj )

Л — (tj — Oj ) f ' (netj ) ■

и поэто­

(4.5)

(4.6)

Д ля нахождения комбинированного вывода используется обычное сум­ мирование произведений: netj — ^ x iwij .

i=0

Поэтому —— - — x i Возвращаясь к формуле (4.1), получим

д'Ш1,

дЕ

(tj — Oj ) f ' (netj ) x i

(4.7)

дwi-

 

 

С учетом того, что вес должен изменяться в направлении, противо­ положном тому, которое указывает производная поверхности ошибок, и с учетом нормы обучения п изменение веса для элемента должно вычисляться по формуле

A w j — n$j x i .

(4.8)

Ошибка Sj соответствует ошибке выходного элемента, но ошибка скрытого элемента не связана с целевым выходным значением непо­ средственно. Поэтому весовые значения скрытого элемента следует скорректировать пропорционально его «вкладу» в величину ошибки следующего слоя (т. е. выходного слоя в случае сети с одним скрытым слоем). В сети с одним скрытым слоем при распространении сигналов ошибок в обратном направлении ошибка каждого выходного элемента вносит свой «вклад» в ошибку каждого элемента скрытого слоя. Этот «вклад» для элементов скрытого слоя зависит от величины ошибки выходного элемента и весового коэффициента, соединяющего элемен­ ты. Другими словами, выходной элемент с большей ошибкой делает Больший «вклад» в ошибку того элемента скрытого слоя, который

4,2. Подбор алгоритма обучения нейронной сети

123

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

Sj = f ' (netj) ^ 5иw k j ,

(4.9)

k

 

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

 

f

(netj )

 

1

 

1

(4.10)

 

 

 

+ e-nej

Производная от этой функции активности равна

f ' (netj )

e netj

1

 

 

+ e-netj )2

1 + e-netj

 

1 + e-netj )

(1

 

= f (netj)(1 - f (netj)). (4.11)

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

A wij (n + 1) = nSj Qi + a A w ij (n).

(4.12)

Таким образом, изменение веса на шаге n + 1 оказывается завися­ щем от изменения веса на шаге n.

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

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

124 Гл. 4. Управление движением робота-станка на основе нейронных,,.

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

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

Запустить процесс из начальной точки w при заданной начальной температуре T = Tmax.

Пока T > 0, повторить L раз следующие действия:

выбрать новое решение w' из OKpecraocraw.

— рассчитать изменение целевой функции Д = E (w ') — E (w).

если Д ^ 0, принять w = w'; в противном случае (при Д > 0) принять, что w = w' c вероятностью e- A /k T путем генерации

случайного числа R из интервала (0, 1) c последующим сравне­ нием его со значением e- A / k T ; если e- A /k T > R, принять новое peшeниew = w'; в противном случае проигнорировать его.

— уменьшить температуру (T ^ r T ) c использованием

коэффици­

ента уменьшения г, выбираемого из интервала (0 , 1),

и вернуться

к п. 2 .

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

4.2.3. Комбинирование обратного распространения с методом имитации отжига. Коррекция весов в комбинированном алгоритме, использующем обратное распространение и стохастическое обучение, состоит из двух компонент: (1) направленной компоненты, вычисля­ емой с использованием алгоритма обратного распространения, и (2 ) случайной компоненты. Эти компоненты вычисляются для каждого веса, и их сумма является величиной, на которую изменяется вес. Как и в алгоритме имитации отжига, после вычисления изменения веса вычисляется целевая функция. Если имеет место улучшение, измене­ ние сохраняется. В противном случае оно сохраняется c вероятностью, определяемой распределением Больцмана. Коррекция веса вычисляется с использованием представленных ранее уравнений для каждого из алгоритмов:

wij (n + 1) = wij (n) + n (a6jOi + (1 а) Дь)^ (n)) + (1 n) Xc- (4.13)

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

4,3. Реализация комбинированного алгоритма Для обучения НС

125

4.3. Реализация комбинированного алгоритма для обучения НС

В качестве примера реализации, рассмотрим программу, разрабо­

танную

на языке C + + . Полный текст

программы находится

в прило­

жении

1. Д ля реализации нейронной

сети разработан набор

классов

(файл layer.h и layer.epp}, иерархия которых изображена на рис. 4.3.

-----rnregji.

std::vector

Ж

 

 

Matrix

 

Memory

■row: int

 

-sizeln, sizeOut, count: int

■col: int

 

-data: std::vector<real>

+getRow(): size_t

 

+setln(in in : int): void

+getCol(): size t

 

+setOut(in out: int): void

+setSize(in r: size. t, in c: size t): vod

+operator[](in i: int): Mem

-i-operator()(in i: int, in j: int): real

+size(): int

+operator()(in i: int, in j: int): real&

+read(in name : char*,in start: int,in end: int): vo

 

 

т

Layer

 

NeroNet

■pNext, pPrev: Layer*

 

■arch : std::vector<int>

■row,col: int

 

■weight,sdvig : std::vector<real*>

■weight,sdvig: Matrix

 

■error: Pointer

■input,error: Pointer

 

-sumError: real

■inputBuf,errorBuf: std::vector<rea

■begin,end : Layer*

-NU: real&

 

-distr: Memory

-func(in x : real): real

 

■NU: real

+front(): void

 

-createLayers(): void

+back(): void

 

■front(in mem: Mem): void

+setln(in p : Pointer): void

 

■zero(): void

+setOut(in p : Pointer): void

 

HoadData(in name : char*,in from, to : int):

+getln(): Pointer

 

4-frontBack(): real

+getOut(): Pointer

 

r-frontQ: real

StartLayer

MidlLayer

r-back(): void

r-back(): void

Рис, 4,2, Иерархия классов нейронной сети

4,3. Реализация комбинированного алгоритма Для обучения НС

127

этих значений (методы get). Чтобы класс Matrix вел себя как матрица, а не как вектор, перегружен оператор круглые скобки, с двумя пара­ метрами. Первый параметр обозначает номер строки, второй — номер столбца. Так если объект matrix имеет тип Matrix, то для получения доступа к 1-ой строке и 1-му столбцу следует записать:

m a t r i x ( i ,i ) = 1;

Теперь, возвращаясь к описанию класса Layer, ясно, что weight — матрица весовых коэффициентов, где номер строки обозначает поряд­ ковый номер нейрона, из которого выходит связь, а номер столбца — порядковый номер нейрона, в который входит связь.

Процесс передачи выходных данных из одного слоя на вход другого осуществляется очень просто. Каждый слой содержит вектор inputBuf,

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

вычислений. Соседний следующий слой имеет ссылку input

(являет­

ся итератором вектора), которая ссылается на самое начало

вектора

с входными данными, т. е. значением ссылки является inputBuf.begin(). Инициализация input осуществляется методом setIn(Pointer p). По

отношению к крайним слоям это выполняется немного иначе. Для того чтобы подать на вход некоторый сигнал, поле input принимает значе­ ние указателя на начало вектора входных значений (метод setln (...)). Для получения выходных данных используется метод getln(), возвра­ щающий указатель на начало вектора inputBuf. Ссылочная методика позволяет избежать копирования данных, что вносит свой вклад в уве­ личение скорости обучения нейронной сети. Прямой проход в слое осуществляется методом frontQ.

v o i d L a y e r : : f r o n t ( ) {

f o r ( i n t i = 0 ; i < w e i g h t , g e t C o l ( ) ; + + i ) { r e a l tmp = w e i g h t ( 0 , i ) ;

P o i n t e r i t = i n p u t ;

f o r ( i n t j = 1 ; j < w e i g h t . g e t R o w ( ) ; + + i t , + + j ) tmp + = ( * i t ) * w e i g h t ( j , i ) ;

i n p u t B u f [ i ] = f u n c ( t m p ) ;

}

L a y e r * p o i n t = n e x t ( ) ;

i f ( p o i n t ) p o i n t - > f r o n t ( ) ;

}

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

только одни раз для входного слоя.

Обратный проход имеет несколько различий для разных типов

слоев. Выходной слой и все скрытые слои выполняют этот проход по

одному алгоритму, входной слой по другому. В связи с этим метод

128 Гл. 4, Управление движением робота-станка на основе нейронных,,.

обратного прохода back() в классе Layer был объявлен как виртуаль­ ный, без реализации, а значит, сам класс Layer является абстрактным.

v irtu al void baek()=0;

Д ля реализации разных алгоритмов было описано два класса StartLayer и MidlLayer, которые являются потомками Layer с описанием метода back(). На рис. 4.4 показаны блок-схемы этих алгоритмов.

Данный метод проводит набор вычислений и прибавляет результат к матрице sduig. Каждый очередной проход для новой выборки накап­ ливает результат, и после обработки всей выборки значение матрицы sduig становится равным суммарному вектору градиента ошибки, на основании которого проводится корректировка весовых коэффициен­ тов. Как видно из блок-схем все различие заключается в том, что в классе MidlLayer проводятся еще вспомогательные вычисления для предыдущего слоя. Д ля получения доступа к error предыдущего слоя снова используется ссылочная методика. Вектор поправочных коэффи­ циентов 5 реализован в программе как контейнер errorBuf. Каждый слой содержит указатель error на первый элемент контейнера errorBuf предыдущего слоя.

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

Задача управления всеми слоями, создания, установления взаимо­ связи между ними возложена на класс NeroNet. При объявлении объек­ та данного класса указывается структура нейронной сети (количество слоев и количество нейронов в каждом слое). Структура нейронной

сети может быть описана как в файле,

так и в стандартном векто­

ре. Основываясь на данной структуре,

создаются экземпляры слоев

и связываются между собой. За это отвечает метод createLayers(). В классе NeroNet используется два указателя begin и end типа Layer*. После выполнения метода createLayers() begin указывает на первый (входной) слоя, а end на последний (выходной). Архитектура сети хранится в векторе arch.

Класс NeroNet имеет следующий интерфейс для взаимодействия с управляющим процессом:

Метод getWeight(), который возвращает ссылку на вектор ука­ зателей весовых коэффициентов. По средствам этого вектора можно производить установление новых весовых коэффициентов.

Метод getSduig(), позволяет получить ссылку на вектор указателей поправочных величин.

Методы getNu() и setNu(). Предназначены для получения текущего значения шага и его изменения.

Главными функциями нейронной сети является вычисление сум­

марного градиента, что

обеспечивает метод frontBack() — выполня­

ет прямой и обратный

проход для всех выборок. Иногда требуется

4,3. Реализация комбинированного алгоритма Для обучения НС

129

Рис. 4,4, Блок-схемы алгоритмов обратного распространения ошибки для клас­ са MidlLayer (левая) и класса StartLayer (правая)

5 Рыбак Л.А. Чичварин А.В. Ержуков В.В.

130 Гл. 4, Управление движением робота-станка на основе нейронных,,.

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

4.4. Применение НС для решения прямой задачи кинематики (ПЗК)

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

Количество тренировочных точек

10 нейронов

— -----

60 нейронов

— 10нейронов(2 слоя) — -----60 нейронов(2 слоя)

Рис. 4.5. Зависим ость ош ибки обучения от объема выборки