• Обучение нейронных сетей. Алгоритм обратного распространения ошибок

    В главе мы ознакомились с такими понятиями, как искусственный интеллект, машинное обучение и искусственные нейронные сети.

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

    Упрощение

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

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

    Биологическая структура → схема

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

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

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

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

    Электрические сигналы → числа

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

    Электрический сигнал всегда будет электрическим сигналом. Концептуально ничего не изменяется. Но что же тогда меняется? Меняется величина этого электрического сигнала (сильнее/слабее). А любую величину всегда можно выразить числом (больше/меньше).

    В нашей модели искусственной нейронной сети нам совершенно не нужно реализовывать поведение электрического сигнала, так как от его реализации все равно ничего зависеть не будет.

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

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

    Синапсы → веса связей

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

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

    Это ключевой момент в концепции искусственных нейронных сетей, я объясню его подробнее. Посмотрите на картинку ниже. Теперь каждой черной стрелке (связи) на этой картинке соответствует некоторое число ​\(w_i \) ​ (вес связи). И когда сигнал проходит по этой связи, его величина умножается на вес этой связи.

    На приведенном выше рисунке вес стоит не у каждой связи лишь потому, что там нет места для обозначений. В реальности у каждой ​\(i \) ​-ой связи свой собственный ​\(w_i \) ​-ый вес.

    Искусственный нейрон

    Теперь мы переходим к рассмотрению внутренней структуры искусственного нейрона и того, как он преобразует поступающий на его входы сигнал.

    На рисунке ниже представлена полная модель искусственного нейрона.

    Не пугайтесь, ничего сложного здесь нет. Давайте рассмотрим все подробно слева направо.

    Входы, веса и сумматор

    У каждого нейрона, в том числе и у искусственного, должны быть какие-то входы, через которые он принимает сигнал. Мы уже вводили понятие весов, на которые умножаются сигналы, проходящие по связи. На картинке выше веса изображены кружками.

    Поступившие на входы сигналы умножаются на свои веса. Сигнал первого входа ​\(x_1 \) ​ умножается на соответствующий этому входу вес ​\(w_1 \) ​. В итоге получаем ​\(x_1w_1 \) ​. И так до ​\(n \) ​-ого входа. В итоге на последнем входе получаем ​\(x_nw_n \) ​.

    Теперь все произведения передаются в сумматор. Уже исходя из его названия можно понять, что он делает. Он просто суммирует все входные сигналы, умноженные на соответствующие веса:

    \[ x_1w_1+x_2w_2+\cdots+x_nw_n = \sum\limits^n_{i=1}x_iw_i \]

    Математическая справка

    Сигма – Википедия

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

    Рассмотрим простейший вариант записи:

    \[ \sum\limits^5_{i=1}i=1+2+3+4+5 \]

    Таким образом снизу сигмы мы присваиваем переменной-счетчику ​\(i \) ​ стартовое значение, которое будет увеличиваться, пока не дойдет до верхней границы (в примере выше это 5).

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

    Пусть у нас есть ​\(n \) магазинов. У каждого магазина есть свой номер: от 1 до ​\(n \) ​. Каждый магазин приносит прибыль. Возьмем какой-то (неважно, какой) ​\(i \) ​-ый магазин. Прибыль от него равна ​\(p_i \) ​.

    \[ P = p_1+p_2+\cdots+p_i+\cdots+p_n \]

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

    \[ P=\sum\limits^n_{i=1}p_i \]

    Словами: «Просуммируй прибыли всех магазинов, начиная с первого и заканчивая ​\(n \) ​-ым». В виде формулы это гораздо проще, удобнее и красивее.

    Результатом работы сумматора является число, называемое взвешенной суммой.

    Взвешенная сумма (Weighted sum ) (​\(net \) ​) - сумма входных сигналов, умноженных на соответствующие им веса.

    \[ net=\sum\limits^n_{i=1}x_iw_i \]

    Роль сумматора очевидна – он агрегирует все входные сигналы (которых может быть много) в какое-то одно число – взвешенную сумму, которая характеризует поступивший на нейрон сигнал в целом. Еще взвешенную сумму можно представить как степень общего возбуждения нейрона.

    Пример

    Для понимания роли последнего компонента искусственного нейрона – функции активации – я приведу аналогию.

    Давайте рассмотрим один искусственный нейрон. Его задача – решить, ехать ли отдыхать на море. Для этого на его входы мы подаем различные данные. Пусть у нашего нейрона будет 4 входа:

    1. Стоимость поездки
    2. Какая на море погода
    3. Текущая обстановка с работой
    4. Будет ли на пляже закусочная

    Все эти параметры будем характеризовать 0 или 1. Соответственно, если погода на море хорошая, то на этот вход подаем 1. И так со всеми остальными параметрами.

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

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

    Пусть на входы нашего нейрона мы подаем следующие сигналы:

    Умножаем веса входов на сигналы соответствующих входов:

    Взвешенная сумма для такого набора входных сигналов равна 6:

    \[ net=\sum\limits^4_{i=1}x_iw_i = 5 + 0 + 0 + 1 =6 \]

    Вот на сцену выходит функция активации.

    Функция активации

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

    Она преобразует взвешенную сумму в какое-то число, которое и является выходом нейрона (выход нейрона обозначим переменной ​\(out \) ​).

    Для разных типов искусственных нейронов используют самые разные функции активации. В общем случае их обозначают символом ​\(\phi(net) \) ​. Указание взвешенного сигнала в скобках означает, что функция активации принимает взвешенную сумму как параметр.

    Функция активации (Activation function )(​\(\phi(net) \) ​) - функция, принимающая взвешенную сумму как аргумент. Значение этой функции и является выходом нейрона (​\(out \) ​).

    Функция единичного скачка

    Самый простой вид функции активации. Выход нейрона может быть равен только 0 или 1. Если взвешенная сумма больше определенного порога ​\(b \) ​, то выход нейрона равен 1. Если ниже, то 0.

    Как ее можно использовать? Предположим, что мы поедем на море только тогда, когда взвешенная сумма больше или равна 5. Значит наш порог равен 5:

    В нашем примере взвешенная сумма равнялась 6, а значит выходной сигнал нашего нейрона равен 1. Итак, мы едем на море.

    Однако если бы погода на море была бы плохой, а также поездка была бы очень дорогой, но имелась бы закусочная и обстановка с работой нормальная (входы: 0011), то взвешенная сумма равнялась бы 2, а значит выход нейрона равнялся бы 0. Итак, мы никуда не едем.

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

    Графически эту функцию активации можно изобразить следующим образом.

    На горизонтальной оси расположены величины взвешенной суммы. На вертикальной оси - значения выходного сигнала. Как легко видеть, возможны только два значения выходного сигнала: 0 или 1. Причем 0 будет выдаваться всегда от минус бесконечности и вплоть до некоторого значения взвешенной суммы, называемого порогом. Если взвешенная сумма равна порогу или больше него, то функция выдает 1. Все предельно просто.

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

    \[ out(net) = \begin{cases} 0, net < b \\ 1, net \geq b \end{cases} \]

    В этой записи нет ничего сложного. Выход нейрона (​\(out \) ​) зависит от взвешенной суммы (​\(net \) ​) следующим образом: если ​\(net \) ​ (взвешенная сумма) меньше какого-то порога (​\(b \) ​), то ​\(out \) ​ (выход нейрона) равен 0. А если ​\(net \) ​ больше или равен порогу ​\(b \) ​, то ​\(out \) ​ равен 1.

    Сигмоидальная функция

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

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

    Итак… самая часто используемая в нейронных сетях сигмоида - логистическая функция .

    График этой функции выглядит достаточно просто. Если присмотреться, то можно увидеть некоторое подобие английской буквы ​\(S \) ​, откуда и пошло название семейства этих функций.

    А вот так она записывается аналитически:

    \[ out(net)=\frac{1}{1+\exp(-a \cdot net)} \]

    Что за параметр ​\(a \) ​? Это какое-то число, которое характеризует степень крутизны функции. Ниже представлены логистические функции с разным параметром ​\(a \) ​.

    Вспомним наш искусственный нейрон, определяющий, надо ли ехать на море. В случае с функцией единичного скачка все было очевидно. Мы либо едем на море (1), либо нет (0).

    Здесь же случай более приближенный к реальности. Мы до конца полностью не уверены (в особенности, если вы параноик) – стоит ли ехать? Тогда использование логистической функции в качестве функции активации приведет к тому, что вы будете получать цифру между 0 и 1. Причем чем больше взвешенная сумма, тем ближе выход будет к 1 (но никогда не будет точно ей равен). И наоборот, чем меньше взвешенная сумма, тем ближе выход нейрона будет к 0.

    Например, выход нашего нейрона равен 0.8. Это значит, что он считает, что поехать на море все-таки стоит. Если бы его выход был бы равен 0.2, то это означает, что он почти наверняка против поездки на море.

    Какие же замечательные свойства имеет логистическая функция?

    • она является «сжимающей» функцией, то есть вне зависимости от аргумента (взвешенной суммы), выходной сигнал всегда будет в пределах от 0 до 1
    • она более гибкая, чем функция единичного скачка – ее результатом может быть не только 0 и 1, но и любое число между ними
    • во всех точках она имеет производную, и эта производная может быть выражена через эту же функцию

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

    Гиперболический тангенс

    Однако есть и еще одна сигмоида – гиперболический тангенс. Он применяется в качестве функции активации биологами для более реалистичной модели нервной клетки.

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

    Функция записывается следующим образом:

    \[ out(net) = \tanh\left(\frac{net}{a}\right) \]

    В данной выше формуле параметр ​\(a \) ​ также определяет степень крутизны графика этой функции.

    А вот так выглядит график этой функции.

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

    Что мы узнали?

    Теперь вы получили полное представление о внутренней структуре искусственного нейрона. Я еще раз приведу краткое описание его работы.

    У нейрона есть входы. На них подаются сигналы в виде чисел. Каждый вход имеет свой вес (тоже число). Сигналы на входе умножаются на соответствующие веса. Получаем набор «взвешенных» входных сигналов.

    Затем взвешенная сумма преобразуется функцией активации и мы получаем выход нейрона .

    Сформулируем теперь самое короткое описание работы нейрона – его математическую модель:

    Математическая модель искусственного нейрона с ​\(n \) ​ входами:

    где
    ​\(\phi \) ​ – функция активации
    \(\sum\limits^n_{i=1}x_iw_i \) ​ – взвешенная сумма, как сумма ​\(n \) ​ произведений входных сигналов на соответствующие веса.

    Виды ИНС

    Мы разобрались со структурой искусственного нейрона. Искусственные нейронные сети состоят из совокупности искусственных нейронов. Возникает логичный вопрос – а как располагать/соединять друг с другом эти самые искусственные нейроны?

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

    Однослойные нейронные сети

    В однослойных нейронных сетях сигналы с входного слоя сразу подаются на выходной слой. Он производит необходимые вычисления, результаты которых сразу подаются на выходы.

    Выглядит однослойная нейронная сеть следующим образом:

    На этой картинке входной слой обозначен кружками (он не считается за слой нейронной сети), а справа расположен слой обычных нейронов.

    Нейроны соединены друг с другом стрелками. Над стрелками расположены веса соответствующих связей (весовые коэффициенты).

    Однослойная нейронная сеть (Single-layer neural network ) - сеть, в которой сигналы от входного слоя сразу подаются на выходной слой, который и преобразует сигнал и сразу же выдает ответ.

    Многослойные нейронные сети

    Такие сети, помимо входного и выходного слоев нейронов, характеризуются еще и скрытым слоем (слоями). Понять их расположение просто – эти слои находятся между входным и выходным слоями.

    Такая структура нейронных сетей копирует многослойную структуру определенных отделов мозга.

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

    Многослойные нейронные сети обладают гораздо большими возможностями, чем однослойные.

    Работу скрытых слоев нейронов можно сравнить с работой большого завода. Продукт (выходной сигнал) на заводе собирается по стадиям. После каждого станка получается какой-то промежуточный результат. Скрытые слои тоже преобразуют входные сигналы в некоторые промежуточные результаты.

    Многослойная нейронная сеть (Multilayer neural network ) - нейронная сеть, состоящая из входного, выходного и расположенного(ых) между ними одного (нескольких) скрытых слоев нейронов.

    Сети прямого распространения

    Можно заметить одну очень интересную деталь на картинках нейросетей в примерах выше.

    Во всех примерах стрелки строго идут слева направо, то есть сигнал в таких сетях идет строго от входного слоя к выходному.

    Сети прямого распространения (Feedforward neural network ) (feedforward сети) - искусственные нейронные сети, в которых сигнал распространяется строго от входного слоя к выходному. В обратном направлении сигнал не распространяется.

    Такие сети широко используются и вполне успешно решают определенный класс задач: прогнозирование, кластеризация и распознавание.

    Однако никто не запрещает сигналу идти и в обратную сторону.

    Сети с обратными связями

    В сетях такого типа сигнал может идти и в обратную сторону. В чем преимущество?

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

    А в сетях с обратными связями выходы нейронов могут возвращаться на входы. Это означает, что выход какого-нибудь нейрона определяется не только его весами и входным сигналом, но еще и предыдущими выходами (так как они снова вернулись на входы).

    Возможность сигналов циркулировать в сети открывает новые, удивительные возможности нейронных сетей. С помощью таких сетей можно создавать нейросети, восстанавливающие или дополняющие сигналы. Другими словами такие нейросети имеют свойства кратковременной памяти (как у человека).

    Сети с обратными связями (Recurrent neural network ) - искусственные нейронные сети, в которых выход нейрона может вновь подаваться на его вход. В более общем случае это означает возможность распространения сигнала от выходов к входам.

    Обучение нейронной сети

    Теперь давайте чуть более подробно рассмотрим вопрос обучения нейронной сети. Что это такое? И каким образом это происходит?

    Что такое обучение сети?

    Искусственная нейронная сеть – это совокупность искусственных нейронов. Теперь давайте возьмем, например, 100 нейронов и соединим их друг с другом. Ясно, что при подаче сигнала на вход, мы получим что-то бессмысленное на выходе.

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

    Что мы можем менять в нейронной сети?

    Изменять общее количество искусственных нейронов бессмысленно по двум причинам. Во-первых, увеличение количества вычислительных элементов в целом лишь делает систему тяжеловеснее и избыточнее. Во-вторых, если вы соберете 1000 дураков вместо 100, то они все-равно не смогут правильно ответить на вопрос.

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

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

    Остается только один вариант – менять веса связей .

    Обучение нейронной сети (Training) - поиск такого набора весовых коэффициентов, при котором входной сигнал после прохода по сети преобразуется в нужный нам выходной.

    Такой подход к термину «обучение нейронной сети» соответствует и биологическим нейросетям. Наш мозг состоит из огромного количества связанных друг с другом нейросетей. Каждая из них в отдельности состоит из нейронов одного типа (функция активации одинаковая). Мы обучаемся благодаря изменению синапсов – элементов, которые усиливают/ослабляют входной сигнал.

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

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

    Именно с этой целью и создаются обучающие выборки .

    Обучающая выборка (Training set ) - конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит обучение сети.

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

    Однако прежде чем пускать свежеиспеченную нейросеть в бой, часто производят оценку качества ее работы на так называемой тестовой выборке .

    Тестовая выборка (Testing set ) - конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит оценка качества работы сети.

    Мы поняли, что такое «обучение сети» – подбор правильного набора весов. Теперь возникает вопрос – а как можно обучать сеть? В самом общем случае есть два подхода, приводящие к разным результатам: обучение с учителем и обучение без учителя.

    Обучение с учителем

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

    Важный момент. Не путайте правильные ответы и известный алгоритм решения! Вы можете обвести пальцем лицо на фото (правильный ответ), но не сможете сказать, как это сделали (известный алгоритм). Тут такая же ситуация.

    Затем, с помощью специальных алгоритмов, вы меняете веса связей нейронной сети и снова даете ей входной сигнал. Сравниваете ее ответ с правильным и повторяете этот процесс до тех пор, пока сеть не начнет отвечать с приемлемой точностью (как я говорил в 1 главе, однозначно точных ответов сеть давать не может).

    Обучение с учителем (Supervised learning ) - вид обучения сети, при котором ее веса меняются так, чтобы ответы сети минимально отличались от уже готовых правильных ответов.

    Где взять правильные ответы?

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

    Если мы хотим, чтобы сеть прогнозировала рост/падение цен, то обучающую выборку надо делать, основываясь на прошлых данных. В качестве входных сигналов можно брать определенные дни, общее состояние рынка и другие параметры. А в качестве правильных ответов – рост и падение цены в те дни.

    Стоит отметить, что учитель, конечно же, не обязательно человек. Дело в том, что порой сеть приходится тренировать часами и днями, совершая тысячи и десятки тысяч попыток. В 99% случаев эту роль выполняет компьютер, а точнее, специальная компьютерная программа.

    Обучение без учителя

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

    Что же происходит при таком обучении сети? Оказывается, что при таком «обучении» сеть начинает выделять классы подаваемых на вход сигналов. Короче говоря – сеть начинает кластеризацию.

    Например, вы демонстрируете сети конфеты, пирожные и торты. Вы никак не регулируете работу сети. Вы просто подаете на ее входы данные о данном объекте. Со временем сеть начнет выдавать сигналы трех разных типов, которые и отвечают за объекты на входе.

    Обучение без учителя (Unsupervised learning ) - вид обучения сети, при котором сеть самостоятельно классифицирует входные сигналы. Правильные (эталонные) выходные сигналы не демонстрируются.

    Выводы

    В этой главе вы узнали все о структуре искусственного нейрона, а также получили полное представление о том, как он работает (и о его математической модели).

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

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

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

    Вопросы и задачи

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

    Опишите упрощения ИНС по сравнению с биологическими нейросетями.

    1. Сложную и запутанную структуру биологических нейронных сетей упрощают и представляют в виде схем. Оставляют только модель обработки сигнала.

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

    Функцию активации часто обозначают за ​\(\phi(net) \) ​.

    Запишите математическую модель искусственного нейрона.

    Искусственный нейрон c ​\(n \) ​ входами преобразовывает входной сигнал (число) в выходной сигнал (число) следующим образом:

    \[ out=\phi\left(\sum\limits^n_{i=1}x_iw_i\right) \]

    Чем отличаются однослойные и многослойные нейронные сети?

    Однослойные нейронные сети состоят из одного вычислительного слоя нейронов. Входной слой подает сигналы сразу на выходной слой, который и преобразует сигнал, и сразу выдает результат.

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

    В чем отличие feedforward сетей от сетей с обратными связями?

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

    Что такое обучающая выборка? В чем ее смысл?

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

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

    Что понимают под обучением сети?

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

    Что такое обучение с учителем и без него?

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

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

    Теперь, когда стало ясно, что именно мы хотим построить, мы можем переходить к вопросу "как строить такую нейронную сеть". Этот вопрос решается в два этапа: 1. Выбор типа (архитектуры) нейронной сети. 2. Подбор весов (обучение) нейронной сети. На первом этапе следует выбрать следующее: * какие нейроны мы хотим использовать (число входов, передаточные функции); * каким образом следует соединить их между собой; * что взять в качестве входов и выходов нейронной сети. Эта задача на первый взгляд кажется необозримой, но, к счастью, нам необязательно придумывать нейронную сеть "с нуля" - существует несколько десятков различных нейросетевых архитектур, причем эффективность многих из них доказана математически. Наиболее популярные и изученные архитектуры - это многослойный перцептрон, нейронная сеть с общей регрессией, нейронные сети Кохонена и другие. Про все эти архитектуры скоро можно будет прочитать в специальном разделе этого учебника.

    На втором этапе нам следует "обучить" выбранную нейронную сеть, то есть подобрать такие значения ее весов, чтобы она работала нужным образом. Необученная нейронная сеть подобна ребенку - ее можно научить чему угодно. В используемых на практике нейронных сетях количество весов может составлять несколько десятков тысяч, поэтому обучение - действительно сложный процесс. Для многих архитектур разработаны специальные алгоритмы обучения, которые позволяют настроить веса нейронной сети определенным образом. Наиболее популярный из этих алгоритмов - метод обратного распространения ошибки (Error Back Propagation), используемый, например, для обучения перцептрона.

    Обучение нейронных сетей

    Обучить нейронную сеть - значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы "А", мы спрашиваем его: "Какая это буква?" Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: "Это буква А". Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют "обучение с учителем".

    При обучении нейронной сети мы действуем совершенно аналогично. У нас имеется некоторая база данных, содержащая примеры (набор рукописных изображений букв). Предъявляя изображение буквы "А" на вход нейронной сети, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ - в данном случае нам хотелось бы, чтобы на выходе нейронной сети с меткой "А" уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой "А", а 0 - на всех остальных выходах. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 33 числа - вектор ошибки. Алгоритм обратного распространения ошибки - это набор формул, который позволяет по вектору ошибки вычислить требуемые поправки для весов нейронной сети. Одну и ту же букву (а также различные изображения одной и той же буквы) мы можем предъявлять нейронной сети много раз. В этом смысле обучение скорее напоминает повторение упражнений в спорте - тренировку.

    Оказывается, что после многократного предъявления примеров веса нейронной сети стабилизируются, причем нейронная сеть дает правильные ответы на все (или почти все) примеры из базы данных. В таком случае говорят, что "нейронная сеть выучила все примеры", "нейронная сеть обучена", или "нейронная сеть натренирована". В программных реализациях можно видеть, что в процессе обучения величина ошибки (сумма квадратов ошибок по всем выходам) постепенно уменьшается. Когда величина ошибки достигает нуля или приемлемого малого уровня, тренировку останавливают, а полученную нейронную сеть считают натренированной и готовой к применению на новых данных. Важно отметить, что вся информация, которую нейронная сеть имеет о задаче, содержится в наборе примеров. Поэтому качество обучения нейронной сети напрямую зависит от количества примеров в обучающей выборке, а также от того, насколько полно эти примеры описывают данную задачу.

    Так, например, бессмысленно использовать нейронную сеть для предсказания финансового кризиса, если в обучающей выборке кризисов не представлено. Считается, что для полноценной тренировки нейронной сети требуется хотя бы несколько десятков (а лучше сотен) примеров. Повторим еще раз, что обучение нейронных сетей - сложный и наукоемкий процесс. Алгоритмы обучения нейронных сетей имеют различные параметры и настройки, для управления которыми требуется понимание их влияния.


    После того, как нейронная сеть обучена, мы можем применять ее для решения полезных задач. Важнейшая особенность человеческого мозга состоит в том, что, однажды обучившись определенному процессу, он может верно действовать и в тех ситуациях, в которых он не бывал в процессе обучения. Например, мы можем читать почти любой почерк, даже если видим его первый раз в жизни. Так же и нейронная сеть, грамотным образом обученная, может с большой вероятностью правильно реагировать на новые, не предъявленные ей ранее данные. Например, мы можем нарисовать букву "А" другим почерком, а затем предложить нашей нейронной сети классифицировать новое изображение. Веса обученной нейронной сети хранят достаточно много информации о сходстве и различиях букв, поэтому можно рассчитывать на правильный ответ и для нового варианта изображения. Примеры готовых нейронных сетей

    Описанные выше процессы обучения и применения нейронных сетей можно увидеть в действии прямо сейчас. Фирмой Ward Systems Group подготовлено несколько простых программ, которые написаны на основе библиотеки NeuroWindows. Каждая из программ позволяет пользователю самостоятельно задать набор примеров и обучить на этом наборе определенную нейронную сеть. Затем можно предлагать этой нейронной сети новые примеры и наблюдать ее работу.

    СОВРЕМЕННЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ/2. Вычислительная техника и программирование

    Золотухина Ирина Андреевна, магистрант

    Костанайский государственный университет имени А. Байтурсынова, Казахстан.

    Методы и алгоритмы обучения нейронных сетей.

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

    Ключевые слова: нейрон, перцептрон, метод Розенблатта, метод Хебба, ошибка обобщения, ошибка обучения, алгоритм обучения.

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

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

    Впервые предложили модель искусственного нейрона американские ученые Уоррен Маккалок (Warren McCulloch) и его ученик Уолтер Питт (Walter Pitts) в 1943 году.

    В зависимости от функций, выполняемых нейронами в сети, можно выделить три их типа:

    · входные нейроны, на которые подается вектор, кодирующий входное воздействие или образ внешней среды; в них обычно не осуществляется вычислительных процедур;

    · промежуточные нейроны, составляющие основу нейронных сетей, преобразования в которых выполняются по выражениям (1) и (1.1);

    · выходные нейроны, выходные значения которых представляют выходы нейронной сети; преобразования в них осуществляются также по выражениям (1) и (1.1).

    Рис 1. Структура формальной нейронной сети

    (1)

    y = f(s) (1.1)

    где

    · w i , – вес (weight) синапса , i = 1...n ;

    · b – значение смещения;

    · s – результат суммирования;

    · x , – компонент входного вектора (входной сигнал),

    · x i = 1...n ;

    · у – выходной сигнал нейрона;

    · n – число входов нейрона;

    · f – нелинейное преобразование (функция активации).

    На входной сигнал (s) нелинейный преобразователь отвечает выходным сигналом f(s) , который представляет собой выход у нейрона.

    Преимущества нейросетевого подхода при решении задач информационных технологий в отличие от других (например, архитектуры фон Неймана):

    · параллелизм обработки информации;

    · единый и эффективный принцип обучения;

    · надежность функционирования;

    · способность решать неформализованные задачи.

    Применение и проблемы, решаемые искусственными нейронными сетями

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

    Круг задач, решаемых нейронными сетями:

    · распознавания образов;

    · распознавания и синтеза речи;

    · распознавания аэрокосмических изображений;

    · обработки сигналов при наличии больших шумов;

    · прогнозирования;

    · оптимизации;

    · прогнозирования котировки ценных бумаг и курса валют;

    · предупреждения мошенничества с кредитными карточками;

    · игра на бирже;

    · фильтрация спама;

    · оценки стоимости недвижимости;

    · оценки финансового состояния предприятий и риска невозврата кредитов;

    · обработки радиолокационных сигналов;

    · системы безопасности и видеонаблюдения;

    · контроля движения на скоростных автомагистралях и железных дорогах;

    · диагностики в медицине;

    · управление сложными объектами;

    · добычи знаний из больших объемов данных в бизнесе, финансах и научных исследованиях;

    · управления в реальном времени и это далеко не всё.

    Обучение

    Под обучением понимается, повышение производительности системы путем анализа входных данных. Причем обучение проходит по определённым правилам.

    Существуют два основных подхода к обучению: «с учителем» и «без учителя» (самообучение). При обучении с учителем нейронная сеть располагает правильными ответами (выходами сети) на каждый входной пример. Вместе они называются обучающей парой. Веса настраиваются так, чтобы сеть производила ответы как можно более близкие к известным правильным ответам, минимизировалась ошибка. Векторы обучающего множества предъявляются последовательно, вычисляются ошибки и веса подстраиваются для каждого вектора до тех пор, пока ошибка по всему обучающему массиву не достигнет приемлемого уровня. Обучение без учителя не требует знания правильных ответов на каждый пример обучающей выборки. В этом случае раскрывается внутренняя структура данных или зависимость между образцами в системе данных, что позволяет распределить образцы по категориям.

    Обучение с учителем

    На вход искусственной нейронной сети подается множество входных нейронов X - входной вектор для обучаемой нейронной сети.

    Определим функцию ошибки E . Обычно это средняя квадратичная ошибка,

    ,

    где

    · P - количество обработанных нейронной сетью примеров;

    · y i -выход;

    · d i - желаемый (идеальный) выход нейронной сети.

    Процедура обучения нейронной сети сводится к процедуре коррекции весов связей. Целью процедуры коррекции весов есть минимизация функции ошибки E .

    Общая схема обучения с учителем:

    1 Перед началом обучения весовые коэффициенты устанавливаются некоторым образом, на пример - случайно.

    2 На первом этапе на вход в определенном порядке подаются учебные примеры. На каждой итерации вычисляется ошибка для учебного примера E L (ошибка обучения) и по определенному алгоритму производится коррекция весов. Целью процедуры коррекции весов есть минимизация ошибки E L .

    3 На втором этапе обучения производится проверка правильности работы. На вход в определенном порядке подаются контрольные примеры. На каждой итерации вычисляется ошибка для контрольного примера E G (ошибка обобщения - ошибка, которую обучаемая модель показывает на примерах, не участвовавших в процессе обучения). Если результат неудовлетворительный то, производится модификация множества учебных примеров и повторение цикла обучения.

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

    Рис 2. Эффект переобучения

    На основе этого алгоритма строится обучение нейронной сети методом Розенблатта.

    Метод Розенблатта

    Данный метод был предложен Ф.Розенблаттом в 60-х годах XX века Для нейронной сети, названной персептрон (perceptron). Персептрон имеет пороговую функцию активации, его схема представлена на рис.1.

    Рис 3. Однослойный персептрон

    Процедуру обучения Розенблатта для однослойного персептрона можно представить так:

    ,

    где

    · x i - i -тый вход нейронной сети;

    · d j - желаемый (идеальный) j -тый выход нейронной сети;

    · a - коэффициент (скорость обучения) 0< a ≤1

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

    1. Полагаем все веса равными нулю.

    2. Проводим цикл предъявления примеров. Для каждого примера выполняется следующая процедура.

    2.1. Если сеть выдала правильный ответ, то переходим к шагу 2.4.

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

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

    2.4. Переходим к следующему примеру. Если достигнут конец обучающего множества, то переходим к шагу 3, иначе возвращаемся на шаг 2.1.

    3. Если в ходе выполнения второго шага алгоритма хоть один раз выполнялся шаг 2.2 или 2.3 и не произошло зацикливания, то переходим к шагу 2. В противном случае обучение завершено.

    В этом алгоритме не предусмотрен механизм отслеживания зацикливания обучения. Этот механизм можно реализовывать по-разному. Наиболее экономный в смысле использования дополнительной памяти имеет следующий вид.

    4. k =1; m =0. Запоминаем веса связей.

    5. После цикла предъявлений образов сравниваем веса связей с запомненными. Если текущие веса совпали с запомненными, то произошло зацикливание. В противном случае переходим к шагу 3.

    6. m =m +1. Если m <k , то переходим ко второму шагу.

    7. k =2k ; m =0. Запоминаем веса связей и переходим к шагу 2.

    Поскольку длина цикла конечна, то при достаточно большом k зацикливание будет обнаружено.

    Обучение без учителя.

    Главная черта, делающая обучение без учителя привлекательным, – это его "самостоятельность". Процесс обучения, как и в случае обучения с учителем, заключается в подстраивании весов синапсов. Некоторые алгоритмы, правда, изменяют и структуру сети, то есть количество нейронов и их взаимосвязи, но такие преобразования правильнее назвать более широким термином – самоорганизацией, и в рамках данной статьи они рассматриваться не будут. Очевидно, что подстройка синапсов может проводиться только на основании информации, доступной в нейроне, то есть его состояния и уже имеющихся весовых коэффициентов. Исходя из этого соображения и, что более важно, по аналогии с известными принципами самоорганизации нервных клеток, построены алгоритмы обучения Хебба.

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

    Идея алгоритма выражается следующим равенством:

    ,

    где

    · y i (n-1) – выходное значение нейрона i слоя (n-1) ,

    · y j (n) – выходное значение нейрона j слоя n ;

    · w ij (t) и w ij (t-1 ) – весовой коэффициент синапса, соединяющего эти нейроны, на итерациях t и t-1 соответственно;

    · a – коэффициент скорости обучения.

    Существует также и дифференциальный метод обучения Хебба, представленный формулой

    ,(2)

    здесь y i (n-1) (t) и y i (n-1) (t-1) – выходное значение нейрона i слоя n-1 соответственно на итерациях t и t-1;

    y j (n) (t) и y j (n) (t-1) – то же самое для нейрона j слоя n .

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

    Полный алгоритм обучения с применением вышеприведенных формул будет выглядеть так:

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

    2. На входы сети подается входной образ, и сигналы возбуждения распространяются по всем слоям согласно принципам классических прямопоточных (feedforward) сетей, то есть для каждого нейрона рассчитывается взвешенная сумма его входов, к которой затем применяется активационная (передаточная) функция нейрона, в результате чего получается его выходное значение y i (n) , i =0...M i -1, где M i – число нейронов в слое i ; n =0...N -1, а N – число слоев в сети.

    3. На основании полученных выходных значений нейронов по формуле (1) или (2) производится изменение весовых коэффициентов.

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

    На втором шаге цикла попеременно предъявляются все образы из входного набора.

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

    Необходимо отметить, что обучение без учителя гораздо более чувствительно к выбору оптимальных параметров, нежели обучение с учителем. Во-первых, его качество сильно зависит от начальных величин синапсов. Во-вторых, обучение критично к выбору радиуса обучения и скорости его изменения. И наконец, разумеется, очень важен характер изменения собственно коэффициента обучения. В связи с этим пользователю, скорее всего, потребуется провести предварительную работу по подбору оптимальных параметров обучения сети.

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

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

    Литература:

    1. В.В.Круглов, В.В.Борисов «Искусственные нейронные сети», 2002 год.

    2. Rumelhart D. E., Hinton G. E., Williams R. D. Learning internal reprentation by error propagation in parallel distributed processing. – Cambrige: MA: MIT Press, 1986. – 91 p.

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

    С понятием обучения ассоциируется довольно много видов деятельности, поэтому сложно дать этому процессу однозначное определение. Более того, процесс обучения зависит от точки зрения на него. Именно это делает практически невозможным появление какого-либо точного определения этого понятия. Например, процесс обучения с точки зрения психолога в корне отличается от обучения с точки зрения школьного учителя. С позиций нейронной сети, вероятно, можно использовать следующее определение:

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

    Это определение процесса обучения нейронной сети предполагает следующую последовательность событий:

    1. В нейронную сеть поступают стимулы из внешней среды.
    2. В результате первого пункта изменяются свободные параметры нейронной сети.
    3. После изменения внутренней структуры нейронная сеть отвечает на возбуждения уже иным образом.

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

    Существуют два концептуальных подхода к обучению нейронных сетей: обучение с учителем и обучение без учителя.

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

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

    Нейронная сеть без обратных связей - персептрон

    Задачи для нейронных сетей

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

    · Аппроксимация - построение функции по конечному набору значений (например, прогнозирование временных рядов)

    · Построение отношений на множестве объектов (например, задачи распознавания образов и звуковых сигналов).

    · Распределенный поиск информации и ассоциативная память (например, задачи нахождения неявных зависимостей в больших массивах данных).

    · Фильтрация (например, выявление «видимых невооруженным глазом», но сложно описываемых аналитически изменений сигналов).

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

    · Идентификация динамических систем и управление ими.


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

    Схема может быть дополнена сумматором, объединяющим при необходимости выходные сигналы нейронов в один общий выход.

    Количество слоев в персептроне может быть разным, в зависимости от сложности задачи. Математически доказано (теорема Колмогорова), что трех полноценных нейронных слоев достаточно, чтобы аппроксимировать любую математическую функцию (при условии возможности неограниченно наращивать количество нейронов в скрытом слое).

    Персептрон функционирует в дискретном временном режиме – подали на вход статическую совокупность сигналов (входной вектор), оценили совокупное состояние выходов (выходной вектор), затем подали на вход следующий вектор и т. д. Предполагается, что сигнал в персептроне распространяется от входа к выходу мгновенно, т. е. временные задержки при передаче сигнала от нейрона к нейрону, от слоя к слою и связанные с этим динамические переходные процессы отсутствуют. Поскольку персептрон не имеет обратных связей (ни положительных, ни отрицательных), то в каждый момент времени любому входному вектору значений однозначно соответствует некий выходной вектор, который не изменится, пока неизменным остаются входы НС.

    Теория персептронов является основой для многих других типов искусственных нейронных сетей, а сами персептроны являются логической исходной точкой для изучения искусственных нейронных сетей.

    Обучить нейронную сеть - значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы "А", мы спрашиваем его: "Какая это буква?" Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: "Это буква А". Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют "обучение с учителем " .

    При обучении нейронной сети мы действуем совершенно аналогично. Предположим, у нас имеется таблица – база данных, содержащая примеры (кодированный набор изображений букв). Предъявляя изображение буквы "А" на вход нейронной сети, мы рассчитываем (в идеале), что уровень сигнала будет максимальным (=1) на выходе OUT1 (А – буква №1 в алфавите из 33-х букв) и минимальным (=0).

    Таким образом, таблица, называемая обучающим множеством , будет иметь вид (в качестве примера заполнена только первая строка):

    Буква Вектор входа Желаемый вектор выхода
    X1 X2 X12 TARGET1 TARGET2 TARGET33
    А
    Б
    Ю
    Я

    Совокупность векторов для каждого примера обучающего множества (строки таблицы) называется обучающей парой .

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

    Алгоритм обучения нейронной сети - это набор математических действий, который позволяет по вектору ошибки вычислить такие поправки для весов нейронной сети, чтобы суммарная ошибка (для контроля процесса обучения обычно используют сумму квадратов ошибок по всем выходам) уменьшилась. Применяя эти действия снова и снова, добиваются постепенного уменьшения ошибки для каждого примера (А, Б, В и т. д.) обучающего множества.

    После такой циклической многократной подстройки весов нейронная сеть даст правильные (или почти правильные) ответы на все (или почти все) примеры из базы данных, т. е. величины суммарной ошибки достигнут нуля или приемлемого малого уровня для каждой обучающей пары. В таком случае говорят, что "нейронная сеть обучена", т. е. готова к применению на новых, заранее не известных , данных.

    В общем виде алгоритм обучения с учителем будет выглядеть следующим образом:

    1. Инициализировать синаптические веса маленькими случайными значениями.

    2. Выбрать очередную обучающую пару из обучающего множества; подать входной вектор на вход сети.

    3. Вычислить выход сети.

    4. Вычислить разность между выходом сети и требуемым выходом (целевым вектором обучающей пары).

    5. Подкорректировать веса сети для минимизации ошибки.

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

    Конкретный вид математических операций, выполняемых на этапе 5, определяет разновидность алгоритма обучения. Например, для однослойных персептронов применяют простейший алгоритм, основанный на т. н. дельта-правиле , для персептронов с любым количеством слоев широко используется процедура обратного распространения ошибки , известна группа алгоритмов с интересными свойствами, названными стохастическими алгоритмами обучения и т. д. Все известные алгоритмы обучения нейронных сетей являются по сути разновидностями градиентных методов оптимизации нелинейной функции многих переменных. Основная проблема, возникающая при их практической реализации заключается в том, что никогда нельзя знать наверняка, что найденная в результате комбинация синаптических весов является действительно самой эффективной с точки зрения минимизации суммарной ошибки на всем обучающем множестве. Эта неопределенность получила название «проблемы локальных минимумов функции цели».

    Под функцией цели в данном случае понимается выбранный интегральный скалярный показатель , характеризующий качество отработки нейронной сетью всех примеров обучающего множества – например, сумма среднеквадратичных отклонений OUT от TARGET для каждой обучающей пары. Чем меньше достигнутое значение функции цели, тем выше качество работы нейронной сети на заданном обучающем множестве. В идеале (на практике достижимом лишь для самых простейших задач) удается найти такой набор синаптических весов, что .

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

    Таким образом, если в результате попытки обучить нейронная сеть требуемая точность так и не была достигнута, то перед исследователем возникают две альтернативы:

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

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

    В задачах распознавания образов и классификации широко применяются алгоритмы, названные обучением без учителя . В этом случае перед сетью ставится задача самостоятельно найти в предъявляемом наборе примеров группы входных векторов «похожие друг на друга», вырабатывая высокий уровень на одном из выходов (не определяя заранее на каком именно). Но и при такой постановке задачи проблема локальных минимумов также имеет место, хотя и в неявном виде, без строгого математического определения функции цели (т. к. само понятие функции цели подразумевает наличие заданного эталонного отклика сети, т. е. «учителя») – «а действительно ли нейронная сеть научилась выделять кластеры входных векторов наилучшим образом из всех возможных при данной конкретной ее конфигурации?».