Мои заметки сегодня

«Это может объяснить, почему пакетные обновления или большие размеры пакетов имеют тенденцию быть меньше — сумма векторов градиента становится больше, но не может полностью компенсировать больший знаменатель |B_k|»

Контекст. Модели НЛП используют все больше и больше данных. Они также используют большие партии. Почему они используют большие партии?

Возьмем, к примеру, RoBERTa, обучающую свою модель пакетом из 2 000 сэмплов. Мы отмечаем, что недоумение уменьшается по мере увеличения размера партии до 2 тыс. сэмплов, а затем уменьшается. Недоумение является обратной величиной вероятности последовательности, и чем она ниже, тем лучше.

Классный пост о недоумении: https://towardsdatascience.com/perplexity-in-language-models-87a196019a94

Некоторые из моих заметок в этом месте ниже.

Мы знаем, как все работает. Начнем с создания наших обучающих данных. Мы делим эти обучающие данные на партии, и для каждой партии мы обновляем параметры таким образом, чтобы приблизиться к хорошему локальному минимуму для общей функции потерь. Это делается путем движения в противоположном направлении, поскольку «наклон» функции потерь описывается в многомерном пространстве градиентом этой функции потерь.

Мы также помним, что наши данные не идеальны. Таким образом, наличие пакетов позволяет нам по закону больших чисел сходиться к ожидаемым потерям по сравнению с истинной основной популяцией. Помните, что здесь мы работаем только с оценками, потому что у нас есть только выборка истинной базовой совокупности.

Дебаты ведутся вокруг добавленной стоимости высокого уровня B_k.

Theata ‹- Theta — скорость_обучения*(1/B_k)*сумма(град_i(тета))

Сумма градиентов со значениями параметра в момент времени T выполняется по всем наблюдениям, отобранным из пакета.

Что я знаю, как я сказал выше, так это то, что чем больше B_k, тем больше я буду приближаться к ожидаемому значению наклона, которое я ожидаю, учитывая слово из истинной базовой популяции и текущие параметры тета.

Давайте сравним ситуацию, когда у нас есть B_k и 2*B_k.

sum_grad(B_k)/B_k ‹ sum_grad(2*B_k)/2*B_k

тогда и только тогда, когда2*sum_grad(B_k) ‹ sum_grad(2*B_k)

Таким образом, для партии размером B_k, чтобы новое обновление было выше, нам потребуется, чтобы sum_grad(2*B_k) превышала начальную сумму более чем в два раза.

Для меня трудно сказать, что произойдет. Однако, если я доведу ситуацию до экстремальных значений с большим B_k, то представьтеследующее уравнение:

2*(sum_grad(B_k)/N) ‹ sum_grad(2*B_k)/N

Асимптотическое поведение выглядит примерно так:

2*Ожидаемый_убыток ‹ Ожидаемый_убыток -> Невозможно

Другими словами, это невозможно. Это также означает, что при достаточно большом размере пакета, когда мы увеличиваем размер пакета, мы не получаем более высоких обновлений.

Нижеприведенные авторы объясняют это по-другому, с чем я не совсем согласен. Они говорят, что градиенты по возрастающей партии указывают в разных направлениях таким образом, что их сумма не может компенсировать знаменатель.

ХОРОШО. Таким образом, каким бы ни был подход, мы чувствуем, что когда мы увеличиваем размер пакета, мы получаем более низкие обновления для параметров нашей модели с использованием градиентного спуска.

Хм, это хорошо или нет?

На самом деле я не могу просто так сказать, хорошо ли для языковой модели иметь более низкие обновления. Как правило, моя интуиция подсказывает мне, что если я не слишком уверен в значениях градиента, то есть не уверен в своих обучающих данных, то имеет смысл не слишком доверять его значениям и, следовательно, медленно двигаться по кривой потерь.

Тем не менее, этот контроль над движениями может быть хорошо реализован с помощью параметра скорости обучения, и моя интуиция выше во многом исходит из моих прошлых чтений о том, как установить скорость обучения.

Продолжаем думать. Как я могу объяснить, что ребята из RoBERTa получили лучшее недоумение (ниже), увеличив размер партии.

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

Время вышло, я буду думать об этом в другой день. ;)