зачем нужна функция активации в нейронных сетях

Сверточная нейронная сеть, часть 1: структура, топология, функции активации и обучающее множество

Предисловие

Данные статьи (часть 2) являются частью моей научной работы в ВУЗе, которая звучала так: «Программный комплекс детектирования лиц в видеопотоке с использованием сверточной нейронной сети». Цель работы была — улучшение скоростных характеристик в процессе детектирования лиц в видеопотоке. В качестве видеопотока использовалась камера смартфона, писалось десктопное ПС (язык Kotlin) для создания и обучения сверточной нейросети, а также мобильное приложение под Android (язык Kotlin), которая использовала обученную сеть и «пыталась» распознать лица из видеопотока камеры. Результаты скажу получились так себе, использовать точную копию предложенной мной топологии на свой страх и риск (я бы не рекомендовал).

Введение

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

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

Структура сверточной нейронной сети

СНС состоит из разных видов слоев: сверточные (convolutional) слои, субдискретизирующие (subsampling, подвыборка) слои и слои «обычной» нейронной сети – персептрона, в соответствии с рисунком 1.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.
Рисунок 1 – топология сверточной нейронной сети

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

Свое название сверточная сеть получила по названию операции – свертка, суть которой будет описана дальше.

Сверточные сети являются удачной серединой между биологически правдоподобными сетями и обычным многослойным персептроном. На сегодняшний день лучшие результаты в распознавании изображений получают с их помощью. В среднем точность распознавания таких сетей превосходит обычные ИНС на 10-15%. СНС – это ключевая технология Deep Learning.

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

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Топология сверточной нейросети

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

Можно выделить следующие этапы влияющие на выбор топологии:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.
Рисунок 2 — Топология сверточной нейросети

Входной слой

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

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

Входные данные каждого конкретного значения пикселя нормализуются в диапазон от 0 до 1, по формуле:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Сверточный слой

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

Количество карт определяется требованиями к задаче, если взять большое количество карт, то повысится качество распознавания, но увеличится вычислительная сложность. Исходя из анализа научных статей, в большинстве случаев предлагается брать соотношение один к двум, то есть каждая карта предыдущего слоя (например, у первого сверточного слоя, предыдущим является входной) связана с двумя картами сверточного слоя, в соответствии с рисунком 3. Количество карт – 6.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.
Рисунок 3 — Организация связей между картами сверточного слоя и предыдущего

Размер у всех карт сверточного слоя – одинаковы и вычисляются по формуле 2:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Неформально эту операцию можно описать следующим образом — окном размера ядра g проходим с заданным шагом (обычно 1) все изображение f, на каждом шаге поэлементно умножаем содержимое окна на ядро g, результат суммируется и записывается в матрицу результата, как на рисунке 4.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.
Рисунок 4 — Операция свертки и получение значений сверточной карты (valid)

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.
Операция свертки и получение значений сверточной карты. Ядро смещено, новая карта получается того же размера, что и предыдущая (same)

При этом в зависимости от метода обработки краев исходной матрицы результат может быть меньше исходного изображения (valid), такого же размера (same) или большего размера (full), в соответствии с рисунком 5.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.
Рисунок 5 — Три вида свертки исходной матрицы

В упрощенном виде этот слой можно описать формулой:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

При этом за счет краевых эффектов размер исходных матриц уменьшается, формула:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Подвыборочный слой

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

Обычно в подвыборочном слое применяется функция активации RelU. Операция подвыборки (или MaxPooling – выбор максимального) в соответствии с рисунком 6.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.
Рисунок 6 — Формирование новой карты подвыборочного слоя на основе предыдущей карты сверточного слоя. Операция подвыборки (Max Pooling)

Формально слой может быть описан формулой:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Полносвязный слой

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Выходной слой

Выбор функции активации

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Функция активации сигмоиды

Эта функция относится к классу непрерывных функций и принимает на входе произвольное вещественное число, а на выходе дает вещественное число в интервале от 0 до 1. В частности, большие (по модулю) отрицательные числа превращаются в ноль, а большие положительные – в единицу. Исторически сигмоида находила широкое применение, поскольку ее выход хорошо интерпретируется, как уровень активации нейрона: от отсутствия активации (0) до полностью насыщенной активации (1). Сигмоида (sigmoid) выражается формулой:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

График сигмоидальной функции в соответствии с рисунком ниже:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

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

Сигмоидальная функция является:

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

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

Известно, что нейронные сети способны приблизить сколь угодно сложную функцию, если в них достаточно слоев и функция активации является нелинейной. Функции активации вроде сигмоидной или тангенциальной являются нелинейными, но приводят к проблемам с затуханием или увеличением градиентов. Однако можно использовать и гораздо более простой вариант — выпрямленную линейную функцию активации (rectified linear unit, ReLU), которая выражается формулой:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

График функции ReLU в соответствии с рисунком ниже:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Преимущества использования ReLU:

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

Обучающая выборка состоит из положительных и отрицательных примеров. В данном случае из лиц и “не лиц”. Соотношение положительных к отрицательным примерам 4 к 1, 8000 положительных и 2000 отрицательных.

В качестве положительной обучающей выборки использовалась база данных LFW3D [7]. Она содержит цветные изображения фронтальных лиц типа JPEG, размером 90×90 пикселей, в количестве 13000. База данных предоставляется по FTP, доступ осуществляется по паролю. Для получения пароля необходимо заполнить на главной странице сайта простую форму, где указать свое имя и электронную почту. Пример лиц из базы данных показан в соответствии с рисунком ниже:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

В качестве отрицательных обучающих примеров использовалась база данных SUN397 [8], она содержит огромное количество всевозможных сцен, которые разбиты по категориям. Всего 130000 изображений, 908 сцен, 313000 объектов сцены. Общий вес этой базы составляет 37 GB. Категории изображений весьма различны и позволяют выбирать более конкретную среду, где будет использоваться конечное ПС. Например, если априори известно, что детектор лиц предназначен только для распознавания внутри помещения, то нет смысла использовать обучающую выборку природы, неба, гор и т.д. По этой причине автором работы были выбраны следующие категории изображений: жилая комната, кабинет, классная комната, компьютерная комната. Примеры изображений из обучающей выборки SUN397 показаны в соответствии с рисунком ниже:

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Результаты

Прямое распространение сигнала от входного изображения размером 90х90 пикселей занимает 20 мс (на ПК), 3000 мс в мобильном приложении. При детектировании лица в видеопотоке в разрешении 640х480 пикселей, возможно детектировать 50 не перекрытых областей размером 90х90 пикселей. Полученные результаты с выбранной топологией сети хуже по сравнению с алгоритмом Виолы-Джонса.

Выводы

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

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

Подвыборочный слой дает:

Обучение сверточной нейронной сети описано во второй части.

Ссылки

— Виды нейронных сетей (подобная схема классификации нейронных сетей)

— Нейронные сети для начинающих: раз и два.

Источник

Нейронные сети для начинающих. Часть 1

зачем нужна функция активации в нейронных сетях. 4a261dc6abcea37cf448267c74f0363c. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-4a261dc6abcea37cf448267c74f0363c. картинка зачем нужна функция активации в нейронных сетях. картинка 4a261dc6abcea37cf448267c74f0363c.

Привет всем читателям Habrahabr, в этой статье я хочу поделиться с Вами моим опытом в изучении нейронных сетей и, как следствие, их реализации, с помощью языка программирования Java, на платформе Android. Мое знакомство с нейронными сетями произошло, когда вышло приложение Prisma. Оно обрабатывает любую фотографию, с помощью нейронных сетей, и воспроизводит ее с нуля, используя выбранный стиль. Заинтересовавшись этим, я бросился искать статьи и «туториалы», в первую очередь, на Хабре. И к моему великому удивлению, я не нашел ни одну статью, которая четко и поэтапно расписывала алгоритм работы нейронных сетей. Информация была разрознена и в ней отсутствовали ключевые моменты. Также, большинство авторов бросается показывать код на том или ином языке программирования, не прибегая к детальным объяснениям.

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

Первым и самым важным моим открытием был плейлист американского программиста Джеффа Хитона, в котором он подробно и наглядно разбирает принципы работы нейронных сетей и их классификации. После просмотра этого плейлиста, я решил создать свою нейронную сеть, начав с самого простого примера. Вам наверняка известно, что когда ты только начинаешь учить новый язык, первой твоей программой будет Hello World. Это своего рода традиция. В мире машинного обучения тоже есть свой Hello world и это нейросеть решающая проблему исключающего или(XOR). Таблица исключающего или выглядит следующим образом:

abc
000
011
101
110

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

Что такое нейронная сеть?

зачем нужна функция активации в нейронных сетях. 947cdd91841e5ec69db32eddb7a070e9. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-947cdd91841e5ec69db32eddb7a070e9. картинка зачем нужна функция активации в нейронных сетях. картинка 947cdd91841e5ec69db32eddb7a070e9.

Нейронная сеть — это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 2 видео из TED Talks: Видео 1, Видео 2). Другими словами, нейросеть это машинная интерпретация мозга человека, в котором находятся миллионы нейронов передающих информацию в виде электрических импульсов.

Какие бывают нейронные сети?

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

Для чего нужны нейронные сети?

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

Классификация — распределение данных по параметрам. Например, на вход дается набор людей и нужно решить, кому из них давать кредит, а кому нет. Эту работу может сделать нейронная сеть, анализируя такую информацию как: возраст, платежеспособность, кредитная история и тд.

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

Распознавание — в настоящее время, самое широкое применение нейронных сетей. Используется в Google, когда вы ищете фото или в камерах телефонов, когда оно определяет положение вашего лица и выделяет его и многое другое.

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

Что такое нейрон?

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Нейрон — это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон о которых мы поговорим в следующей статье. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Важно помнить, что нейроны оперируют числами в диапазоне [0,1] или [-1,1]. А как же, вы спросите, тогда обрабатывать числа, которые выходят из данного диапазона? На данном этапе, самый простой ответ — это разделить 1 на это число. Этот процесс называется нормализацией, и он очень часто используется в нейронных сетях. Подробнее об этом чуть позже.

Что такое синапс?

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Синапс это связь между двумя нейронами. У синапсов есть 1 параметр — вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Допустим, есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейроне (пример — смешение цветов). На самом деле, совокупность весов нейронной сети или матрица весов — это своеобразный мозг всей системы. Именно благодаря этим весам, входная информация обрабатывается и превращается в результат.

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

Как работает нейронная сеть?

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

В данном примере изображена часть нейронной сети, где буквами I обозначены входные нейроны, буквой H — скрытый нейрон, а буквой w — веса. Из формулы видно, что входная информация — это сумма всех входных данных, умноженных на соответствующие им веса. Тогда дадим на вход 1 и 0. Пусть w1=0.4 и w2 = 0.7 Входные данные нейрона Н1 будут следующими: 1*0.4+0*0.7=0.4. Теперь когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации (подробнее о ней далее). Теперь, когда у нас есть выходные данные, мы передаем их дальше. И так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. Запустив такую сеть в первый раз мы увидим, что ответ далек от правильно, потому что сеть не натренирована. Чтобы улучшить результаты мы будем ее тренировать. Но прежде чем узнать как это делать, давайте введем несколько терминов и свойств нейронной сети.

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

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

Это самая распространенная функция активации, ее диапазон значений [0,1]. Именно на ней показано большинство примеров в сети, также ее иногда называют логистической функцией. Соответственно, если в вашем случае присутствуют отрицательные значения (например, акции могут идти не только вверх, но и вниз), то вам понадобиться функция которая захватывает и отрицательные значения.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

Тренировочный сет

Тренировочный сет — это последовательность данных, которыми оперирует нейронная сеть. В нашем случае исключающего или (xor) у нас всего 4 разных исхода то есть у нас будет 4 тренировочных сета: 0xor0=0, 0xor1=1, 1xor0=1,1xor1=0.

Итерация

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

Эпоха

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

Ошибка

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

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

Задача

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

зачем нужна функция активации в нейронных сетях. image loader. зачем нужна функция активации в нейронных сетях фото. зачем нужна функция активации в нейронных сетях-image loader. картинка зачем нужна функция активации в нейронных сетях. картинка image loader.

H1input = 1*0.45+0*-0.12=0.45
H1output = sigmoid(0.45)=0.61

H2input = 1*0.78+0*0.13=0.78
H2output = sigmoid(0.78)=0.69

O1input = 0.61*1.5+0.69*-2.3=-0.672
O1output = sigmoid(-0.672)=0.33

Результат — 0.33, ошибка — 45%.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *