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

Переобучение

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

Рассмотрим нейронную сеть типа 1–30–1 с одним входом, 30 скрытыми нейронами и одним выходом, которую необходимо обучить аппроксимировать функцию синуса, если заданы ее приближенные значения, которые получены как сумма значений синуса и случайных величин, распределенных по нормальному закону:

net = newff([–1 1],[30,1],{'tansig','purelin'},'trainbfg');

net.trainParam.epochs = 300;

net.trainParam.show = 50;

net.trainParam.goal = 1e–5;

p = [–1:0.05:1];

t = sin(2*pi*p)+0.1*randn(size(p)); % Возмущенные значения функции

t1 = sin(2*pi*p); % Обучающая последовательность

[net,tr] = train(net,p,t); % Рис.3.19

На рис. 3.19 приведен график изменения ошибки обучения в зависимости от числа циклов обучения.

Рис. 3.19

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

an = sim(net,p); % Значения аппроксимирующей функции

plot(p,t,'+',p,an,'–',p,t1,':') % Рис.3.20

Рис. 3.20

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

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

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

Метод регуляризации

Первый подход связан с использованием метода регуляризации, предложенного в 1963 г. российским математиком А. Н. Тихоновым [50]. Суть этого метода заключаетсяв том, чтобы видоизменить функционал качества таким образом, чтобы он всегда имел ми­ни­мум и положение этого минимума непрерывно зависело от параметра регуляризации.

Модификация функционала качества.Типичный функционал качества, который используется при обучении нейронных сетей с прямой передачей, – это функционал средней суммы квадратов ошибки обучения

. (3.33)

Если модифицировать функционал добавлением слагаемого вида

, (3.34)

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

Введем параметр регуляризации  и построим следующий регуляризирующий функционал:

(3.35)

Рассмотрим нейронную сеть типа 1–5–1 с одним входом, пятью скрытыми нейронами и одним выходом. Эта сеть использует те же типы нейронов, что и предыдущая сеть, но количество скрытых нейронов в 6 раз меньше, предельное количество циклов обучения сокращено до 100, а параметр регуляризации равен 0.9998.

net = newff([–1 1],[5,1],{'tansig','purelin'},'trainbfg');

net.trainParam.epochs = 100;

net.trainParam.show = 50;

net.trainParam.goal = 1e–5;

net.performFcn = 'msereg';

net.performParam.ratio = 0.9998;

p = [–1:0.05:1];

t = sin(2*pi*p)+0.1*randn(size(p)); % Возмущенные значения функции

t1 = sin(2*pi*p); % Обучающая последовательность

[net,tr] = train(net,p,t); % Рис.3.21,а

an = sim(net,p); % Значения аппроксимирующей функции

plot(p,t,'+',p,an,'–',p,t1,':') % Рис.3.21,б

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

а

б

Рис. 3.21

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

Автоматическая регуляризация.Автоматический выбор параметра регуляризации может быть реализован на основе правила Байеса. Этот подход был предложен Д. Мак-Кейем (D.MacKay) [27] и состоит в том, что веса и смещения сети рассматриваются как случайные величины с известным законом распределения. Параметр регуляризации связан с дисперсией этого распределения и может быть оценен с использованием статистических методов. Детальное описание процедуры регуляризации с использованием правила Байеса и алгоритма Левенберга – Марквардта можно найти в работе [11]. Соответствующая процедура реализована в виде М-функцииtrainbr.

Вновь обратимся к нейронной сети типа 1–20–1, предназначенной для решения задачи аппроксимации функции синуса.

net = newff([–1 1],[20,1],{'tansig','purelin'},'trainbr');

Функция trainbr характеризуется следующими параметрами, заданными по умолчанию:

net.trainParam

ans =

epochs: 100

show: 25

goal: 0

time: Inf

min_grad: 1e–010

max_fail: 5

mem_reduc: 1

mu: 0.005

mu_dec: 0.1

mu_inc: 10

mu_max: 1e+010

Этот список соответствует списку параметров М-функции trainlm.

Установим следующие значения этих параметров:

net = newff([–1 1],[20,1],{'tansig','purelin'},'trainbr');

net.trainParam.epochs = 50;

net.trainParam.show = 10;

randn('seed',192736547);

p = [–1:.05:1];

t = sin(2*pi*p)+0.1*randn(size(p));

net = init(net);

net = train(net,p,t); % Рис.3.22

Рис. 3.22

На рис. 3.22 показаны изменения суммы квадратов ошибок и весов, а также оптимальное количество настраиваемых параметров нейронной сети. В данном случае после обучения используется приблизительно 18 – из общего числа 61 – параметров сети типа 1–20–1.

Построим графики исследуемых функций:

an = sim(net,p); % Значения аппроксимирующей функции

t1 = sin(2*pi*p); % Значения аппроксимируемой функции

plot(p,t,'+',p,an,'–',p,t1,':') % Рис. 3.23

Рис. 3.23 иллюстрирует реакцию построенной нейронной сети при решении задачи аппроксимации. В отличие от рис. 3.19, на котором видно, что в сети существует переобучение, здесь мы видим, что реакция сети близка к основной функции синуса. Следовательно, сеть хорошо приспособлена к новым входам. Можно попробовать реализовать более мощную исходную сеть, но при этом в реакции сети никогда не будет проявляться эффект переобучения. Таким образом, процедура обучения trainbrпредставляет собой некоторую регулярную процедуру для определения оптимального числа настраиваемых параметров и, как следствие, оптимального размера сети.

Рис. 3.23