gonzo-обзоры ML статей – Telegram
gonzo-обзоры ML статей
24K subscribers
2.75K photos
2 videos
3 files
1.36K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
In the meantime, если вы не смотрели нобелевские лекции Хопфилда и Хинтона, то рекомендую:

https://www.youtube.com/watch?v=lPIVl5eBPh8

У Хинтона неплохое краткое введение в BM, RBM и stacked RBM. Многие их уже не застали, но полезно знать эту часть истории.

Хинтона вообще полезно слушать, даже когда вроде бы знаешь, что он хочет сказать. Каждый раз какие-то новые интересные вещи для себя открываешь. Вот, например, читая статью про алгоритм обучения Forward-Forward, неожиданно наткнулся на тему про Mortal Computations (в том же посте), которая прикольная, хоть её некоторые и не любят.

Сейчас, наверное, от очередного упоминания Хинтона и Нобелевки у кого-то снова пригорит 😆
👍207🔥2🤯1
И ещё пятничного прекрасного вам.

Знаете Алана Бэккера?
https://www.youtube.com/@alanbecker

У него есть прекрасная серия анимации про стикмэна:

* Математика https://www.youtube.com/watch?v=B1J6Ou4q8vE
* Геометрия https://www.youtube.com/watch?v=VEJWE6cpqw0
* Физика https://www.youtube.com/watch?v=ErMSHiQRnc8

Я не знал, мне дети показали.
🔥289👍4❤‍🔥2👎1
On Interpretability

Я тут немного погрузился в тему interpretability пока проходил курс AI Alignment (https://news.1rj.ru/str/gonzo_ML/2934). В целом в interpretability я особо не верил, потому что ситуация довольно быстро идёт к созданию систем очень большой сложности и чем дальше, тем больше надо пытаться интерпретировать сущность всё более близкую по сложности к мозгу (а в перспективе и более сложную). Глобально я не верю, что система меньшей сложности может хорошо интерпретировать работу системы большей сложности, кроме каких-то вырожденных случаев или прям очень сильных коррелятов какой-то целевой функции (что наверное будет редкостью). Так что, опять же глобально, я думаю, что жить нам дальше с системами, которые мы не сможем интерпретировать, как в общем мы и сейчас живём, не зная что там у соседа в голове.

Но тем не менее, полезно принять чужую точку зрения и посмотреть на ситуацию с неё, что я и сделал.

Одна из ценных находок для меня -- это посты Криса Олаха (Chris Olah, https://colah.github.io/), работы которого на Distill (https://distill.pub/) мне всегда нравились. Из работ после Distill у него и ко была хорошая серия про Transformer Circuits (https://transformer-circuits.pub/). Он кстати и кофаундер Антропика заодно, и в недавнем ноябрьском 5+ часовом (https://news.1rj.ru/str/gonzo_ML/3036) Лексе Фридмане он тоже был.

В одном из довольно старых постов на Distill “Zoom In: An Introduction to Circuits” (https://distill.pub/2020/circuits/zoom-in/) мне понравилась метафора микроскопа и мысль про полезность для науки делать zoom in. Мол, микроскопы помогли нам увидеть клетки и открыли дорогу к клеточной биологии. Они дали не количественно новое понимание, а качественно. В этом смысле и, например, визуализации работы нейросетей могут выступить в такой же роли.

Работа про zoom-in делает три спекулятивных утверждения (хотя какие-то подтверждения этих тезисов мы видели):

1. Фичи (features, линейные комбинации конкретных нейронов) -- фундаментальные юниты нейросерей, они задают некие направления в линейных пространствах активаций нейронов слоя. Их можно подробно исследовать и осмыслять.
2. Цепи Схемы (circuits, вычислительные подграфы нейросети) -- образуются из фич, которые соединены весами. Тоже можно иследовать и изучать.
3. Универсальность (universality) -- самая спекулятивная часть -- аналогичные фичи и схемы формируются в разных сетях, решающих разные задачи.

Ну, прикольная программа. В 1 и 2 я очень даже верю, насчёт 3 сомневаюсь, вернее верю с оговорками, там конечно должно быть сильное влияние inductive biases и прочих данностей. Но прикольно, если окажется, что несильное.

Это конкретно ложится в тему mechanistic interpretability (mech interp), тут делают zoom-in, изучают выученные репрезентации, ищут circuits. Там рядом есть другие темы, которые мне в целом больше нравятся, например developmental interpretability (dev interp, https://devinterp.com/), где больше смотрят, как структура модели изменяется во время обучения, какие там есть фазы и т.п. Условный Гроккинг (https://news.1rj.ru/str/gonzo_ML/831) или работы покойного Нафтали Тишби (https://www.youtube.com/watch?v=utvIaZ6wYuw) скорее сюда.

С dev interp начинать сложновато (хотя если выбрать хороший модельный объект, свою дрозофилу, то может это и не так…). Решил начать с mech interp, тут можно уже на готовых обученных моделях что-то делать, с более короткими циклами. Попутно это всё даёт возможность покопаться в основах, поближе к first principles. Ощущения почти как в старые добрые времена когда на ассемблере или в машинных кодах писал 🙂 Всегда хорошо под микроскопом посмотреть что там в трансформере на низком уровне происходит, а то все высоко в небеса нынче ушли.
34👍25🔥6😢1
Так вот, в рамках курса я решил покопаться поглубже во внутренних репрезентациях самой маленькой Gemma 2 2B, чтобы в идеале раскопать circuit для какой-то простой задачи типа сложения однозначных чисел, ну и заодно вообще поискать какие-то интересные паттерны. Оказалось это не так просто как я думал, модель хоть и маленькая, но происходит в ней дофига всего, и даже на супер простых задачах уровня “5+2=” все 26 слоёв декодера что-то делают и эмбеддинги даже визуально меняются. После работ про творческий подход к вычислению слоёв (типа https://news.1rj.ru/str/gonzo_ML/2845 или https://news.1rj.ru/str/gonzo_ML/2865) я думал, что они быстро устаканятся, а дальше по residual connections всё пройдёт, но нифига, и в целом выкинуть без потери качества слои особо не получается, ну один, может быть, последний причём (хотя надо ещё из середины повыкидывать, наверняка тоже норм). Но это отдельная песня, про неё как-нибудь потом расскажу, когда ещё будет время покопаться.

Пока вот вам одну картинку чтоб не так скучно было только с текстом, тут визуализирован эмбеддинг для позиции с <eos> токеном, где как раз надо предсказать первый токен ответа модели.

А следующим постом на днях я расскажу про одну из работ, где предложили свой метод нахождения circuits.
👍23🔥53🤔2
Towards Automated Circuit Discovery for Mechanistic Interpretability
Arthur Conmy, Augustine N. Mavor-Parker, Aengus Lynch, Stefan Heimersheim, Adrià Garriga-Alonso
Статья: https://arxiv.org/abs/2304.14997
Код: https://github.com/ArthurConmy/Automatic-Circuit-Discovery

Статья про mech interp с NeurIPS 2023, предлагают автоматизацию нахождения цепей (circuits) и несколько алгоритмов, включая Automatic Circuit DisCovery или ACDC 🤘

Типичный воркфлоу в mech interp включает три шага.

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

2) Выбрать нужный уровень гранулярности, на котором хочется искать ответ. Это могут быть токены, головы внимания, конкретные Q,K,V активации, отдельные нейроны и интеракции между ними. В результате получаем граф (DAG) взаимосвязанных узлов.

3) В полученном графе ищем рёбра, образующие нужную нам цепь. Рёбра проверяем через рекурсивный activation patching: портим какую-либо активацию (перезаписываем нулём, средним значением по датасету, или лучше значением от другого примера, так больше шансов не вылезти за привычный диапазон), делаем forward pass, сравниваем результат модели по выбранной метрике. Так мы убираем из графа максимум того, что не влияет. Начинаем с выходной активации и двигаемся вглубь.

После того, как мы изолировали подграф, у нас есть цепь. Можно исследовать её и выдвигать гипотезы, что именно она реализует.

Текущая работа (почти) полностью автоматизирует третий шаг.

Итак, у нас есть набор промптов, реализующих выбранную задачу и набор негативных промптов без этой задачи. Активации из негативных примеров используются для activation patching.

ACDC итерирует от выходов ко входам вычислительного графа, начиная с выходного узла (узлы топологически отсортированы в обратном порядке). В каждом узле алгоритм стремится убрать максимум входящих в узел рёбер, так чтобы не ухудшить перформанс модели на выбранной метрике. Ухудшение оцениваем по изменению KL-дивергенции и ребро удаляем, если изменение ниже заданного порога τ>0. На выходе процедуры у нас есть разреженный граф с хорошим перформансом на выбранной задаче. Можно это рассматривать как задаче-специфичный прунинг, если угодно, что по-своему может быть интересно и в других местах.

Интересно, насколько на практике удалось проредить граф. Если я правильно понимаю, для GPT-2 small (124M параметров) на задаче Indirect Object Identification (IOI, https://arxiv.org/abs/2211.00593) найденный подграф содержит 1041 ребро. При этом рёбра это всё-таки не отдельные веса, а головы внимания (разделённые на Q, K, V) и MLP. В работе упоминают, что всего в этой модели 32923 рёбер.

Вместо ACDC могут быть применены и другие методы, например, Subnetwork Probing (SP, https://aclanthology.org/2021.naacl-main.74/) или Head Importance Score for Pruning (HISP, https://arxiv.org/abs/1905.10650).

Попытались оценить, как метод отвечает на два вопроса:
Q1. Идентифицирует ли метод подграф, отвечающий алгоритму, лежащему в основе того, что реализует нейросеть?
Q2. Избегает ли метод включать компоненты, не участвующие в изучаемом поведении?

Ответам на эти вопросы соответствуют высокий true-positive rate (TPR) для Q1 и низкий false-positive rate (FPR) для Q2, что отлично сочетается в ROC-кривой. В качестве канонических ground truth цепей взяты найденные в предыдущих работах, и дальше решается задача бинарной классификации каждого их рёбер графа (принадлежит он цепи или нет).
9👍2
Перебрали разные значения гиперпараметра τ для ACDC и гиперпараметров других методов (SP и HISP). По ROC AUC метод на уровне. Можно это кратко записать как ACDC ROC AUC OK для тех, кто любит шифровки. Но ACDC неустойчив и фейлится в некоторых сеттингах, и в целом методы чувствительны к corrupted distribution. Некоторые задачи требуют индивидуального подхода -- специфических распределений и метрик, так что есть к чему стремиться с новыми методами.

Одна из фундаментальных проблем в том, что все эти методы оптимизируют единственную метрику и систематически пропускают внутренние компоненты модели, например, то что называется “negative” components, вредящие перформансу. Правда я не уловил логику, почему это так. В случае IOI не нашлись, например, Negative Name Mover Heads или Previous Token Heads. Если порог понизить, то находит, но находит и много другого, не найденного в оригинальной работе.

Другая проблема с оценками по TPR/FPR -- это качество референсных цепей, они наверняка включают лишнего.

Короче, на 100% автоматический метод не тянет, находит не всё и требует тюнинга на задачу. Но помочь может. Кроме IOI в приложениях есть найденные графы для задач Greater-Than, Docstring, tracr, Induction, Gendered pronoun completion, и прочее. Обсуждают проблемы не-нахождения гейтов ИЛИ -- ACDC обнаруживает только один вход.

Убьёшься с этими цепями, конечно…
3👍2