Функции, графики и почему они важны для ML

Функция — это правило «вход → выход»; в ML самые важные функции — это модель и функция потерь.

Функция — правило, которое каждому входу x сопоставляет ровно один выход f(x). График функции — множество точек (x, f(x)).

Функция как машина и как график

Функцию удобно представлять двояко. Как машину: бросаешь число x — получаешь число f(x). И как график: рисуешь все пары (x, f(x)) и видишь форму — прямая, парабола, волна. В Python функция и пишется как обычная def, а «график» можно напечатать таблицей значений.

def f(x):
    return x * x - 2 * x + 1   # парабола, минимум в x = 1

# Печатаем «график» таблицей
for x in range(-2, 5):
    y = f(x)
    bar = "#" * int(y)          # грубая визуализация высоты
    print(f"x={x:2}  f(x)={y:2}  {bar}")

Вывод:

x=-2  f(x)= 9  #########
x=-1  f(x)= 4  ####
x= 0  f(x)= 1  #
x= 1  f(x)= 0  
x= 2  f(x)= 1  #
x= 3  f(x)= 4  ####
x= 4  f(x)= 9  #########

Видно «чашу» с дном в x = 1 — именно такие чаши мы будем минимизировать в обучении.

Линейные и нелинейные функции

Главное различие для ML. Линейная функция — это прямая: f(x) = k·x + b. Она «скучная», но предсказуемая, и линейная регрессия строит именно её. Нелинейные функции (парабола, экспонента, сигмоида) умеют изгибаться — и именно изгибы позволяют нейросетям приближать сложные зависимости. Без нелинейностей даже глубокая сеть схлопнулась бы в одну линейную функцию.

import math

def linear(x):  return 2 * x + 1
def sigmoid(x): return 1 / (1 + math.exp(-x))   # «сжимает» любое число в (0, 1)

for x in [-3, -1, 0, 1, 3]:
    print("x =", x, " linear =", linear(x), " sigmoid =", round(sigmoid(x), 4))

Вывод:

x = -3  linear = -5  sigmoid = 0.0474
x = -1  linear = -1  sigmoid = 0.2689
x = 0  linear = 1  sigmoid = 0.5
x = 1  linear = 3  sigmoid = 0.7311
x = 3  linear = 7  sigmoid = 0.9526

Сигмоида — рабочая функция классификации: она превращает любое число в «вероятность» от 0 до 1.

Функция потерь — ландшафт, который мы спускаем

Вот зачем всё это в ML. Обучение модели — это поиск таких параметров (весов), при которых ошибка минимальна. Ошибку как функцию весов называют функцией потерь (loss). Её график — «ландшафт» с холмами и долинами; обучение = спуск в самую глубокую долину. Чтобы спускаться, нужно знать наклон функции в каждой точке — это производная, которой посвящён следующий урок.

# Простейшая функция потерь: насколько предсказание промахнулось (квадрат ошибки)
def loss(prediction, target):
    return (prediction - target) ** 2

target = 10
for guess in [4, 7, 10, 13]:
    print(f"предсказали {guess:2} → потеря {loss(guess, target)}")

Вывод:

предсказали  4 → потеря 36
предсказали  7 → потеря 9
предсказали 10 → потеря 0
предсказали 13 → потеря 9

Итог

  • Функция — правило «вход → выход»; график показывает её форму.
  • Линейные функции — прямые; нелинейные (сигмоида и др.) дают изгибы, без которых нейросети бессильны.
  • Функция потерь измеряет ошибку модели; обучение — спуск по её ландшафту в минимум.
  • Чтобы спускаться, нужен наклон функции — производная (дальше).
Проверьте себя
1. Что такое функция?
AЛюбая таблица чисел
BПравило, которое каждому входу сопоставляет ровно один выход
CСписок координат
DМатрица преобразования
2. Зачем нейросетям нужны нелинейные функции?
AЧтобы быстрее считать
BЧтобы изгибаться и приближать сложные зависимости; без них сеть схлопнулась бы в одну линейную функцию
CЧтобы данные стали целыми
DОни не нужны, хватает линейных
3. Что такое функция потерь (loss) в обучении?
AСкорость работы программы
BМера ошибки модели как функция её параметров, которую минимизируют
CКоличество слоёв сети
DЧисло объектов в данных
Поддержать проект