Признаки, метки и предсказания

Любая модель видит мир не так, как ты: не котика и не предложение, а столбик чисел — и именно из этих чисел она достаёт свой ответ.

Признак — отдельная измеримая характеристика объекта, по которой модель принимает решение, например форма ушей у животного. Метка — правильный ответ для обучающего примера, например слово «кошка» рядом с фотографией. А предсказание — это ответ, который модель выдаёт сама, когда метку ей уже не показывают.

Зачем это вообще нужно

Представь, что у тебя есть друг, который никогда в жизни не видел животных, зато умеет считать. Ты показываешь ему фотку и говоришь: «Это кошка». Он смотрит на картинку и… не понимает, что значит «кошка». Для него это просто куча цветных точек. Чтобы он смог разобраться, тебе придётся объяснить ему мир не словами, а числами: «уши заострённые — да или нет», «морда вытянутая — насколько», «громкость звука — сколько».

Вот ровно так и устроена любая модель машинного обучения. Она не видит кошку. Она видит набор чисел и пытается по ним угадать ответ. В прошлом уроке про обучение с учителем мы говорили, что модели показывают примеры вместе с правильными ответами. Но мы не разобрали главное: что вообще такое «пример» с точки зрения машины. Сегодня закроем этот пробел — посмотрим, из чего примеры на самом деле состоят и как из них рождается ответ.

Подумай о любой умной штуке, которой ты пользуешься каждый день. Лента в соцсети угадывает, какой ролик ты досмотришь до конца. Плеер подсовывает трек, который тебе зайдёт. Телефон дописывает слово, пока ты печатаешь. За всеми ними стоит одна и та же скучная на первый взгляд механика: что-то из реального мира превращается в числа, эти числа прогоняются через модель, и на выходе получается ответ. Если ты поймёшь эту механику один раз, ты будешь узнавать её потом везде — от рекомендаций до 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);

Что здесь происходит по шагам:

  1. Объект (фотка) уже превращён в признаки — список [0.9, 0.2, 0.3, 0.1].
  2. У каждого признака есть вес — число, которое говорит, насколько сильно этот признак тянет ответ в сторону кошки. Острые уши (1.0) тянут к кошке сильно, любовь к воде (-1.0) — к собаке.
  3. Мы перемножаем каждый признак на его вес и складываем. Получается один итоговый балл.
  4. Если балл больше нуля — модель предсказывает «кошка», иначе «собака».

Вывод:

Балл кошачести: 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, поменяй веса и признаки под свою задачу (например, лайки и репосты) и проверь, какое предсказание выдаст модель. Поиграй с весами и посмотри, как меняется ответ — это ровно то, что делает обучение, только вручную.

Итоги

Сегодня ты разобрал три кита, на которых стоит весь машинный интеллект:

  • Признак — измеримая характеристика объекта, число. Из признаков собирается список, описывающий объект.
  • Метка — правильный ответ, который показывают модели на тренировке.
  • Предсказание — ответ, который модель выдаёт сама на новых данных.

И главную схему: объект → признаки → модель (признаки × веса → балл) → предсказание. Мы увидели её и на кошке с собакой, и на фразе «Кошка пьёт молоко». Эта схема — фундамент, который будет усложняться весь курс.

В следующем уроке мы возьмём эти же признаки и веса и соберём из них нейросеть — увидим, что один наш «балл кошачести» был, по сути, единственным нейроном, а настоящая модель складывает такие нейроны в слои. Те же кошка и собака пройдут с нами дальше, только теперь — уже внутри сети.

Проверьте себя
1. Что такое признак в машинном обучении?
AПравильный ответ, который показывают модели на тренировке
BОтдельная измеримая характеристика объекта, по которой модель принимает решение
CГотовый ответ модели на новых данных
DНазвание класса, например «кошка»
2. Чем метка отличается от предсказания?
AЭто одно и то же, просто разные слова
BМетку модель придумывает сама, а предсказание ей дают люди
CМетку показывают модели на тренировке, а предсказание модель выдаёт сама на новых данных
DМетка — это число, а предсказание — всегда текст
3. В примере «Кошка против собаки» что делают веса?
AПоказывают, насколько сильно каждый признак тянет ответ в одну или другую сторону
BХранят правильные ответы для всех фотографий
CПревращают картинку в список признаков
DСчитают, сколько всего фотографий в обучающем наборе
4. Почему наша наивная модель назвала хаски кошкой?
AПотому что у неё была неправильная метка
BПотому что острые уши с большим весом перевесили остальные признаки
CПотому что хаски на самом деле кошка
DПотому что в коде была ошибка
5. Что означает переобучение?
AМодель обучалась слишком быстро и не успела ничего запомнить
BМодель зазубрила обучающие примеры и плохо работает на новых данных
CМодель использует слишком мало признаков
DМодель путает метку и предсказание
6. Как языковая модель выбирает слово после «Кошка пьёт …»?
AОна понимает, что кошки любят молоко, как это знает человек
BОна берёт случайное слово из словаря
CОна прикидывает балл уместности каждому слову и берёт самое подходящее по текстам, которые видела
DОна спрашивает у пользователя правильный ответ