Замораживание слоев BERT при использовании модуля tfhub

По этой ссылке нажмите здесь автор говорит, что:

import tensorflow_hub as hub
module = hub.Module(<<Module URL as string>>, trainable=True)

Если пользователь желает точно настроить / изменить веса модели, этот параметр должен быть установлен как True. Поэтому я сомневаюсь, что если я установил это значение false, означает ли это, что я замораживаю все слои BERT, что также является моим намерением. Я хочу знать, верен ли мой подход.

1 ответ

Решение

У меня есть для вас ответ из нескольких частей.

Как заморозить модуль

Все сводится к настройке вашего оптимизатора. Обычный подход для TF1 - инициализировать его всеми переменными, находящимися в коллекции TRAINABLE_VARIABLES. Документ для hub.Module говорит оtrainable: "Если False, никакие переменные не добавляются в коллекцию TRAINABLE_VARIABLES, ...". Итак, да, установкаtrainable=False (явно или по умолчанию) замораживает модуль при стандартном использовании TF1.

Почему бы не заморозить BERT

Тем не менее, BERT предназначен для тонкой настройки. В документе говорится о подходах, основанных на функциях (т. Е. Замороженных) и подходах к тонкой настройке в более общих терминах, но в документации модуля это четко сказано: "Рекомендуемая практика - точная настройка всех параметров". Это дает заключительным этапам вычисления объединенного вывода лучший шанс адаптироваться к функциям, которые наиболее важны для поставленной задачи.

Если вы собираетесь следовать этому совету, обратите внимание на https://www.tensorflow.org/hub/tf1_hub_module и выберите правильную версию графика: BERT использует регуляризацию выпадения во время обучения, и вам необходимо установитьhub.Module(..., tags={"train"})чтобы получить это. Но для вывода (при оценке и прогнозировании), когда отсев ничего не делает, вы опускаетеtags= аргумент (или установите его в пустой set() или чтобы None).

Прогноз: TF2

Вы спросили о hub.Module(), который является API для TF1, поэтому я ответил в этом контексте. Те же соображения применимы к BERT в формате TF2 SavedModel. Все дело в настройкеhub.KerasLayer(..., trainable=True) или нет, но отпала необходимость выбирать версию графика (слой подбирает Keras' training состояние и применяет его под капотом).

Удачной тренировки!

Другие вопросы по тегам