Признаки, метки и предсказания
Любая модель видит мир не так, как ты: не котика и не предложение, а столбик чисел — и именно из этих чисел она достаёт свой ответ.
Признак — отдельная измеримая характеристика объекта, по которой модель принимает решение, например форма ушей у животного. Метка — правильный ответ для обучающего примера, например слово «кошка» рядом с фотографией. А предсказание — это ответ, который модель выдаёт сама, когда метку ей уже не показывают.
Зачем это вообще нужно
Представь, что у тебя есть друг, который никогда в жизни не видел животных, зато умеет считать. Ты показываешь ему фотку и говоришь: «Это кошка». Он смотрит на картинку и… не понимает, что значит «кошка». Для него это просто куча цветных точек. Чтобы он смог разобраться, тебе придётся объяснить ему мир не словами, а числами: «уши заострённые — да или нет», «морда вытянутая — насколько», «громкость звука — сколько».
Вот ровно так и устроена любая модель машинного обучения. Она не видит кошку. Она видит набор чисел и пытается по ним угадать ответ. В прошлом уроке про обучение с учителем мы говорили, что модели показывают примеры вместе с правильными ответами. Но мы не разобрали главное: что вообще такое «пример» с точки зрения машины. Сегодня закроем этот пробел — посмотрим, из чего примеры на самом деле состоят и как из них рождается ответ.
Подумай о любой умной штуке, которой ты пользуешься каждый день. Лента в соцсети угадывает, какой ролик ты досмотришь до конца. Плеер подсовывает трек, который тебе зайдёт. Телефон дописывает слово, пока ты печатаешь. За всеми ними стоит одна и та же скучная на первый взгляд механика: что-то из реального мира превращается в числа, эти числа прогоняются через модель, и на выходе получается ответ. Если ты поймёшь эту механику один раз, ты будешь узнавать её потом везде — от рекомендаций до ChatGPT.
К концу урока ты будешь понимать всю цепочку целиком: объект → признаки → модель → предсказание. И сделаешь это на двух примерах, которые будут идти с нами через весь курс: «кошка или собака?» и предсказание следующего слова во фразе «Кошка пьёт …». Эти два примера мы будем разбирать всё глубже на каждом уровне курса, так что есть смысл хорошо подружиться с ними прямо сейчас.
Три слова, без которых не понять ИИ
Признак — это «через какие очки» модель смотрит на объект
Объект сам по себе модели непонятен. Фотография, песня, текст сообщения — всё это слишком большое и сложное. Поэтому объект сначала превращают в признаки — отдельные измеримые характеристики.
Сравни это с тем, как ты сам описываешь человека другу, которого тот не видел: «высокий, тёмные волосы, носит очки, всегда в наушниках». Ты не передаёшь всего человека целиком — ты передаёшь несколько характеристик, по которым его можно узнать. Это и есть признаки.
Для задачи «кошка или собака?» признаками могут быть:
| Признак | Что измеряем | Пример значения |
| Заострённость ушей | насколько уши торчат вверх | 0.9 (очень острые) |
| Длина морды | вытянутость носа | 0.2 (короткая) |
| Громкость «мяу/гав» | тип и громкость звука | 0.3 (тихо) |
| Любит воду | насколько спокойно лезет в воду | 0.1 (терпеть не может) |
Заметь: каждый признак — это просто число. Кошка превратилась в строчку вроде [0.9, 0.2, 0.3, 0.1]. Такую строчку чисел называют вектором признаков, но пугаться слова не надо — это просто список характеристик объекта по порядку.
Важно, что порядок в этом списке всегда один и тот же. Первое число — всегда про уши, второе — всегда про морду, и так далее. Если для одной фотки ты поставишь уши на первое место, а для другой — на третье, модель запутается: она ведь не читает подписи, она просто привыкла, что «первое число важное для кошек». Поэтому признаки — это не просто набор чисел, а набор чисел в согласованном порядке.
Откуда вообще берутся сами числа? В простых задачах их придумывает и измеряет человек: кто-то садится и решает, что важна заострённость ушей, и пишет код, который её считает. В современных нейросетях модель учится выделять признаки сама, прямо из пикселей картинки, — но идея остаётся той же: на каком-то этапе объект всё равно становится списком чисел. Мы дойдём до этого, когда будем разбирать нейросети; пока держись за наглядную картинку с ушами и мордой.
Метка — это «правильный ответ» из учебника
Когда мы учим модель, рядом с каждым набором признаков лежит метка — правильный ответ. Для фотки кошки метка — слово «кошка». Для фотки собаки — «собака».
Это как решебник в конце учебника: ты решаешь задачу сам, а потом сверяешься с ответом. Метка — это тот самый ответ из решебника. Модель смотрит на свой результат, сравнивает с меткой и понимает, ошиблась она или нет. Если ошиблась — чуть-чуть подправляет себя (как именно — разберём, когда дойдём до нейросетей и весов).
Предсказание — это ответ, который модель выдаёт сама
А вот предсказание — это уже момент экзамена. Тебе дают новую фотку, которой не было в учебнике, метки рядом нет, и модель должна сама сказать: «кошка» или «собака». Вот этот её самостоятельный ответ и называется предсказанием.
Главная мысль: метку модель видит только на тренировке. Предсказание она делает сама, когда метки уже нет. Если модель хорошо училась, её предсказания совпадают с правильными ответами даже на новых данных.
Разбираем на примерах
Пример 1. Кошка против собаки — по шагам
Давай пройдём всю цепочку на одном животном. Допустим, к нам пришла новая фотография, и мы превратили её в признаки.
Зададим простое правило: будем считать «очки за кошачесть». Острые уши — плюс к кошке. Любовь к воде — плюс к собаке (собаки в среднем спокойнее относятся к воде). Это очень наивная модель, но она отлично показывает идею.
// Признаки нового животного (список характеристик по порядку)
// [острые уши, длина морды, громкость, любит воду]
const priznaki = [0.9, 0.2, 0.3, 0.1];
// Веса — насколько каждый признак тянет к "кошке"
// Положительный = в сторону кошки, отрицательный = в сторону собаки
const vesa = [1.0, -0.5, -0.2, -1.0];
// Считаем общий "балл кошачести": каждый признак умножаем на его вес
let ball = 0;
for (let i = 0; i < priznaki.length; i++) {
ball += priznaki[i] * vesa[i];
}
const predskazanie = ball > 0 ? "кошка" : "собака";
console.log("Балл кошачести:", ball.toFixed(2));
console.log("Предсказание модели:", predskazanie);Что здесь происходит по шагам:
- Объект (фотка) уже превращён в признаки — список
[0.9, 0.2, 0.3, 0.1]. - У каждого признака есть вес — число, которое говорит, насколько сильно этот признак тянет ответ в сторону кошки. Острые уши (
1.0) тянут к кошке сильно, любовь к воде (-1.0) — к собаке. - Мы перемножаем каждый признак на его вес и складываем. Получается один итоговый балл.
- Если балл больше нуля — модель предсказывает «кошка», иначе «собака».
Вывод:
Балл кошачести: 0.74 Предсказание модели: кошка
Острые уши перевесили всё остальное, и модель уверенно сказала «кошка». Запомни эту схему «признаки × веса → балл → ответ»: позже окажется, что один нейрон в нейросети устроен ровно так же.
Обрати внимание на ещё одну тонкую вещь. Веса мы тут выписали руками, как будто знаем заранее, что острые уши — это про кошек. В настоящем обучении всё наоборот: веса в начале случайные, модель сначала ошибается, и только постепенно, сверяясь с метками, подкручивает их к правильным значениям. То есть человек не объясняет модели «острые уши = кошка». Модель сама нащупывает это по тысячам примеров. Сегодня мы просто подсмотрели готовый результат такого обучения, чтобы увидеть, как он работает.
Пример 2. Та же модель ошибается
А теперь подсунем модели хитрое животное — собаку с подозрительно острыми ушами (привет, хаски), которая вдобавок не любит воду.
// Хаски: острые уши, но это всё-таки собака
const priznaki = [0.85, 0.6, 0.7, 0.2];
const vesa = [1.0, -0.5, -0.2, -1.0];
let ball = 0;
for (let i = 0; i < priznaki.length; i++) {
ball += priznaki[i] * vesa[i];
}
const predskazanie = ball > 0 ? "кошка" : "собака";
const pravilnyiOtvet = "собака"; // метка из решебника
console.log("Балл кошачести:", ball.toFixed(2));
console.log("Предсказание:", predskazanie);
console.log("Правильный ответ (метка):", pravilnyiOtvet);
console.log("Угадала?", predskazanie === pravilnyiOtvet ? "да" : "нет");Вывод:
Балл кошачести: 0.18 Предсказание: кошка Правильный ответ (метка): собака Угадала? нет
Модель ошиблась — острые уши хаски сбили её с толку. Вот тут и пригодилась бы метка: на тренировке модель увидела бы, что её ответ не совпал с правильным, и слегка уменьшила бы вес признака «острые уши». Именно так из ошибок и складывается обучение. Важная честная мысль: модель не «понимает» собак — она просто крутит числа. Поэтому и ошибается там, где человек засмеялся бы.
Пример 3. Текст — это тоже признаки
Перейдём ко второму сквозному примеру — предсказанию следующего слова. Возьмём фразу «Кошка пьёт …». Здесь объект — это сама фраза, а предсказание — следующее слово.
Языковая модель тоже работает через признаки, только признак тут — «насколько слово подходит после такого начала». Модель прикидывает балл каждому слову-кандидату и выбирает самое подходящее.
// Фраза: "Кошка пьёт ..." — какое слово дальше?
// Для каждого кандидата модель прикинула балл уместности (0..10)
const kandidaty = {
"молоко": 9.1,
"воду": 7.4,
"чай": 2.0,
"бетон": 0.1
};
let luchsheeSlovo = "";
let luchshiyBall = -1;
for (const slovo in kandidaty) {
if (kandidaty[slovo] > luchshiyBall) {
luchshiyBall = kandidaty[slovo];
luchsheeSlovo = slovo;
}
}
console.log("Кошка пьёт " + luchsheeSlovo);
console.log("Балл выбранного слова:", luchshiyBall);Что важно понять: модель не «знает», что кошки пьют молоко. Она просто видела в текстах интернета, что после «Кошка пьёт» чаще всего идёт «молоко», и поэтому даёт этому слову высокий балл. Метками здесь служили настоящие тексты: слово, которое реально стояло следующим, — это и есть правильный ответ, на котором модель тренировалась.
Заметил красивую вещь? В картинках метку нам приходилось ставить вручную — подписывать «кошка» или «собака». А в тексте метка уже встроена в сами данные: следующее слово в любом предложении из интернета и есть правильный ответ. Поэтому языковые модели можно учить на гигантских объёмах текста почти без ручной разметки — берёшь любой текст, прячешь следующее слово и просишь модель его угадать. Это одна из причин, почему ChatGPT удалось накормить таким количеством данных.
Вывод:
Кошка пьёт молоко Балл выбранного слова: 9.1
Дальше в курсе мы увидим, как именно текст превращается в признаки через токены и эмбеддинги, а пока держи в голове простое: и картинка, и фраза для модели — это в конце концов числа. Кошка из первого примера и фраза про кошку из второго идут по одной и той же дороге.
Частые ошибки и подводные камни
1. Думать, что модель «понимает» объект
Самая частая ловушка. Модель не понимает, что такое кошка или молоко. Она оперирует только признаками-числами. Если признаки сбивают с толку (острые уши у хаски), модель ошибётся уверенно и с серьёзным видом — это нормально для неё, ведь смысла за числами она не видит.
2. Путать метку и предсказание
Метка — это ответ, который ты даёшь модели на тренировке. Предсказание — ответ, который модель выдаёт сама. Если перепутать, получится бессмыслица: будто модель сама себе подсказывает правильный ответ. На экзамене (на новых данных) меток нет — есть только предсказания.
3. Брать слишком мало или бесполезные признаки
Если описать животное одним признаком «есть хвост» — и у кошек, и у собак он есть, и модель будет угадывать наобум. Признаки должны различать классы. Бесполезный признак вроде «цвет ошейника» не помогает отличить кошку от собаки, зато добавляет шума.
4. Считать, что больше признаков — всегда лучше
Соблазн добавить сто признаков велик, но тогда модель легко зазубрит мелкие случайности обучающих фоток вместо общей идеи. Это называется переобучение — модель отлично отвечает на знакомых примерах и проваливается на новых. Как зубрёжка перед экзаменом: вызубрил конкретные задачи, а на чуть изменённой растерялся.
5. Забывать, что признаки — это упрощение
Любой набор признаков выбрасывает часть информации. Это не баг, а суть метода: мы намеренно сжимаем сложный объект до нескольких чисел. Главное — выбрать те числа, которые действительно важны для ответа.
Мини-практика: придумай признаки сам
Теперь твоя очередь. Возьми задачу, которая тебе близка, и распиши её через признаки, метки и предсказание. Например:
- Задача: отличить мем-«огонь» от скучного поста в ленте.
- Признаки: сколько лайков за первый час, длина подписи, есть ли картинка, сколько раз переслали друзьям.
- Метка (на тренировке): «зашло» или «не зашло» — по постам, которые ты уже видел.
- Предсказание: для нового поста модель говорит «зайдёт» или «нет».
Сделай так сам для одной из задач на выбор: «спам или не спам в сообщениях», «понравится мне трек или нет», «сдам контрольную или нет». Выпиши хотя бы 4 признака, придумай, что будет меткой, и сформулируй, какое предсказание ты ждёшь от модели. Проверь себя по трём вопросам: каждый ли признак — это число (или хотя бы «да/нет»)? Помогает ли он реально различать ответы, или подходит и тем и другим? Берётся ли метка из примеров, которые ты уже знаешь? Если на все три ответ «да» — ты собрал честную мини-модель в голове.
Бонус-задание для тех, кто хочет с кодом: возьми код из Примера 1, поменяй веса и признаки под свою задачу (например, лайки и репосты) и проверь, какое предсказание выдаст модель. Поиграй с весами и посмотри, как меняется ответ — это ровно то, что делает обучение, только вручную.
Итоги
Сегодня ты разобрал три кита, на которых стоит весь машинный интеллект:
- Признак — измеримая характеристика объекта, число. Из признаков собирается список, описывающий объект.
- Метка — правильный ответ, который показывают модели на тренировке.
- Предсказание — ответ, который модель выдаёт сама на новых данных.
И главную схему: объект → признаки → модель (признаки × веса → балл) → предсказание. Мы увидели её и на кошке с собакой, и на фразе «Кошка пьёт молоко». Эта схема — фундамент, который будет усложняться весь курс.
В следующем уроке мы возьмём эти же признаки и веса и соберём из них нейросеть — увидим, что один наш «балл кошачести» был, по сути, единственным нейроном, а настоящая модель складывает такие нейроны в слои. Те же кошка и собака пройдут с нами дальше, только теперь — уже внутри сети.