Pull to refresh

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 в карму и рейтинг ничего сделать не могу

Sign up to leave a comment.

Articles