Интересное что-то
557 subscribers
2.79K photos
253 videos
140 files
4.59K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.iss.one/asisakov_channel
Чат: https://t.iss.one/youknowds_chat
Download Telegram
Forwarded from Сиолошная
RL + NLP = ❤️

Статейка "Describe, Explain, Plan and Select: Interactive Planning with Large Language Models Enables Open-World Multi-Task Agents" рассказывает о том, как прикрепить большие языковые модели (LLM) к обучению агентов в сложных средах.

Картинка вкратце описывает суть происходящего:
1) LLM генерирует план, который должен быть выполнен, чтобы добиться награды
2) Selector выбирает, что нужно сделать сейчас, передает это в агента на исполнение
3) Агент сообщает LLMке в текстовом виде, каких успехов он добился, а чего сделать не смог (прям как я маме 😂)
4) формируется новый план, и пункты 1-3 повторяются итеративно

И всё это происходит в виде диалога с чатботом!

Ну и всё это канечно же бустит перформанс: Our experiments mark the milestone of the first multi-task agent that can robustly accomplish 70+ Minecraft tasks and nearly doubles the overall performances

Жду, когда больше техник из NLP для работы с LLM (вроде этого) придут в другие области.

Код будет тут, но пока его нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
#softskills
Богдан делится секретами тайм-менеджмента
Forwarded from BOGDAN
примерно об этом вся книга Deep Work + рекомендую подкаст её автора

в частности, Моя текущая система планирования за 20 минут: https://youtu.be/dOQpZlZuySE
Forwarded from Dima
Посмотри что-нибудь на edx.org про computer science, там бесплатно от гарварда
/стенфорда/крутых_чуваков курсы. У меня глянь симулятор сборки компа sukharev.io/textbook (тоже бесплатно, там блокается проход после 2 урока, если понравится, напишешь мне — я проведу кастомер интервью с тобой, чтобы сделать симулятор кайфовее и открою весь доступ)) я так собираю фидбек
Алоха. Все продолжаем готовиться к интервью. В этот раз мок интервью по систем дизайну.
В первой части поговорили о Twitter Timelime.
Также параллельно стараемся улучшить английский, проводя такие сессии.
https://www.youtube.com/watch?v=mjEh_c2nqZU
Forwarded from New Yorko Times (Yury Kashnitsky)
Книга Machine Learning Simplified
#books #ml #collaboration #opensource

Порекомендую бесплатную книгу “Machine Learning Simplified” https://themlsbook.com Андрея Вульфа (Andrew Wolf). Андрей был Head of Data в Rarible, сейчас ушел на фриланс в web3, параллельно пилит трейдинг-алгоритмы для крипты в надежде открыть свой собственный фонд.

Если б я писал книгу по ML (что весьма разумно после разработки целого курса по ML), она была бы похожа на эту. Хороший баланс теории и практики, примеры сопровождаются кодом, из интересного - читая книгу, можно выделить часть и прокомментировать, таким образом, книга превращается в форум. На Goodreads можно найти мою рецензию https://www.goodreads.com/book/show/60297347-machine-learning-simplified.

Будет неплохим дополнением к https://mlcourse.ai, некоторые темы освещены лучше да и написаны на хорошем английском. А практику лучше из mlcourse.ai брать.

Я немного поработал с Андреем, оформил код, сопровождающий книгу, в виде Jupyter Book – https://code.themlsbook.com (кстати, для тех, кто хочет опубликовать свою книгу с кодом, look no further – Jupyter Book https://jupyterbook.org это то что надо).

Неплохо было бы добавить в книгу примеров кода и упражнений. Если хотите поучаствовать – пишите Андрею на [email protected]. Андрей утверждает, что “в долгу не останется”, будем считать, это значит, что подзаработать таким образом тоже можно.

Требования (копирую из объявления Андрея в ODS):

- знание английского
- понимание того, как работают алгоритмы: decision trees, svm, naive bayes, ensembles (bagging/boosting/stacking)
- понимание основ мл: hyperparameter tuning, evaluation techniques etc
- опыт в преподавании или хотя бы понимание того, как объяснять алгоритмы простым языком (включая математику) is a big plus
Forwarded from Artificial stupidity
​​#statistics

Прекращайте использовать метод локтя в k-means.

Так называется недавно вышедшая статья от автора из университета Дортмунда. Немного кликбейтный заголовок, но статья весьма интересная.

Итак, как выглядит метод локтя?

1. Строим много кластеризаций k-means с разным количеством k;
2. Для каждого отдельного k считаем сумму квадратов внутрикластерных расстояний до центра кластера (within-cluster sum of squares, WCSS). Для sklearn это будет атрибут inertia_.
3. "На глаз" выбираем такое k, где у нас происходит "перегиб" (отсюда и метод локтя) и WCSS перестает существенно уменьшаться. Это и будет итоговым числом кластеров k.

У такого метода есть один некоторые минусы, например, выбор k "на глаз". Потому в разных работах предлагались методы автоматизации метода локтя.

Как можно улучшить метод?

1. Jump method. Давайте искать максимум SSE_k ** -Y - SSE_k ** -Y, где степень Y может варьироваться, но авторы предлагают брать Y=1/2 * dimensionality (то есть половина от размерности пространства признаков).
2. L-method. Возьмем две линейных функции (перед перегибом и после). Выберем лучшую кусочно-линейную аппроксимацию.
3. Kneedle algorithm. Возьмем полиномиальную кривую (сплайн), нормализуем от 0 до 1. Сравним с диагональю. Берем последний максимум перед задаваемым threshold.
4. Улучшение шага 3. Давайте искать максимум для SSE_k-1 - SSE_k / (SSE_k - SSE_k+1) - 1.
5. В библиотеке pyclustering используется метод ElbowLen, которые считается (x_k*(y_0 - y_1) + (x_1 - x_0)*y_k + (x_0*y_1 - x_1*y_0)) / (sqrt((x_1 - x_0)**2 + (y_1 - y_0)**2)), где x0, x1, y0, y1 - минимумы и максимумы графика.
6. AutoElbow. Вычисляем ((x_k - 1)**2 + (y_k - 1)**2) / (x_k ** 2 * y_k **2) на нормализованном на [0,1] графике.

Все эти методы не лишены минусов. В статье приводятся примеры для разных наборов данных. Общий вывод - на достаточно разделимых кластерах и небольшом k все работает более или менее неплохо. Но если мы отходим немного от тепличных условий, все становится весьма плохо.

Мы можем отойти от эвристик над методом локтя и прочих геометрических манипуляций в сторону вариационных методов (предполагается, что они более теоретически обоснованы). В статье по ним проходятся весьма поверхностно, так что некоторые из них я не совсем понял ¯\_(ツ)_/¯

1. Variance Ratio Criterion (VRC). Считаем ((SSE_1 - SSE_k) / (k - 1)) / (SSE_k / (n-k)). Авторы рассматривают это, как некий аналог F-статистики.
2. Метод Mariott. Рассматривается детерминант ковариационной матрицы |W|.
3. KL-index. Давайте рассмотрим DIFF_k = (k - 1)**(2/p)*SSE_k-1 - k**(2/p)*SSE_k. Потом ищем максимум KL(k) = |DIFF_k / DIFF_k+1|.
4. Метод Pham. Считаем SSE_k / (alpha_k * SSE_k-1), где alpha_2 = 1 - 3/(4*d) и alpha_k = 5/6 * alpha_k-1 + 1/6 (что моделирует ожидаемое изменение равномерного распределения).

Учитывая задачу кластеризации, можно придумать и критерии, основанные на расстояниях.

1. DUNN index.
2. David-Bouldin index.
3. Silhouette score.

Но это не все. Мы еще можем использовать теоретические подходы, основанные на теории информации.

1. Bayesian information criterion (BIC).
2. Akaike Information Criterion (AIC).

Ну и, напоследок, еще можно использовать симуляционный критерий.

1. В данном случае, мы считаем GAP_k = E[log(SSE'_k)] - log(SSE_k). И выбираем наименьший k, где GAP_k >= GAP_k-1 - std_k+1. Где SSE'_k - базовый SSE, а std_k+1 - среднеквадратичное отклонение оценок.

А какой итоговый вывод?

Не использовать метод локтя. Предпочитаемыми методами авторы считают VRC (реализация sklearn), Bayesian Information Criterion (BIC) (материал с реализацией) или симуляционный критерий (GAP-статистику, материал с реализацией).
Ладно, не буду больше откладывать и напишу про свою линию исследований про TDA в NLP.

Все началось с моей старой, совсем неказистой статьи https://www.mathnet.ru/php/archive.phtml?wshow=paper&jrnid=ista&paperid=225 (годов 2018-2019), которую я написала в аспирантуре с небольшой помощью друга (соавтора) и научника. По всей видимости, эти два человека - единственные, кто прочитал ее целиком (рецензирование в журнале Интеллектуальные системы, мягко говоря, хромает), поэтому я не уверена ни в том, что там нет ошибок, ни в том, что это не велосипед.
Теоретическая часть статьи (сейчас будет скриммер в виде мат.терминов) заключалась в том, что я определила персистентные гомологии (условно) "на Марковских цепях" через прокси-конструкцию - неориентированный граф, вершины которого совпадают с состояниями Марковской цепи, а вес ребра между двумя состояниями соответствует сумме вероятностей перехода из первого во второе и из второго в первое. На таком графе уже можно ввести фильтрацию и через нее пробросить определение персистентности, порадовав читателей рядом лемм и теорем и бесконечными (в буквальном смысле) коммутативными диаграммами.
Практическая часть статьи заключалась в том, что я показала, как с помощью этих гомологий отличать осмысленные тексты от текстов с перемешанными словами. А именно, я обучила 50 Марковских цепей на текстах, написанных людьми и 50 - на текстах с теми же наборами слов, но перемешанными. Затем по каждой Марковской цепи посчитала размерности своих групп гомологий (самых-самых простых, которые соответствуют количеству компонент связности прокси-графа на разных порогах) и получила 100 векторов с признаками. Затем на 90 примерах обучила лог.регрессию, и она "очень хорошо" предсказала по оставшимся 10 примерам, построены ли они по текстам, написанным человеком, либо по текстам с перемешанными словами.
Это "очень хорошо" в статье было расписано словами "с точностью от 96% до 100%", которые я, спустя пять лет, уже совсем не понимаю. Как на множестве из 10 примеров в принципе могла быть достигнута точность, не кратная 10%? Может быть, это усреднение по нескольким запускам? Но откуда тогда взялись 100%? Это точность на трейне? Никто уже не ответит на эти вопросы. Как бы то ни было, мой метод побеждал Bag of Words, который по определению не мог отличить текст с перемешанными словами от связного текста, что в тот момент принесло мне достаточно удовлетворения для того, чтобы опубликоваться.
В общем, в то время у меня было слабое представление о том, как надо ставить и описывать эксперименты для статей по машинному обучению, поэтому практическая часть получилась такой невнятной. Не повторяйте моих ошибок и всегда описывайте результаты в статьях как можно более точно и внятно, чтобы потом сами не забыть, что они означают. А лучше всего найдите хорошего научного руководителя, который будет целенаправленно учить вас писать хорошие статьи.

Тем не менее, какой бы ни была спорной эта статья, она стала одним из моих первых шагов к публикациям в области машинного обучения (раз речь про ML, я не учитываю свои изыски в элементарной математике и в чистой алгебраической топологии). Так сказатб, эта статья стала той самой непонятной прыгающей фигней из начала видео про Boston Dynamics, которая выглядела как техноересь, но потом дала начало чему-то большему.

#объяснения_статей
Продуктивизация ML решений часть 4️⃣

Когда садился писать серию этих заметок, думал что уложусь в 4 части. Но вчера дописывал блок про наблюдаемость сервиса и понял что нужна ещё одна часть. Она будет про деплой сервиса: немного про docker, чуть чуть про docker-compose и про health checks внутри Kubernetes.

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

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

Логическим развитием было бы накатить Grafana для построения дэшбордов с метриками. Логи собирать отдельно в БД и потом анализировать. Ну и можно что нибудь с трейсами придумать для полноты картины.

Кароче говоря, заметка здоровая, наверное не самая простая, но точно одна из самых полезных !

Энжой ✌️💫

Ссылка на заметку: https://mvrck.space/posts/ml-best-practices-p4-observability/

P.S.: Make ML services observable again 🎉

#blogpost
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevFM
Design distributed cache

Хочется порекомендовать замечательный youtube-канал System Design Interview. Автор вещает на понятном русском английском :)

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

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

Всё достаточно просто, локальный кеш, LRU – алгоритм, применяемый для вытеснения данных при переполнении кеша. Дальше – интереснее, появляется распределённая система, и этот distributed вносит проблемы. Рассматриваются dedicated и co-allocated кластеры, способы управления кластером, какие алгоритмы применяются для распределения данных по шардам, их плюсы и минусы.

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

Вопрос, который не освещается в видео, но заслуживает внимания – прогревания кеша. Что делать при старте, когда кеши пустые?

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

#youtube #skills #резюме
Forwarded from DLStories
Нашла еще один интересный подход к сегментации изображений: с помощью разбиения графа self-attention карты трансформера.

В чем идея:
Берем vision transformer, обученный на картинках в self-supervised режиме. Т.е. без какой-либо обучающей разметки. Смотрим на карты его self-attention. Оказывается, что на этих картах становтся подсвечены контуры объектов (см. 1 рис). Причем такое наблюдается только для трансформеров, обученных в self-supervised режиме: ни для supervised трансформеров, ни для CNN такое не работает.

Одними из первых это свойство заметили ребята из FAIR (статья). Они пошли дальше: взяли эти self-attention карты, обучили на них KNN и получили качество 78.3% top-1 на ImageNet.

Но вернемся к сегментации. Другие ребята придумали, как сделать сегментацию на основе этого свойства. Идея простая: берем элементы self-attention карты трансформера и строим на них граф. Ребро между двумя векторами будет равно 1, если косинусное расстояние между ними больше заданного порога, и eps, если меньше порога. На таким графе решаем задачу разбиения графа (normalized cut). Так элементы карты аттеншена, соответствующие объекту, будут отделены от элементов, соответствующих фону.
Последний шаг — применяем какой-нибудь алгоритм edge refinement (например, стандартный CRF), и получаем неплохую карту сегментации объекта на картинке.

Недостаток такого подхода — он умеет сегментировать только один объект на картинку. Поэтому ребята из FAIR (уже другие) предложили, как улучшить идею. Все просто: находим карту одного объекта. Далее накладываем на патчи self-аттэншена этого объекта маску, и снова запускаем алгоритм. И так несколько раз.
Это позволяет находить на одной картинке сразу несколько объектов (рис. 2).

Вот такая идея. Вообще, attention maps разных трансформеров часто обладают подобными свойствами, и на основе информации из них можно понимать, как "думает" моделька и решать разные downstream задачи. Интересно их исследовать)