Пример 1. Вычисление выхода искусственного нейрона
Искусственный нейрон вычисляет взвешенную сумму входных
признаков, добавляет смещение и применяет функцию активации.
Математическая модель:
a = φ(wᵀx + b),
где:
Рассмотрим нейрон с двумя входами и функцией активации ReLU.
Реализация на Python:
import numpy as np
x = np.array([2.0, 3.0])
w = np.array([0.5, -0.2])
b = 0.1
z = np.dot(w, x) + b
def relu(z):
return
np.maximum(0, z)
a = relu(z)
print("Взвешенная сумма:", z)
print("Выход нейрона:", a)
Результат:
Взвешенная сумма: 0.5
Выход нейрона: 0.5
Функция ReLU возвращает ноль для отрицательных значений и
само значение для положительных.
Функции активации позволяют нейронным сетям моделировать
нелинейные зависимости.
Пример 2. Создание многослойного перцептрона
Многослойный перцептрон состоит из нескольких слоёв
нейронов.
В лекции рассматривается сеть с архитектурой 4 → 8
→ 1.
Такая сеть содержит:
Количество обучаемых параметров:
(4 × 8 + 8) + (8 × 1 + 1) = 49.
Реализация на Python:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.Input(shape=(4,)),
tf.keras.layers.Dense(
8,
activation="relu"
),
tf.keras.layers.Dense(
1,
activation="sigmoid"
)
])
model.summary()
print(
"Количество
параметров:",
model.count_params()
)
Результат:
Количество обучаемых параметров: 49.
Скрытый слой использует функцию ReLU, а выходной — сигмоиду.
Во время обучения параметры всех слоёв обновляются на основе
градиентов, вычисленных методом обратного распространения ошибки.
Пример 3. Обучение нейронной сети и контроль качества
Обучение нейронной сети обычно выполняется мини-батчами с
использованием оптимизаторов SGD или Adam.
Для контроля обучения необходимо сравнивать показатели на
обучающих и валидационных данных.
Реализация на Python:
import numpy as np
import tensorflow as tf
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
tf.keras.utils.set_random_seed(42)
X, y = make_classification(
n_samples=400,
n_features=4,
n_informative=3,
n_redundant=0,
random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
stratify=y,
random_state=42
)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = tf.keras.Sequential([
tf.keras.Input(shape=(4,)),
tf.keras.layers.Dense(8, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid")
])
model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["accuracy"]
)
history = model.fit(
X_train,
y_train,
epochs=30,
batch_size=16,
validation_split=0.2,
verbose=0
)
test_loss, test_accuracy = model.evaluate(
X_test,
y_test,
verbose=0
)
print("Тестовая точность:", round(test_accuracy,
3))
print(
"Последняя
train loss:",
round(history.history["loss"][-1], 3)
)
print(
"Последняя
validation loss:",
round(history.history["val_loss"][-1], 3)
)
В этом примере используется оптимизатор Adam и обучение
мини-батчами.
Сравнение loss и val_loss позволяет контролировать процесс
обучения и выявлять признаки переобучения.
Масштабирование обучается только на обучающей выборке, чтобы
исключить утечку информации из тестовых данных.