Нейронные сети. Введение.

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

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

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

Элемент нейронной сети

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

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

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

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

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

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

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

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

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

Нейронная сеть

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

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

    \[net_j = \sum_{i=1}^{N}{x_i*w_{ij}}\]

В этой формуле net_j — это результат комбинирования всех входных сигналов для нейрона j (комбинированный ввод нейрона). N — количество элементов, передающих свои выходные сигналы на вход сигнала j. А w_{ij} — вес связи, соединяющей нейрон i с нейроном j. Суммируя все взвешенные входные сигналы, мы получаем комбинированный ввод элемента сети.

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

Пример нейронной сети

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

    \[ W = \left[ \begin{array}{ccccc} 0 & -0.4 & -5.6 & 4.7 & 0 \\ 1.2 & 0 & 3 & 0 & 2.4 \\ 0 & 0 & 0 & -3.3 & 7.5 \\ -2.4 & 0 & 0 & 0 & 2.5 \\ 0 & 0 & 0 & 0 & 0 \\ \end{array}\right] \]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Понравилась статья? Поделись с друзьями!

Нейронные сети. Введение.: 2 комментария
  1. Можно отдать управление роботом нейронным сетям? Какие для этого мощности нужны? Обычный STM32 пойдет или нужен уже настоящий процессор?

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

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