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

Для связи: @kraidiky
Download Telegram
Заявил Data Fest второй доклад. Планирую выложить в opensource несколько простых инструментов визуализации, которые каждодневно использую.
А чтобы смотреть на их применение было интереснее проиллюстрирую их применение на примере сетки, демонстрирующей гроккинг. Развею парочку надежд на понимание, того что при гроккинге происходит. Спойлер: что это за гроккинг такой и как подчинить его себе пока не понял.

Картинки для привлечения внимания: до фиолетового, тысячного семпла идёт рост на train, дальше начинается грокинг и идёт примерно до 2000-ого голубого на таректории, на картинке 4 случайные проекции, и на некоторых, но далеко не на всех проекциях видно, что направление движения сети на гроккинге под углом, к обучению на train-е.
🔥8
Forwarded from ODS Events
Сап чат!

Data Fest 2024 уже совсем скоро, и сегодня у нас ударный пост с эпичным вскрытием карт и открытием регистраций 🎉

В этом году мы чутка нарастили и программу и географию и число локаций 👀
12 оффлайн площадок уже открыты — можно регистрироваться 🔥

24 мая (пт): Москва, Pre-Party Феста в Яндексе
25 мая (сб): Москва, самый крупный офлайн день Феста в гостях у VK
26 мая (вс): Ереван, офлайн митап в гостях у РАУ
29 мая (ср): Москва и Питер — день Феста в гостях у ВТБ в Москве плюс день Феста в гостях у Альфа-Банка х ИТМО в Питере
31 мая (пт): Алматы и Москва — вечерний офлайн митап в гостях у Altel в Алматы и день Феста в гостях у Цифровой кафедры Альфа-Банка в Финансовом Университете в Москве
01 июня (сб): Алматы, Новосибирск и Москва — день Феста в гостях у Citix в Алматы, три зала и целый день Феста в гостях у МехМата НГУ в Новосибирске и целый день Феста в гостях у Avito.tech в Москве
02 июня (вс): Москва и Питер — завершаем программу с финальным днем Феста в гостях у Яндекса в Москве и днем Феста в гостях у VK в Питере!

На каждой площадке будет свой состав секций и спикеров — каждый найдёт себе ивенты под свои интересы 🤗

Плюс планируется огромное количество online активностей в Spatial.Chat, программу в котором будем анонсировать по мере готовности 👀️️️️ А что-то можно уже сейчас найти на странице Феста

Ждём на Фесте, где бы в пространстве-времени он не оказался! 🦾️️️️️️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Forwarded from ODS Events
Сап чат!

Data Fest 2024 уже совсем скоро, и сегодня у нас ударный пост с эпичным вскрытием карт и открытием регистраций 🎉

В этом году мы чутка нарастили и программу и географию и число локаций 👀
12 оффлайн площадок уже открыты — можно регистрироваться 🔥

24 мая (пт): Москва, Pre-Party Феста с Яндексом
25 мая (сб): Москва, самый крупный офлайн день Феста в гостях у VK
26 мая (вс): Ереван, офлайн митап в гостях у РАУ
29 мая (ср): Москва и Питер — день Феста в гостях у ВТБ в Москве плюс день Феста в гостях у Альфа-Банка х ИТМО в Питере
31 мая (пт): Алматы и Москва — вечерний офлайн митап в гостях у Altel Digital в Алматы и день Феста в гостях у Цифровой кафедры Альфа-Банка в Финансовом Университете в Москве
01 июня (сб): Алматы, Новосибирск и Москва — день Феста в гостях у Citix в Алматы, три зала и целый день Феста в гостях у МехМата НГУ в Новосибирске и целый день Феста в гостях у Avito.tech в Москве
02 июня (вс): Москва и Питер — завершаем программу с финальным днем Феста в гостях у Яндекса в Москве и днем Феста в гостях у VK в Питере!

На каждой площадке будет свой состав секций и спикеров — каждый найдёт себе ивенты под свои интересы 🤗

Плюс планируется огромное количество online активностей в Spatial.Chat, программу в котором будем анонсировать по мере готовности 👀️️️️ А что-то можно уже сейчас найти на странице Феста

Ждём на Фесте, где бы в пространстве-времени он не оказался! 🦾️️️️️️
Please open Telegram to view this post
VIEW IN TELEGRAM
Мои выступления будут на оффлайновых площадках Data Fest:
31 мая в 15:20 Про правильный прунинг в нейросетях, всякие своства сетей, интересные визуализации и колиниарити-чек. https://ods.ai/events/fest2024-alfa-msc
1 июня в 18:50 Про отращивание новых весов, разморозкак как в RigL, поисковое пространсто и новые архитектуры. https://ods.ai/events/fest2024-avito-msc

Для тех кто был на моём митапе в феврале - ничего нового, Но всё равно заходите на трансляцию, для остальных - заходите, не пожалеете. Кто не посмотрит на трансляции - рано или поздно всё это аккуратно порежут на кусочки и выложать отдельными видео. тогда я ссылочки тоже сюда покидаю.
👍6🔥2
6_Голощапов_Владислав_Connectomics_Прунинг_на_основе_глубокого_анализа.pptx
6.7 MB
И презенташка к нему. Завтра продолжим и усугубим.
👍4
15_Голощапов_Владислав_Connectomics_Нейросети_с_адаптивно_обучаемой.pptx
1.6 MB
https://www.youtube.com/live/0eYjmKyqyjk?si=VrCqWHms1GtKL_Mu&t=28164 Отвыступался кратко и компактно заставив себя пролистать все ненужные подробности.. Даже в тайминг уложился, что непривыччно. Всех зову идти в ту сторону, будущее где-то там.
👍6🔥2
А вот ещё одна не очевидная мысль.

Есть модель из оригинальной статьи про гроккинг и она обучается адамом на скорости 1e-3. И мы можем взять прогреть этот самый адам, и предложить ему сдвинуть модель всего на один шаг. И посмотреть как менялся бы loss за один единственный шаг на разных скоростях.

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

Но знаете что? 1e-3 является слишком большой скоростью для обучения практически на всех этапах обучения.

Но если снизить скорость в 30 раз в область где сеть ведёт себя строго линейно результат будет не лучше, а медленнее он будет не в 30 раз, а примерно в 100 раз. Как такое вашей интуиции? Не встаёт поперёк?

Иногда для нейросетей важно учиться не по градиенту, а слегка пробивать стены своего тоннеля. Это, по всей видимости общее свойство нейросетей, а что на этот счёт думала теория оптимизации - никто не знал, потому что экспериментаторы часто в ней не особо разбираются и не стремятся.
🤔2
А вот такой опрос канала: Считаете ли Вы лично, что гроккинг объясняется тем, что сильная регуляризация убивает ненужные веса, и в работе остаются только те, которые нужны в максимально общем решении задачи?
Anonymous Poll
20%
Да, считаю
34%
Нет, думаю дело в чём-то другом
17%
Знаю что такое гроккинг, но не имею мнения с чем он может быть связан
29%
Не знаю, что такое гроккинг
Судя по результатам я сейчас скажу информацию, полезную как минимум для 3 человек в этой группе. На самом деле я тоже когда-то думал так же.

А ну так вот, на картинке распределение весов в сети в ходе обучения, в логарифмическом масштабе. Где-то в районе 8-ой картинки начинается гроккинг и где-то в районе 14-ой он заканчивается. Никаких драматичных изменений в весах. На второй картинке метрика полезности синапсов и тут тоже ничего интересного, при том, что loss то при этом уменьшился на два порядка.

То есть никакой обобщённой подсети гроккинг из сети не выделяет. Как работали все веса параллельно, так и продолжают. Но что-то важное там всё-таки происходит.

P.S. Кстати, залихватским прунингом с дообучением можно выделить из грокнутой сети работающую подсеть, просто "из коробки" без единой хитрости. Оставил от сети всего 3% весов. при ~100% accuracy. Но если прунить и грокать одновременно сети это деже чуть-чуть мешает. Чуть-чуть, но замедляет гроккинг, что в мою, видимо, устаревшую интуицию как-то не укладывается.
🤔2👍1
Интересно, что гроккинг всё-таки, не совсем серебряная или там золотая пуля. Если давануть прунингом слишком сильно - в 64 раза, оставив всего шесть с половиной тысяч параметров, точность чуть-чуть падает причём падает сначала на валидейшене, то есть найденное сетью решение всё же не совсем правильное, хоть и очень близко к нему и даёт 100% accuracy если обращаться с ним чуть-чуть бережнее.
👍3
В коллекции отрицательных результатов последнего времени пополнение. :) Даже очень сильный прунинг не способен подтолкнуть к гроккингу при отключении 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
Файл с весами если кто вдруг заинтересуется более детально