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

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

Щоб навчити свою модель, ви готуєте набір даних із 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). Якщо ви маєте намір запустити свою модель машинного навчання на локальних пристроях (а не через платформу), вам потрібно буде зробити її меншою і, відповідно, зменшити кількість значень ваги.
  • Відсутність змістовних зв’язків між векторами. Векторні значення в прямому кодуванні страв не дають суттєвої інформації про їх подібність. З погляду математики до індексу 1 ("хот-дог") ближче індекс 2 ("салат"), ніж 4999 ("шаурма"), хоча хот-дог більше схожий на шаурму (обидва містять м’ясо й хліб), ніж на салат.

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