Comments 7
Почему статья была без инвайта!?
При умножени двух троичных матрица, получаем обычную матрицу. Т.е. в результате сразу теряем нашу оптимизацию. И как сделать операцию нелинейной на тритах?
Вообще не ясно как на таких матрицах можно нейросеть собрать
Или это только оптимизации инференса (наподобие квантонизации)?
как сделать операцию нелинейной на тритах?
так как мы имеем дело с дискретными значениями, то их легко можно заменить с помощью табличной функции на любые другие. К примеру, умножаем троичную матрицу весов на какой-то входной троичный вектор. Результат - вектор из целых чисел. Используем каждое из этих чисел как номер элемента в массиве (номера могут быть отрицательными, поэтому предварительно можно сложить с какой-то константой bias), и подставляем вместо номера элемента его значение в этом массиве.
На псевдокоде это можно примерно так записать:
A: TritMatrix = [[1,0,0], [-1,1,-1], [0,1,-1]] // матрица весов
x: TritVector = [1, 0, 1] // входной вектор
z: TritVector = A * x // произведение матрицы на вектор
f: [-3..3] int = [-2,-1,1,2,1,-1,-2] // табличная функция
result: IntVector // целочисленный вектор результата
for i: int = 0; i < 3; i++ {result[i] = f[z[i]]} // применение табличной функции
return result // возврат результата
Я просто удивлён как так за 15 дней была написано статья, которая была мне сейчас так полезна, но кроме +1 в карму и рейтинг ничего сделать не могу
Умножение троичных матриц для нейросетей