Свидетели Градиента – Telegram
Свидетели Градиента
488 subscribers
128 photos
29 files
61 links
Этот канал предназначен для общения и обсуждений среди тех, кто как и я, хочет видеть что происходит под капотом у нейросетей, и старается развивать интуицию об их природе и свойствах.

Для связи: @kraidiky
Download Telegram
В коллекции отрицательных результатов последнего времени пополнение. :) Даже очень сильный прунинг не способен подтолкнуть к гроккингу при отключении L2 регуляризации.
train и val
Можно подумать, что это похоже на гроккинг, но на самом деле это совершенно другой эффект. Регуляризация весов в этом опыте вообще отключена. Интенсивный пунинг (который мы умеем делать и без предварительной регуляризации), тобишь обрезание весов при включённом на небольшую мощность отращиванием весов обратно при включённом дообучении Адамом приводит к тому, что размер сети сжимается до маленького, и сеть теряет возможность переобучаться, вынуждена использовать только более универсальные решения. В данном случае это та же сеть, что и в предыдущих постах, имевшая изначально размеры 420000 весов, сжатая сжатая в 110 раз, до 3848 весов.

Брутально дожать её до val 100%, может быть и возможно, но ужасающе долго. Всё-таки, прунинг без регуляризации, как и прунинг без дообучения, который я показывал в докладе, интересны в основном только с точки зрения выяснения теоретических пределов возможного для данных методов, а на практике всё что можно включить будет включено.
👍5🔥3
https://arxiv.org/abs/2405.20233 С подачи читателей канала почитал статью о том, как приблизить желанный гроккинг. Статья, конечно, интересная, хотя значительно интереснее было бы её воспроизводить. Кое какие мысли у меня родились.
На примере того же прунинга, очень многие в работах применяют вторую производную, апроксимированную с помощью дисперсии. При этом самой второй призводной формально не существует, как, например, в любой нейросети имеющей ReLU в качестве активации, но если бы она существовала, то была бы далека от того, что мы тут нааппроксимировали. То есть применённая метрика приближается к чему-то важному, о чём мы имеем крайне мало понятия, но полуэмпирически уловленная закономерность нас на эту метрику навела. Из известных аналогичная история с batchnormal. Мне кажется тут то же самое. Они говорят о том, что у нас бывают быстро и медленно меняющиеся градиенты, но мы знаем, что это непрeрывный спектр, причём он достаточно не нормально распределён. Мы это знаем потому что моей работе по прунингу мы работаем только с менее вариативными градиентами, так что я успел на них насмотреться. Они говорят о частотности градиентов, и применяют к ним фурье преобразование, но мы точно знаем, что градиент меняется не периодически если только вы решафлите входную выборку. Они говорят о гроккинге, как о прямом продолжении, собственно обучения. Но если вы нарисуете траекторию обучения способом которым я постоянно размахиваю - случайной двумерной проекцией, вы увидите, что в процессе первоначального выучивания train-а сеть идёт в одном направлении, а входя в гроккинг и до его завершения двигается в другом направлении часто ортогональном первой фазе обучения. Сейчас картинки под рукой нету, но вечером кину. Всё это наводит на мысль, что авторы обнаружили крайне интересную закономерность, вероятно имеющую отношение к дисперсии градиентов, которую они аппроксимировали низкими частотами в Фурье разложении, но сути которой они не понимают. И большое им спасибо за то что они нам её показали, возможно кто-то из нас лучше поймёт что к чему. При этом, например, мы знаем что некоторые алгоритмы, типа всеми любимого Adam-а замедляют обучение вдоль параметров имеющих большую дисперсию, так что я бы начинал даже не с воспроизводства работы авторов, а с того, что ещё сильнее чем в Адаме замедлял обучение весов с большой дисперсией напротив подняв скорость для всех остальных, и если интуиция на счёт того что фурье анализ в данном случае всего лишь приближение, это должно тоже приближать гроккинг. Или хотя бы сильно увеличил betas, потому что мы знаем, что экспоненциальное сглаживание сильнее ослабляет высоко-вариативные градиенты, и посмотрел что там с гроккингом будет. ПОскольку мы знаем, что высокое сглаживание, приближающее обучение к пакетному, мешает искать некоторые оптимумы. возможно эти betas-ы нужно зашедулить. Опять же берём одинаковую инициализацию, и сравниваем их метод с и наш при условии равного пройденного пути по траектории (чтобы отнормировать на разные фактические скорости при разных реализациях алгоритма), если у них сильно больше получается чем другими способами или другими способами вообще не получается, то, возможно, они нашли что-то ещё более интересное и неожиданное, и надо делить веса по признаку кого они ускоряют а кого нет на когорты и смотреть характерные отличия разных свойств весов по когортам.

Всё это выглядит очень завлекательно и мотивирует к экспериментам в духе: Берём готовый ноутбук с гроккингом и начинаем резвиться.
🔥4👍1🤔1
Есть такой трансформер из той самой работы про гроккинг. Хотите узнать какие из весов в этой прекрасной конструкции можно порезать?
Transformer(
(token_embeddings): Embedding(99, 128)
(position_embeddings): Embedding(5, 128)
(model): Sequential(
(0): DecoderBlock(
(self_attn): MultiheadAttention(
(out_proj): NonDynamicallyQuantizableLinear(in_features=128, out_features=128, bias=True)
)
(self_attn_norm): LayerNorm((128,), eps=1e-05, elementwise_affine=True)
(ffn): Sequential(
(0): Linear(in_features=128, out_features=512, bias=True)
(1): GELU(approximate='none')
(2): Linear(in_features=512, out_features=128, bias=True)
)
(ffn_norm): LayerNorm((128,), eps=1e-05, elementwise_affine=True)
)
(1): DecoderBlock(
(self_attn): MultiheadAttention(
(out_proj): NonDynamicallyQuantizableLinear(in_features=128, out_features=128, bias=True)
)
(self_attn_norm): LayerNorm((128,), eps=1e-05, elementwise_affine=True)
(ffn): Sequential(
(0): Linear(in_features=128, out_features=512, bias=True)
(1): GELU(approximate='none')
(2): Linear(in_features=512, out_features=128, bias=True)
)
(ffn_norm): LayerNorm((128,), eps=1e-05, elementwise_affine=True)
)
(2): LayerNorm((128,), eps=1e-05, elementwise_affine=True)
(3): Linear(in_features=128, out_features=99, bias=True)
)
)

Ловите:
539/12672 token_embeddings.weight
153/640 position_embeddings.weight
1253/49152 model.0.self_attn.in_proj_weight
102/384 model.0.self_attn.in_proj_bias
315/16384 model.0.self_attn.out_proj.weight
0/128 model.0.self_attn.out_proj.bias
47/128 model.0.self_attn_norm.weight
0/128 model.0.self_attn_norm.bias
132/65536 model.0.ffn.0.weight
0/512 model.0.ffn.0.bias
122/65536 model.0.ffn.2.weight
0/128 model.0.ffn.2.bias
52/128 model.0.ffn_norm.weight
0/128 model.0.ffn_norm.bias
236/49152 model.1.self_attn.in_proj_weight
70/384 model.1.self_attn.in_proj_bias
120/16384 model.1.self_attn.out_proj.weight
0/128 model.1.self_attn.out_proj.bias
54/128 model.1.self_attn_norm.weight
0/128 model.1.self_attn_norm.bias
1690/65536 model.1.ffn.0.weight
0/512 model.1.ffn.0.bias
1882/65536 model.1.ffn.2.weight
0/128 model.1.ffn.2.bias
65/128 model.1.ffn_norm.weight
0/128 model.1.ffn_norm.bias
69/128 model.2.weight
0/128 model.2.bias
2871/12672 model.3.weight
99/99 model.3.bias
Итого: 9871/422883 rate:42.840948232195316 accuracy train 100% val 99.936%


С сылка на ноутбук: https://colab.research.google.com/drive/1iC4NXi1Dz7sTKpuh_w4i9QAO4oaCKwDC
Если у вас будут соображения или выводы исходя из знания архитектуры трансформеров (в которой я не разбираюсь) - рассчитываю увидеть их в комментариях в порядке ответной любезности. Из того что мне бросилось в глаза - из эмбединга размером 128 реально используется примерно половина, а огромные полносвязанные слоя ffn первый деградировал до простейшего линейного преобразования по два веса на активный нейрон, в среднем. Второй селфатеншен тоже выродился, а второй ffn и последующая полносвязаная конструкция делает большую часть работы.
👍1
step200_model.pkl
1.6 MB
Файл с весами если кто вдруг заинтересуется более детально
Всё чудесатее и чудесатее...
Взял модель, проредил случайным образом на четверть, после чего запустил без дальнейшего отрезания или прирастания весов. Контрольная группа, так сказать.

Учится такая сеть ощутимо медленне, по горизонтали количество батчей. Но что интересно, гроккинг начался когда accuracy на train едва перевалила за половину.
Та же ситуация на прореживании в 50% Для сравнения дам полную сетку у которой все веса на месте, она отучилась быстрее всех. Причём в больших случайно прореженных сетях acc на train до 100% не дотягивается. При постоянной скорости, по крайней мере.

Именно по таким вот пограничным вариантам можно понять чем гроккинг является, а чем нет. Я вообще не слышал, чтобы гроккинг наступал до того как сеть окончательно переобучится. Можно предположить, что я наблюдаю не тот гроккинг, что другие, но тогда почему тогда эти графики так красиво и плавно превращаются один в другой? Что же такое этот ваш гроккинг всё таки...

Щемящее чувство первооткрывательства!

Картинки: 0%, 25%, 50%, 75%. В последнем случае без манипуляций с коннектомом сеть уже совсем не тянет...
🔥2
На вчерашнем мероприятии в Яндексе придумал для себя новый термин "эта подзадача является llm-оптимизируемой".
По-моему очень хорошо подходит для современных продуктовых рассуждений.
🤣1
Из интересного. В той же задачке из того же ноутбука если lr снизить в три раза train не сумеет достигнуть 100%. Но гроккинг всё равно сумеет запуститься.

Если представлять адаптивный ландшафт как лабиринт лежащий на более или менее гладкой огибающей то у такой ситуации может быть небезинтересная трактовка. И практические выводы для охотящихся за гроккингом тоже.
🤔2
Последние мои заметки про прунинг в трансформерах вызвали лайки только у одного человека, поэтому сейчас будет исследование общественного мнения на тому что не так и как с этим бороться:
Anonymous Poll
45%
По трансформерам пока ничё непонятно и фрагментарно, ждём большого доклада с подробным изложением.
0%
Все эти трансформеры для богатых, а нам их учить не светит.
42%
Слишком синтетическая задача, да ещё и с гроккингом, интересно как это взлетит на чём-то реальном.
9%
Лучше бы что-то более понятное сделал, MobileNetV4 прунанул, например, чтобы там разморозка и т.п.
15%
Интересны более фундаментальные вещи, типа первых докладов, например режим оптимизатора понажёристее
24%
Лучше бы какой-нибудь инструментарий наконец в опенсорс выложил. А то собирался и всё никак.
3%
Нужно формат сменить на более живенький.
9%
Свой ответ в комментариях...
На ODS выложили трэк с моими докладиками, нарезаными в отдельные файлы. Можно ими кидаться в товарищей, которые по каким-то причинам ещё не причастны.
https://ods.ai/tracks/df24-randomdsml
👍5😁1
Из примерно недельного вычислительного эксперимента по подбору гиперпараметров я имею сказать, как мне кажется, очень важное наблюдение. По всей видимости в принципе не существует гиперпараметров, одинаково хорошо подходящих для прорежвания плотной матрицы и матрицы уже прореженой в двадцать раз. Если что-то пруните ставьте отдельные опыты по подбору гиперпараметров в начале в середине сжатия, и когда выдавливаете из сети последние ещё x1.5 и ещё пол капельки
👍3🤔21
Раз уж меня не срослось с выступлением на на хайлоадовской AiConf поделюсь чуть-чуть прогрессом, потому как рассказать неймётся. :)

Тренеруюсь тут подбирать гиперпараметры, на всё том же трансформере с гроккингом, При соблюдении должной аккуратности его даже без перестроения коннектома на уровне слоёв можно пожать ещё в полтора раза сильнее, примерно до 6тысяч весов от начальных 422тысяч, это x73 и на последних этапах сжатия веса модели убавляются уже буквально по одному, то есть 30 штучек удаляется, и 29 штук перспективных кандидатов возвращается обратно.

Всё это прекрасно и весело, но естественно задать вопрос, а на сколько этот трансформер был перепараметризован изначально? Напомню, задача состоит из ~10 тысяч примеров, из которых ровно половина в валидейшене - таблица остатков от деления размером 98*97, трансформер с внутренним эмбедингом 128 из двух слоёв, в общей сложности 422 тыс. весов.

Чисто по формальному математическому критерию перепараметризация наступает когда количество эффективных весов больше, чем количество примеров в выборке, но такое определение хорошо подходит только для доказательства теорем. Поэтому перейдём сразу к практике и начнём запускать бейзлайн уменьшая размер модели. И... если мы уменьшим внутренний эмбединг до 96, то модель ещё справляется и с трейном и с валом через гроккинг, Это ~200тыс весов, а вот 64 уже не вытягивает. Глубину тоже можно уменьшить до одного слоя и при эмбединге 128 она справится с задачей, а на 96 уже нет. Тоесть, как бы и перепараметризованная задачи и одновременно не так, чтобы сильно. Пляшем так или иначе где-то вокруг 200тысяч, меньшего размера плотная модель уже не тянет. А жёмтся при этом до 6 тыс. Грубо говоря в 10 раз по скорости (потому что спарс-матрицы x3 медленнее) и в 15 раз по памяти и шине (потому что индексы для спарсов можно хранить половинного размера как минимум).

P.S. Необходимо буквально тантрическое терпение, чтобы изучать все вот такие свойства разреженного обучения вместо того чтобы сразу броситься писать финальную версию кода... Даже хорошо, что я пока независимый исследователь, потому что никакому начальнику терпения бы не хватило...
P.P.S. Обратите внимания на стратегию прунинга с отращивание новых весов. Мне даёт результаты кратно лучшие чем обычный прунинг.
👍6
Когда телеграм обрезал текст на оценку "Зашибись!"
👍2
Всем привет, у меня вопрос!

За последние два дня два раза поднимался вопрос, а есть ли какая-нибудь не слишком устаревшая, но при этом широко известная задача маленького размера, на которой можно было побаловаться трансформерами и посравниваться себя с другими, которая бы обучалась, например, за сутки и влезала в бытовую карту? Может кто знает/слышал? Или может быть какая-нибудь задачка на каггле, например, за последнее время всплывала с подходящими параметрами, чтобы было с кем себя сравнить?

- У Сбера есть бенчмарк публичный, для экспериментов с разными идеями, но там задача рассчитана на, примерно 200М весов, чтобы готовым результатом померяться это норм, но для быстрых домашних экспериментов многовато.
- Есть тот трансформер с гроккингом, на котором я балуюсь, он хорош тем, что совсем микроскопический время разных экспериментов всего от 4 минут до часа, но эта задача совсем вырожденная, последовательность всего из двух токенов состоит, так что для многих экспериментов она просто непригодна.
👍2
Forwarded from Vlad Goloshchapov
Российские школьники выиграли олимпиаду по искусственному интеллекту. Россияне были единственными людьми, кто выступал без флага "дабы разумением своим не смущать начальства".
🤡2🤔1🤣1
Постоянные читатели канала увидят больше половины доклада ещё до того, как я его до Новосибирска довезу.

Это, собственно, задача, которую решает трансформер - таблица остатков от деления в виде картинки. Хорошо видно, что много где в данных прослеживается понятная логика, грокнуть их, тобышь получить 100% acc на валидейшене, составляющем случайную половину этой картинки на первый взгляд нетривиально.

На второй взгляд можно заметить, что картинка симметричная, так что многим точкам из валидейшена соответствуют точки из трейна отличающиеся примерно ничем. Так что реальный валидейшен там далеко далеко не половина. Осталось выяснить,

Как бы не пришлось читать оригинальную статью гугловцев, чтобы узнать, есть ли у них эта "незначительная утечка", или это только в публичном ноутбуке такая фигня получилась...

Впрочем, на сжатие трансформера это не влияет, и способность при гроккинге обобщить поняв, что многие токены будучи представленными в виде float-ов тоже не так чтобы тривиально.
Forwarded from tsymba❤️
Всем привет! На волне хайпа и по горячим следам написал про первый межнар по ИИ, который прошел в Болгарии буквально позавчера. Мне посчастливилось принимать участие в подготовке и организации; мой основной вклад состоял в разработке трети задач из научного раунда.

Куча постов ниже, а лонгрид — вот тут.
👍2