Навіщо вам потрібно використовувати активне навчання при навчанні нейронних мереж

Часто розмітка даних виявляється найсерйознішою перешкодою для машинного навчання - збір великих обсягів даних, їх обробка і розмітка для створення досить продуктивної моделі можуть займати тижні або навіть місяці. Активне навчання дозволяє навчати моделі машинного навчання на набагато меншій кількості розмічених даних. Кращі компанії в сфері ШІ, наприклад, Tesla, вже використовують активне навчання. Ми вважаємо, що і вам теж воно необхідне.


У цьому пості ми розповімо, що таке активне навчання, розглянемо інструменти для його практичного застосування і продемонструємо, як ми самі спрощуємо впровадження активного навчання в процес NLP.

Порівняння традиційного підходу та активного навчання: створення спам-фільтра

Уявіть, що вам потрібно створити спам-фільтр для ваших електронних листів. Традиційний підхід (принаймні, з 2002 року) полягає в зборі великої кількості листів, розмітці їх як «спам» і «не спам» з подальшим навчанням класифікатора машинного навчання, що дозволяє відрізняти ці два класи. При традиційному підході вважається, що всі дані рівноцінні, але в більшості наборів даних існують дисбаланс класів, галасливі дані і сильна надлишковість.

У традиційному підході час даремно витрачається на розмітку даних, що не покращує продуктивність вашої моделі. І ви навіть не дізнаєтеся, чи працює ваша модель, поки не завершите розмітку даних.

Людям не потрібні тисячі випадково розмічених прикладів, щоб зрозуміти різницю між спамом і звичайною поштою. Якщо ви навчаєте людину вирішенню цього завдання, то очікуєте, що їй можна дати кілька прикладів того, що вам потрібно, вона швидко навчиться, а потім буде ставити питання в разі невпевненості.

Активне навчання використовує той же принцип - застосовує навчану модель для пошуку і розмітки тільки самих цінних даних.

При активному навчанні ви спочатку передаєте невелику кількість розмічених прикладів. Модель навчається на цьому «породжуючому» наборі даних. Потім модель «задає питання», вибираючи нерозмічені приклади даних, щодо яких у неї немає впевненості, щоб людина могла «відповідати» на них, створюючи мітки цих прикладів. Модель знову оновлюється і процес повторюється, поки не буде досягнута досить хороша точність. Завдяки тому, що людина ітеративно навчає модель, можна поліпшити її за менший час і при набагато меншій кількості розмічених даних.

Як же модель знаходить наступний приклад даних, якому потрібна розмітка? Ось найпоширеніші способи:

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

Ми використовуємо власні методи із застосуванням байєсівського глибокого навчання, щоб отримати більш якісні оцінки невизначеності.

Три переваги використання активного навчання

1. Ви витрачаєте менше часу і грошей на розмітку даних

Доведено, що активне навчання забезпечує велику економію при розмітці даних в широкому спектрі завдань і наборів даних, від комп'ютерного зору до NLP. Оскільки розмітка даних - один з найбільш витратних аспектів навчання сучасних моделей машинного навчання, це саме по собі є важливим фактором!

Використання машинного навчання призводить до збільшення точності моделей при меншій кількості розмічених даних

2. Ви отримуєте набагато швидший зворотний зв'язок про продуктивність моделі

Зазвичай розмітка даних виконується до того, як починається навчання будь-яких моделей або виникає зворотний зв'язок. Часто потрібні дні або тижні повторної роботи з гайдлайнами з анотування і розмітки, після чого з'ясовується, що продуктивність моделі не дотягує до необхідного, або що потрібні інакше розмічені дані. Оскільки активне навчання багаторазово навчає модель під час процесу розмітки даних, можна отримувати зворотний зв'язок і усувати проблеми, які могли б спливти набагато пізніше.

3. Зрештою точність моделі виявляється набагато вищою

Людей часто дивує, що моделі, навчені за допомогою активного навчання, не тільки вчаться швидше, то й сходяться до більш якісної готової моделі (з меншою кількістю даних). Нам часто кажуть, що чим більше даних, тим краще, тому легко забути, що якість даних настільки ж важливо, як і кількість. Якщо набір даних містить суперечливі приклади, які складно розмітити точно, це може призвести до деградації продуктивності готової моделі.

Також важливий порядок, в якому модель бачить приклади. Існує цілий підрозділ машинного навчання, званий curriculum learning, що вивчає питання поліпшення продуктивності моделей завдяки тому, що спочатку їх навчають простим концепціям, а потім більш складним. Це схоже на навчання спочатку арифметиці, а потім алгебрі. Активне навчання природним чином створює навчальний план для моделей і допомагає їм досягати підвищеної точності.

Якщо активне навчання настільки добре, то чому ним не користуються всі?

Більшість інструментів і процесів для створення моделей машинного навчання розроблялося без урахування активного навчання. У компаніях розміткою даних і навчанням моделей займаються різні відділи, а для активного навчання необхідне об'єднання цих процесів. Але якщо вам і вдасться організувати спільну роботу цих відділів, вам все одно знадобиться велика інфраструктура для забезпечення зв'язку між навчанням моделі та інтерфейсами анотування. Більшість використовуваних програмних бібліотек передбачає, що всі дані вже розмічені до навчання моделі, тому для застосування активного навчання необхідно переписувати купу бойлерплейта. Також вам потрібно розбиратися, як краще хостити модель, забезпечити її взаємодію з командою анотаторів і забезпечити її оновлення при асинхронному отриманні даних від різних анотаторів.

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

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

Як використовувати активне навчання сьогодні

Одна з найважливіших перешкод для застосування активного навчання - це питання наявності відповідної інфраструктури. Подібно до того, як інструменти на зразок Keras і PyTorch значно знизили кількість мук з отриманням градієнтів, з'являються нові інструменти, що сильно полегшують активне навчання.

Існують бібліотеки Python в open source, наприклад, modAL, що беруть на себе більшу частину бойлерплейта. ModAL побудована на основі scikitlearn, вона дозволяє комбінувати різні моделі з будь-якою потрібною вам стратегією машинного навчання. Вона бере на себе більшу частину роботи з реалізації різних метрик, має відкритий вихідний код і володіє модульною структурою. Плюсами ModAL є широкий набір методів, що надаються нею, і відкритість коду. Брак бібліотек на зразок modAL полягає в тому, що вони не містять інтерфейсів анотування і залишають на частку розробників завдання хостингу моделі і її зв'язку з інтерфейсами анотування.

Це призводить нас до питання інтерфейсів анотування:

Ймовірно, найпопулярнішим інструментом для працюючих поодинці дата-саєнтистів є Prodigy. Це інтерфейс анотування, створений авторами Spacy; природно, його можна скомбінувати з їх приголомшливою бібліотекою NLP для використання простого активного навчання. Його початковий код закрито, але його можна завантажити як pip wheel і встановити локально. Хоча Prodigy і добре підходить для одинаків, він не призначений для роботи з командами анотаторів і реалізує тільки найпростіші форми активного навчання. Щоб він працював з командами, вам все одно доведеться хостити Prodigy самостійно, а створення такої системи може вимагати багато праці.

Labelbox надає інтерфейси для безлічі анотацій зображень і нещодавно додав підтримку тексту. На відміну від Prodigy, Labelbox проектувався з урахуванням взаємодії з командами анотаторів і має більше інструментів для перевірки коректності міток. Він не має нативної підтримки активного навчання або навчання моделей, але дозволяє завантажувати прогнози з моделі в інтерфейс анотування через API. Це означає, що якщо ви реалізували функцію вибору для активного навчання і навчаєте модель, то можете створити цикл активного навчання. Однак основний обсяг робіт все одно доведеться виконувати вам.

Підведемо підсумок

Активне навчання:

  • Зменшує кількість даних, необхідних для розмітки, значно знижуючи один з компонентів витрат.
  • Забезпечує більш швидкий зворотний зв'язок про продуктивність моделі.
  • Створює моделі з підвищеною точністю.