Структура и принцип работы полносвязных нейронных сетей

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

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

Каждая связь между нейронами имеет определенный вес:

 - от j-го нейрона к i-му нейрону

и, сигнал, проходя по ней, меняет свое значение в соответствии с этим весом:

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

В концепции персептрона функции активации выбираются пороговыми:

Например, такими:

        

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

  • есть ли у него квартира;
  • как относится к тяжелому року;
  • насколько красив.

Причем, везде, «да» означает +1, а нет – 0. Наша девочка так воспитана, что положительно относится к наличию квартиры и красоте, и отрицательно к тяжелому року. Она больше любит лирическую музыку. Именно поэтому веса связей для дома и красивого парня – положительные, а для рока установлено отрицательное значение. В момент знакомства, на вход ее НС поступают сигналы  в виде значений +1 – для «да» и 0 – для «нет». Затем, каждое входное значение умножается на вес синаптической связи, по которой следует к выходному нейрону. На входе формируется суммарный сигнал в виде:

Далее, это значение проходит через функцию активации:

и на выходе нейрона формируется сигнал «да» или «нет».

Предположим, что ей встречается красивый парень с квартирой и обожающий тяжелый рок. Какая будет реакция? Умножаем все веса на 1, складываем, получаем сумму:

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

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

Снова на грани была сформирована симпатия. А вот если бы симпатичный парень любил рок, то было бы значение:

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

Уверенная симпатия. Вот общий принцип работы НС. Однако при такой простой структуре наша девочка не способна к сложным умозаключениям. Например, если она встречает парня с квартирой, обожающего рок, то ни за что не согласится с ним встречаться. Вне зависимости: красив он или нет. А вот если он красив, то готова пойти с ним на встречу, даже если он любит рок и не имеет квартиры. Такие более сложные выводы может позволить себе девочка с дополнительным слоем нейронов.

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

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

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

Вот так, в самом простом случае работает НС прямого распространения. И, чтобы вы могли со всем этим самостоятельно поиграться, я приведу пример ее реализации на языке Python:

import numpy as np
 
def act(x):
    return 0 if x < 0.5 else 1
 
def go(house, rock, attr):
    x = np.array([house, rock, attr])
    w11 = [0.3, 0.3, 0]
    w12 = [0.4, -0.5, 1]
    weight1 = np.array([w11, w12])  # матрица 2x3
    weight2 = np.array([-1, 1])     # вектор 1х3
 
    sum_hidden = np.dot(weight1, x)       # вычисляем сумму на входах нейронов скрытого слоя
    print("Значения сумм на нейронах скрытого слоя: "+str(sum_hidden))
 
    out_hidden = np.array([act(x) for x in sum_hidden])
    print("Значения на выходах нейронов скрытого слоя: "+str(out_hidden))
 
    sum_end = np.dot(weight2, out_hidden)
    y = act(sum_end)
    print("Выходное значение НС: "+str(y))
 
    return y
 
house = 1
rock = 0
attr = 1
 
res = go(house, rock, attr)
if res == 1:
    print("Ты мне нравишься")
else:
    print("Созвонимся")

Видео по теме