Перейти к содержимому
Теория · Что такое машинное обучение · урок 1 из 9

Правила и примеры

Почтовый сервис должен отличать спам от обычных писем. Программист может записать правило вручную: письмо со словом «win» в теме — спам.

Python
def is_spam(subject):
    return "win" in subject.lower()

print(is_spam("You WIN a prize"))  # True
print(is_spam("Winter sale starts today"))  # True
print(is_spam("Free iPhone for you"))  # False

Правило ошибается в обе стороны. Письмо о распродаже попало в спам из-за букв «win» внутри слова «Winter». Мошенническое письмо про iPhone прошло, потому что нужного слова в нём нет.

Можно дописывать исключения, но спамеры каждую неделю меняют формулировки. Правил становится тысячи, и они начинают противоречить друг другу.

Обучение на примерах

Машинное обучение (machine learning) решает задачу иначе. Программа получает не правила, а примеры с правильными ответами: тысячи писем, каждое из которых помечено как спам или не спам. Правило она находит сама. Когда спамеры сменят формулировки, модель обучают заново на свежих примерах, и правило обновляется без программиста.

Модель (model) — функция, которая по входным данным выдаёт ответ. Её поведение задают числа — параметры модели (model parameters). Обучение (training) подбирает параметры так, чтобы на примерах модель ошибалась как можно меньше.

Подбор параметра

Пусть модель предсказывает цену квартиры в миллионах по её площади: площадь умножается на параметр w. Примеры — четыре квартиры с известными ценами. Обучение пробует несколько значений w и для каждого считает суммарную ошибку на примерах:

Python
areas = [30, 45, 60, 80]
prices = [3.1, 4.4, 6.2, 7.9]

def total_error(w):
    error = 0
    for area, price in zip(areas, prices):
        error += abs(w * area - price)
    return error

print(round(total_error(0.05), 2))  # 10.85
print(round(total_error(0.1), 2))  # 0.5
print(round(total_error(0.15), 2))  # 10.65

Функция total_error складывает промахи по модулю, чтобы ошибки вверх и вниз не гасили друг друга. Меньше всего ошибка при w = 0.1, и это значение становится параметром обученной модели.

Для квартиры площадью 50 м² модель предскажет 0.1 * 50, то есть 5 миллионов. Такой квартиры среди примеров не было. Модель отвечает на новых данных по правилу, которое нашла на старых, и в этом её смысл.

Настоящие модели устроены сложнее. У них бывают тысячи параметров, и подбирают их не перебором, а быстрыми методами. Схема при этом та же: примеры с ответами, ошибка на них и параметры, при которых ошибка мала.