вторник, 8 декабря 2020 г.

Нейронная сеть. Часть 2.

Продолжаю делать побитовое И на нейронных сетях.

Теперь в нейронах сетей будет применяться логистическая функция активации.

y = 1.0 / (1.0 + (e ** (-1.0 * x)))

Код

def activation_function (self, x) :
    """Logistic function
    """
    e = 2.718281828459045
    return (1.0 / (1.0 + (e ** (-1.0 * x))))

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

Первая нейронная сеть

w0 = 1.3
w1 = 1.2

Результат выполнения кода

$ python3 ./and_3_logistic.py
0.1 0.1 0.5621765008857981
0.1 0.9 0.7702989490466019
0.9 0.1 0.7841471891774855
0.9 0.9 0.9046505351008904

Едва ли не лучший результат этой сети. И этот результат так себе. Впрочем, это не провал. Если считать ответ сети меньше 0.8 за 0, а ответ больше 0.8 за 1, то сеть работает правильно.

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

w0 = 0.6
w1 = -1.1
w2 = 13.9
w3 = -2.2
w4 = -20.6
w5 = 10.3

Результат выполнения кода

$ python3 ./and_5_logistic.py
0.1 0.1 0.10136400812341441
0.1 0.9 0.10387328161724185
0.9 0.1 0.10146562216498858
0.9 0.9 0.9071138135502281

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

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

w0 = -14.4
w1 = 0.8
w2 = 6.8
w3 = -4.2
w4 = 3.4
w5 = -5.0
w6 = -6.8
w7 = 3.8
w8 = -6.4

Результат выполнения кода

$ python3 ./and_6_logistic.py
[0.1, 0.1] [0.10085496232204445]
[0.1, 0.9] [0.10332463740837802]
[0.9, 0.1] [0.10401008170139892]
[0.9, 0.9] [0.9038013292059486]

Результат практически не отличается от показанного второй сетью. Более сложная сеть может всё, что может менее сложная сеть. Очевидный вывод.

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

Комментариев нет:

Отправить комментарий