В первой части модель уже училась прямо в компактной тритовой записи, но обычный 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 по скорости, обошёл его по доле угаданных символов и сохранил экономию памяти. В третьей части — другой текст и разбор оставшейся ошибки.
Андрей Рощупкин · Тернит