Прямое распространение и функции потерь на Python
Нейронная сеть состоит из слоёв нейронов. При прямом распространении вход проходит через каждый слой и превращается в предсказание, а функция потерь оценивает, насколько это предсказание далеко от правильного ответа.
Суть простыми словами
Нейронная сеть состоит из слоёв нейронов. При прямом распространении вход проходит через каждый слой и превращается в предсказание, а функция потерь оценивает, насколько это предсказание далеко от правильного ответа.
Пропустите входные данные слой за слоем через маленькую нейросеть и измерьте ошибку с помощью квадратичной ошибки и кросс-энтропии.
Главные идеи
- Полносвязный (dense) слой соединяет каждый вход с каждым нейроном слоя.
- Выход одного слоя становится входом следующего.
- Потеря - это одно число, и чем оно меньше, тем лучше предсказания.
- Квадратичную ошибку используют для чисел, а кросс-энтропию - для вероятностей и классов.
Когда это использовать?
- Понять, что происходит внутри нейронных сетей и библиотек ИИ.
- Разобраться в идее до того, как реализовать её в соответствующих задачах.
- Подготовиться к курсам по машинному обучению, собеседованиям и проектам.
Посмотрите в действии
Меняйте входы и цель. Проследите, как значения проходят через скрытый слой и как обе потери реагируют на предсказание.
Пример кода
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.
Практические задания
Изменяйте входные данные и проверяйте граничные случаи перед работой с большими наборами.
- Измените входные данные или веса и предскажите результат до запуска.
- Выводите промежуточные значения, чтобы проследить каждый шаг вычислений.
- Решите задачи по ссылкам ниже, чтобы самостоятельно реализовать идею.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
- Прямой проход через полносвязный слой Вычислите выходы полносвязного слоя нейронов с выбранной функцией активации. Средне
- Прямое распространение в двухслойной сети Пропустите входы через скрытый слой с ReLU и выходной слой с сигмоидой. Средне
- Функции потерь: MSE, MAE и перекрёстная энтропия Измерьте, насколько ошибаются предсказания модели, с помощью среднеквадратичной ошибки, средней абсолютной ошибки или бинарной перекрёстной энтропии. Легко