1. Класс нейронной сети с функцией активации Sigmoid
Определение функции Sigmoid:
Функция Sigmoid (сигмоида) — это логистическая функция, которая преобразует любое вещественное число в значение в диапазоне от 0 до 1. Она часто используется в выходных слоях для задач бинарной классификации, где нужно получить вероятность. Формула: \[ \sigma(x) = \frac{1}{1+e^{-x}} \]Пример реализации (псевдокод или концепция):
Представим, что у нас есть входные данные \(x\), веса \(W\) и смещения \(b\).
Класс НейроннаяСеть_Sigmoid:
Инициализация(веса W, смещения b):
self.W = W
self.b = b
Функция_активации_Sigmoid(x):
возвращает 1 / (1 + e^(-x))
Прямое_распространение(входные_данные x):
# Вычисляем взвешенную сумму
z = (x * self.W) + self.b
# Применяем функцию активации
выход = self.Функция_активации_Sigmoid(z)
возвращает выход
2. Класс нейронной сети с функцией активации tanh
Определение функции tanh:
Функция гиперболического тангенса (tanh) похожа на Sigmoid, но ее выходные значения находятся в диапазоне от -1 до 1. Это делает ее центрированной относительно нуля, что может быть полезно для обучения некоторых нейронных сетей. Формула: \[ \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]Пример реализации (псевдокод или концепция):
Класс НейроннаяСеть_tanh:
Инициализация(веса W, смещения b):
self.W = W
self.b = b
Функция_активации_tanh(x):
возвращает (e^x - e^(-x)) / (e^x + e^(-x))
Прямое_распространение(входные_данные x):
# Вычисляем взвешенную сумму
z = (x * self.W) + self.b
# Применяем функцию активации
выход = self.Функция_активации_tanh(z)
возвращает выход
3. Класс нейронной сети с функцией активации ReLU
Определение функции ReLU:
ReLU (Rectified Linear Unit) — это выпрямленный линейный блок. Она возвращает \(x\) для всех положительных значений \(x\) и 0 для всех отрицательных значений \(x\). Это одна из самых популярных функций активации в глубоких нейронных сетях благодаря своей простоте и эффективности. Формула: \[ \text{ReLU}(x) = \text{max}(0, x) \]Пример реализации (псевдокод или концепция):
Класс НейроннаяСеть_ReLU:
Инициализация(веса W, смещения b):
self.W = W
self.b = b
Функция_активации_ReLU(x):
если x > 0:
возвращает x
иначе:
возвращает 0
Прямое_распространение(входные_данные x):
# Вычисляем взвешенную сумму
z = (x * self.W) + self.b
# Применяем функцию активации
выход = self.Функция_активации_ReLU(z)
возвращает выход
Общая структура для всех классов (для удобства):
Можно создать базовый класс, а затем наследовать от него:
Класс БазоваяНейроннаяСеть:
Инициализация(веса W, смещения b):
self.W = W
self.b = b
# Эта функция будет переопределяться в дочерних классах
Функция_активации(x):
# По умолчанию можно вернуть x (линейная активация)
возвращает x
Прямое_распространение(входные_данные x):
z = (x * self.W) + self.b
выход = self.Функция_активации(z)
возвращает выход
Класс НейроннаяСеть_Sigmoid(БазоваяНейроннаяСеть):
Функция_активации(x):
возвращает 1 / (1 + e^(-x))
Класс НейроннаяСеть_tanh(БазоваяНейроннаяСеть):
Функция_активации(x):
возвращает (e^x - e^(-x)) / (e^x + e^(-x))
Класс НейроннаяСеть_ReLU(БазоваяНейроннаяСеть):
Функция_активации(x):
если x > 0:
возвращает x
иначе:
возвращает 0
Это позволяет легко создавать нейронные сети с разными функциями активации, просто выбирая нужный класс.