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

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) вычисляет евклидово расстояние между каждой строкой w i матрицы весов W и каждым столбцом p j матрицы входов P в соответствии
со следующим соотношением:

z ij = norm(w ip j '). (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) вычисляет отрицательное евклидово расстояние между каждой строкой w i матрицы весов W и каждым столбцом p j матрицы входов P в соответствии со следующим соотношением:

z ij = norm(w ip j '). (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) вычисляет расстояние в виде суммарного
координатного смещения между каждой строкой w i матрицы весов W и столбцом p j матрицы входов P в соответствии со следующим соотношением:

z ij = sum(abs(w ip j ')). (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'.

Алгоритм:

Расстояние связи d ij между двумя позициями векторов pos i и pos j из множества S векторов определяется соотношением

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: