РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
387 of 769 menu

Функция F.gelu

Функция F.gelu (Gaussian Error Linear Unit) применяет нелинейное преобразование к каждому элементу входного тензора. В отличие от функции ReLU, которая просто обнуляет отрицательные значения, GELU взвешивает входные значения по их величине. Активация вычисляется как произведение входа на функцию распределения стандартного нормального распределения: x * Φ(x). Функция имеет гладкую форму и часто показывает лучшие результаты в современных архитектурах, таких как GPT и BERT.

Первым параметром функция принимает тензор input, к которому применяется активация. Вторым параметром можно передать строку approximate для выбора способа вычисления: 'none' (точное вычисление), 'tanh' (приближение через тангенс) - используется по умолчанию.

Синтаксис

torch.nn.functional.gelu(input, approximate='tanh')

Пример

Давайте применим функцию gelu к тензору с отрицательными и положительными числами:

import torch import torch.nn.functional as F t = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0]) res = F.gelu(t) print(res)

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

tensor([-0.0036, -0.1587, 0.0000, 0.8413, 2.9964])

Пример

Функцию gelu часто применяют в нейронных сетях после линейных слоёв. Рассмотрим использование в составе простого полносвязного слоя:

import torch import torch.nn as nn import torch.nn.functional as F layer = nn.Linear(10, 5) t = torch.randn(3, 10) res = F.gelu(layer(t)) print(res.shape)

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

torch.Size([3, 5])

Пример

Рассмотрим разницу между точным и приближённым способом вычисления gelu. Параметр approximate может принимать значение 'tanh' или 'none':

import torch import torch.nn.functional as F t = torch.tensor([-0.5, 0.5]) res_tanh = F.gelu(t, approximate='tanh') res_none = F.gelu(t, approximate='none') print("tanh:", res_tanh) print("none:", res_none)

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

tanh: tensor([-0.1543, 0.3457]) none: tensor([-0.1543, 0.3457])

Смотрите также

  • функцию relu,
    которая применяет классическую активацию выпрямления
  • функцию silu,
    которая применяет активацию Sigmoid Linear Unit
  • функцию elu,
    которая применяет экспоненциальную активацию
  • функцию mish,
    которая применяет активацию Mish
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить