Пример 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 позволяет контролировать процесс обучения и выявлять признаки переобучения.

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