Концепции ИИ на Python

Прямое распространение и функции потерь на Python

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

Суть простыми словами

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

Пропустите входные данные слой за слоем через маленькую нейросеть и измерьте ошибку с помощью квадратичной ошибки и кросс-энтропии.

Главные идеи

  • Полносвязный (dense) слой соединяет каждый вход с каждым нейроном слоя.
  • Выход одного слоя становится входом следующего.
  • Потеря - это одно число, и чем оно меньше, тем лучше предсказания.
  • Квадратичную ошибку используют для чисел, а кросс-энтропию - для вероятностей и классов.

Когда это использовать?

  • Понять, что происходит внутри нейронных сетей и библиотек ИИ.
  • Разобраться в идее до того, как реализовать её в соответствующих задачах.
  • Подготовиться к курсам по машинному обучению, собеседованиям и проектам.

Посмотрите в действии

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

Пример кода

Запустить код →
main.py
import math

def dense(inputs, weights, biases, activation):
    # Each row of weights belongs to one neuron in the layer.
    return [activation(sum(x * w for x, w in zip(inputs, row)) + b) for row, b in zip(weights, biases)]

relu = lambda z: max(0.0, z)
sigmoid = lambda z: 1 / (1 + math.exp(-z))

x = [1.0, 2.0]
hidden = dense(x, [[0.5, -0.2], [0.3, 0.8]], [0.0, -0.5], relu)
output = dense(hidden, [[1.0, -1.0]], [0.2], sigmoid)
print("hidden layer:", [round(h, 3) for h in hidden])
print("prediction:", round(output[0], 3))

# A loss function measures how wrong the prediction is.
target = 1.0
mse = (output[0] - target) ** 2
bce = -(target * math.log(output[0]) + (1 - target) * math.log(1 - output[0]))
print("squared error:", round(mse, 3))
print("cross-entropy:", round(bce, 3))

Ожидаемый результат

hidden layer: [0.1, 1.4]
prediction: 0.25
squared error: 0.563
cross-entropy: 1.387

Как это работает

dense() вычисляет один слой, где каждая строка весов - это один нейрон. Скрытый слой использует ReLU, а выходной - sigmoid, чтобы получить вероятность. Квадратичная ошибка и кросс-энтропия измеряют разрыв между предсказанием 0.25 и целью 1.0; обучение старается их уменьшить.

Измените значения и запустите программу в онлайн-компиляторе Python CodeUtility без локальной установки Python.

Практические задания

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

  1. Измените входные данные или веса и предскажите результат до запуска.
  2. Выводите промежуточные значения, чтобы проследить каждый шаг вычислений.
  3. Решите задачи по ссылкам ниже, чтобы самостоятельно реализовать идею.
Запустить в Python IDE →

Попрактикуйтесь на задаче

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

Все задачи