7. Методы инициализации весов

advertisement
ЛАБОРАТОРНАЯ РАБОТА 2
МНОГОСЛОЙНЫЕ СИГМОИДАЛЬНЫЕ СЕТИ
1. Многослойный персептрон
В многослойном персептроне нейроны расположены в несколько слоев. Нейроны
первого слоя получают входные сигналы, преобразуют их
и через точки ветвления
передают нейронам второго слоя. Далее срабатывает второй слой и т.д.,
до k  го,
который выдает выходные сигналы для интерпретатора и пользователя. Если не оговорено
противное, то каждый выходной сигнал i  го слоя подается на вход всех нейронов
i  1  го. Число нейронов в каждом слое может быть любым и никак заранее не связано с
количеством нейронов в других слоях. Стандартный способ подачи входных сигналов: все
нейроны первого слоя получают каждый входной сигнал. Наибольшее распространение
получили трехслойные сети, в которых каждый слой имеет свое наименование: первый входной, второй - скрытый, третий - выходной.
Рассмотрим двухслойную сеть (рис.1). Веса нейронов первого (входного слоя)
пометим верхним индексом (1), а выходного слоя – верхним индексом (2). Выходные
сигналы первого слоя обозначим v j ( j  1, 2,..., K ), а выходного слоя - y j ,( j  1, 2,..., M ) .
Будем считать, что функция активации нейронов задана в сигмоидальной униполярной
или биполярной форме. Для упрощения описания будем использовать расширенное
обозначение входного вектора сети в виде x  [ x0 , x1 ,..., x N ]T , где x0 =1 соответствует
порогу. С вектором x связаны два выходных вектора сети: вектор фактических выходных
сигналов y  [ y0 , y1 ,..., y M ]T и вектор ожидаемых выходных сигналов d  [d 0 , d1 ,..., d M ]T .
Цель обучения состоит в подборе таких значений весов wij(1) и wij(2) для всех слоев
сети, чтобы при заданном входном векторе x получить на выходе значения сигналов yi ,
которые с требуемой точностью будут совпадать с ожидаемыми значениями di для
i  1,2,..., M . Выходной сигнал i -го нейрона входного слоя описывается функцией
 N

v j  f   wij(1) x j  .
 j 0

(1)
В выходном слое k -й нейрон вырабатывает выходной сигнал


K
K
N

yk  f  wki(2)vi  f   wki(2) f   wij(1) x j   .
i 0
 j 0

 i 0
(2)
Из формулы следует, что на значение выходного сигнала влияют веса обоих слоев,
тогда как сигналы, вырабатываемые во входном слое, не зависят от весов выходного слоя.
1
1
w10(2)
v1
w10(1)
w11(1)
w12(1)
x1
(1)
w21
x2
y1
w11(2)
(2)
w21
(2)
w20
(1)
20
w
v2
w12(2)
(1)
w22
y2
(2)
w22
Рис.1. Пример двухслойной нейронной сети
2. Алгоритм обратного распространения ошибки
Основу алгоритма обратного распространения ошибки составляет целевая
функция, формулируемая, как правило, в виде квадратичной суммы разностей между
фактическими и ожидаемыми значениями выходных сигналов. Для обучающей выборки,
состоящей из p примеров, целевая функция имеет вид
E ( w) 
2
1 p M ( j)
( j)
y

d
  k
k  .
2 j 1 k 1
(3)
Минимизация целевой функции достигается уточнением вектора весов (обучением)
по формуле
w( k  1)  w( k )  w ,
(4)
где
w   s ( w ) ,
(5)
 - коэффициент обучения, а s ( w ) - направление в пространстве весов w .
Выбор этого направления обычно основан на определении градиента целевой функции
относительно весов всех слоев сети. Для весов выходного слоя эта задача имеет
очевидное
решение.
Для
других
слоев
используется
алгоритм
обратного
распространения ошибки. Рассмотрим этот алгоритм на примере двухслойной сети. В
этом случае при p  1 целевая функция определяется выражением


2
1 M  K (2)
1M

E ( w)   f  wki vi  d k    f

2 k 1  i 0
2 k 1 
2

 K (2)  N (1)  
wki f   wij x j    d k  .
 i
 j 0

 0

(6)
Компоненты градиента рассчитываются дифференцированием зависимости (6).
В первую очередь определяются веса нейронов выходного слоя. Для выходных весов
получаем:
E
df (ui(2) )

(
y

d
)
vj ,
i
i
wij(2)
dui(2)
где
K
ui(2)   wij(2) v j . Если ввести обозначение
j 0
 i(2)  ( yi  d i )
df (ui(2) )
, то
dui(2)
соответствующую компоненту градиента относительно весов выходного слоя можно
представить в виде
E
 i(2)v j .
wij(2)
(7)
Компоненты градиента относительно нейронов входного слоя определяются так
же, но описываются более сложной зависимостью, следующей из существования
функции, заданной в виде
M
E
dy dvi
.
  ( yk  d k ) k
(1)
k 1
wij
dvi dwij(1)
Отсюда получаем
M
E
df (uk(2) ) (2) df (ui(1) )

(
y

d
)
wki
xj .

k
k
wij(1) k 1
duk(2)
dui(1)
Если ввести обозначение
M
 i(1)   ( yk  d k )
k 1
df (uk(2) ) (2) df (ui(1) )
wki
,
duk(2)
dui(1)
то получим выражение, определяющее компоненты градиента относительно
весов нейронов входного слоя в виде
E
 i(1) x j .
wij(1)
(8)
В обоих случаях (формулы (7) и (8)) описания градиента имеют аналогичную
структуру и представляются произведением двух сигналов: первый соответствует
начальному узлу данной взвешенной связи, а второй – величине погрешности,
перенесенной на узел, с которым эта связь установлена. Определение вектора
градиента важно для последующего процесса уточнения весов. В классическом
алгоритме обратного распространения ошибки вектор s ( w ) в выражении (5) задает
направление антиградиента, поэтому
w  E ( w) .
(9)
В соответствии с алгоритмом обратного распространения ошибки в каждом
цикле обучения выделяются следующие этапы:
1. Анализ нейронной сети в прямом направлении передачи информации при
генерации входных сигналов, составляющих очередной вектор x . В результате такого
анализа рассчитываются значения выходных сигналов нейронов скрытых (в том числе
входного) слоев и выходного слоя, а так же соответствующие производные
f (ui(1) ) f (ui(2) )
f (ui( m ) )
,
,...,
функций активации каждого слоя ( m - количество слоев
ui(1)
ui(2)
ui( m )
сети).
2. Создание сети обратного распространения ошибок путем изменения
направлений передачи сигналов, замена функций активации их производными и
подача на бывший выход (а в настоящий момент – вход) сети сигнала в виде разности
между фактическим и ожидаемым значением. Для определенной таким образом сети
необходимо рассчитать значения требуемых обратных разностей.
3. Уточнение весов (обучение сети) производится по предложенным выше
формулам для оригинальной сети и для сети обратного распространения ошибки.
4. Описанный процесс следует повторить для всех обучающих примеров
задачника, продолжая его вплоть до выполнения условия остановки алгоритма.
Действие алгоритма завершается в момент, когда норма градиента упадет ниже
априори заданного значения  , характеризующего точность процесса обучения.
1
1
w10(2)
(1)
10
w
x1
x2
w11(1)
w12(1)
(1)
w21
(1)
w22
(1)
20
w
f (u )
u
(1)
1
(1)
1
v1
w10(1)
(2)
11
w
f (u1(2) )
u1(2)
y1  d1
(2)
w21
(2)
w20
v2
w) 10(1)
f (u2(1)
u2(1)
w12(2)
(2)
22
w
f (u2(2) )
u2(2)
Рис.2. Сеть обратного распространения ошибки
y2  d2
Руководствуясь рис.2, можно легко определить все компоненты градиента
целевой функции, т.е. все частные производные функции E по весам сети. Для этого,
двигаясь от входов сети (бывших выходов), нужно перемножить все встречающиеся на
пути величины (кроме весов wij( k ) , для которых рассчитывается частная производная
E
). Кроме того, там, где дуги сходятся к одной вершине, нужно выполнить
wij( k )
сложение произведений, полученных на этих дугах.
Так, например, чтобы посчитать производную
величины y2  d 2 ,
E
, нужно перемножить
w12(2)
E
f (u2(2) )
, v1 , а для вычисления производной
нужно посчитать
(1)
(2)
w21
u2
произведения  1  ( y1  d1 )
f (u1(2) ) (2)
f (u2(2) ) (2)
и
w


(
y

d
)
w22 , а затем сложить
12
2
2
2
u1(2)
u2(2)
f (u2(1) )
эти произведения и результат умножить на
и x1 . Таким образом, получим
u2(1)
E
f (u2(1) )

(



)
x1 
1
2
w12(2)
u2(1)

f (u1(2) ) (2)
f (u2(2) ) (2)  f (u2(1) )
 ( y1  d1 )
w12  ( y2  d 2 )
w22 
x1 
(1)
u1(2)
u2(2)

 u2
2
f (uk(2) ) (2) f (u2(1) )
 x1  ( yk  d k )
wk 2
k 1
uk(2)
u2(1)
3. Алгоритм наискорейшего спуска
Если при разложении целевой функции E ( w) в ряд Тейлора ограничиться
линейным приближением, то мы получим алгоритм наискорейшего спуска. Условию
уменьшения значения целевой функции отвечает выбор направления
sk   g ( wk ) ,
T
 E E
E 
,
,...,
где g ( w)  E  
- вектор градиента.
wn 
 w1 w2
Повысить
эффективность
алгоритма
наискорейшего
спуска
можно
путем
модификации выражения, определяющего направление. Хорошие результаты дает метод
обучения с моментом. При этом подходе уточнение весов сети
wk 1  wk  wk
производится с учетом модифицированной формулы определения значения wk
wk  k sk   ( wk  wk 1 ) ,
где  - это коэффициент момента, принимающий значения в интервале [0,1] .
4. Алгоритм сопряженных градиентов
В этом методе направление sk поиска минимума целевой функции выбирается
таким образом, чтобы оно было ортогональным и сопряженным ко всем предыдущим
направлениям s0 , s1 ,..., sk 1 . Вектор, удовлетворяющий этим условиям, имеет вид
sk   gk  k 1sk 1 ,
где gk  g ( wk ) обозначает вектор градиента, а коэффициент  k 1 оценивается по
формуле
 k 1 
gkT ( gk  gk 1 )
.
gkT1 gk 1
Ввиду накопления
погрешностей округления практическое применение метода
сопряженных градиентов связано с постепенной утратой свойства ортогональности между
векторами направлений минимизации. Поэтому после выполнения n итераций (значение
n является функцией числа переменных) производится рестарт процедуры, на первом
шаге которой направление минимизации из точки полученного решения выбирается по
алгоритму наискорейшего спуска.
Метод сопряженных градиентов широко применяется при большом количестве
переменных. Благодаря невысоким требованиям к памяти и относительно низкой
вычислительной сложности этот метод позволяет успешно решать очень серьезные
оптимизационные задачи.
5. Партан-методы
Итерационный партан-метод ( k -партан) строится следующим образом. Из
начальной точки w0 делается k шагов наискорейшего спуска. В результате получаем точку
wk . После этого выполняем минимизацию из точки w0 по направлению sk  wk  w0 .
Затем процесс повторяется.
Модифицированный партан-метод строится так. Из w0 делается два шага
наискорейшего спуска. Получаем
w1 и w2 . Далее выполняем минимизацию по
направлению w2  w0 . Получаем w3 . Делаем наискорейший спуск из w3 . Получаем w4 .
Выполняем минимизацию по направлению w4  w2 , получаем w5 и т.д.. Четные w2k
получаем наискорейшим спуском из w2 k 1 , нечетные w2 k 1 минимизацией из w2 k 2 в
направлении w2 k  w2 k 2 .
6. Подбор коэффициента обучения
В простейшем случае коэффициент обучения  фиксируется на весь период
оптимизации. Этот способ практически используется только совместно с методом
наискорейшего спуска. Величина  подбирается раздельно для каждого слоя сети по
формуле
1
,
 ni 
  min 
где ni обозначает количество входов i -го нейрона в слое.
Более эффективный метод основан на адаптивном подборе коэффициента  с
учетом фактической динамики величины целевой функции. Стратегия изменения
значения  определяется путем сравнения суммарной погрешности  на i -й итерации с ее
предыдущим значением, причем  рассчитывается по формуле
    yi  d i  .
M
2
j 1
Для ускорения процесса обучения следует стремиться к непрерывному увеличению
 при одновременном контроле прироста погрешности  по сравнению с ее значением на
предыдущем шаге. Незначительный рост погрешности считается допустимым.
Если погрешности на  i  1 -й и i -й итерациях обозначить соответственно  i 1 и  i ,
а коэффициенты обучения на этих же итерациях - i 1 и i , то значение i 1 следует
рассчитывать по формуле
i 1 
i d , если  i  k w i 1
i i , если  i  k w i 1
где k w - коэффициент допустимого прироста погрешности, d - коэффициент
уменьшения  ,  i - коэффициент увеличения  . В программе MATLAB указанные
коэффициенты имеют следующие значения: kw  1.41, d  0.7, i  1.05 .
Наиболее эффективный, хотя и наиболее сложный, метод подбора коэффициентов
обучения
связан с направленной минимизацией целевой функции в выбранном
направлении sk . Необходимо так подобрать значение  k , чтобы новое решение
wk 1  wk  k sk соответствовало минимуму целевой функции в данном направлении sk .
Поиск минимума основан на полиномиальной аппроксимации целевой функции.
Выберем для аппроксимации многочлен второго порядка
E ( w)  P2 ( )  a2 2  a1  a0 ,
где a2 , a1 и a0 - коэффициенты, определяемые в цикле оптимизации. Для расчета
этих коэффициентов используем три произвольные точки
w1 , w2 , w3 , лежащие в
направлении sk , т.е.
w1  w  1sk ,
w2  w  2 sk ,
w3  w  3sk .
Соответствующие этим точкам значения целевой функции E ( w) обозначим как
P2 (1 )  E1  E( w1 ) ,
P2 (2 )  E2  E( w2 ) ,
P2 (3 )  E3  E ( w3 ) .
Коэффициенты a2 , a1 и a0 рассчитываются в соответствии с решением системы
уравнений (). Для определения минимума многочлена
P2 ( )
его производная
a
dP2
 2a2  a1 приравнивается к нулю, что позволяет получить min  1 . После
2a2
d
подстановки выражений для E1 , E2 , E3 в формулу для min получаем

min
 2 
(2  1 )2 ( E2  E3 )  (2  3 ) 2 ( E2  E1 )
.
2(2  1 ) ( E2  E3 )  (2  3 ) ( E2  E1 )
7. Методы инициализации весов
Обучение нейронных сетей представляет собой трудоемкий процесс, далеко не
всегда дающий ожидаемые результаты. Проблемы возникают из-за нелинейных функций
активации, образующих многочисленные локальные минимумы, к которым может
сводиться процесс обучения. Применение методов глобальной оптимизации уменьшает
вероятность остановки процесса обучения в точке локального минимума, однако платой
за это становится резкое увеличение трудоемкости и длительности обучения. Для
правильного подбора управляющих параметров требуется большой опыт.
На результаты обучения огромное влияние оказывает подбор начальных значений
весов сети. Выбор начальных значений, достаточно близких к оптимальным, значительно
ускоряет процесс обучения. К сожалению, не существует универсального метода подбора
весов, который бы гарантировал нахождение наилучшей начальной точки для любой
решаемой задачи.
Неправильный выбор диапазона случайных значений весов может вызвать
слишком
раннее
продолжающееся
насыщение
обучение,
нейронов,
в
результате
среднеквадратичная
которого,
погрешность
несмотря
будет
на
оставаться
практически постоянной. Явления такого типа означают попадание в седловую зону
целевой функции вследствие слишком больших начальных значений весов. При этом
взвешенная сумма входных сигналов нейрона может иметь значение, соответствующее
глубокому насыщению сигмоидальной функции активации. При этом поляризация
насыщения обратна ожидаемой. Значение возвратного сигнала, генерируемое в методе
обратного распространения, пропорционально величине производной от функции
активации
f
, в точке насыщения близко нулю. Поэтому изменения значений весов,
x
выводящие нейрон из состояния насыщения, происходит очень медленно. Процесс
обучения надолго застревает в седловой зоне. Нейрон, остающийся в состоянии
насыщения, не участвует в преобразовании данных, сокращая таким образом эффективное
количество нейронов в сети. В итоге процесс обучения чрезвычайно замедляется, поэтому
состояние насыщения отдельных нейронов может длиться практически непрерывно
вплоть до исчерпания лимита итераций.
Удаление стартовой точки активации нейронов от зоны насыщения достигается
путем ограничения диапазона случайных значений. Почти все оценки нижней и верхней
границ диапазона допустимых значений лежат в интервале (0,1). В одной из недавних
работ предложено равномерное распределение весов, нормализованное для каждого
нейрона по амплитуде
2
, где nin означает количество входов нейрона. Веса порогов
nin
для нейронов скрытых слоев должны принимать случайные значения из интервала
 nin nin 
,

 , а для выходных нейронов - нулевые значения.
2 
 2
8. ВАРИАНТЫ ЗАДАНИЙ
1. Построить двухслойную сеть для классификации чисел от 0 до 9. Каждое
число представляется матрицей пикселей размером 9  7 . Сеть должна содержать 6
нейронов в первом слое и 9 нейронов во втором слое. Выходы второго слоя образуют
двоичный вектор, причем числу 0 на входе должен соответствовать нулевой выходной
вектор, а числу i  0 должен соответствовать выходной вектор с единственной
ненулевой i  й компонентой, i  1,2,...,9 . Считать выход нейрона второго слоя
равным 1, если он больше, чем 0.9, и равным 0, если он меньше, чем 0.1.
Протестировать сеть на множестве зашумленных чисел.
Решить задачу алгоритмом наискорейшего спуска.
2. Обучить двухслойную сеть распознаванию символов A, B, C, D. Для
обучения взять символы из трех разных шрифтов. Для тестирования использовать
четвертый тип шрифта. Символы строить на сетке 16  16 пикселей. Сеть должна
содержать 8 нейронов в первом слое и 4 во втором.
Решить задачу алгоритмом наискорейшего спуска.
3. Решить задачу 1 методом обучения с моментом.
4. Решить задачу 2 методом обучения с моментом.
5. Решить задачу 1 итерационным партан-методом .
6. Решить задачу 2 итерационным партан-методом.
7. Решить задачу 1 модифицированным партан-методом .
8. Решить задачу 2 модифицированным партан-методом.
9. Решить задачу 1 методом сопряженных градиентов.
10. Решить задачу 2 методом сопряженных градиентов.
Download