Функции, графики и почему они важны для 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
Итог
- Функция — правило «вход → выход»; график показывает её форму.
- Линейные функции — прямые; нелинейные (сигмоида и др.) дают изгибы, без которых нейросети бессильны.
- Функция потерь измеряет ошибку модели; обучение — спуск по её ландшафту в минимум.
- Чтобы спускаться, нужен наклон функции — производная (дальше).