tgoop.com/quant_prune_distill/141
Create:
Last Update:
Last Update:
Теперь про сам метод.
FastFeedForward network, которая предлагается в качестве альтернатива обычной FFN, представляет собой следующее: две матрицы размера 2^D - 1 x H
, где D
глубина дерева, а H
- embedding dim, соответствующие входной и выходной проекции, и функция активации. Вернее даже правильнее будет сказать, что это последовательности матриц размеров 1, 2, … 2^{D-1}
, отвечающие разным уровням дерева.
Прямой проход выглядит следующим образом:
Для входной последовательности на каждом уровне
l
дерева считается скалярное произведение со столбцом соответствующим узлу, в который мы попали по результатам предыдущего шага, матрицы весов для данного уровня, и если полученное скалярное произведение положительно, то переходим в правый узел, и в левый узел в противном случае. Проходясь от корня к листьям, записываем индексы узлов на всех уровнях и результат произведения. Итого имеем после первой проекции матрицу индексов
N
вершина размера длина последовательности на глубину дерева, и матрицу логитов
L
- промежуточных активаций. К матрице логитов применяем функцию активации и считаем произведение с матрицей выходной проекции, откуда мы берем столбцы из матрицы индексов
N
.
Асимптотическая сложность алгоритма - O(log N) по промежуточной размерности против O(N) у обычный FFN из двух линейных слоев и активации.
Красиво? Красиво.
Несколько таких деревьев можно прогонять параллельно. Вариации описанной выше архитектуры называют UltraFastBERT-KxD, где
K
- количество деревьев, а D
- глубина дерева. Внутренняя размерность, таким образом, равна K x (2^D - 1)
. В частном случае K
- деревьев глубины 1 имеем привычную архитектуру трансформера.BY КПД
Share with your friend now:
tgoop.com/quant_prune_distill/141