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

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

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

Стоит заметить, что хотя большинство этих аббревиатур общеприняты, есть и исключения. Под RNN иногда подразумевают рекурсивную нейронную сеть, но обычно имеют в виду рекуррентную. Также можно часто встретить использование аббревиатуры RNN, когда речь идёт про любую рекуррентную НС. Автокодировщики также сталкиваются с этой проблемой, когда вариационные и шумоподавляющие автокодировщики (VAE, DAE) называют просто автокодировщиками (AE). Кроме того, во многих аббревиатурах различается количество букв «N» в конце, поскольку в каких-то случаях используется «neural network», а в каких-то - просто «network».

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


Нейронные сети прямого распространения
(feed forward neural networks, FF или FFNN) и перцептроны (perceptrons, P) очень прямолинейны, они передают информацию от входа к выходу. Нейронные сети часто описываются в виде слоёного торта, где каждый слой состоит из входных, скрытых или выходных клеток. Клетки одного слоя не связаны между собой, а соседние слои обычно полностью связаны. Самая простая нейронная сеть имеет две входных клетки и одну выходную, и может использоваться в качестве модели логических вентилей. FFNN обычно обучается по методу обратного распространения ошибки, в котором сеть получает множества входных и выходных данных. Этот процесс называется обучением с учителем, и он отличается от обучения без учителя тем, что во втором случае множество выходных данных сеть составляет самостоятельно. Вышеупомянутая ошибка является разницей между вводом и выводом. Если у сети есть достаточное количество скрытых нейронов, она теоретически способна смоделировать взаимодействие между входным и выходными данными. Практически такие сети используются редко, но их часто комбинируют с другими типами для получения новых.

Сети радиально-базисных функций (radial basis function, RBF) - это FFNN, которая использует радиальные базисные функции как функции активации. Больше она ничем не выделяется 🙂

Нейронная сеть Хопфилда (Hopfield network, HN) - это полносвязная нейронная сеть с симметричной матрицей связей. Во время получения входных данных каждый узел является входом, в процессе обучения он становится скрытым, а затем становится выходом. Сеть обучается так: значения нейронов устанавливаются в соответствии с желаемым шаблоном, после чего вычисляются веса, которые в дальнейшем не меняются. После того, как сеть обучилась на одном или нескольких шаблонах, она всегда будет сводиться к одному из них (но не всегда - к желаемому). Она стабилизируется в зависимости от общей «энергии» и «температуры» сети. У каждого нейрона есть свой порог активации, зависящий от температуры, при прохождении которого нейрон принимает одно из двух значений (обычно -1 или 1, иногда 0 или 1). Такая сеть часто называется сетью с ассоциативной памятью; как человек, видя половину таблицы, может представить вторую половину таблицы, так и эта сеть, получая таблицу, наполовину зашумленную, восстанавливает её до полной.

Цепи Маркова (Markov chains, MC или discrete time Markov Chains, DTMC) - это предшественники машин Больцмана (BM) и сетей Хопфилда (HN). Их смысл можно объяснить так: каковы мои шансы попасть в один из следующих узлов, если я нахожусь в данном? Каждое следующее состояние зависит только от предыдущего. Хотя на самом деле цепи Маркова не являются НС, они весьма похожи. Также цепи Маркова не обязательно полносвязны.

Машина Больцмана (Boltzmann machine, BM) очень похожа на сеть Хопфилда, но в ней некоторые нейроны помечены как входные, а некоторые - как скрытые. Входные нейроны в дальнейшем становятся выходными. Машина Больцмана - это стохастическая сеть. Обучение проходит по методу обратного распространения ошибки или по алгоритму сравнительной расходимости. В целом процесс обучения очень похож на таковой у сети Хопфилда.

Ограниченная машина Больцмана (restricted Boltzmann machine, RBM) удивительно похожа на машину Больцмана и, следовательно, на сеть Хопфилда. Единственной разницей является её ограниченность. В ней нейроны одного типа не связаны между собой. Ограниченную машину Больцмана можно обучать как FFNN, но с одним нюансом: вместо прямой передачи данных и обратного распространения ошибки нужно передавать данные сперва в прямом направлении, затем в обратном. После этого проходит обучение по методу прямого и обратного распространения ошибки.

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

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

Вариационные автокодировщики (variational autoencoder, VAE) обладают схожей с AE архитектурой, но обучают их иному: приближению вероятностного распределения входных образцов. В этом они берут начало от машин Больцмана. Тем не менее, они опираются на байесовскую математику, когда речь идёт о вероятностных выводах и независимости, которые интуитивно понятны, но сложны в реализации. Если обобщить, то можно сказать что эта сеть принимает в расчёт влияния нейронов. Если что-то одно происходит в одном месте, а что-то другое — в другом, то эти события не обязательно связаны, и это должно учитываться.

Шумоподавляющие автокодировщики (denoising autoencoder, DAE) - это AE, в которые входные данные подаются в зашумленном состоянии. Ошибку мы вычисляем так же, и выходные данные сравниваются с зашумленными. Благодаря этому сеть учится обращать внимание на более широкие свойства, поскольку маленькие могут изменяться вместе с шумом.


Сеть типа «deep belief»
(deep belief networks, DBN) - это название, которое получил тип архитектуры, в которой сеть состоит из нескольких соединённых RBM или VAE. Такие сети обучаются поблочно, причём каждому блоку требуется лишь уметь закодировать предыдущий. Такая техника называется «жадным обучением», которая заключается в выборе локальных оптимальных решений, не гарантирующих оптимальный конечный результат. Также сеть можно обучить (методом обратного распространения ошибки) отображать данные в виде вероятностной модели. Если использовать обучение без учителя, стабилизированную модель можно использовать для генерации новых данных.


Свёрточные нейронные сети
(convolutional neural networks, CNN) и глубинные свёрточные нейронные сети (deep convolutional neural networks, DCNN) сильно отличаются от других видов сетей. Обычно они используются для обработки изображений, реже для аудио. Типичным способом применения CNN является классификация изображений: если на изображении есть кошка, сеть выдаст «кошка», если есть собака - «собака». Такие сети обычно используют «сканер», не парсящий все данные за один раз. Например, если у вас есть изображение 200×200, вы не будете сразу обрабатывать все 40 тысяч пикселей. Вместо это сеть считает квадрат размера 20 x 20 (обычно из левого верхнего угла), затем сдвинется на 1 пиксель и считает новый квадрат, и т.д. Эти входные данные затем передаются через свёрточные слои, в которых не все узлы соединены между собой. Эти слои имеют свойство сжиматься с глубиной, причём часто используются степени двойки: 32, 16, 8, 4, 2, 1. На практике к концу CNN прикрепляют FFNN для дальнейшей обработки данных. Такие сети называются глубинными (DCNN).

Развёртывающие нейронные сети (deconvolutional networks, DN) , также называемые обратными графическими сетями, являются обратным к свёрточным нейронным сетям. Представьте, что вы передаёте сети слово «кошка», а она генерирует картинки с кошками, похожие на реальные изображения котов. DNN тоже можно объединять с FFNN. Стоит заметить, что в большинстве случаев сети передаётся не строка, а какой бинарный вектор: например, <0, 1> - это кошка, <1, 0> - собака, а <1, 1> - и кошка, и собака.

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

Уже несколько лет подряд разработчики из разных уголков мира демонстрируют нейронные сети, которые либо могут улучшить фотографии, либо нарисовать картинки с нуля. На калифорнийской конференции GTC 2019 группа Research показала нечто поистине удивительное - искусственный интеллект GauGAN, который создает реалистичные пейзажи на основе схематических рисунков. В отличие от всех аналогичных проектов, новинка умеет добавлять тени и отражения даже от мельчайших камней и менять времена года.

Группы исследователей часто экспериментируют с видео контентом при помощи нейросетей. Взять к примеру , которая в конце 2017 года нейронную сеть менять погоду и время суток на видео. Очередной проект подобного рода запустили исследователи из Университета Карнеги-Мелона, создавшие нейросеть для наложения мимики одного человека на лицо другого.

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

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

Что же из себя представляет нейронная сеть ? А это ясно из названия – сеть представляет из себя совокупность нейронов, соединенных друг с другом определенным образом. Рассмотрим один нейрон:

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

  • Прием сигналов от предыдущих элементов сети
  • Вычисление выходного сигнала
  • Передача выходного сигнала следующим элементам нейронной сети

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

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

Комбинирование входных сигналов

Поскольку к каждому нейрону могут приходить несколько входных сигналов, то при моделировании нейронной сети необходимо задать определенное правило комбинирования всех этих сигналов. И довольно-таки часто используется правило суммирования взвешенных значений связей. Что значит взвешенных? Сейчас разберемся…

Каждую связь в сети нейронов можно полностью охарактеризовать при помощи трех факторов:

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

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

Выходной сигнал нейрона 1 равен 5. Вес связи между нейронами равен 2. Таким образом, чтобы определить входной сигнал нейрона 2, приходящий от нейрона 1, необходимо умножить значение этого сигнала на вес связи (5*2). Как видите, все очень просто)

А если сигналов много? Правильно! Они все суммируются. В итоге на входе нейрона мы получаем следующее:

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

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

Такой нейронной сети будет иметь следующий вид:

Например, от второго элемента к третьему идет связь, вес которой равен 3. Смотрим на матрицу, вторая строка, третий столбец – число 3, все верно 😉

С весовыми коэффициентами и комбинированным вводом разобрались, двигаемся дальше.

Функция активности элемента.

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

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

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

Элементы 1 и 2 являются входными, а элемент 7 – выходным. Нейроны 5 и 6 называются скрытыми, поскольку они не связаны с внешней средой. Таким образом, мы получили три слоя – входной, скрытый и выходной. Элементы 3 и 4 называют элементами смещения. Их выходной сигнал (активность) всегда равен 1. Для вычисления комбинированного ввода в этой сети мы будем использовать правило суммирования взвешенных связей, а в качестве функции активности будет выступать пороговая функция. Если комбинированный ввод элемента меньше 0, то активность равна 0, если ввод больше 0, то активность – 1.

Давайте подадим на вход нейрона 1 – единицу, а на вход нейрона 2 – ноль. В этом случае на выходе мы должны получить 1 (0 XOR 1 = 1). Рассчитаем выходное значение вручную для демонстрации работы сети.

Комбинированный ввод элемента 5: = 1 * (-1) + 0 * (-1) + 1 * 1.5 = 0.5.

Активность элемента 5: 1 (0.5 > 0).

Комбинированный ввод элемента 6: = 1 * (-1) + 0 * (-1) + 1 * 0.5 = -0.5.

Активность элемента 6: 0.

Комбинированный ввод элемента 7: = 1 * (1) + 0 * (-1) + 1 * (-0.5) = 0.5.

Активность элемента 7, а в то же время и выходное значение сети равно 1. Что и требовалось доказать =)

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

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

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

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

Схема типового искусственного нейрона

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

Рис. 1.Типовой искусственный нейрон

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

Структура сети с обратным распространением" src="https://libtime.ru/uploads/images/00/00/01/2014/06/27/set-s-obratnym-rasprostraneniyem.png.pagespeed.ce.O_0jCrJsLr.png" alt="Структура сети с обратным распространением" width="450" height="370">

Рис. 2. Сеть с обратным распространением

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

Характеристики нейронных сетей

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

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

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

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

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


Нейронная сеть как средство решения задачи

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

  1. Память нейронной сети является отказоустойчивой. При удалении отдельных частей нейронной сети происходит лишь снижение качества информации, в ней сохраняется, но не полное ее исчезновение. Это происходит потому, что информация хранится в распределенной форме.
  2. Качество информации в нейронной сети, которая подлежит сокращению, снижается постепенно, пропорционально той части сети, была удалена. Катастрофической потери информации не происходит.
  3. Данные в нейронной сети хранятся естественным образом с помощью ассоциативной памяти. Ассоциативной памятью называют такую память, в которой достаточно выполнить поиск частично представленных данных, чтобы полностью восстановить всю информацию. В этом состоит отличие ассоциативной памяти от обычной памяти, в которой получение данных осуществляется путем указания точного адреса соответствующих элементов памяти.
  4. позволяют выполнять экстраполяцию и интерполяцию на основе информации, хранящейся в них. То есть, обучение позволяет придать сети способности осуществлять поиск важных особенностей или связей в данных. После этого сеть в состоянии экстраполировать и выявлять связи в новых данных, что к ней поступают. Например, в одном эксперименте было проведено обучение нейронной сети на гипотетическом примере. После окончания обучения сеть приобрела способность правильно отвечать на вопросы, по которым обучение не проводилось.
  5. Нейронные сети — пластичны. Даже после удаления определенного количества нейронов может быть проведено повторное обучение сети до ее первичного уровня (конечно, если в ней осталась достаточное количество нейронов). Такая особенность является также характерной для мозга человека, в котором могут быть повреждены отдельные части, но со временем, с помощью обучения, достигнута первичного уровня навыков и знаний.

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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


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

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


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

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

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


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

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

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

Линейная функция


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

Сигмоид


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

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


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

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

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

Итерация

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

Эпоха

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


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

Ошибка

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


Top