Обучение прямо в тритах. Часть вторая: TERNIC

В первой части модель уже училась прямо в компактной тритовой записи, но обычный Adam был быстрее и лучше предсказывал текст. Останавливаться на этом не хотелось. Теперь у метода есть имя — TERNIC, «Терник»: Ternary Error-Residual Normalization with Integer Carry. По смыслу — тритовое обучение с накоплением дробных поправок.

Качество: было и стало

Средние результаты трёх случайных стартов. Начальные значения весов, учебные данные и число шагов одинаковые; оценка — на тех же 256 окнах текста.

Показатель TERNIC до улучшений качества TERNIC сейчас Adam
Ошибка предсказания, бит на символ — меньше лучше 2,946 2,859 2,810
Правильный следующий символ на первом месте — больше лучше 43,52% 44,80% 43,61%

Разрыв по ошибке сократился на 64,4%. По доле угаданных символов TERNIC уже выше Adam на каждом из трёх стартов. Но по общей ошибке ещё отстаёт: правильно угадать символ и правильно оценить его вероятность — разные вещи. Настройки Adam в этом сравнении не менялись.

Скорость и память

В начале 900 шагов обучения занимали примерно 13,5 секунды против 2,6 у Adam. Теперь TERNIC проходит их примерно за 2,67 секунды — ускорение около пяти раз.

Последний парный замер текущей версии, при одинаковом объёме данных в видеопамяти:

Показатель TERNIC Adam Разница
Шаг обучения с GPU-копированием входов и сохранением ошибки 3,003 мс 2,906 мс TERNIC медленнее на 3,35%
Пик выделенной GPU-памяти 62,11 МБ 69,53 МБ TERNIC использует на 10,67% меньше

Скорость проверена в трёх парах запусков, память — в двух. Чтение данных с диска в замер шага не входит. Это актуальные цифры: прежние оценки памяти были получены другим способом.

Главное — обучение по-прежнему не требует полной копии весов и полного массива их поправок в обычных числах. Но промежуточные вычисления остаются обычными, а не тритовыми.

Пока это маленькая модель, примерно миллион обучаемых матричных весов, на видеокарте A10. Результат для большой модели ещё не проверен.

TERNIC приблизился к Adam по скорости, обошёл его по доле угаданных символов и сохранил экономию памяти. В третьей части — другой текст и разбор оставшейся ошибки.

Андрей Рощупкин · Тернит

Все записи дневника ↗