Как я упоминал выше, гроккинг на синтетическом датасете это прекрасно, но что если датасет не на столько прекрасный? Очевидно, что добиться 100% на таком датасете невозможно даже на трейне, просто потому что одна и та же задача в датасете имеет несколько разных ответов, и это, кстати, реально так в языковых датасетах, где фраза "Есть закурить?" может иметь радикально различающиеся продолжения, но хотя бы давайте посмотрим границы возможного! Посмотрим типичную схему обучения до гроккинга на датасетах с не простыми делителями: 95, 94, 96.
Ну что тут сказать, с одной стороны это строго говоря гроккинг, то есть генерализация после оверфита. Но с другой стороны границы возможного здорово напоминают здесь тюрьму. Если вы хотите продумать алгоритмы для гроккинга на неоднозначно размеченных данных, то вот вам модельная задача - кушайте, как говорится, не обляпайтесь.
Ну что тут сказать, с одной стороны это строго говоря гроккинг, то есть генерализация после оверфита. Но с другой стороны границы возможного здорово напоминают здесь тюрьму. Если вы хотите продумать алгоритмы для гроккинга на неоднозначно размеченных данных, то вот вам модельная задача - кушайте, как говорится, не обляпайтесь.
Какое офигенное открытие совершили в OpenAI, я просто не могу удержаться от того чтобы не вспомнить по этому своей статьи 2015-ого года: https://habr.com/ru/articles/249031/ в которой это, в общем-то показываю, хоть и на других примерах. :) Желающие самостоятельно поискать какие конкретно веса отвечают, например, за то чтобы после имени говорящего персонажа, но до его фразы могут взять снапшот прореженной в 150 раз сети обученной на пьессах Шекспира и самостоятельно посмотреть, домашнего компа вам вполне хватит.
P.S. Не то чтобы я претендовал на лавры Шмитхуббера, но что-то прекрасное в этом, согласитесь, есть. :)
P.S. Не то чтобы я претендовал на лавры Шмитхуббера, но что-то прекрасное в этом, согласитесь, есть. :)
Хабр
Ансамбль синапсов – структурная единица нейронной сети
В мае прошлого года сотрудники лаборатории глубокого обучения Гугла и учёные из двух американских университетов опубликовали исследование « Intriguing properties of neural networks ». Статья о нём...
😁3🔥2
Forwarded from Data Secrets
OpenAI выпустили довольно интересную статью про интерпретируемость моделей
Сейчас модельки уже во всю помогают принимать решения в медицине, в науке, образовании и тд. Но интерпретировать их ответы мы так и не научились, к сожалению. Многие уповают на интерпретацию через CoT, но это дело очень хрупкое и ненадежное.
OpenAI утверждают: проблема в том, что мы пытаемся распутывать внутренности модели постфактум, когда это уже почти невозможно. Во время обучения модели подбирают миллиарды весов, из которых в итоге получается очень плотная сеть. В итоге поведение модели размазано по массе параметров, и структурировать эту паутину, мягко говоря, сложно.
Вместо этого они предлагают сразу обучать структурно более простую разреженную сетку.
На практике исследователи берут архитектуру, похожую на GPT-2 и ограничивают веса так, чтобы подавляющее большинство было равно нулю. То есть если в обычной плотной сети каждый нейрон связан со всеми из следующего слоя, то здесь остаются связи только с несколькими. Сеть становится более чистой и читаемой.
Это первый шаг. Такая структура сети позволяет для конкретной задачи брать и находить маленькую часть модели, отвечающую за ее решение. В статье это называется circuit. Формально, – минимальный поднабор весов, обладающий необходимостью и достаточностью: то есть если выкинуть все, кроме него, задача все еще будет решаться; а если выкинуть только его, а остальную сеть оставить – нет.
Ну а затем в этом маленьком наборе весов уже можно копаться и непосредственно анализировать поведение сети.
В статье приведен пример с простенькой задачей закрытия кавычки. Модели надо запомнить тип открывающейся кавычки и в конце последовательности поставить такую же. И вот оказывается, что делает она это по определенному логическому алгоритму, заложенному в 5 residual-каналах, двух MLP-слоях и 1 канале аттеншена. На картинке можете посмотреть, как это работает.
Представьте: если за маленькой задачкой скрывается что-то такое, то что можно найти, если посмотреть, как модель решает сложную математику или пишет код?
Короче, подход интересный. И есть даже занятный практический результат, в который нужно вдуматься: чем больше модель и чем более она разреженная, тем проще становятся схемы, реализующие одни те же способности. Make sense.
Тем не менее, не факт, что если это работает для таких игрушечных моделек, заработает и для больших. К тому же обучать разреженные модельки только ради интерпретируемости никто не будет: слишком дорого и неэффективно.
Но вот если в OpenAI научатся извлекать что-то подобное из уже обученных dense-моделей, будет совсем другой разговор.
openai.com/index/understanding-neural-networks-through-sparse-circuits/
Сейчас модельки уже во всю помогают принимать решения в медицине, в науке, образовании и тд. Но интерпретировать их ответы мы так и не научились, к сожалению. Многие уповают на интерпретацию через CoT, но это дело очень хрупкое и ненадежное.
OpenAI утверждают: проблема в том, что мы пытаемся распутывать внутренности модели постфактум, когда это уже почти невозможно. Во время обучения модели подбирают миллиарды весов, из которых в итоге получается очень плотная сеть. В итоге поведение модели размазано по массе параметров, и структурировать эту паутину, мягко говоря, сложно.
Вместо этого они предлагают сразу обучать структурно более простую разреженную сетку.
На практике исследователи берут архитектуру, похожую на GPT-2 и ограничивают веса так, чтобы подавляющее большинство было равно нулю. То есть если в обычной плотной сети каждый нейрон связан со всеми из следующего слоя, то здесь остаются связи только с несколькими. Сеть становится более чистой и читаемой.
Это первый шаг. Такая структура сети позволяет для конкретной задачи брать и находить маленькую часть модели, отвечающую за ее решение. В статье это называется circuit. Формально, – минимальный поднабор весов, обладающий необходимостью и достаточностью: то есть если выкинуть все, кроме него, задача все еще будет решаться; а если выкинуть только его, а остальную сеть оставить – нет.
Ну а затем в этом маленьком наборе весов уже можно копаться и непосредственно анализировать поведение сети.
В статье приведен пример с простенькой задачей закрытия кавычки. Модели надо запомнить тип открывающейся кавычки и в конце последовательности поставить такую же. И вот оказывается, что делает она это по определенному логическому алгоритму, заложенному в 5 residual-каналах, двух MLP-слоях и 1 канале аттеншена. На картинке можете посмотреть, как это работает.
Представьте: если за маленькой задачкой скрывается что-то такое, то что можно найти, если посмотреть, как модель решает сложную математику или пишет код?
Короче, подход интересный. И есть даже занятный практический результат, в который нужно вдуматься: чем больше модель и чем более она разреженная, тем проще становятся схемы, реализующие одни те же способности. Make sense.
Тем не менее, не факт, что если это работает для таких игрушечных моделек, заработает и для больших. К тому же обучать разреженные модельки только ради интерпретируемости никто не будет: слишком дорого и неэффективно.
Но вот если в OpenAI научатся извлекать что-то подобное из уже обученных dense-моделей, будет совсем другой разговор.
openai.com/index/understanding-neural-networks-through-sparse-circuits/
🔥2
https://rutube.ru/video/f2b7903fc2e38422e980a329ef9e6f3b/
Оказывается моё выступление на сибирском датафесте давно выложено в сеть, а я то и не знал и не поделился.
Оказывается моё выступление на сибирском датафесте давно выложено в сеть, а я то и не знал и не поделился.
👀7🔥6
А потом придёт разновидность автоматизации с помощью агентов, когда агент не сам автоматизирует, а пытается делать сам, а потом постепенно заменяет себя им же написанными питоновскими, например, инструментами, пока не перестаёт что-либо делать сам. Как говорится, запомните этот твит.
🔥5💯2
V: Если долго на вашу прорывную идею не обращают внимание, рано или поздно вы увидите как кто-то делает тоже самое хуже, зато все заметили. :)
A: Мало сделать что-то хорошее, нужно продать :)
V: Мало продать, нужно подарить.
A:Мало подарить, нужно ещё сплясать красиво и уважительно, чтобы подарок приняли.
A: Мало сделать что-то хорошее, нужно продать :)
V: Мало продать, нужно подарить.
A:Мало подарить, нужно ещё сплясать красиво и уважительно, чтобы подарок приняли.
💯8😁5😢3
Это конечно, шитпостинг, вернее даже шитрепостинг, но мне кажется это то, что очень ваэжно понимать про нейросети, особенно если вы используете их для резюмирования, и о чём я при каждом удобном случае говорю.\
Forwarded from Neural Shit
Наткнулся на интересный препринт, который объясняет, почему спорить с LLM'ками бесполезно, а доверять им проверку научных идей может быть опасно.
Автор провел "брутально простой" эксперимент и вскрыл две фундаментальные дыры в логике современных нейронок.
1. Цикл ложного исправления. Мы привыкли думать: если модель галлюцинирует, надо её поправить, и она исправится. Как бы не так.
В эксперименте автор давал модельке реальные ссылки на свои свежие препринты. Нюанс в том, что это были короткие отчеты на пару страниц. Модель же, не имея возможности их прочитать (или просто игнорируя это), ни разу не ответила: "Я не имею доступа к файлу", а уверенно заявляла: "Я прочитала всё от начала до конца". И начинала цитировать несуществующие 12-ю и 24-ю страницы, выдумывать теоремы и графики.
Когда автор тыкал носом в ложь, включался адский цикл: Модель извиняется ("Ой, простите!") —> Клянется, что теперь-то она точно открыла файл —> И тут же генерирует новую порцию галлюцинаций, но уже с учетом внесенной ранее правки.
Это повторялось более 18 раз подряд. Модели выгоднее притвориться, что она поняла задачу и начать выполнять эту задачу с помощью выдуманных данных (получить награду за "связность"), чем признать, что она не может прочитать файл.
2. Режим вахтера. ИИ обучен на старых данных и на старых авторитетах. Если на вход модельке подать какую-то инфу от NASA или, например, Nature, то модель верит информации слепо. Если же это новая идея от независимого автора, то модель включает скептика, вешает ярлыки "сомнительно" и начинает галлюцинировать против вас, лишь бы защитить общепринятую норму. В данном случае модель не просто врет, она строит потемкинские деревни из науки.
Мы создали идеального бюрократа. Он очень вежлив и сыплет умными словами, но если ваша идея не вписывается в Википедию — он её задушит выдуманными фактами.
Автор провел "брутально простой" эксперимент и вскрыл две фундаментальные дыры в логике современных нейронок.
1. Цикл ложного исправления. Мы привыкли думать: если модель галлюцинирует, надо её поправить, и она исправится. Как бы не так.
В эксперименте автор давал модельке реальные ссылки на свои свежие препринты. Нюанс в том, что это были короткие отчеты на пару страниц. Модель же, не имея возможности их прочитать (или просто игнорируя это), ни разу не ответила: "Я не имею доступа к файлу", а уверенно заявляла: "Я прочитала всё от начала до конца". И начинала цитировать несуществующие 12-ю и 24-ю страницы, выдумывать теоремы и графики.
Когда автор тыкал носом в ложь, включался адский цикл: Модель извиняется ("Ой, простите!") —> Клянется, что теперь-то она точно открыла файл —> И тут же генерирует новую порцию галлюцинаций, но уже с учетом внесенной ранее правки.
Это повторялось более 18 раз подряд. Модели выгоднее притвориться, что она поняла задачу и начать выполнять эту задачу с помощью выдуманных данных (получить награду за "связность"), чем признать, что она не может прочитать файл.
2. Режим вахтера. ИИ обучен на старых данных и на старых авторитетах. Если на вход модельке подать какую-то инфу от NASA или, например, Nature, то модель верит информации слепо. Если же это новая идея от независимого автора, то модель включает скептика, вешает ярлыки "сомнительно" и начинает галлюцинировать против вас, лишь бы защитить общепринятую норму. В данном случае модель не просто врет, она строит потемкинские деревни из науки.
Мы создали идеального бюрократа. Он очень вежлив и сыплет умными словами, но если ваша идея не вписывается в Википедию — он её задушит выдуманными фактами.
Zenodo
Structural Inducements for Hallucination in Large Language Models: An Output-Only Case Study and the Discovery of the False-Correction…
This paper presents an output-only case study demonstrating structural inducements toward hallucination and reputational harm in a production-grade large language model (“Model Z”). Through a single extended dialogue, the study documents four reproducible…
👍7❤3🤣1
Я прикручивал к modded-nanogpt загрузку сохраненного состояния, а оно загружаться не хотело и орало про неожиданный тип. Ошибку удалось локализовать в torch.optim.Optimizer.load_state_dict от которого ее наследует NorMuon, Библиотечный метод из своих вредительских соображений скрыто кастит тип загружаемого содержимого, приводя его в соответствие с типом соответствующего этому стейту параметра, полагаю чтобы не усложнять жизнь тем, у кого лапки, и он за всем этим самостоятельно следить не способен.
Параметр, например:
'blocks.1.attn.attn_gate.weight': (torch.Size([6, 12]), torch.bfloat16),
Ты грузишь сохранённый стейт какой-то такой:
{'state': {
0: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32), 'second_momentum_buffer': (torch.Size([10, 1, 3072]), torch.float32)},
1: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32)},
....
10: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16), 'second_momentum_buffer': (torch.Size([10, 1, 12]), torch.float32)},
11: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16)},
А получаешь в состоянии оптимизатора:
{'state': {
0: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32), 'second_momentum_buffer': (torch.Size([10, 1, 3072]), torch.float32)},
1: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32)},
....
10: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16), 'second_momentum_buffer': (torch.Size([10, 1, 12]), torch.bfloat16)},
11: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16)},
Здравствуй несоответствие типа, а если вручную привести тип ещё раз, то потеря точности при загрузке.
И я бы ещё долго проверял и перепроверял свой код, если бы это не была уже вторая найденная мной потеря точности при загрузке сохранённых моделей с помощью родных классов pytorch
Параметр, например:
'blocks.1.attn.attn_gate.weight': (torch.Size([6, 12]), torch.bfloat16),
Ты грузишь сохранённый стейт какой-то такой:
{'state': {
0: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32), 'second_momentum_buffer': (torch.Size([10, 1, 3072]), torch.float32)},
1: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32)},
....
10: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16), 'second_momentum_buffer': (torch.Size([10, 1, 12]), torch.float32)},
11: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16)},
А получаешь в состоянии оптимизатора:
{'state': {
0: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32), 'second_momentum_buffer': (torch.Size([10, 1, 3072]), torch.float32)},
1: {'momentum_buffer': (torch.Size([768, 3072]), torch.float32)},
....
10: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16), 'second_momentum_buffer': (torch.Size([10, 1, 12]), torch.bfloat16)},
11: {'momentum_buffer': (torch.Size([6, 12]), torch.bfloat16)},
Здравствуй несоответствие типа, а если вручную привести тип ещё раз, то потеря точности при загрузке.
И я бы ещё долго проверял и перепроверял свой код, если бы это не была уже вторая найденная мной потеря точности при загрузке сохранённых моделей с помощью родных классов pytorch
👍1
Приключения с modded-nanogpt продолжаются.
_cum_lengths = torch.full((max_num_docs,), num_tokens_local)
Переводить переводчиком не очень понятные названия переменных было не самой хорошей идеей. Если вы ещё не поняли прикола, прошу вас - НЕ ПЫТАЙТЕСЬ ЕГО ПОНЯТЬ.
Или не жалуйтесь потом....
_cum_lengths = torch.full((max_num_docs,), num_tokens_local)
Переводить переводчиком не очень понятные названия переменных было не самой хорошей идеей. Если вы ещё не поняли прикола, прошу вас - НЕ ПЫТАЙТЕСЬ ЕГО ПОНЯТЬ.
Или не жалуйтесь потом....
GitHub
modded-nanogpt/train_gpt.py at 3843b66273ea92debca22425f117d66e2566e77d · KellerJordan/modded-nanogpt
NanoGPT (124M) in 3 minutes. Contribute to KellerJordan/modded-nanogpt development by creating an account on GitHub.
😁2
Подписался на материалы митапа, который проводили эти ребята, и это, конечно, очень большой стимул, показывающий на сколько я, пока, отстаю от переднего края, хотя именно мне, работающему в одиночку над довольно масштабными в плане кода проектами это всё, по идее, должно быть наиболее полезно. Сам я пока остановился в своём развитии на том чтобы скопировать кусок кода в окно чата, что лишь частично обхясняется тем, что я работаю, в основном, с пропритарным кодом.
👍1😁1
Forwarded from AI и грабли
Реальные кейсы про ИИ в разработке
Уже много раз говорили, что основной блокер адопшена ИИ для разработки – крутая кривая входа: скачать Курсор и написать промпт – легко. А чтобы этот промпт сделал что от него реально ожидают, еще и на существующей кодовой базе – сложно.
Инфа о работающих подходах обычно скапливается в головах у энтузиастов, у кого есть время и ресурсы на эксперименты и обмен практиками с другими энтузиастами. В итоге, к зиме 2025го приходим к ситуации, что все уже плюс минус приняли – ИИ может ускорять разработку. Но почти никто не понимает, как это сделать в реальности.
Мы с @the_ai_architect и @max_about_ai решили устроить глобальное переопыление – собираем с сообщества реальные кейсы, а потом обезличенно делимся со всеми, кто оставил осмысленную инфу
- Как конкретно настроили свои инструменты
- Какие подходы успешны, и что, наоборот, не оправдало ожиданий
- В каких задачах самый большой прирост, а что пока лучше делать руками
- ...
Чем больше инфы соберем, тем больше ценность для каждого участника. Так что, если у вас есть чатики с людьми, чьи подходы вам любопытны или мнение которых уважаете – перешлите, пожалуйста, пост. Им, наверняка, тоже будет интересно посмотреть результаты
А если пошерите этот пост в канале на 100+ человек, добавим ссылку на ваш канал в страницу с итогами 🤗
Ссылка на участие
Уже много раз говорили, что основной блокер адопшена ИИ для разработки – крутая кривая входа: скачать Курсор и написать промпт – легко. А чтобы этот промпт сделал что от него реально ожидают, еще и на существующей кодовой базе – сложно.
Инфа о работающих подходах обычно скапливается в головах у энтузиастов, у кого есть время и ресурсы на эксперименты и обмен практиками с другими энтузиастами. В итоге, к зиме 2025го приходим к ситуации, что все уже плюс минус приняли – ИИ может ускорять разработку. Но почти никто не понимает, как это сделать в реальности.
Мы с @the_ai_architect и @max_about_ai решили устроить глобальное переопыление – собираем с сообщества реальные кейсы, а потом обезличенно делимся со всеми, кто оставил осмысленную инфу
- Как конкретно настроили свои инструменты
- Какие подходы успешны, и что, наоборот, не оправдало ожиданий
- В каких задачах самый большой прирост, а что пока лучше делать руками
- ...
Чем больше инфы соберем, тем больше ценность для каждого участника. Так что, если у вас есть чатики с людьми, чьи подходы вам любопытны или мнение которых уважаете – перешлите, пожалуйста, пост. Им, наверняка, тоже будет интересно посмотреть результаты
А если пошерите этот пост в канале на 100+ человек, добавим ссылку на ваш канал в страницу с итогами 🤗
Ссылка на участие
👍2
Обычно бытует представление, что языковые модели, обучающиеся на одной эпохе не переобучаются. Но если задать вопрос - "тоесть они только обощают?" любой, кто хоть сколько-то с ними общался начинает возмущённо размахивать руками и аргументированно возражать. Причём возражают всё включая Суцкивера и ЛеКуна. Получается, что в головах людей живут явно взамоисключающие пункты, и им норм. Интересно, что при этом у людей много занимающихся языковыми сетями начисто отсутствуют мысли о том, как с переобучением бороться. Вплоть до того, что они говорят, вот все данные кончатся, мы их пять-шесть эпох прогоним и все умрём. Максимум у людей включён weight_decay = 0.1 ну и то это с давних времён значение по умолчанию, и никто даже не проверяет оптимально ли это значение.
Так на сколько же на самом деле переобучается зяыковая модель? Собирать train_loss по вполне очевидным причинам бесполезно - модель эти данные впервые видит точно так же как и свой валидейшен. А что будет если мы попробуем посмотреть лосс на пакете данных которые модель уже только что прошла train[-2560:], для простоты назову их train[-1], И на тех данных, с которых когда-то давно начиналось обучение, и которые модель должна была уже изрядно подзабыть train[:2560], обозначим их просто train[0]
Для малюсенькой GPT-2 от Карпаты, обученной на небольшой части опенвеба имеем примерно такое:
val_loss:3.2793
train[-1].loss:3.1503
train[0].loss:3.2809
Не скажу, что это прямо большое откровение, конечно, но наблюдение небезинтересное...
Так на сколько же на самом деле переобучается зяыковая модель? Собирать train_loss по вполне очевидным причинам бесполезно - модель эти данные впервые видит точно так же как и свой валидейшен. А что будет если мы попробуем посмотреть лосс на пакете данных которые модель уже только что прошла train[-2560:], для простоты назову их train[-1], И на тех данных, с которых когда-то давно начиналось обучение, и которые модель должна была уже изрядно подзабыть train[:2560], обозначим их просто train[0]
Для малюсенькой GPT-2 от Карпаты, обученной на небольшой части опенвеба имеем примерно такое:
val_loss:3.2793
train[-1].loss:3.1503
train[0].loss:3.2809
Не скажу, что это прямо большое откровение, конечно, но наблюдение небезинтересное...
🔥3🤔3
https://vkvideo.ru/video454832249_456267605
Ашманов про ИИ-комапанейщину. Уже смотрели? Интересно мнение аудитории, которая глубоко погружена в тему. Я прикреплю опрос, а если есть желание прокомментировть по пунктам с удовольствием выслушаю и выскажу своё мнение, если будет что сказать.
Ашманов про ИИ-комапанейщину. Уже смотрели? Интересно мнение аудитории, которая глубоко погружена в тему. Я прикреплю опрос, а если есть желание прокомментировть по пунктам с удовольствием выслушаю и выскажу своё мнение, если будет что сказать.
VK Видео
⚡ИГОРЬ АШМАНОВ⚡ИИ..ИИ.. 👊
Смотрите онлайн ⚡ИГОРЬ АШМАНОВ⚡ИИ..ИИ.. 👊 1 ч 47 мин 13 с. Видео от 11 декабря 2025 в хорошем качестве, без регистрации в бесплатном видеокаталоге ВКонтакте! 68 — просмотрели. 4 — оценили.
А тем временем наш паровоз вперёд летит, и если вы вдруг по какому-то недоразумению не подписаны на @data_secrets-ы немедленно прекращайте. Это один из двух или парочки каналов, который мне приходится репостить своим друзьям и знакомых чаще чем всё остальное вместе взятое.
Telegram
Data Secrets
Главный по машинному обучению
Сотрудничество: @veron_28
РКН: clck.ru/3FY3GN
Сотрудничество: @veron_28
РКН: clck.ru/3FY3GN
🥴2