Перейти к содержанию
Educora
Начальный16 мин2 / 10

Как машинное обучение учится на данных

Признаки и метки, три вида обучения, цикл «угадай — проверь — поправь», нейронные сети и качество данных — без сложной математики, с маленьким работающим примером на Python.

Проверь себя
В этом уроке ты узнаешь
  • Различать в данных признаки и метку
  • Отличать обучение с учителем, без учителя и с подкреплением
  • Объяснять, как модель учится, уменьшая ошибку
  • Понимать опасность плохих данных и переобучения

Как ты научился отличать кошку от собаки? Никто не давал тебе список правил вроде «если уши острые, а усы длинные — это кошка». Ты просто видел много кошек и собак, кто-то говорил, где кто, а мозг сам нашёл различия. Машинное обучение работает удивительно похоже: вместо того чтобы писать правила, мы показываем компьютеру примеры и позволяем ему самому найти закономерность.

Определение
Машинное обучение

Раздел ИИ, в котором программа всё лучше справляется с задачей, обучаясь на данных (примерах), а не выполняя правила, написанные программистом. Результат обучения — модель: функция с настраиваемыми значениями, которые называются параметрами.

Данные: признаки и метки

Допустим, мы хотим предсказывать стоимость поездки на такси в Баку. Каждая прошлая поездка — это пример. То, что мы знаем до поездки, — расстояние, время суток, день недели — это признаки. То, что мы хотим предсказать, — стоимость — это метка. Таблица таких примеров называется обучающими данными.

ПоездкаРасстояние, км (признак)Стоимость, манат (метка)
112,0
222,6
333,0
443,4
554,0
Пять поездок из примера ниже. Настоящие системы используют тысячи примеров и много признаков.

Три вида обучения

ВидКак учитсяПример
Обучение с учителемНа примерах с правильными ответами (метками)Прогноз стоимости поездки, распознавание спама, чтение рукописного текста
Обучение без учителяНа примерах без ответов; сама находит группы и структуруРазделение покупателей магазина на группы по их привычкам
Обучение с подкреплениемМетодом проб и ошибок, получая награду за удачные действияИгровые программы вроде AlphaGo, управление роботами

Большая часть ИИ, с которым ты сталкиваешься каждый день, использует обучение с учителем. Чат-ассистенты сочетают несколько методов — это ты увидишь в следующем уроке.

Как учится модель: угадай, проверь, поправь

Наша модель — прямая: стоимость = w · км + b. Здесь w — цена километра, b — стоимость посадки; это два параметра. Сначала модель ничего не знает: w = 0 и b = 0, и все её прогнозы неверны. Обучение — это цикл:

  1. 1
    Угадай

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

  2. 2
    Проверь

    Сравнивает каждый прогноз с настоящей стоимостью и вычисляет среднюю ошибку (здесь — среднее квадратов разностей).

  3. 3
    Поправь

    Чуть-чуть меняет w и b в ту сторону, где ошибка меньше. Размер этого шага называется скоростью обучения.

  4. 4
    Повтори

    Повторяет цикл сотни или тысячи раз, пока ошибка не перестанет уменьшаться.

Python
km = [1, 2, 3, 4, 5]
fare = [2.0, 2.6, 3.0, 3.4, 4.0]

w, b = 0.0, 0.0   # the model: fare = w * km + b
lr = 0.02         # learning rate: the size of each small step

for step in range(2001):
    grad_w = grad_b = 0.0
    for x, y in zip(km, fare):
        error = (w * x + b) - y
        grad_w += 2 * error * x / len(km)
        grad_b += 2 * error / len(km)
    w -= lr * grad_w
    b -= lr * grad_b
    if step % 500 == 0:
        loss = sum((w * x + b - y) ** 2 for x, y in zip(km, fare)) / len(km)
        print(f'step {step:4d}: w = {w:.3f}, b = {b:.3f}, error = {loss:.4f}')

print(f'Prediction for 8 km: {w * 8 + b:.2f} manat')
▸ Ожидаемый результат
step    0: w = 0.398, b = 0.120, error = 2.8551
step  500: w = 0.492, b = 1.516, error = 0.0036
step 1000: w = 0.480, b = 1.559, error = 0.0032
step 1500: w = 0.480, b = 1.560, error = 0.0032
step 2000: w = 0.480, b = 1.560, error = 0.0032
Prediction for 8 km: 5.40 manat
Запусти код. Ошибка падает с 2,86 до 0,0032, а модель находит w ≈ 0,48 и b ≈ 1,56.

Модель открыла правило, спрятанное в данных: примерно 0,48 маната за километр плюс 1,56 маната за посадку. Это правило никто не писал — оно получено из примеров. Теперь модель может предсказать поездку, которой никогда не видела: 8 км → 5,40 маната. Весь современный ИИ, от спам-фильтра до чат-ассистента, учится по тому же циклу — просто с гораздо большим числом параметров и данных.

Нейронные сети и глубокое обучение

У прямой два параметра: для такси этого хватает, но не для распознавания лица или написания предложения. Для таких задач используют нейронные сети — множество простых элементов (искусственных нейронов), расположенных слоями. Каждый элемент умножает входные значения на веса, складывает их и передаёт результат дальше. Сеть с большим числом слоёв называют глубокой, отсюда и термин глубокое обучение. Веса подбираются тем же циклом «угадай — проверь — поправь».

Качество данных и переобучение

Модель не может быть лучше своих данных. Если все поездки-примеры были днём, модель не узнает, что ночью цены могут быть другими. Если в данных есть ошибки или в них в основном примеры одного типа, модель выучит и эти ошибки.

Слабые данные
Training photos for a 'cat' detector:

20 photos
all of orange cats
all taken indoors, on a sofa

→ the model learns: orange + sofa = cat
→ a grey cat in a garden: 'not a cat'
Хорошие данные
Training photos for a 'cat' detector:

20 000 photos
cats of every colour and breed
indoors and outdoors, day and night
+ many photos without cats

→ the model learns ears, eyes, whiskers, shape
→ a grey cat in a garden: 'cat'
Модель выучивает всё, что показывают данные, включая случайные закономерности вроде дивана.

Ещё одна ловушка — переобучение: модель запоминает обучающие примеры вместо того, чтобы уловить общую закономерность, — как ученик, который выучил наизусть ответы прошлогодней контрольной и провалил новую. Чтобы это заметить, часть данных всегда откладывают в тестовую выборку и проверяют модель на примерах, которых она никогда не видела.

Практика

Признаки, метка, вид обучения

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

Показать решение
Признаки: посещаемость, баллы за домашние задания, часы занятий.
Метка: сдал / не сдал.
Вид обучения: обучение с учителем (в прошлых данных есть правильные ответы). Метка — категория, а не число, поэтому это задача классификации.
Важно: прогноз — это вероятность, а не приговор; учителя должны использовать его, чтобы вовремя предложить помощь, а не чтобы навешивать на учеников ярлыки.
Задание

Прямая fare = 0,5 · km + 1,5 — догадка человека. Вычисли её среднюю ошибку (среднее квадратов разностей) на пяти поездках и выведи с 4 знаками после запятой. Она лучше или хуже ошибки обученной модели, равной 0,0032?

Задание · Python
km = [1, 2, 3, 4, 5]
fare = [2.0, 2.6, 3.0, 3.4, 4.0]
w, b = 0.5, 1.5
total = 0
# add the squared error of every trip to total,
# then print total / len(km) with 4 decimals
▸ Ожидаемый результат
0.0040

Главное

  • В машинном обучении программа сама находит правило в примерах; результат — модель с параметрами.
  • Признаки — то, что мы знаем заранее; метка — ответ, который мы хотим предсказать.
  • Три вида обучения: с учителем, без учителя и с подкреплением.
  • Модель учится, уменьшая ошибку в цикле «угадай → проверь → поправь → повтори».
  • Модель хороша настолько, насколько хороши её данные; всегда проверяй её на данных, которых она не видела.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Что является меткой в примере с такси?