Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40_алгоритмов_Python.pdf
Скачиваний:
8
Добавлен:
07.04.2024
Размер:
13.02 Mб
Скачать

242

Глава 8. Алгоритмы нейронных сетей

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

Функция активации формулирует, каким образом входные данные для конкрет­ ного нейрона будут обработаны для получения выходных данных.

Как показано на следующей схеме‚ каждый нейрон в нейронной сети имеет функцию активации, которая определяет то, как будут обрабатываться входные данные (рис. 8.6).

1

2

x

 

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

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

w

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

wm

 

xm

m

 

Рис. 8.6

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

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

Рассмотрим несколько функций активации более подробно.

Пороговая функция

Самая простая из возможных функций активации — пороговая функция (threshold function). Выходные данные пороговой функции являются двоичными: 0 или 1. Она будет генерировать 1 в качестве выходного сигнала, если какое-либо вход­ ное значение больше 1. Это проиллюстрировано на следующей схеме (рис. 8.7).

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

Обучение нейронной сети

243

 

 

 

 

 

 

Рис. 8.7

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

Сигмоидная функция

Сигмоидную функцию (sigmoid function) можно рассматривать как улучшенный вариант пороговой. При работе с этой функцией активации мы получаем кон­ троль над ее чувствительностью (рис. 8.8).

Рис. 8.8

244

Глава 8. Алгоритмы нейронных сетей

Сигмоидная функция y определяется так:

Ее можно реализовать на Python следующим образом:

def sigmoidFunction(z): return 1/ (1+np.exp(-z))

Снижая чувствительность функции активации, мы делаем сбои на входе менее разрушительными. Обратите внимание, что вывод сигмоидной функции акти­ вации по-прежнему двоичный, то есть 0 или 1.

ReLU

Первые две функции активации, представленные в этой главе, преобразуют набор входных переменных в двоичные выходные данные. ReLU (rectified linear unit; блок линейной ректификации) — это функция активации, которая при­ нимает набор входных переменных и преобразует их в один непрерывный вывод. В нейронных сетях ReLU обычно используется в скрытых слоях, чтобы не пре­ образовывать непрерывные переменные в категориальные.

На следующей схеме представлен график функции активации ReLU (рис. 8.9).

Рис. 8.9

Обучение нейронной сети

245

Обратите внимание, что x ≤ 0 означает, что y = 0. Таким образом‚ любой сигнал со входа, который равен или меньше нуля, преобразуется в нулевой выход:

Как только x становится больше нуля, функция равна x.

Функция ReLU является одной из наиболее часто используемых функций ак­ тивации в нейронных сетях. Ее можно реализовать на Python следующим об­ разом:

def ReLU(x): if x<0:

return 0 else:

return x

Теперь рассмотрим функцию Leaky ReLU, основанную на ReLU.

Leaky ReLU

В ReLU отрицательное значение для x приводит к нулевому значению для y. Это означает, что в процессе теряется часть информации, что удлиняет циклы обучения, особенно в начале обучения. Функция активации Leaky ReLU (ReLU с утечкой) избавляется от этой проблемы. Для Leaky ReLU применимо следу­ ющее:

График функции показан на следующей схеме (рис. 8.10).

Здесь β — параметр со значением меньше единицы.

Функцию можно реализовать на Python следующим образом:

def leakyReLU(x,beta=0.01): if x<0:

return (beta*x) else:

return x

Существуют три способа указать значение β:

zz Указать значение по умолчанию для β.

246

Глава 8. Алгоритмы нейронных сетей

zz Сделать βпараметром в нашей нейронной сети и позволить нейронной сети определять значение (параметрическая ReLU).

zz Сделать β случайным значением (рандомизированная ReLU).

Рис. 8.10

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

Функция tanh аналогична сигмоидной функции, но она способна выдавать от­ рицательный сигнал. Это показано на следующей схеме (рис. 8.11).

Рис. 8.11