Векторні представлення

Уявіть, що ви розробляєте додаток, який рекомендує страви. Користувачі вводять свої улюблені страви, а додаток пропонує щось схоже, що може їм сподобатися. Ви хочете розробити модель машинного навчання, яка може прогнозувати схожість страв, щоб ваш додаток надавав високоякісні рекомендації (наприклад: "Оскільки ви любите млинці, вам варто спробувати оладки").

Щоб навчити свою модель, ви готуєте набір даних із 5000 популярних страв, серед яких – борщ, хот-дог, салат, піца й шаурма.

Рисунок 1. Ілюстрації п’яти страв. Від верхньої зліва до нижньої справа: борщ, хот-дог, салат, піца, шаурма.
Рисунок 1. Вибірка страв, включених до набору даних.

Ви створюєте ознаку meal, яка містить представлення кожної страви з набору даних як пряме кодування. Кодування означає процес вибору початкового числового представлення даних для навчання моделі.

Рисунок 2. Верхня частина: візуалізація прямого кодування борщу.
       Вектор [1, 0, 0, 0, …, 0] відображається над шістьма клітинками. Кожне число вектора розташоване над своєю клітинкою. У клітинках зображено зліва направо: борщ, хот-дог, салат, піцу, [пусте місце], шаурму. Середня частина: візуалізація прямого кодування хот-дога.
       Вектор [0, 1, 0, 0, …, 0] відображається над шістьма клітинками. Кожне число вектора розташоване над своєю клітинкою. Клітинки мають ті самі зображення зліва направо, що й для візуалізації борщу, наведеної вище. Нижня частина: візуалізація прямого кодування шаурми. Вектор [0, 0, 0, 0, …, 1] відображається над шістьма клітинками. Кожне число вектора розташоване над своєю клітинкою. Клітинки мають ті самі зображення зліва направо, що й для візуалізацій борщу й хот-дога, наведених вище.
Рисунок 2. Прямі кодування борщу, хот-дога й шаурми. Кожен вектор прямого кодування має довжину 5000 (один запис для кожної страви з набору даних). Три крапки на діаграмі – це 4995 записів, які не показано.

Типові помилки в представленнях розріджених даних

Переглядаючи ці вектори прямого кодування, можна помітити, що представлення даних має кілька недоліків.

  • Кількість ваг. Якщо вектори вхідних даних великі, у нейронній мережі буде дуже багато ваг. Якщо кількість записів у прямому кодуванні дорівнює M, а кількість вузлів першого шару мережі після введення даних – N, навчання моделі має охоплювати M x N ваг для цього шару.
  • Кількість точок даних. Що більше ваг у моделі, то більше даних потрібно для ефективного навчання.
  • Обсяг обчислень. Що більше ваг, то більше обчислень потрібно, щоб навчати й використовувати модель. Можна легко перевищити можливості апаратного забезпечення.
  • Обсяг пам’яті. Що більше ваг у моделі, то більше пам’яті потрібно прискорювачам, які її навчають і обслуговують. Ефективно масштабувати її дуже складно.
  • Складність підтримки машинного навчання на пристрої (ODML). Якщо ви маєте намір запустити свою модель машинного навчання на локальних пристроях (а не через платформу), вам потрібно буде зробити її меншою і, відповідно, зменшити кількість ваг.

Із цього модуля ви дізнаєтеся, як створювати векторні представлення – низьковимірні представлення розріджених даних, які вирішують ці проблеми.