Навчання та доопрацювання¶

Класи моделей у 🤗 Трансформери розроблені для сумісності з рідними PyTorch та TensorFlow 2 і можуть бути бездоганно використані з будь-якими. У цьому швидкому старті ми покажемо, як правильно налаштувати (або навчити з нуля) модель, використовуючи стандартні інструменти навчання, доступні в будь-якій структурі. Ми також покажемо, як використовувати наш включений клас Trainer (), який виконує більшу частину складності навчання для вас.

Точне налаштування

Цей посібник припускає, що ви вже знайомі з завантаженням і використовуєте наші моделі для висновку; в іншому випадку дивіться підсумок завдання. Ми також припускаємо, що ви знайомі з навчанням глибоких нейронних мереж в PyTorch або TF2, і зосереджуєтесь особливо на нюансах та інструментах для навчальних моделей у 🤗 Трансформери.

  • Точне налаштування в рідній PyTorch

  • Точне налаштування в рідному TensorFlow 2

  • Тренер

  • Додаткові ресурси

Точне налаштування в рідній PyTorch¶

Класи моделей у 🤗 Трансформери, які не починаються з TF, є модулями PyTorch, тобто ви можете використовувати їх так само, як і будь-яку модель у PyTorch як для умовиводу, так і для оптимізації.

Давайте розглянемо загальне завдання тонкої настройки маскованої мовної моделі, такої як BERT, на наборі даних класифікації послідовностей. Коли ми створюємо екземпляр моделі за допомогою from_pretrained (), для ініціалізації моделі використовуються конфігурація моделі та попередньо навчені ваги зазначеної моделі. Бібліотека також включає в себе ряд конкретних завершальних шарів або "голів", ваги яких випадково інстанціюються, якщо відсутні у вказаній попередньо навченій моделі. Наприклад, створення екземпляра моделі за допомогою BertForSequenceClassification.from_pretrained ('bert-base-uncased', num_labels = 2) створить екземпляр моделі BERT з вагами кодера, скопійованими з моделі bert-base-uncased, і зверху рандомізованою головою класифікації послідовностей зверху кодера з вихідним розміром 2. Моделі за замовчуванням ініціалізуються в режимі eval. Ми можемо викликати model.train (), щоб перевести його в режим поїзда.

Це корисно, оскільки дозволяє нам використовувати попередньо навчений кодер BERT і легко навчати його на будь-якому вибраному наборі даних класифікації послідовностей. Ми можемо використовувати будь-який оптимізатор PyTorch, але наша бібліотека також пропонує оптимізатор AdamW (), який реалізує корекцію градієнтного зміщення, а також зменшення ваги.

Оптимізатор дозволяє застосовувати різні гіперпіметри для певних груп параметрів. Наприклад, ми можемо застосувати зменшення ваги до всіх параметрів, крім зміщення та умов нормалізації шару:

Тепер ми можемо встановити просту фіктивну навчальну партію за допомогою __call __ (). Це повертає екземпляр BatchEncoding (), який готує все, що нам може знадобитися для передачі моделі.

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

Крім того, ви можете просто отримати логіти і самостійно розрахувати втрати. Наведене нижче еквівалентно попередньому прикладу:

Звичайно, ви можете тренуватися на графічному процесорі, зателефонувавши до ('cuda') на моделі та введеннях, як зазвичай.

Ми також пропонуємо кілька інструментів планування темпів навчання. Далі ми можемо встановити планувальник, який розігрівається для num_warmup_steps, а потім лінійно падає до 0 до кінця навчання.

Тоді все, що нам потрібно зробити, - це зателефонувати планувальнику.step () після optimizer.step () .

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

Заморожування кодера¶

У деяких випадках вам може бути цікаво зберегти ваги попередньо навченого кодера замороженими та оптимізувати лише ваги головних шарів. Для цього просто встановіть для атрибута require_grad значення False у параметрах кодера, до якого можна отримати доступ за допомогою підмодуля base_model на будь-якій конкретній задачі в бібліотеці:

Точне налаштування в рідному TensorFlow 2¶

Моделі також можна навчити власноруч в TensorFlow 2. Так само, як і в PyTorch, моделі TensorFlow можуть бути створені за допомогою from_pretrained () для завантаження ваг кодера з попередньо навченої моделі.

Давайте використаємо tensorflow_datasets для завантаження набору даних MRPC від GLUE. Потім ми можемо використовувати наш вбудований клей_конвертувати_витрати_визначень () для маркерів MRPC і перетворити його в об'єкт набору даних TensorFlow. Зверніть увагу, що токенізери є агностичними для фреймворків, тому немає необхідності додавати TF до попередньо підготовленого імені токенізера.

Потім модель може бути скомпільована та навчена як будь-яка модель Keras:

Завдяки тісній взаємодії між моделями TensorFlow та PyTorch, ви навіть можете зберегти модель, а потім перезавантажити її як модель PyTorch (або навпаки):

Тренер¶

Ми також пропонуємо простий, але повнофункціональний інтерфейс навчання та оцінки через Trainer () та TFTrainer (). Ви можете тренувати, тонко налаштовувати та оцінювати будь-яку модель трансформаторів із широким спектром навчальних варіантів та з вбудованими функціями, такими як реєстрація, накопичення градієнта та змішана точність.

Тепер просто зателефонуйте trainer.train () для тренування та trainer.evaluate () для оцінки. Ви також можете використовувати свій власний модуль, але першим аргументом, що повертається з пересилання, має бути втрата, яку ви хочете оптимізувати.

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

Щоб розрахувати додаткові метрики на додаток до втрати, ви також можете визначити власну функцію compute_metrics і передати її тренеру.

Нарешті, ви можете переглянути результати, включаючи будь-які обчислені метрики, запустивши tensorboard у вказаному каталозі logging_dir.

Додаткові ресурси¶

Легка демонстрація колабу, яка використовує трейнер для класифікації настроїв IMDb.

🤗 Приклади трансформаторів, включаючи скрипти для навчання та тонкої настройки GLUE, SQuAD та деяких інших завдань.

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

🤗 Трансформери-зошити, які містять десятки прикладів блокнотів від громади для навчання та використання 🤗 Трансформери для різноманітних завдань.