Машинное Обучение. Нейронные Сети (Часть 1): Процесс Обучения Перцептрона

Заранее отмечу, что тот, кто знает, как учится перцептрон, вряд ли найдет в этой статье что-то новое.

Вы можете смело пропустить это.

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

Поэтому прошу отнестись к финальной идее с большим терпением и пониманием.

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

при решении аналогичной задачи.

Например, можно запрограммировать стратегию игры в крестики-нолики, шахматы и многое другое (рис.

1).



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

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

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

2).



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Рисунок 2 – Машинное обучение



Нейронные сети

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

Благодаря этому родилось целое направление в машинном обучении — нейронные сети.

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



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

.



Персептрон

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

4): вычисляет сумму входных сигналов с учетом их весов связи (проводимость или сопротивление)

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Рисунок 4 – Математическая модель перцептрона В качестве функции активации можно использовать любую дифференцируемую функцию; наиболее часто используемые из них приведены в таблице 1. Выбор функции активации ложится на плечи инженера, и обычно этот выбор основывается либо на имеющемся опыте решения подобных задач, либо просто на методе выбора.



Заметка

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

Таблица 1 – Общие функции активации Имя Формула Расписание Линейная функция

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

.

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

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Функция Софтмакс

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Используется для задач классификации (где количество классов больше 2).

Функция гиперболического тангенса

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Сжимает входной сигнал в диапазоне [-1, 1].

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

Выпрямленный линейный блок (ReLU)

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

Дырявый РеЛУ

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Устранен недостаток функции ReLU в интервале отрицательных выходных сигналов, где частная производная равна 0.


Процесс обучения перцептрона

Процесс обучения состоит из нескольких этапов.

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

Также для упрощения задачи исключим в нейроне узел смещения b (рис.

5).



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

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

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

.

Под

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

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

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

ШАГ 1 – Процесс прямой связи На этом этапе мы вычисляем сумму входных сигналов с учетом веса каждого соединения и применяем функцию активации (в нашем случае функция активации отсутствует).

Проведем расчеты для первого элемента обучающего набора:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Рисунок 6 – Прямое распространение ошибки Обратите внимание, что написанная выше формула представляет собой упрощенное математическое уравнение для частного случая операций над тензорами.

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

Большинству людей знакомы тензоры из математики – векторы (тензор с одной осью), матрицы (тензор с двумя осями – строками, столбцами).

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

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

ШАГ 2 – Вычислите функцию ошибки Функция ошибок — это метрика, отражающая несоответствие между ожидаемыми и полученными результатами.

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

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

среднеквадратичное отклонение (Root MSE) - по сути, это то же самое, что среднеквадратическая ошибка в контексте нейронных сетей, но может отражать реальную физическую единицу измерения, например, если в нейронной сети выходными параметрами нейронной сети является цена дом, выраженный в долларах, то единицей измерения среднеквадратической ошибки будет доллар в квадрате (

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

), а для стандартного отклонения это доллар ($), что, естественно, немного упрощает задачу человеческого анализа:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

среднее отклонение (средняя абсолютная ошибка, MAE) - в отличие от двух вышеуказанных значений, он не столь чувствителен к выбросам:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Перекрестная энтропия – использует для задач классификации:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Где

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

– количество экземпляров в обучающем наборе

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

– количество классов при решении задач классификации

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

— ожидаемое выходное значение

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

ШАГ 3 – Обратное распространение ошибки Цель обучения нейронной сети проста: минимизация функции ошибок:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Где

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

– k-я итерация обучения нейронной сети;

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

– скорость обучения и задается инженером, обычно она может составлять 0,1; 0,01 (подробнее о том, как этап обучения влияет на процесс конвергенции обучения, чуть позже)

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

В нашем конкретном случае с учетом всех упрощений функция ошибок принимает вид:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Памятка производных формул

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



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Найдем следующие частные производные:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

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

Установив шаг обучения на 0,1 (скорость обучения), мы имеем (рис.

7):

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона



Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Рисунок 7 – Обратное распространение ошибки Таким образом, мы завершили этап обучения k+1, чтобы убедиться, что ошибка уменьшилась и выходные данные модели с новыми весами стали ближе к ожидаемым.

Выполним процесс прямого распространения ошибки по модели с новыми весами (см.

ШАГ 1):

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Как мы видим, выходное значение увеличилось на 0,2 единицы в нужную сторону в сторону ожидаемого результата – единицы (1).

Тогда ошибка будет:

Машинное обучение.
</p><p>
 Нейронные сети (часть 1): процесс обучения перцептрона

Как видите, на предыдущем шаге обучения ошибка была 0,64, а с новыми весами — 0,36, поэтому мы настроили модель в правильном направлении.

Следующая часть статьи: Машинное обучение.

Нейронные сети (часть 2): ИЛИ-моделирование; XOR с TensorFlow.js Машинное обучение.

Нейронные сети (часть 3) — Сверточная сеть под микроскопом.

Изучение API Tensorflow.js Теги: #Машинное обучение #нейронные сети #персептрон

Вместе с данным постом часто просматривают: