Нейролента - подборка новостей о нейронных сетях, ChatGPT

Метод. Ускорить время работы сети без просадки в...

Метод

Ускорить время работы сети без просадки в качестве можно не используя часть голов в attention или каналов в feedforward слоях.

Первая часть работы посвящена анализу внутренних представлений внутри сети.
Авторы делают два прямых прохода: на первом определяют каналы и головы с наибольшими значениями активаций, и на втором проходе используют только долю параметров, соответствующую самым большим активациям. Оказывается, что таким образом можно пропустить до 80% голов в Attention и до 95% в MLP слоях без существенного изменения выхода модели. Кроме того, оказывается что в большинстве голов attention размазан равномерно по токенам, и эти головы не выполняют никакой полезной работы.

При определении важных/неважных для конкретного входа параметров описанным выше образом приходится делать один проход с использованием всех параметров, потому толку от него как от козла молока. Можно ли как-то заранее определить нужные каналы?

Авторы рассматриваемой статьи делают следующее: берут обученную языковую модель и поверх нее обучают слои предсказывать, насколько релевантен вход данному каналу ffn / голове трансформера. На инференсе задается доля весов, которую мы хотим использовать, и берутся только измерения с самым высоким предсказанным скором. Выбор нулевых весов зависит от входа (то есть контекста) - потому sparsity носит прилагательное contextual.

Предсказывать важность канала/головы на основе активаций текущего слоя оказывается технически неэффективно, так как определение используемых для данного входа параметров и прогонка через блок должны осуществляться последовательно, что снижает утилизацию железа. Потому предлагается использовать активации с прошлого блока для выбора. Благодаря наличию residual connections активации слабо меняются от блока к блоку, потому активации прошлого блока служат хорошим приближением активаций в текущем блоке, и предиктор можно прогонять параллельно с attention и mlp блоком.