Рубрики
Без рубрики

Функция RELU в Python

Функция RELU или исправлена линейная активация является наиболее распространенным выбором функции активации в мире глубокого обучения. RELU обеспечивает состояние

Автор оригинала: Pankaj Kumar.

RELU или Исправлена функция линейной активации является наиболее распространенным выбором функции активации в мире глубокое обучение Отказ RELU обеспечивает состояние арт-результатов и является вычислительно очень эффективным одновременно.

Основная концепция функции активации RELU выглядит следующим образом:

Return 0 if the input is negative otherwise return the input as it is.

Мы можем представлять его математически следующим образом:

Псевдо код для RELU заключается в следующем:

if input > 0:
	return input
else:
	return 0

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

Рекомендуется прочитать: Линейная алгебра для машинного обучения [Часть 1/2]

Давайте начнем!

Реализация функции RELU в Python

Давайте напишем нашу собственную реализацию RELU в Python. Мы будем использовать функцию встроенной максимальной реализации.

Код для RELU заключается в следующем:

def relu(x):
	return max(0.0, x)

Чтобы проверить функцию, давайте запустим ее на нескольких входах.

x = 1.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -10.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 0.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 15.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -20.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))

Полный код

Полный код приведен ниже:

def relu(x):
	return max(0.0, x)

x = 1.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -10.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 0.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 15.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -20.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))

Выход:

Applying Relu on (1.0) gives 1.0
Applying Relu on (-10.0) gives 0.0
Applying Relu on (0.0) gives 0.0
Applying Relu on (15.0) gives 15.0
Applying Relu on (-20.0) gives 0.0

Градиент функции RELU

Посмотрим, что будет градиентом (производной) функции RELU. На дифференциации мы получим следующую функцию:

f'(x) = 1, x>=0
      = 0, x<0

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

Чтобы преодолеть эту проблему, у нас есть Уверенная функция RELU. Давайте узнаем об этом дальше.

Уверенная функция RELU

Уверенная функция RELU представляет собой импровизацию регулярной функции RELU. Чтобы решить проблему нулевого градиента для отрицательного значения, утечка RELU дает чрезвычайно небольшой линейный компонент X к отрицательным входам.

Математически мы можем выразить утечку RELU как:

f(x)= 0.01x, x<0
    = x,   x>=0

Математически:

  • f (x) = 1 (x <0)
  • (αx) +1) (x)

Здесь А является небольшой константой, как 0,01, которую мы взяли выше.

Графически это может быть показано как:

Градиент протекающих RELU

Давайте рассчитаем градиент для лестной функции RELU. Градиент может выйти:

f'(x) = 1,  x>=0
      = 0.01, x<0

В этом случае градиент для отрицательных входов не равен нулю. Это означает, что весь нейрон будет обновлен.

Реализация утечки relu в Python

Реализация для утечки RELU приведена ниже:

def relu(x):
  if x>0 :
    return x
  else :
    return 0.01*x

Давайте попробуем это на наличие входных данных.

 
x = 1.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -10.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 0.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 15.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -20.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))

Полный код

Полный код для LEAKY RELU приведен ниже:

def leaky_relu(x):
  if x>0 :
    return x
  else :
    return 0.01*x
 
x = 1.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -10.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 0.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 15.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -20.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))

Выход:

Applying Leaky Relu on (1.0) gives 1.0
Applying Leaky Relu on (-10.0) gives -0.1
Applying Leaky Relu on (0.0) gives 0.0
Applying Leaky Relu on (15.0) gives 15.0
Applying Leaky Relu on (-20.0) gives -0.2

Заключение

Это руководство было о функции RELU в Python. Мы также увидели улучшенную версию функции RELU. Уверенность RELU решает проблему нулевых градиентов для отрицательных значений в функции RELU.