- Различать в данных признаки и метку
- Отличать обучение с учителем, без учителя и с подкреплением
- Объяснять, как модель учится, уменьшая ошибку
- Понимать опасность плохих данных и переобучения
Как ты научился отличать кошку от собаки? Никто не давал тебе список правил вроде «если уши острые, а усы длинные — это кошка». Ты просто видел много кошек и собак, кто-то говорил, где кто, а мозг сам нашёл различия. Машинное обучение работает удивительно похоже: вместо того чтобы писать правила, мы показываем компьютеру примеры и позволяем ему самому найти закономерность.
Раздел ИИ, в котором программа всё лучше справляется с задачей, обучаясь на данных (примерах), а не выполняя правила, написанные программистом. Результат обучения — модель: функция с настраиваемыми значениями, которые называются параметрами.
Данные: признаки и метки
Допустим, мы хотим предсказывать стоимость поездки на такси в Баку. Каждая прошлая поездка — это пример. То, что мы знаем до поездки, — расстояние, время суток, день недели — это признаки. То, что мы хотим предсказать, — стоимость — это метка. Таблица таких примеров называется обучающими данными.
| Поездка | Расстояние, км (признак) | Стоимость, манат (метка) |
|---|---|---|
| 1 | 1 | 2,0 |
| 2 | 2 | 2,6 |
| 3 | 3 | 3,0 |
| 4 | 4 | 3,4 |
| 5 | 5 | 4,0 |
Три вида обучения
| Вид | Как учится | Пример |
|---|---|---|
| Обучение с учителем | На примерах с правильными ответами (метками) | Прогноз стоимости поездки, распознавание спама, чтение рукописного текста |
| Обучение без учителя | На примерах без ответов; сама находит группы и структуру | Разделение покупателей магазина на группы по их привычкам |
| Обучение с подкреплением | Методом проб и ошибок, получая награду за удачные действия | Игровые программы вроде AlphaGo, управление роботами |
Большая часть ИИ, с которым ты сталкиваешься каждый день, использует обучение с учителем. Чат-ассистенты сочетают несколько методов — это ты увидишь в следующем уроке.
Как учится модель: угадай, проверь, поправь
Наша модель — прямая: стоимость = w · км + b. Здесь w — цена километра, b — стоимость посадки; это два параметра. Сначала модель ничего не знает: w = 0 и b = 0, и все её прогнозы неверны. Обучение — это цикл:
- 1Угадай
Модель предсказывает стоимость каждой поездки из обучающих данных.
- 2Проверь
Сравнивает каждый прогноз с настоящей стоимостью и вычисляет среднюю ошибку (здесь — среднее квадратов разностей).
- 3Поправь
Чуть-чуть меняет w и b в ту сторону, где ошибка меньше. Размер этого шага называется скоростью обучения.
- 4Повтори
Повторяет цикл сотни или тысячи раз, пока ошибка не перестанет уменьшаться.
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
Модель открыла правило, спрятанное в данных: примерно 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?
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.