MyKod Информатика Лекции Нейронные сети. Часть 1. Лекции

Авторизация







Нейронные сети. Часть 1. Лекции
21.09.2009 15:42

 Нейронные сети. Часть 1. Лекции

С34. Единичная функция активации с жестким ограничением hardlim.

Эта функция описывается соотношением

a = hardlim(n) = 1(n)

и равна 0, если n < 0,

и равна 1, если n ³ 0.

Построим график этой функции в диапазоне значений входа от -5 до + 5:

n = -5:0.1:5;

plot(n,hardlim(n),'b+:');  

C34. Линейная функция активации purelin.

Эта функция описывается соотношением

a = purelin(n) = n.

Построим график этой функции в диапазоне значений входа от -5 до + 5:

n=-5:0.1:5;

plot(n,purelin(n),'b+:'); 

C34. Логистическая функция активации logsig.

Эта функция описывается соотношением

a = logsig(n) = 1/(1 + exp(-n)).

Она принадлежит к классу сигмоидальных функций, и ее аргумент может принимать любое значение в диапазоне от -¥ до +¥, а выход изменяется в диапазоне от 0 до 1. Благодаря свойству дифференцируемости, эта функция часто используется в сетях с обучением на основе метода обратного распространения ошибки.

Построим график этой функции в диапазоне значений входа от -5 до + 5:

n=-5:0.1:5;

plot(n,logsig(n),'b+:'); 

C42. Формирование архитектуры нейронной сети.

Следующий оператор создает сеть с прямой передачей сигнала

net = newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');

gensim(net)  

Эта сеть использует один вектор входа с двумя элементами, имеющими допустимые границы значений [-1 2] и [0 5];

- имеет 2 слоя с 3 нейронами в первом слое и 1 нейроном во втором слое;

- используемые функции активации: tansig - в первом слое, purelin – во втором слое;

-          используемая функция обучения traingd.

C42. Инициализация нейронной сети.

После того как сформирована архитектура сети, должны быть заданы начальные значения весов и смещений, или иными словами, сеть должна быть инициализирована. Такая процедура выполняется с помощью метода init для объектов класса network. Оператор вызова этого метода имеет вид

net = init(net);  

Если мы хотим заново инициализировать веса и смещения в первом слое, используя функцию rands, то следует ввести следующую последовательность операторов:

net.layers{1}.initFcn = 'initwb';

net.inputWeights{1,1}.initFcn = 'rands';

net.biases{1,1}.initFcn = 'rands';

net.biases{2,1}.initFcn = 'rands';

net = init(net);

C43. Моделирование сети.

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

Рассмотрим однослойную сеть с двухэлементным вектором входа и линейной функцией активации. Для задания такой сети предназначена М-функция newlin, которая требует указать минимальное и максимальное значения для каждого из элементов входа; в данном случае они равны –1 и 1, соответственно, а также количество слоев, в данном случае 1.

Формирование однослойной линейной сети net с двухэлементным входным сигналом со значениями от -1 до 1:

net = newlin([-1 1;-1 1],1);  

Определим весовую матрицу и смещение, равными W = [1 2], b = 0, и зададим эти значения, используя описание структуры сети

net.IW{1,1} = [1 2];

net.b{1} = 0;  

Предположим, что на сеть подается следующая последовательность из четырех векторов входа

                                                                                                                                                                                  

Поскольку сеть статическая, можно перегруппировать эту последовательность в следующий числовой массив

P = [-1 0 0 1; 0 -1 1 -1];  

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

A = sim(net,P)  

A =

    -1    -2     2    -1  

Результат следует интерпретировать следующим образом. На вход сети подается последовательность из 4 входных сигналов, и сеть генерирует вектор выхода из 4 элементов.

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

Создание однослойной линейной сети с линией задержки [0 1]:

net = newlin([-1 1],1,[0 1]);  

Зададим следующую матрицу весов W=[1 2] и нулевое смещение:

net.IW{1,1} = [1 2];

net.biasConnect = 0;  

Предположим, что входная последовательность имеет вид {-1, -1/2, 1/2, 1} и зададим ее в виде массива ячеек

P = {-1 -1/2 1/2 1};  

Теперь можно моделировать сеть, используя метод sim:

A = sim(net,P)  

A =

    [-1]    [-2.5000]    [-0.5000]    [2]  

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

P = [-1 -1/2 1/2 1];  

После моделирования получаем

A = sim(net,P)  

A =

   -1.0000   -0.5000    0.5000    1.0000  

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

.

 

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

 

Вход P в этом случае должен быть массивом ячеек, каждая из которых содержит два элемента по числу последовательностей

P = {[-1,1],[-1/2,1/2],[1/2,-1/2],[1,-1]};

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

A = sim(net,P); cat(1, A{:})  

ans =

   -1.0000    1.0000

   -2.5000    2.5000

   -0.5000    0.5000

    2.0000   -2.0000  

Обновлено 21.09.2009 15:49