Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

11.3. Синаптические функции

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

Функции взвешивания и расстояний

DOTPROD, DDOTPROD

Скалярное произведение

Блок SIMULINK:

Синтаксис:

Z = dotprod(W, P)

df = dotprod(‘deriv’)

dZ_dP = ddotprod('p',W,P,Z)

dZ_dW = ddotprod(‘w’,W,P,Z)

Описание:

Функция Z = dotprod(W, P)вычисляет матрицу взвешенных входов в виде произведенияW*Pмассива входовPразмера RQ и матрицы весовWразмера SR. Результатом является матрицаZразмера SQ.

Функция df = dotprod('deriv')возвращает имя М-функции, которая вычисляет производную скалярного произведения по одному из сомножителей.

Функции dZ_dP = ddotprod('p', W, P, Z)иdZ_dW = ddotprod('w', W, P, Z)имеют следующие входные и выходные аргументы:

W – матрица весов размера SR;

P – массив входов размера RQ;

Z – матрица размера SQ, где S – число нейронов в слое,Q– число векторов входа,R – число элементов каждого вектора входа;

dZ_dP – матрица производной dZ/dP размера SR;

dZ_dW – матрица производной dZ/dW размера RQ.

Примеры:

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W и вектор входа P:

W = rand(4,3)

P = rand(3,1); P'

Z = dotprod(W,P); Z'

W =

0.6068 0.4565 0.6154

0.4860 0.0185 0.7919

0.8913 0.8214 0.9218

0.7621 0.4447 0.7382

ans = 0.1763 0.4057 0.9355

ans = 0.8679 0.8340 1.3527 1.0053

Определим имя М-функции, которая вычисляет производную взвешенной функции в виде скалярного произведения:

df = dotprod('deriv')

df = ddotprod

Вычислим производные скалярного произведения по каждому аргументу:

dZ_dP = ddotprod('p',W,P,Z)

dZ_dW = ddotprod('w',W,P,Z)

dZ_dP =

0.6068 0.4565 0.6154

0.4860 0.0185 0.7919

0.8913 0.8214 0.9218

0.7621 0.4447 0.7382

dZ_dW =

0.1763

0.4057

0.9355

Нетрудно убедиться, что производная произведения матрицы весов на вектор входа z=W*P по аргументу P совпадает с матрицей весовW, а производная по аргументуW– с входным векторомp.

Применение функции:

Функция взвешивания dotprod используется по умолчанию при формировании нейронных сетей персептронаnewpи линейных слоевnewlin. Чтобы применить эту функцию для формирования других типов сетей необходимо установить значения свойствnet.inputWeight{i, j}.weightFcnиnet.layerWeight{i, j}.weightFcn равными 'dotprod'.

Алгоритм:

Производная скалярного произведения двух матриц Z=W*Pпо одной из них равна второй матрице, т. е.dZ/dP = W, dZ/dW = P.

Сопутствующие функции: SIM, DIST, NEGDIST, NORMPROD.

nORMPRod

Нормированное скалярное произведение

Синтаксис:

Z = normprod(W,P)

df = normprod('deriv')

Описание:

Функция взвешивания normprod отличается от функции dotprod тем, что она является нормированной функцией и не имеет производной.

Функция Z = normprod(W,P)вычисляет массив взвешенных входов в виде нормированного скалярного произведенияW*P/sum(P,1), гдеW– матрица весов размера SR,P– массив входов размера RQ. Результатом является массив значений взвешенных входовZразмера SQ.

Функция df = normprod('deriv')возвращает пустую строку ' ', так как производная для функцииnormprodне определена.

Пример:

Определим случайную весовую матрицу W и вектор входа P и рассчитаем соответствующий взвешенный вход Z:

W = rand(4,3)

P = rand(3,1); P'

Z = normprod(W,P); Z'

W =

0.0153 0.4660 0.2026

0.7468 0.4186 0.6721

0.4451 0.8462 0.8381

0.9318 0.5252 0.0196

ans = 0.6813 0.3795 0.8318

ans = 0.1880 0.6482 0.6983 0.4494

Применение функции:

Функция взвешивания normprod применяется в архитектуре обобщенных регрессионных сетей, формируемых с помощью М-функцииnewgrnn.

Чтобы применить функцию взвешивания normprod, следует установить значения для свойствnet.inputWeights{i, j}.weightFcnиnet.layerWeights{i, j}.weightFcnравными'normprod'.

Алгоритм:

Функция normprod возвращает скалярные произведения весовой матрицы на каждый вектор входа, деленные на сумму элементов каждого вектора, в виде следующей матрицы Z:

Z = W*P./sum(P, 1).

Сопутствующие функции: SIM, DOTPROD, NEGDIST, DIST.

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

DIST

Евклидово расстояние

Блок SIMULINK:

Синтаксис:

Z = dist(W,P)

df = dist('deriv')

D = dist(pos)

Описание:

Функция взвешивания Z = dist(W, P) вычисляет евклидово расстояние между каждой строкой wiматрицы весовWи каждым столбцом pj матрицы входовPв соответствии со следующим соотношением:

zij= norm(wipj').(11.1)

Функция Z = dist(W, P) вычисляет матрицу взвешенных входов для матрицы входов P размера RQ и матрицы весов W размера SR. Результатом является матрица Z размера SQ.

Функция df= dist('deriv') возвращает пустую строку, поскольку производная не определена.

Функция dist может быть использована как функция для вычисления расстояний между нейронами в слое.

Функция расстояния D = dist(pos) вычисляет расстояние между нейронами для сетей с топологией. Входной аргумент pos – это матрица координат расположения нейронов в N-мерном пространстве размера NS; выходной аргумент D – это матрица расстояний размера SS.

Примеры:

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 43 и вектор входа P размера 31:

W = rand(4,3);

P = rand(3,1);

Z = dist(W,P)

Z =

0.6791

0.3994

0.3234

0.5746

Результатом является вектор размера 41, вычисленный в соответствии с соотношением (11.1).

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

pos = rand(3,10);

D = dist(pos)

D =

Columns 1 through 7

0 0.5304 0.9195 0.9366 0.5776 1.0651 0.9003

0.5304 0 0.7033 0.4450 0.7648 1.1121 0.8339

0.9195 0.7033 0 0.5551 0.6438 0.7713 0.3219

0.9366 0.4450 0.5551 0 0.9521 1.1444 0.7971

0.5776 0.7648 0.6438 0.9521 0 0.9396 0.6349

1.0651 1.1121 0.7713 1.1444 0.9396 0 0.4624

0.9003 0.8339 0.3219 0.7971 0.6349 0.4624 0

1.1471 0.9753 0.4052 0.8125 0.9155 0.5243 0.2948

0.3750 0.2967 0.6520 0.6215 0.6276 0.8666 0.6631

1.0744 0.9119 0.4235 0.7844 0.8969 0.4576 0.2754

Columns 8 through 10

1.1471 0.3750 1.0744

0.9753 0.2967 0.9119

0.4052 0.6520 0.4235

0.8125 0.6215 0.7844

0.9155 0.6276 0.8969

0.5243 0.8666 0.4576

0.2948 0.6631 0.2754

0 0.8512 0.1166

0.8512 0 0.7709

0.1166 0.7709 0

В результате получаем симметричную матрицу взаимных расстояний между нейронами.

Применение функции:

Функция взвешивания dist используется при формировании вероятностных сетей newpnn и обобщенных регрессионных сетей newgrnn. Чтобы применить эту функцию взвешивания для формирования других типов сетей необходимо установить значения свойствnet.inputWeight{i, j}.weightFcnиnet.layerWeight{i, j}.weightFcn равными 'dist'.

Чтобы применить функцию расстояния dist для сетей с топологией, необходимо установить значение свойстваnet.layers{i}.distanceFcnравным'dist'.

Алгоритм:

Евклидово расстояние dмежду векторамиxиyвычисляется в системеMATLABследующим образом:

d = sqrt((x–y).^2).

Сопутствующие функции: SIM, DOTPROD, NEGDIST, NORMPROD, MANDIST, LINKDIST.

negdist

Отрицательное евклидово расстояние

Синтаксис:

Z = negdist(W, P)

df = negdist('deriv')

Описание:

Функция negdistприменяется в самоорганизующихся сетях как функция взвешивания.

Функция взвешивания Z = negdist(W, P) вычисляет отрицательное евклидово расстояние между каждой строкой wiматрицы весовWи каждым столбцом pj матрицы входовPв соответствии со следующим соотношением:

zij= norm(wipj').(11.2)

Функция Z = dist(W, P) вычисляет матрицу взвешенных входов для матрицы входов Pразмера RQ и матрицы весовWразмера SR. Результатом является матрицаZразмера SQ.

Функция df = dist('deriv') возвращает пустую строку, поскольку производная не определена.

Пример:

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 43 и вектор входа P размера 31:

W = rand(4,3);

P = rand(3,1);

Z = negdist(W,P)

Z =

–0.7558

–0.8090

–0.4755

–0.8113

Применение функции:

Функция взвешивания negdist используется при формировании самоорганизующихся сетей newc и newsom. Чтобы применить эту функцию взвешивания для других сетей, необходимо установить значения свойств net.inputWeight{i, j}.weightFcn и net.layerWeight{i, j}.weightFcn равными 'negdist'.

Алгоритм:

Функция negdist вычисляет взвешенный вход для векторовxиyв системеMATLABследующим образом:

z = –sqrt(sum(x – y).^2).

Сопутствующие функции: sim, dotprod, dist.

mandist

Расстояние суммарного координатного смещения

Синтаксис:

Z = mandist(W, P)

df = mandist('deriv')

D = mandist(pos)

Описание:

Функция взвешивания Z = mandist(W, P) вычисляет расстояние в виде суммарного координатного смещения между каждой строкой wiматрицы весовWи столбцом pj матрицы входовPв соответствии со следующим соотношением:

zij= sum(abs(wipj')).(11.3)

Функция Z = mandist(W, P) вычисляет матрицу взвешенных входов для матрицы входов P размера RQ и матрицы весов W размера SR. Результатом является матрица Z размера SQ.

Функция df = dist('deriv') возвращает пустую строку, поскольку производная не определена.

Функция mandist может быть использована как функция для вычисления расстояний между нейронами в слое.

Функция расстояния D = mandist(pos) вычисляет расстояние между нейронами для сетей с топологией. Входной аргумент pos – это матрица координат расположения нейронов вN-мерном пространстве размера NS; выходной аргумент D – это матрица расстояний размераSS.

Пример:

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 43 и вектор входа P размера 31:

W = rand(4,3);

P = rand(3,1);

Z = mandist(W,P)

Z =

0.8265

0.9830

1.0359

1.7712

Результатом является вектор размера 41, вычисленный в соответствии с соотношением (11.2).

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

pos = rand(3,10);

D = mandist(pos)

D =

Columns 1 through 7

0 0.8589 0.6427 1.2565 0.8813 0.5815 0.7340

0.8589 0 0.6227 0.9084 1.2433 1.4404 0.7770

0.6427 0.6227 0 0.8333 1.5239 1.1681 1.2451

1.2565 0.9084 0.8333 0 0.9730 1.0287 1.5443

0.8813 1.2433 1.5239 0.9730 0 0.7039 1.1153

0.5815 1.4404 1.1681 1.0287 0.7039 0 1.2512

0.7340 0.7770 1.2451 1.5443 1.1153 1.2512 0

0.8268 0.8910 0.9289 1.7622 1.7081 1.3523 1.1911

1.0852 0.9757 0.4425 1.0977 1.9665 1.6107 1.5981

0.7504 1.1124 1.3930 1.2194 0.7122 0.9397 0.4031

Columns 8 through 10

0.8268 1.0852 0.7504

0.8910 0.9757 1.1124

0.9289 0.4425 1.3930

1.7622 1.0977 1.2194

1.7081 1.9665 0.7122

1.3523 1.6107 0.9397

1.1911 1.5981 0.4031

0 0.8238 1.5772

0.8238 0 1.8356

1.5772 1.8356 0

Применение функции:

Функция суммарного координатного смещения используется в сетях с топологией, например в картах Кохонена newsom. Чтобы применить эту функцию для других сетей с топологией, необходимо установить значение свойства net.layerWeight{i,j}.distanceFcn равным 'mandist'.

Чтобы применить функцию взвешивания mandist, следует установить свойствоnet.inputWeight{i, j}.weightFcnравным'mandist'.

Алгоритм:

Сумммарное координатное смещение dмежду векторамиxиyвычисляется в системеMATLABследующим образом:

d = sum(abs(x–y)).

Сопутствующие функции: sim, dist, linkdist.

BOXDIST

Максимальное координатное смещение

Синтаксис:

d = boxdist(pos)

Описание:

Функция d = boxdist(pos) вычисляет расстояния максимального координатного смещения между нейронами слоя, если задан массив координат нейронов pos размера NS, гдеN– размерность пространства расположения нейронов. Выходом является массив расстояний размераSS.

Функция boxdistобычно используется в сетях с функцией топологииgridtop.

Пример:

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

pos = rand(3,10);

d = boxdist(pos)

d =

0 0.1614 0.6100 0.5123 0.4512 0.3767

0.1614 0 0.5282 0.3509 0.2898 0.2714

0.6100 0.5282 0 0.4374 0.4965 0.3608

0.5123 0.3509 0.4374 0 0.3044 0.1805

0.4512 0.2898 0.4965 0.3044 0 0.1358

0.3767 0.2714 0.3608 0.1805 0.1358 0

0.2785 0.1967 0.4536 0.4855 0.4244 0.3499

0.4603 0.3119 0.6149 0.5709 0.5097 0.4353

0.5502 0.4720 0.6900 0.3611 0.6655 0.5298

0.2442 0.3926 0.5860 0.4280 0.5862 0.4504

0.2785 0.4603 0.5502 0.2442

0.1967 0.3119 0.4720 0.3926

0.4536 0.6149 0.6900 0.5860

0.4855 0.5709 0.3611 0.4280

0.4244 0.5097 0.6655 0.5862

0.3499 0.4353 0.5298 0.4504

0 0.2623 0.5234 0.4422

0.2623 0 0.7839 0.7045

0.5234 0.7839 0 0.4659

0.4422 0.7045 0.4659 0

Применение функции:

Функция максимального координатного смещения используется в сетях с топологией, например в картах Кохонена newsom. Чтобы применить эту функцию для других сетей с топологией, необходимо установить значение свойстваnet.layerWeight{i,j}.distanceFcnравным 'boxdist'.

Алгоритм:

Максимальное координатное смещение dмежду векторамиxиyвычисляется в системеMATLABследующим образом:

d = max(abs(x–y)).

Сопутствующие функции: SIM, DIST, MANDIST, LINKDIST.

linkdist

Расстояния связи между нейронами слоя

Синтаксис:

d = linkdist(pos)

Описание:

Функция d = linkdist(pos) вычисляет расстояния связи между нейронами слоя, если задан массив координат нейронов pos размера NS, гдеN– размерность пространства расположения нейронов. Выходом является массив расстояний размераSS.

Пример:

Пусть задан массив случайных координат трехмерного пространства, в которых размещены 10 нейронов. Требуется вычислить массив расстояний связи между этими нейронами (рис. 11.41):

pos = rand(3,10);

Рис. 11.41

d = linkdist(pos)

d =

0 1 1 1 1 1 1 1 1 1

1 0 1 1 1 1 1 1 1 1

1 1 0 1 1 1 1 1 1 1

1 1 1 0 2 1 2 1 1 1

1 1 1 2 0 1 1 1 2 2

1 1 1 1 1 0 1 1 1 1

1 1 1 2 1 1 0 1 1 1

1 1 1 1 1 1 1 0 1 1

1 1 1 1 2 1 1 1 0 1

1 1 1 1 2 1 1 1 1 0

Применение функции:

Функция расстояния связи linkdistиспользуется для оценки топологии при формировании слоя Кохоненаnewcи карты Кохоненаnewsom.

Чтобы применить функцию расстояния связи linkdist, следует установить значение свойстваnet.layers{i}.distanceFcnравным'linkdist'.

Алгоритм:

Расстояние связи dij между двумя позициями векторовposi иposjиз множестваSвекторов определяется соотношением

Сопутствующие функции: sim, dist, mandist.