Рассмотрим многомерную функцию y = f (x), где вектор yимеет N0компонент, а вектор x— NIкомпонент. Самый простой способ формализации — использовать сеть с NI входами и N0 выходами.
Компоненты вектора xподаются на вход сети, y— снимаются на выходе. Сеть обучается на известных значениях функции f.
Нет строго определенной процедуры для выбора количества нейронов и количества слоев в сети. Чем больше количество нейронов и слоев, тем шире возможности сети, тем медленнее она обучается и работает и тем более нелинейной может быть зависимость вход-выход.
Количество нейронов и слоев связано:
1) со сложностью задачи;
2) с количеством данных для обучения;
3) с требуемым количеством входов и выходов сети;
4) с имеющимися ресурсами: памятью и быстродействием машины, на которой моделируется сеть;
Были попытки записать эмпирические формулы для числа слоев и нейронов, но применимость формул оказалась очень ограниченной.
Если в сети слишком мало нейронов или слоев:
1) сеть не обучится и ошибка при работе сети останется большой;
2) на выходе сети не будут передаваться резкие колебания аппроксимируемой функции y(x).
Превышение требуемого количества нейронов тоже мешает работе сети.
Если нейронов или слоев слишком много:
1) быстродействие будет низким, а памяти потребуется много — на фон-неймановских ЭВМ;
2) сеть переобучится: выходной вектор будет передавать незначительные и несущественные детали в изучаемой зависимости y(x), например, шум или ошибочные данные;
3) зависимость выхода от входа окажется резко нелинейной: выходной вектор будет существенно и непредсказуемо меняться при малом изменении входного вектора x;
4) сеть будет неспособна к обобщению: в области, где нет или мало известных точек функции y(x) выходной вектор будет случаен и непредсказуем, не будет адекватен решаемой задаче.
Данные, подаваемые на вход сети и снимаемые с выхода, должны быть правильно подготовлены.
Один из распространенных способов — масштабирование:
x=(x'− m) * c
где x'— исходный вектор,
x— масштабированный.
Вектор m— усредненное значение совокупности входных данных.
с— масштабный коэффициент.
Масштабирование необходимо, чтобы привести данные в допустимый диапазон. Если этого не сделать, то возможно несколько проблем:
1) нейроны входного слоя или окажутся в постоянном насыщении (|m| велик, дисперсия входных данных мала) или будут все время заторможены (|m| мал, дисперсия мала);
2) весовые коэффициенты примут очень большие или очень малые значения при обучении (в зависимости от дисперсии), и, как следствие, растянется процесс обучения и снизится точность.
Рассмотрим набор входных данных для сети с одним входом:
{x′ s} = {10 10,5 10,2 10,3 10,1 10, 4}
Если функция активации — гиперболический тангенс с множеством значений, то при весовых коэффициентах около единицы нейроны входного слоя окажутся в насыщении для всех x′ s. Применим масштабирование с
m =10,2 и c=4. Это даст значения в допустимом диапазоне (1; − 1).
Выходы сети масштабируются так же. Т.к. мы сами выбираем смысл выходного вектора при создании сети, то мы должны подготовить данные так, чтобы диапазон изменения выходных сигналов