четверг, 10 декабря 2020 г.

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

Снова делаю побитовое И.

На этот раз функцией активации будет parametric rectified linear unit (PReLU).

По сути, PReLU состоит из двух линейных функций y = a * x. У первой функции множитель a = 0.1 (для x < 0). У второй функции множитель a = 1.0 (для x >= 0). Это один из возможных вариантов. А вариантов не мало.

Код

def activation_function (self, x) :
    """PReLU
    """
    if x < 0 :
        return (0.1 * x)
    return (x)

И опять изменение функции активации это единственное изменение в коде сетей (полностью код нейронных сетей показан в первой статье).

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

w0 = 0.4
w1 = 0.4

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

$ python3 ./and_3_prelu.py
0.1 0.1 0.08
0.1 0.9 0.40
0.9 0.1 0.40
0.9 0.9 0.72

Похожий результат был у сети с линейной функцией активации.

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

w0 = -0.5
w1 = 4.6
w2 = -0.7
w3 = 2.4
w4 = 1.2
w5 = -2.3

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

$ python3 ./and_5_prelu.py
0.1 0.1 0.10099999999999998
0.1 0.9 0.10099999999999909
0.9 0.1 0.10169999999999996
0.9 0.9 0.9089999999999989

Такой же результат был получен на сети с логистической функцией активации.

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

w0 = 0.8
w1 = 1.7
w2 = 5.0
w3 = -2.2
w4 = 4.4
w5 = 4.2
w6 = -3.4
w7 = -0.6
w8 = 1.3

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

$ python3 ./and_6_prelu.py
[0.1, 0.1] [0.10000000000000009]
[0.1, 0.9] [0.10080000000000044]
[0.9, 0.1] [0.10000000000000053]
[0.9, 0.9] [0.9000000000000021]

Ожидаемый результат.

Итак. Сеть с функцией активации PReLU похожа на сеть с логистической функцией. Зачем тогда вообще нужна PReLU? Одним из достоинств PReLU является скорость работы. PReLU существенно быстрее логистической функции. А чем быстрее функция активации, тем быстрее работает нейронная сеть. И обучение быстрой сети требует меньше времени.

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

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