HimeraSearchDB
Carding_EbayThief
triada
CrackerTuch
d-shop

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

NewsBot
Оффлайн

NewsBot

.
.
Регистрация
21.07.20
Сообщения
40.408
Реакции
1
Репутация
0
При классическом программировании разработчик описывает на конкретном языке программирования определённый жестко заданный набор правил, который был определен на основании его знаний в конкретной предметной области и который в первом приближении описывает процессы, происходящие в человеческом мозге при решении аналогичной задачи. Например, может быть запрограммирована стратегия игры в крестики-нолики, шахмат и другое (рисунок 1).
s6nwvoo6mluwvgexhtsfkrtj1km.png

Рисунок 1 – Классический подход решения задач

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

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

Нейронные сети
Долгое время учёные, вдохновляясь процессами происходящими в нашем мозге, пытались сделать реверс-инжиниринг центральной нервной системы и попробовать сымитировать работу человеческого мозга. Благодаря этому родилось целое направление в машинном обучении — нейронные сети.
На рисунке 3 вы можете увидеть сходство между устройством биологического нейрона и математическим представлением нейрона, используемого в машинном обучении.
qywixbink4zqn0l3qdlerxvhtdq.png

Рисунок 3 – Математическое представление нейрона

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

Персептрон
Математическая модель нейронной сети, состоящего из одного нейрона, который выполняет выполняет две последовательные операции (рисунок 4):
— вычисляет сумму входных сигналов с учетом их весов (проводимости или сопротивления) связи

1c59f6fadf76e087fdec5734df061f0a.svg


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

78b6c2a2393c279c75bee9924bdc5c21.svg


zqpf7gclmquo4j88mrfovoyz9ma.png

Рисунок 4 – Математическая модель персептрона

В качестве активационной функции может использоваться любая дифференцируемая функция, наиболее часто используемые приведены в таблице 1. Выбор активационной функции ложиться на плечи инженера, и обычно этот выбор основан или на уже имеющемся опыте решения похожих задач, ну или просто методом подбора.
Заметка:
Однако есть рекомендация – что если нужна нелинейность в нейронной сети, то в качестве активационной функции лучше всего подходит ReLU функция, которая имеет лучшие показатели сходимости модели во время процесса обучения.
Таблица 1 - Распространенные активационные функции

Имя

Формула

График

Linear function



e256753be7b6781b0c1587d0254b52f8.svg



wy_6bwefcfs4jhfwq0habz3lhls.jpeg
.

Sigmoid function



a6d1b6ec7e75cc289cb7087741eb5c1e.svg



61myzd8rhbji_ik2gol3u8itpns.jpeg


Softmax function



b7f3451dc31c0b3e7bb30f35af70a954.svg





161969e3af736f89376c35877ec28662.svg


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

Hyperbolic Tangent function



ed783f889001f018c9cbd6da37ee1613.svg



af4bsctsebh5tq8vyesitgqj69o.jpeg

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

Rectified Linear Unit (ReLU)



ab6ea59190aad84d828fa26077c4245b.svg



e_uk-pyfoonxem2atmm11myj9x4.jpeg

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

Leaky ReLU



eec10284e92cd344420e67106db3b12f.svg



jvp56fqxw_mb8no0wcty5fd6toc.jpeg

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



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

Рисунок 5 – Обучающий набор данных и состояние нейронной сети на предыдущем шаге обучения

На данном этапе мы имеем нейронную сеть в некотором состоянии с определенными весами соединений, которые были вычислены на предыдущем этапе обучения модели или если это первая итерация обучения – то значения весов соединений выбраны в произвольном порядке.
Итак, представим, что мы имеем некоторый набор тренировочных данных, значения каждого элемента из набора представлены вектором входных данных (input data), содержащих 2 параметра (feature)
e07b7ef226c9121241c3ea6066ef2cf7.svg
. Под
e07b7ef226c9121241c3ea6066ef2cf7.svg
в модели в зависимости от рассматриваемой предметной области может подразумеваться все что угодно: количество комнат в доме, расстояние дома от моря, ну или мы просто пытаемся обучить нейронную сеть логической операции И, или ИЛИ.

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

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


a119c702c87be74cb4d9c3f1b298d776.svg


_-p8w8xtc4wbu9vyk9g9m9oezyo.png

Рисунок 6 – Прямое распространение ошибки

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


a369d49299583d08cbd19bea1e116daf.svg



ШАГ 2 — Расчет функции ошибки
Функция ошибка – это метрика, отражающая расхождение между ожидаемыми и полученными выходными данными. Обычно используют следующие функции ошибки:
среднеквадратичная ошибка (Mean Squared Error, MSE) – данная функция ошибки особенно чувствительна к выбросам в тренировочном наборе, так как используется квадрат от разности фактического и ожидаемого значений (выброс — значение, которое сильно удалено от других значений в наборе данных, которые могут иногда появляться в следствии ошибок данных, таких как смешивание данных с разными единицами измерения или плохие показания датчиков):


7e9e11e4068f4183aa1f57eee5b6cb78.svg


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


f796669b065bf6c0a280a6c2b8d3062f.svg


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


c044fdc0cefe72bbb294b6679c6b9782.svg


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


b122de3f09d9e02e8880525e403fac02.svg


где
1e80c3b3087c0a57b68ad11261a9ec2b.svg
– число экземпляров в тренировочном наборе
94d13ee0aadd7f17977e0d279af38d42.svg
– число классов при решении задач классификации
8f5f4d715e10ad5357eee1e62a3dcf9d.svg
— ожидаемое выходное значение
23ac96f5bb241256366cdd8a4ee1ac02.svg
– фактическое выходное значение обучаемой модели

Для нашего конкретного случая воспользуемся MSE:


cc67a736f15067fd9632239421144962.svg



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


f6a5d0e04a1a4905071502272265b71d.svg


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


774ca2c9ff0cdb7ef3a0d1a1d3bb770a.svg


где
16da507b2fc389688ef0659939dcc647.svg
– k -ая итерация обучения нейронной сети;
1ec36e4efef9e67482ea2b86700b82f2.svg
– шаг обучения (learning rate) и задается инженером, обычно это может быть 0.1; 0.01 (о том как шаг обучения влияет на процесс сходимости обучения отметить чуть позже)
fb28aa47877adcd6444897fd3e586fab.svg
– градиент функции-ошибки
Для нахождения градиента, используем частные производные по настраиваемым аргументам
de37a2d65c9f977872667dc64eb02381.svg
:


d25bb0a13bb5593a7c26f98f0ed48352.svg


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


7fe83ca4926e531070dc4d1d62b8f440.svg



704e80551e66cf807756e6387cdf21d3.svg


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



a214bed5545e01cfb472eec91c47a169.svg



57e054a5f25bedee72173a87243d0f2c.svg



10e472e87b367b928e798d2ed085cf31.svg





8c4ee1b1e4fa1c726492439ccf9a4742.svg



99167190b2483305b32d72b8d4c479b7.svg



f668548585d087882e956284738cfb55.svg




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


b696c667ed7183e99848c75e6f6cd659.svg



26c7aab38c683960fc506a9dd0b22344.svg




0ed4378e738eca32533b766abab3dc5e.svg



b007605489b123e2bd5faae3d363c1b7.svg



Тогда процесс обратного распространения ошибки – движение по модели от выхода по направлению к входу с модификацией весов модели в направлении обратном вектору градиента. Задавая обучающий шаг 0.1 (learning rate) имеем (рисунок 7):


759a7d507b0ab64c67be196dc3b54a3a.svg




c09ae7007db4e9c733a8e14c3cd3e17b.svg


cuyrn_dfxbt8gsd4npo1wwllpby.png

Рисунок 7 – Обратное распространение ошибки
Таким образом мы завершили k+1 шаг обучения, чтобы убедиться, что ошибка снизилась, а выход от модели с новыми весами стал ближе к ожидаемому выполним процесс прямого распространения ошибки по модели с новыми весами (см. ШАГ 1):


1713d2c997c0ec9ea23e0788e12f6680.svg


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


10d811f3dc7a739764a07c14c35f562c.svg


Как видим, на предыдущем шаге обучения ошибка составила 0.64, а с новыми весами – 0.36, следовательно мы настроили модель в верном направлении.

В следующей статье, мы продолжим изучать нейронные сети с более практической стороны и в качестве инструмента будем использовать TensorFlow.js. Напишем своеобразную hello-world программу – обучим нейронную сеть, которая выполняет логические операции AND, OR, XOR.
 
Сверху Снизу