Size: a a a

Natural Language Processing

2021 December 07

IG

Ilya Gusev in Natural Language Processing
ээээ, чего?
источник

IG

Ilya Gusev in Natural Language Processing
это неправда
источник

IG

Ilya Gusev in Natural Language Processing
по ним градиенты проходят, это да, но для инференса это никакого значения не имеет
источник

IG

Ilya Gusev in Natural Language Processing
Условно, при заморозке тушке один прямой проход делается, при полном файнтюнинге ещё и один обратный. Замедление в 2 раза при обучении - ничто, а при инференсе время не меняется
источник

В

Валентин👾 in Natural Language Processing
а как тогда происходит? Если я не прав, поправьте меня пожалуйста. Вот взяли батч, отдали его в нейронку, там слой берта с замороженными весами выдал какие то эмбединги, эмбединги пошли дальше на обучаемые слои. Для следующего батча также. Потом эпоха кончилась, тестовая выборка перемещались и батчи снова пошли на нейронку и слой бёрта снова выдаёт текстам из батчей эмбединги.
источник

В

Валентин👾 in Natural Language Processing
Естественно, сами веса бертового слоя не меняются, но само преобразование из айдишников токенов в эмбединги занимает много времени. На цпу, по крайне мере, уж точно
источник

IG

Ilya Gusev in Natural Language Processing
1) перемешалась обучающая выборка, тестовую нет смысла перемешивать
2) неправда - это про "при фаин тюненге берта в каждой эпохи эмбединги текста генеряться заново и это занимает много времени", потому что а) эмбеддинги не "генерятся заново", просто по весам проходят градиенты и веса, а значит и выходы, тоже меняются б) это не занимает много времени
источник

IG

Ilya Gusev in Natural Language Processing
ещё раз, рассматриваем 2 сетапа:
1) С заморозкой BERT'а
2) Без заморозки BERT'а
Прямой проход, а значит и применение, у них занимает одинаковое время, в какой бы момент 2 сетапа мы не взяли модель.
Обучение во втором варианте примерно в 2 раза дольше, потому что нужны ещё и обратные проходы
Откуда "занимает много времени?"
источник

DD

David Dale in Natural Language Processing
Если я правильно понял Валентина, речь шла о том, что в варианте (1) для всего обучающего корпуса BERT нужно прогнать вперёд 1 раз, а в варианте (2)  - $число_эпох раз.  И в этом смысле обучение модели поверх замороженного берта действительно может быть быстрее, чем дообучение берта. Если эпох много.

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

IG

Ilya Gusev in Natural Language Processing
Спасибо, про эпохи действительно правда.
Но мне редко попадались задачи, которым требовалось больше 4-5 эпох.
источник

IG

Ilya Gusev in Natural Language Processing
да и на среднем (<100k) датасете обучение всё равно занимает всего пару-тройку часов
источник

DD

David Dale in Natural Language Processing
А рекомендация лично от меня - использовать, как предлагал выше Андрей, маленькие BERTы, и не переживать по поводу их вычислительной прожорливости)
источник

В

Валентин👾 in Natural Language Processing
да, об это я и говорил, спасибо)

" т.к. берт + другая модель на инференсе будут отнимать больше времени, чем просто берт"
А почему это будет больше отнимать времени?
источник

DD

David Dale in Natural Language Processing
Потому что в случае (2) для нового текста тебе нужно будет вычислить только BERT, а в случае (1) сначала BERT, а потом ещё какую-нибудь нейросеть, которая работает на его выходах.
Возможно, ты надеешься заранее вычислить и закэшировать эмбеддинги BERT для всех возможных текстов, но я вынужден тебя огорчить: всех возможных предложений на естественном языке катастрофически много.
источник

IG

Ilya Gusev in Natural Language Processing
Ещё добавлю, что поддерживать BERT + <что-то> куда сложнее, чем просто BERT. Как минимум потому, что для этого <чего-то> нужен код, а для берта весь код уже написан.
источник

В

Валентин👾 in Natural Language Processing
Но ведь если мы файн тюнем берта, мыж сверху всё равно накидываем какие то слои? И, получается, что так мы сначала вычисляем берт, а потом используем эмбединги в другой  модели, что во втором случаи эмбединги берта идут на следующие слои. Получается разница только в том, что во второй случаи это всё одна модель...
источник

IG

Ilya Gusev in Natural Language Processing
Обычно накидывается ровно один линейный слой над cls выходом. И наличие одной модели вместо двух - это не "только", это огромная разница с точки зрения поддержки решения.
источник

A

Anton in Natural Language Processing
Нужно лишь всего один раз обучить......
источник

IG

Ilya Gusev in Natural Language Processing
(кстати возможно я обманулся, и линейных слоёв 2 и tanh активация между ними)
источник

d

dePuff in Natural Language Processing
И не поверх CLS, а чего-нибудь пожирнее)
источник