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

В этом руководстве по TensorFlow я объясню все о функции активации, включая ее использование, тип и подтипы, а также предоставлю математическое объяснение того, как функция активации обрабатывает входное значение. Дополнительно вы узнаете, как построить модель с различными функциями активации.

Содержание

Что такое функция активации?

Функция активации — это способ превратить входные данные в значимые выходные данные; это как бы ворота между входом, подаваемым на перцептрон (нейрон), и его выходом, который поступает на следующий слой.

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

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

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

Что означает линейность в функциях активации?

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

В математике эту линейную зависимость можно представить прямой линией в двумерном пространстве, что означает использование линейных уравнений вида y=mx+c, где m — наклон линии, а c — точка пересечения с осью y.

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

Ключевыми характеристиками линейного режима являются его простота и совместимость, но он ограничивается решением задач, в которых связь между входной и целевой переменной является линейной. Такая модель линейных отношений ограничена; он не может изучать сложные закономерности из набора данных.

Нелинейная функция активации

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

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

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

Применяя эти нелинейные преобразования, нейронные сети могут понимать сложные структуры данных и решать широкий спектр проблем, недоступных линейному режиму.

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

Без нелинейности нейронные сети были бы ограничены решением только простых задач с линейными отношениями, что значительно ограничивало бы их применимость и эффективность при решении реальных задач.

Тип функции активации

Существует множество функций активации со своими уникальными характеристиками и возможностями использования. Тем не менее, я объясню некоторые распространенные функции активации, используемые для обучения нейронной сети.

Функции активации подразделяются на линейные и нелинейные функции активации.

Линейные функции активации

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

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

Математически это представляется как f(x)=x. Это также называется функцией идентификации или функцией передачи, которая выводит входные данные как есть.

Линейная функция активации

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

Нелинейные функции активации

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

Существуют различные типы нелинейных функций активации, которые описаны ниже.

Активация сигмовидной функции

Когда эта функция используется в качестве функции активации в перцептроне (нейроне), входные данные, передаваемые в эту функцию, преобразуются в значение от 0 до 1. Таким образом, она принимает входное значение, изменяет его и возвращает новое значение от 0 до 1. 1.

Математически он использует формулу f(x) = 1/1+ex.

Активация сигмовидной функции

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

Но здесь вы хотите назначить оценку так, чтобы она не была слишком большой или слишком маленькой. Я имею в виду, оно должно быть между 0 и 1.

Предположим, вы передаете число (и вызываете это число x) в сигмовидную функцию, которая возвращает другое число f(x) в диапазоне от 0 до 1. Это возвращаемое число должно быть похоже на вероятность, например вероятность спама или отсутствия спама. .

Давайте посмотрим, как он обрабатывает ввод:

  • Поэтому, когда вы передаете число x этой функции, она сначала делает его отрицательным как -x. Затем он возводит специальное число под названием e (значение e равно 2,71828) в степень -x. При этом, если число маленькое, оно становится большим; если оно велико, оно становится маленьким.
  • После этого эта функция добавляет 1 к этому маленькому или большому числу, и теперь у нас есть 1+ex. Наконец, он принимает 1 и делит его на 1+ex, что возвращает окончательный результат — f(x).

Позвольте мне показать вам фактическое число:

  • Предположим, вы передаете число 2 в сигмовидную функцию.
  • Затем функция делает его отрицательным как -2, теперь возводите e в степень -2, и значение e равно 2,71828, поэтому, когда вы делаете e-2, вы получаете значение около 0,135.
  • Добавьте 1 к значению 0,135, и вы получите 1,135, теперь возьмите 1 и разделите его на 1,135, и вы получите значение 0,882.

Поэтому, когда вы передаете функцию 2 в сигмоидальную функцию, она возвращает значение 0,882, которое находится между 0 и 1. Это означает, что вероятность того, что сообщение является спамом, составляет 88,2%. Обычно эта функция используется для задач двоичной классификации.

Функция активации гиперболического тангенса (tanh)

Когда функция активации tanh (гиперболический тангенс) используется в перцептроне (нейроне), входные данные, передаваемые в эту функцию, преобразуются в значение от -1 до 1. Таким образом, она принимает входное значение, изменяет его и возвращает новое значение. между -1 и 1.

Он используется в скрытом слое искусственных нейронных сетей.

Математически он использует формулу f(x) = ex – ex / ex + ex.

Функция активации гиперболического тангенса (tanh)

Давайте снова возьмем тот же пример со спамом, где вы должны решить, является ли сообщение спамом. Более высокий балл означает большую вероятность спама, а более низкий — меньшую вероятность спама. Итак, вы передаете число (называемое им x) в функцию активации tanh, и она возвращает другое число f(x) в диапазоне от -1 до 1.

Давайте посмотрим, как он обрабатывает это число или входное значение:

  • Когда вы передаете число или x этой функции, она создает две копии этого числа: положительное x и -x.
  • Затем он возводит e в степень каждого числа. В результате получается два числа: одно большое, если x велико, и одно большое, если x мало.
  • После этого он вычитает отрицательное число из положительного числа и прибавляет положительное число к отрицательному числу. Итак, у нас есть ex – ex вверху и ex + ex внизу.
  • Наконец, он делит верхнее число на нижнее число(ex – ex / ex + ex) и возвращает результат в виде f(x).

Давайте посмотрим на фактический входной номер и на то, как он работает при вводе в функцию активации tanh:

  • Вы передаете число 1 в качестве входных данных в функцию активации tanh. Получается два числа: положительная 1 и отрицательная -1.
  • Теперь эта функция возводит e в степень каждого числа как e1 и e-1, вычитает отрицательное число из положительного, что дает e1 – e-1, и добавляет положительное число к отрицательному числу, что дает e1 + e. -1.
  • Значение e1 составляет 2,71828, а e-1 — 0,357. Значение e1 – e-1 означает 2,71828 – 0,357, дает 2,3504, а e1 + e-1 означает 2,71828 + 0,357, дает 3,0862.

Теперь разделите 2,3504 на 3,0862, чтобы получить значение 0,7616, которое означает, что если оценка сообщения равна 1 и это значение передается в функцию активации tanh, то вероятность того, что сообщение является спамом, составляет 76,2%.

Функция активации ReLu (выпрямленная линейная единица)

Когда ReLu используется в качестве функции активации в перцептроне, он обрабатывает входное значение и возвращает то же входное значение; в противном случае это 0.

Это означает, что если входное значение положительное, оно возвращает то же число, если оно не является положительным или отрицательным, оно возвращает 0.

Математически он использует формулу f(x) = max(0, x)

Функция активации ReLu (выпрямленная линейная единица)

Обычно передача входного значения как три в функцию активации ReLu проверяет, больше ли значение 0, если это так, он возвращает то же число. Если вы передадите входное значение как отрицательное, например -3, оно вернет 0.

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

Это работает на основе вероятности; когда функция активации SOFTMAX используется в персептроне, она преобразует заданные логиты (необработанные оценки) в вероятности, беря экспоненту каждого выходного сигнала и затем нормализуя эти значения.

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

Математически он использует формулу f(xi) = exi/Σiexj.

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

  • Предположим, что список значений равен x, тогда для каждого числа в списке x возьмите специальное число e и возведите его в степень этого числа, создав список новых чисел.
  • Затем он суммирует все новые числа, чтобы получить общую сумму.
  • В конце концов, для каждого числа в списке x функция делит новое число на сумму, чтобы получить вероятность.

Опять же, возьмем пример электронной почты, но здесь вам необходимо присвоить оценку электронному письму, является ли оно спамом, не спамом или сомнительным.

Итак, присвойте такие оценки, как:

  • Если электронное письмо является спамом, его оценка равна 1.
  • если электронное письмо не является спамом, его оценка равна 0.
  • Если электронное письмо сомнительно, его оценка равна 2.

Например, вы указываете числа [1, 0, 2]. Когда вы передаете список чисел в функцию Softmax, она обрабатывает список чисел следующими способами:

  • Каждое число в списке [1, 9, 2] возводит e в степень этого числа следующим образом: e1, e0, e2. При этом создается список новых чисел [e1, e0, e2].
  • Значение e1 равно 2,71, e0 равно 1 и e2 равно 7,389. Этот список выглядит следующим образом [2.71, 1, 7.389]. Далее он суммирует все числа 2,71 + 1 + 7,389 и возвращает сумму, которая равна 11,107.
  • Для каждого нового числа в списке [2.71, 1, 7.389]. Функция делит новое число на общее число: 2,71/11,107, 1/11,107 и 7,389/11,107.
  • При делении вы получаете три значения: 0,245, 0,090 и 0,666. Эти три значения являются значениями вероятности для списка чисел, который вы передаете функции Softmax.

Вы можете сказать, что вероятность того, что письмо является спамом, составляет 24,5%, вероятность того, что это не спам, составляет 9,0%, а вероятность того, что оно сомнительна, составляет 66,6%.

Функция Softmax используется для мультиклассификации, когда вам нужно классифицировать несколько объектов; в основном его можно использовать в нейронной сети, где требуется идентификация объекта на изображении или распознавание слов в данном предложении.

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

Где использовать

Итак, как известно, нейронные сети состоят из трех слоев: входного слоя, скрытого слоя и выходного слоя. Каждый слой состоит из перцептрона (нейрона). Этот персептрон имеет функции активации.

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

Входной слой: на входном слое вы можете использовать ReLu, Tanh и Sigmoid, но, как правило, этот слой не содержит функции активации; он просто передает входные данные на следующий слой.

Скрытый слой: используйте ReLu, Tanh и Sigmoid; здесь необходимо использовать функцию активации; настоящее обучение происходит на скрытом уровне.

Выходной слой: используйте сигмоид, Softmax и линейный. Это зависит от того, для какой задачи предназначена нейросеть. Для двоичной классификации используйте Sigmoid; для мультиклассификации используйте Softmax; для регрессии используйте Linear.

Построение модели

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

Помните, это всего лишь пример того, как использовать функцию активации в тензорном потоке.

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

import tensorflow as tf
import numpy as np

Создайте набор данных для обучения и проверки, используя приведенный ниже код.

x_train = np.random.rand(1000, 20) 
y_train = np.random.randint(2, size=(1000,))


x_val = np.random.rand(200, 20) 
y_val = np.random.randint(2, size=(200,))

Построение модели

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

Классификация спама по электронной почте с помощью функции активации сигмовидного тензорного потока

Определите модель, используя следующий код.

model_sigmoid = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation='sigmoid', input_shape=(x_train.shape[1],)), 
    tf.keras.layers.Dense(32, activation='sigmoid'), 
    tf.keras.layers.Dense(1, activation='sigmoid') 
])

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

model_sigmoid.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Подберите или обучите модель.

model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_val, y_val))

Классификация спама по электронной почте с помощью функции активации сигмовидного тензорного потока

С помощью функции активации Tanh

Создайте модель с функцией активации tanh, как показано ниже.

model_tanh = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation='tanh', input_shape=(x_train.shape[1],)),
    tf.keras.layers.Dense(32, activation='tanh'),  
    tf.keras.layers.Dense(1, activation='sigmoid')
])

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

model_tanh.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Обучите модель.

model_tanh.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_val, y_val))

Классификация спама по электронной почте с помощью функции активации Tanh Tensorflow

На основе приведенного выше вывода вы создали модель, используя функции активации tanh и различные функции потерь,binary_crossentropy.

С помощью функции активации ReLu

Создайте модель с функцией активации ReLu, как показано ниже.

model_relu = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation='relu', input_shape=(x_train.shape[1],)),  
    tf.keras.layers.Dense(32, activation='relu'),  
    tf.keras.layers.Dense(1, activation='sigmoid')])

В приведенном выше коде определите модель входного и скрытого слоев с помощью функции активации relu.

model_relu.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Обучите модель.

model_relu.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_val, y_val))

С помощью функции активации ReLu Tensorflow

С помощью функции активации Softmax

Создайте набор данных с несколькими классификациями. Предположим, что набор данных предназначен для умножения, просто для примера.

x_train_multi = np.random.rand(1000, 20) 
y_train_multi = np.random.randint(10, size=(1000,)) 

x_val_multi = np.random.rand(200, 20) 
y_val_multi = np.random.randint(10, size=(200,))

Как показано ниже, создайте модель с функцией активации softmax в выходном слое.

model_softmax = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation='relu', input_shape=(x_train_multi.shape[1],)),  
    tf.keras.layers.Dense(32, activation='relu'),  
    tf.keras.layers.Dense(10, activation='softmax') ])

В приведенном выше примере создания модели, содержащей входной и скрытый слой с функцией активации relu и выходной слой с функцией активации softmax, посмотрите, какой слой использует функцию активации softmax.

model_softmax.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

Обучите модель.

model_softmax.fit(x_train_multi, y_train_multi, epochs=10, batch_size=32, validation_data=(x_val_multi, y_val_multi))

С помощью функции активации Softmax 

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

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

Заключение

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

Добавить комментарий