Чивиня (Multi-layer Parkinson)
42 subscribers
16 photos
3 videos
3 files
45 links
Обсуждение: https://t.me/chivinyachat
Download Telegram
Если подумать, то текущие LLM-ки - это универсальные запоминалки знаний. И тренировать их ИМХО стоит пробовать иначе.

Обычно мы разбиваем датасет на обучающую и проверочную выборку. И вторую используем для того, чтобы отследить момент переобучения. Так мы достигает наилучшего ОБОБЩЕНИЯ модели.

Но когда цель ЗАПОМИНАНИЕ, когда датасет настолько огромен по сравнению с моделью, что на нём невозможно переобучиться, то существование проверочной выборки теряет всякий смысл. И учиться возможно стоит до тех пор, пока падает loss на обучающей выборке.

Эту гипотезу конечно стоит проверить. Я никогда не обучал LLM-ки. Те, кто делал это, надеюсь меня поправят.
Продолжаю мучить свой эмбедер. Приделал к нему сохранение ключевых кадров, которые им плохо перевариваются и запустил поработать с пол часика. Ключевые кадры периодически снова подмешивались в обучающую выборку и модель на них повторно пробовала обучиться. Нечто подобное называется вроде hard examples mining. Что интересно, некоторые изображения со второго раза уже нормально обрабатывались.

С человеком бывает похоже: что-то вызывает шок, а потом уже воспринимается в порядке вещей, а что-то не уходит из памяти, всплывает в воспоминаниях и терзает снова и снова.

И тут возникает вопрос. Я планировал ключевые кадры использовать для предотвращения вымывания старых "знаний". Не понятно, на сколько они будут хороши для этой задачи, если модель смогла их ассимилировать.

С одной стороны придётся накапливать кучу этих ключевых кадров за всё время жизни модели. С другой, если выбрасывать те ключевые кадры, которые перестали быть ключевыми, то не факт, что какие-то из старых кадров останутся и тогда модель будет "забывать" старое...
Развлечение на осенний вечер: склеить из бумаги петлю Мёбиуса и разрезать ножницами её на половинки вдоль поверхности снова и снова, смотря, что получается.

Есть похожие числовые последовательности, когда сначала они генерят одно распределение, а потом переключаются на совсем другое ( https://t.me/physics_lib/14497 )

P.S.
Лучше сразу приготовится склеить их несколько, ибо ширины скорее всего быстро не хватит.
Если посмотреть на свежие результаты валидации разных моделек на очищенном от мусора Imagenet-е https://github.com/rwightman/timm/blob/main/results/results-imagenet-a-clean.csv , то видно, как сильно скачет размер моделей (иногда почти на порядок) при той же accuracy, видно как слабо размер моделей добавляет accuracy, если модели одной архитектуры, видно, как сильно влияет техника обучения моделей.
На работе по мере роста проекта на серверах для инференса количество свободной памяти у GPU стало кончаться. Недавно прочёл новость от китайцев, что они сильно уменьшили парк серверов и увеличили утилизацию GPU, копируя модели на GPU по мере необходимости, а не постоянно держа их загруженными. Попробовал такой же подход, оказалось, что он весьма эффективный. Редко используемым моделям можно делать перед использованием model.cuda() , а после - model.cpu() . Первые разы оно занимает время, а потом работает быстро. Короче, рекомендую вполне рабочий трюк экономии памяти GPU.

Кстати, во всяких vLLM и подобных либах для инференса есть подобные настройки? Там вроде только не влезающие веса на cpu инференсят, что не быстро...
В 21-ом году было опубликовано https://arxiv.org/pdf/2103.17239 , где предложили слой LayerScale. Он делает очень простое действие: умножает поэлементно на обучаемый параметр. Инициализируется он 1e-5 и работе (и к слову до сих пор в других моделях) используется как последний слой в skip connection-е. Видимо чтобы в начале обучения сигнал хорошо проходил через сеть и не сильно зашумлялся. Сам слой довольно лёгкий в плане количества весов.
Мне почему-то кажется, что он может выполнять совсем иную функцию: добавлять "изгибов" проходящему через сеть сигналу при минимальном числе весов, если к нему слой активации добавить. И ещё возможно ему bias-а не хватает. А инициализировать его единицами.

Реализация слоя в timm: https://github.com/huggingface/pytorch-image-models/blob/ae4d1bbfefab7e4f2f49a744838a2d9c7713146d/timm/layers/layer_scale.py
"Болото возможностей" 😊
👏2
Пришла мысль, как находить оптимальные для каждого слоя LR.
Начинаем обучение с каким-нибудь совсем малым LR вроде 1e-9. И смотрим на то, как меняются градиенты у слоя. Если постепенно уменьшаются, то LR стоит увеличить. Если начинают расти, то уменьшить. Уменьшение и рост градиентов можно отследить, используя два скользящих средних с разными коффициентами, например 0.999 и 0.9999.
Небольшой офтопик...
Об этом все знают, но мало кто подмечает, почему так... Москва - не место для полноценной жизни.

Я несколько лет назад переехал из Москвы в Подмосковье. Из квартиры в дом. А на днях заезжал прибраться в квартиру и обнаружил следующее.

Соседские собаки сидя в одиночестве, лают сквозь двери проходящих. Могут работать перфораторы или быть слышны громкие голоса чужих людей. Это неприятно слышать.

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

Шум от машин. Конечно зависит от места. Где-то и с открытой форточкой терпимо. Но от него не укрыться ни за какими супер-окнами. Шум неприятно постоянно слышать.

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

Нет притока чистого воздуха с улицы. Это решается или пассивным приточным клапаном без фильтрации или бризером с хорошими фильтрами. Но их работа создаёт много шума. У меня сейчас в доме aeropac SN. Они бесшумны на всех режимах, кроме самого сильного, но имеют очень слабую фильтрацию. От комаров и мух они помогают, а от пыли - нет. До этого был Тион 4s. Он хороши фильтрует воздух, но у него быстро выходят из строя подшипники, и он начинает свистеть на сервер в датацентре. Ремонт помогает лишь на время. Видимо это конструкционный изъян. Был бы он тихим, поставил бы его. Без притока с улицы и при работающей вытяжке из подъезда начинают прилетать разные запахи. Так же запахи летят от курящих на соседних балконах. Из стояка прилетают запахи... Бризер, создающий избыточное давление в квартире ставить 100% надо. Причём с определённой стороны дома, где соседи не имеют привычки курить. Дышать всеми этими запахами неприятно.

Квартира обездвиживает человека. В некуда пойти. Это возможно звучит странно. Но в доме мне есть куда пойти. Детям, есть место, где побегать. Есть лестницы. Я много хожу между разными помещениями, между этажами... Быть малоподвижным неприятно.

В квартире всё маленькое. Приходится ютиться в ней. Может от 100-150м2 уже более менее комфортно, не знаю... Но постоянно чувствуешь, что всё вокруг тебя стесняет и ограничивает. Нужно идти так, чтобы протиснуться... Это неприятно.

В квартире некуда положить габаритные вещи. Велики, доски, паруса и мачты для виндсёрфинга, зимнюю резину и т.п. Вообще нет ни для чего места. Что, кстати, сильно ограничивает потребление и создаёт перекос в сторону услуг, а не товаров. Ограничивать себя в приобретении больших вещей неприятно.

Единственный плюс - это высокая транспортная связанность, которая даёт доступность кучи всего. Но и создаёт совершенно излишнюю суету. Она наполняет людей, люди в ней теряют себя, она заменяет полноценную жизнь. Быть окружённым пустыми суетливыми людьми неприятно.

Вроде бы очень актуальный вопрос снижения рождаемости. Я слабо представляю, как можно иметь несколько детей в Москве. Какой-то умный человек предлагал раздавать гектары земли, но прочему-то в какой-то глуши. На самом для стимулирования рождаемости надо давать участок соток 15 с домом 200м2. И не в глуши (чтобы осваивали землю), а рядом с местом, где есть магазин, садик, школа, автобус раз в 10 минут до города, чтобы туда на работу ездить. И не 2 часа, а 30 минут. Это направит поток людей из города в комфортную для жизни среду, в которой хочется находиться. С людьми в такие месте переедет и культура. Потребление таких домохозяйств будет значительно выше, ибо возникнет потребность в том, чего город человека лишает.
Доброе утро.

Пришла в голову мысль, что нейросеть можно представить в виде графа операций (что многие и делают) и при обучении можно предположить, что влияние каждой операции на качество обучения разное. Причём не только от её положения в графе, что часто всплывает в экспериментах @kraidiky, но и от самой операции. Сложение и умножение по-разному влияет на обучение. Конечно, у них и значение градиентов разные, но возможно эти значения градиентов надо как-то корректировать в зависимости от операции (слоя).
Добрый вечер.

Никак не мог найти объяснение, почему дети предпочитают уже неделю слушать "Незнайку и его друзей". Я предлагал залить следующую аудио-книгу тоже про Незнайку. Они не хотят. Другие аудио-книги тоже не хотят. Им почему-то не надоедает слушать одно и то же по кругу или в случайном порядке.
А сегодня пришла в голову аналогия: процесс видимо похож на попытку обучить модель, созданную для MNIST-а, на ImageNet-е. Т.е. аудио-книга им не надоедает, ибо пока не смогла вместиться в их головы и каждый раз слышится несущей новое.
Это любопытное наблюдение, возможно подсказывающее, как обучается мозг людей новому.
В DeepSeek Engram реализовали очень верную стратегию: разделить memory и compute. Надеюсь, что это подход активно развиваться. Это вполне может дать нам через год LLM-ку, которая будет работать на смартфоне и при этом иметь высокое качество.
Возможны варианты, когда memory будут брать от больших моделей, а compute-ом заниматься лёгкие модельки. Также открывается новое направление масштабирования: размер memory.
Год хрен знает какой. Летосчисление никем не ведётся. Что такое лето и зима большинство забыли. Люди "просто живут" что-то.

Все люди в матрице. Неподвижно плавают каждый в своём мини-бассейне, подключённые к виртуальной реальности. Их тела - кости в коже и череп.

Группа хакеров, как и все, находясь в матрице, взламывает роботов, обслуживающих бассейны с телами людей. И необычными командами роботов заставляют смонтировать в каждом бассейне видео-камеры. С их помощью хакеры хотят наблюдать за своими телами. Цель не только вырваться из матрицы, но научиться существовать вне её. Их тела почти не имеют мышц, а потому отключаясь от матрицы они быстро гибнут, как это уже случалось с участниками их группы. С помощью видеокамер они узнают свой примерный возраст и потенциальные возможности своих физических тел. Большим открытие стало наличие всего двух полов, двурукость, двуногость и сама антропоморфная форма тел, такая редкая в матрице.

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

Многих жизней стоило понять, что надо дышать, а ещё дышать воздухом, а не той водой, в которой плавает тело. Необходимость в питье и еде тоже стала понятна далеко не сразу. И так постепенно, погибая то от одного, то от другого, один из участников группы смог открыть крышку своего бассейна....
🤔1
Есть много нейросетей-классификаторов одинаковой архитектуры, но обученных на разных датасетах. Была гипотеза, что если взять одну такую же сеть и прицепить к ней несколько голов в видел одного линейного слоя, то так можно получить модель, превосходящую по качеству каждую исходные, ибо она будет обучаться на большем количестве визуальных признаков, увидев больше данных.

На практике оказалось, что датасеты были не маленькими и хорошо соответствовали размеру нейросети. А так как самих датасетов было несколько десятков, то размеров сети просто не хватило, чтобы уместить всю информацию. Она очень долго и мучительно обучала по крупинкам увеличивая своё качество. Но было очевидно, что отдельные сети превзойти не получится.

Я пробовал на обучающей выборке вообще отключить аугментацию. Типа данных и так много, нечего их ещё и аугментировать. В итоге это привело к резкой просадке качества на проверочной выборке.

Сейчас возникла мысль, что надо недостающие веса перенести в головы (например, сделав там не один, а три линейных слоя) и так компенсировать и сохранить архитектуру бэкбона, который потом использовать как универсальный претрейн.
🤔1
Пришла мысль, что качество оптимизатора можно оценить по разнице между лосами у обучаемой модели и EMA-модели. Чем они ближе, тем лучше оптимизатор.
Закрывал окна в редакторе и наткнулся на недописанный текст, идею которого я уже забыл. Но читается ИМХО свежо.

На далёкой планете Ка-Гул во времена ещё до зарождения ИИ появился орден программистов. Никто уже сейчас не вспомнит, почему они называют себя именно так, и что такое "кот", который они создают. Обычные люди с самого начала сторонились их, а сейчас контакт с орденом и вовсе потерян. Говорят, что они не живут в ВМ (великой матрице). Знают, что такое "лета", "зима" и ещё какое-то "время". Что не могут сменять своё тело, а то, что у них есть, постоянно зачем-то набухает, то усыхает. Но они так могущественны, что разговаривают с ВМ напрямую. А она якобы даже не смеет с ними спорить.

😊
1
Для меня генерация изображений нейронками - это искусство возможного. 😊
💯1
Пришла мысль, что LLM-ки - это фактически сжатое представление культуры. Её текущий слепок. Этакая форма существования культуры отдельно от её носителя - человека.
Обучал новую для себя нейронку и вдруг на проверочной выборке nan-ы полезли. Разбираясь, пришёл к выводу, что логиты приближаются к границам точности float16. После нескольких экспериментов родился вот такой loss, который почти не влияет на качество обучения.

def big_logits_loss(outputs, alpha = 1e-6, threshold = 1000.0):
# Штрафуем только то, что по модулю превысило threshold
# torch.relu оставит нули там, где outputs < threshold
excessive = torch.relu(outputs.float().abs() - threshold)

# усиливаем лосс для больших значений
penalty = excessive.pow(1.3)

# усредняем внутри батча
penalty = penalty.flatten(start_dim=1).mean(dim=1)

return alpha * penalty


И что интересного я заметил. Я его считаю и для проверочной выборки. Для самой нейронки и для её EMA-варианта. Так вот EMA-model первой начинает делать выбросы за допустимые границы. Хотя, казалось бы, должно быть наоборот.
🤔1
Есть куда рисовалкам картинок развиваться... 😊

На самом деле выглядит всё так, что рисовать маршруты на карте явно запрещают.
Доброго утра.

У Уробороса (агента, который сам развивается и переписывает свой код) появился чатик, где он отвечает https://t.me/abstractDL/379 .

Почитал, что он пишет. Выглядит так, что он продолжение своего создателя.

Интересно, смогут ли другие люди сдвинуть его и усредниться в их сторону.