Новый месяц – новый дайджест итогов Симулятора ML! В сентябре у нас вышло целых три новых задачи, которые могут помочь подтянуть навыки для работы мечты. Давайте расскажем о них подробнее!
Читать полностью…Напоминаю канал Генки, где вы можете найти для себя ещё больше практических знаний по всему что касается софт-скиллов, коммуникации, разборчивости в людях и многого другого:
/channel/MySocialCircle
Soft-skills, связи, нетворкинг – вот это всё…
Два года назад, на свой юбилей, Я пригласил 15 друзей: каждый из них имеет свои уникальные черты, каждый спец в своём специфичном направлении. Было большое удовольствие перезнакомить их между собой и наблюдать, как они находят чем поделиться друг с другом.
Из них, с Игорем и Женей Я вас уже знакомил. Настала очередь Генки.
Генки – это человек, который уже инстинктивно знает, как находить подход к людям, независимо от их типажа, статуса и обстоятельств встречи – и умеет простым, доступным языком объяснить что произошло в каждую секунду коммуникации.
В прошлом он успел поработать партнёром event-агентств, арт-директором, UX дизайнером (помню, как-то мы приходили к мысли, что в дизайне для синьорного уровня тоже важнее уже не хард-скиллы, а оценивать эффект через A/B, понимать пользователей). В 23 он основал и затем продал модельное агентство [не знаю, как ему это удаётся!]. Позже поднял бюджетик на NFT и сейчас у него свой бизнес.
Словом, Генки из опыта знает, как работать с людьми, что такое построение доверительных отношений, партнерство, соц.круги, BizDev и грамотная коммуникация. Недавно он завёл телеграм канал, где делится своими наблюдениями и помогает развивать soft-скиллы другим.
Но на этом хорошие новости не заканчиваются. В эту субботу, в 18:00 по Москве мы проведём эфир «Софт-скиллы, связи, нетворкинг – вот это всё…», где обсудим как подходить к вопросу развития своих софт-скиллов, что становится всё более актуально сейчас, с появлением LLM, когда хард-скиллы всё меньше становятся бутылочным горлышком, а понимать людей (коллег, пользователей, партнёров) – всё больше.
Пишите в комментарии вопросы, которые вы бы хотели, чтобы мы с Генки обсудили во время эфира.
Вышла девятая глава книги «Machine Learning System Design with end-to-end examples» Валеры Бабушкина и Арсения Кравченко, Error Analysis, в написании которой ваш покорный слуга принимал участие, и по мотивам которой написана недавняя статья на Хабре.
В главе вы узнаете, в какой момент пора бомбить датацентры, в также как вашей ML системе стать LessWrong.
По ссылочке можно получить ранний доступ к уже вышедшим главам и оперативно получать новые по мере их публикации: https://www.manning.com/books/machine-learning-system-design
Про читабельный код 2/2
Чтобы не тянуть кота за хвост, сразу же брошу пару-тройку рекомендций, пока они у Меня в голове. Особенно будут особенно полезны начинающим специалистам, но может и матёрым волкам что-то из этого пригодится.
1. Выступление автора библиотеки Keras, "The Secrets of Productive Developer Tools"
Идея: писать код, фокусируясь на том, кто его будет использовать и как; думать о UX, который ты задаёшь своим кодом (какой workflow?); параметры и наименования должны отражать что пользователь твоего кода получает, а не как этот код реализован (мысль тривиальная, но...)
2. Книга Егора Бугаенко, "Elegant Objects"
Идея: "уважать" объекты, воспринимать их как автономные сущности с которыми можно и нужно взаимодействовать, а не как набор переменных, сброшенных в одну кучу (откуда всегда можно что-то взять или положить через сеттеры и геттеры); когда мы что-то хотим получить от объекта, мы должны попросить (делегировать), а не микроменеджерить объекты, вмешиваясь в их логику работы и отдельно диктуя что с чем сделать.
В частности, автор пропагандирует, что все процедуры должны быть глаголами (действиями), а все функции (когда что-то возвращается) – существительным или существительным с прилагательным. Почему? Названием функции мы описываем что пользователь получит.
Аналогия: что когда мы приходим в ресторан, мы говорим, "Мне, пожалуйста, латте" (latte
) – называешь, что хочешь получить. Мы не говорим "заварите Мне латте" (brew_latte
) или "принисите Мне латте" (get_latte
). N тем более мы не идём на кухню, диктовать баристе в какой питчер заливать молоко. Это было бы странно. Но в среднестатистическом коде подобное встречается тут и там.
Собственно, даже если вы пишите MVP на коленке, говнокодя как последний подонок, хотя бы заботьтесь о внятном именовании с понятной логикой. Нормальные именования – это уже залог 80% читабельности кода.
ERROR ANALYSIS
Опубликована Моя вторая статья на Хабре, «Почему анализ ошибок – это начало разработки ML системы, а не её конец?».
Первая статья называлась «10 первый ошибок в карьере ML инженера». Расскажу об 11-ой ошибке в своей карьере, а именно, воспринимать анализ ошибок как финишную черту перед первым A/B, этап для галочки.
Включение анализа ошибок в пайплайн, сбор первых артефактов – это по сути замыкание цепочки обратной связи, когда мы готовы пустить ток (данные) по сети (пайплайну) первый раз и получить самый ранний фидбек (Я расскажу, почему одной валидации мало).
Так мы получаем baseline ML системы (по аналогии с MVP) и переходим к итеративному циклу доработок, отладок, экспериментов и усложнения.
А как именно проводить анализ ошибок, вы узнаете в самой статье. Приятного чтения: https://habr.com/ru/articles/760550/
P.S. Выражаю благодарность коллегам, внёсшим прямой или косвенный вклад в содержание этой статьи за время нашей совместной работы: Андрею Кулагину, Юре Гаврилину, Арсению Кравченко, Валере Бабушкину.
Идея простая:
Подготовка:
1. Берётся база знаний как некий набор текстов (documents). Тексты бьются на кусочки, скажем, по 64 или 128 токена (их называют чанками или нодами).
2. Каждый кусочек текста прогоняем через некоторую маленькую вспомогательную предобученную модель (embedding model), которая трансформирует каждый кусочек в вектор ("смысл кусочка", или на инженерском, эмбеддинг).
3. Эти вектора (и исходные кусочек текста и документ откуда они взяты) складываются в некое хранилище, которое называется "векторной базой данных" или "индексом".
Инференс:
1. Retrieval. От пользователя приходит запрос или вопрос. С помощью всё той же вспомогательной модели превращаем его в вектор, находим 2-3-5 самых похожие: либо напрямую, через kNN (k nearest neighbors, k ближайших соседей), либо через ANN (approximate nearest neighbors, приближённый поиск ближайших соседей) – на случай если база знаний очень большая и точный поиск затруднён.
2. Далее с найденными релевантными кусочками текста можно делать что угодно: можно вытащить весь исходный документ (особенно если они небольшие, скажем, по 500-1000 токенов), можно вытащить некую окрестность ближайших кусочков токена в том же документе, в котором нашли данный.
3. Наконец, формулируем промпт для базовой модели (GPT): вставляем исходный вопрос, далее говорим, мол, "вот что тебе может пригодиться при ответе" (ставить подтянутый контекст до или после – сильно зависит от ваших юзкейсов, подумайте, почему), – и далее случается магия, при генерации своего ответа теперь GPT будет опираться на наш контекст из базы знаний, какого бы размера она не была.
Впервые Я услышал эту идею в лекции Игоря Котенкова про модель RETRO (Retrieval-Enhanced Transformer) от DeepMind из статьи "Improving language models by retrieving from trillions of tokens".
Завести описанный пайплайн несложно, это займёт у вас не больше 1 вечера. Ваши друзья здесь: LlamaIndex и LangChain, под это дело там и там есть специальные утилиты, если не сориентируетесь – у них есть языковая модель поверх... документации, которая тоже работает по описанному принципу. Задайте вопрос – и она поможет найти и разобраться.
P.S. Как-то Александр Дьяконов пошутил, что лучший алгоритм в машинном обучении – это kNN, а остальные модели – это попытки его аппроксимировать, нивелировав те или иные недостатки. Тут же мы прямо возвращаемся назад к истокам.
Эта идея легла в основу формата Моего визуального плана-карты на следующий квартал. Попробую проговорить Мою логику визуализации, хоть Мне лично она и кажется на поверхности.
1. Значит, в центре нахожусь Я версии "Август-2023".
2. Вокруг Я рисую 4 круга на каждый месяц (план на 120 дней).
3. На расстоянии 3-4 месяцев от Меня находятся большие цели, к которым Я хочу придти и которые имеют для Меня стратегическое значение (каждая в своей сфере).
4. Вдоль каждой цели большое количество средних и малых промежуточных целей, которые алайнятся с большими целями и которые упорядочены во времени (это могут быть гипотезы, майлстоуны и целые проекты). Цели связаны стрелкой, если какие-то из них блокируют друг друга.
5. Есть контур (пунктиром) текущих целей, которые сейчас находятся в фокусе Моего внимания ("территория на которую Я позарился"). Есть контур (жирным) из целей, которых Я уже достиг ("захваченные территории"). Цели вне контуров – полупрозрачные (кроме финальных боссов).
Да, добыча знаний, развитие навыков и новые достижения – это буквально как захват новых территорий. Внимание – это Моя армия: чтобы достигать поставленных целей, необходимо концентрировать усилия на малом числе ключевых направлений – и не сбавлять напор.
Кто не знает, чего он хочет, – легко подпадает под влияние, того, кто знает, чего он хочет.
Вдогонку делюсь парой релевантных ссылок на тему:
• Dr. Emily Balcetis: (Visual) Tools for Setting & Achieving Goals
• Andrew Huberman: How to Set & Achieve Your Goals
• Cal Newport's Planning System (In Detail)
Что дают разговоры с собой?
• Рефлексия (взгляд в настоящее): понимаешь себя – чего ты хочешь, что тебя тревожит, что тебе нравится, а что не нравится сейчас. Регулярное изучение своих мыслей, эмоций и реакций – необходимое условие для сохранения внутренней целостности, преодоления внутренних конфликтов и противоречий, выработки внутреннего стержня (укрепление своей самости, поиск своего "Я").
• Разбор полётов (взгляд в прошлое): обдумываешь свои действия, слова, поступки, ошибки – в недавнем или далёком прошлом; думаешь что тобой двигало в каждый момент времени, что двигало других участников событий, которое тебя беспокоит; прикидываешь, что бы ты мог сделать лучше или по-другому в той ситуации.
• Брейншторм (взгляд в будущее): думаешь над решением проблем в будущем, достижением поставленных целей, над предстоящими вызовами – генерируешь идеи, продумываешь варианты развития событий и т.д.
• Побочные эффекты: медитация, терапия, тренировка дыхания и голоса (однако!), эмоциональное восстановление (в конце концов на время этого диалога ты на полчаса-час-два оффлайн), заряд энергией (причём как из-за движения, так и из-за ускорения интеллектуального метаболизма).
У многих из нас есть огромное количество не проговоренных с собой мыслей и эмоций, которые тратят энергию, но которым мы не даём возможности выйти наружу, материализоваться в словах. Я пробовал вести дневники, но они оказались не такими эффективными, как диалоги с собой (вероятно, с голосом наружу выходит сильно больше эмоций).
Разговоры с другими людьми (друзьями, психологами) для перечисленных целей Мне видятся неэффективными: во-первых, когда мы говорим с кем-то другим, хотим или нет, у нас включается самоцензура (подбираем слова, иногда что-то не договариваем, выставляем что-то в ином свете); во-вторых, а кто, как не ты, знаешь лучше тебя и... твои данные?
#MyProtocols
FLOWMODORO
Заметки, как Богдан фокусируется на работе, упакованные с помощью ChatGPT. Обсудим технику Flowmodoro: как Vision превращается в стратегию, стратегия в план, план в задачи, задачи в подзадачи, подзадачи в "помидорки", помидорки в "поток", а поток – в долгосрочный momentum.
#MyProtocols
Eliminate inauthentic goals and desires with these six questions:
1. Do I actually desire this? Or do I just desire what it looks like?
2. What’s the core work involved, and can I see myself doing that work every day for years?
3. If I ended up hating this, what would be the reason?
4. Is there something external that prompted this desire? (e.g., a tweet thread, book, influencer, podcast)
5. Am I suffering from recency bias? (You recently saw something that inspired the desire, and because it’s recent it feels more authentic)
6. If someone gave me a billion dollars right now, would I still pursue this? If not, what would I do instead?
smatla">– Sam Matla
Если бы вас попросили выбрать один единственный самый важный софт-скилл, какой бы вы назвали?
Читать полностью…3. Инструменты:
• black – автоматическое форматирование кода (any color you like, as long as it's black); очень помогает не париться и не спорить насчёт того, какое форматирование сделать в вашем проекте, когда есть источник непреложной истины, сам форматирующий всё в единый стиль.
• pre-commit – автоматически делает что-то с вашим кодом перед коммитом (например, прогоняет тот же black, линтеры, сортирует импорты, проверяет что все файлы короче 4096 токенов 🤡 и т.д.)... дисциплинирует.
• typing (а для самых извращенцев, mypy) – хоть Python и язык с динамическое типизацией, но не писать типы у функций и параметров – это какое-то неуважение к своим коллегам и к своему коду, игра в угадайку. Нормальное наименование
• pylint / flake8 / sonarlint – линтеры это штуки которые автоматически находят баги, опечатки, нарушения PEP8 и другие проблемы, понижающие качество кода. Все линтеры доступны как плагины в VSCode. Если есть возможность, ставьте SonarQube – так у вас на каждый коммит в merge request будет прилетать портянка замечаний, возможных уязвимостей кода, местах со сложной логикой и т.д.
Напишите в комментах, какие ещё знаете приёмы карате или годные источники на тему.
Про читабельный код 1/2
10 лет назад, когда Я участвовал в краевых олимпиадах по программированию, Я подобрал одну цитату у одного из тренеров, которой люблю щеголять по сей день:
Писать код, который поймёт машина – может любой дурак.
Писать код, который поймёт другой человек – вот это искусство.
В конце концов, код – это не только инструмент, заставляющий биты и байты работать на нас, это в том числе средство коммуникации. Это тоже часть продукта, у которого есть свои пользователи (нынешние и будущие коллеги), которым хорошо бы при необходимости за минимальное время разобраться в том, что вы написали, и внести соответствующие коррективы.
Я человек ленивый, поэтому сейчас, когда Мне что-то надо быстро дописать или поправить, Я в первую очередь пробую копи-пастнуть весь файл в GPT-4, сказать, сделать – и получить желаемое изменение в нужном месте. Иногда, требующее косметических доработок. Годы прошли и теперь нам опять важнее, чтобы наш код понимала машина. Но у этой машины есть одно маленькое ограничение: длина контекста.
Поэтому Я официально ввожу новый паттерн хорошего кода: Размер любого файла в проекте не должен превышать 4096 токенов.
P.S. К слову, это вполне внятный критерий, по которому можно определить в какой момент ту или иную сложную логику инкапсулировать в отдельные объекты.
Mochary Method
Существует такой персонаж, Matt Mochary, коуч для CEO. Его очень рекомендует Sam Altman (CEO, OpenAI):
"Matt’s coaching has brought me clarity, focus, organization, less stress, higher performance (me and the team). I have always been skeptical of coaches but I think he can 10x the output of a lot of people and I hope he does!"
У Matt Mochary есть Mochary Method Curriculum, это открытая база знаний по всевозможным темам, с которыми фаундеру необходимо сталкиваться в работе: как строить компанию, организовывать встречи (включая 1:1), как слушать, как принимать решения, ставить цели, нанимать, мотивировать, оптимизировать, расти, работать над ошибками – и много чего ещё. Все знания разбиты на короткие заметки по 2-5 минут чтения. Со слов Matt, эти заметки покрывают 95% его тренинга. Я рекомендую их чтение любому, кто даже только начинает пробовать себя в менеджерской роли.
Впервые этими заметками со Мной довольно давно поделился Игорь, автор канала Сиолошная. Но почему Я вспомнил о них сегодня?
Решил Я, значит, натравить вчера на эти заметки пайплайн с языковой моделью поверх базы знаний, который собирал под другой проектик, заглядываю на сайт, а там... это уже сделано, притом в клёвом интерфейсе. Впрочем, это было ожидаемо, раз уж Sam Altman оказался на лендинге сайта! 😧
Соответственно, highly recommended (Matt AI):
https://beta.mocharymethod.com/matt_bot
Только что открыл для себя ChatPDF, хоть и слышал давно. Позволяет загружать любой PDF, например, статью, резюме кандидата, презентацию или целую книгу – и терроризировать вопросами. И конечно, работает по принципу Retrieval Augmented Generation (RAG), о котором написал вчера.
Нравится.
RAG: Retrieval Augmented Generation
Значит, дошли у Богдана руки наконец сделать один проектик с чат-ботом поверх базы знаний. Кто уже работал с knowledge-augmented chatbots – зову в комментарии похвастаться, какой самый крутой конструктор лего собирали. Кто не работал – расскажу как это заводить.
Проблема следующая: у ChatGPT, как и у других больших языковых моделей, контекст ограничен. Например, у GPT-3.5 он 4K токенов, у GPT-4 он 8К токенов (кто не знает, токен – это символ, или часть слова; посмотреть, на какие запчасти ChatGPT разбирает ваш промпт перед ответом, можно здесь; в английском 1000 токенов ≈ 750 слов). Размер контекста – это сколько текста может переварить модель перед ответом. Ясно, что в такое малое число токенов не запихать какую-то большую, длинную и специализированную базу знаний, с оглядкой на которую мы хотим чтобы модель отвечала.
Какие варианты решения проблемы?
Вариант №1 (долго-дорого-сложно): дообучить модель на свои данные
Вариант №2 (быстро-дёшево-легко): подтягивать релевантные контексты по запросу.
Естественно, нас интересует второй вариант. Как он работает?
VISIAL GOALS
Значит, рассказываю, что было на экране.
Близится к концу третий квартал 2023 года (Q3), и начинается четвёртый (Q4). Это самое время заняться квартальным планированием, выставлять свои персональные OKR (Objectives & Key Results) на следующий квартал. Эта практика стала регулярной лишь с начала этого года.
Как Я ранее писал, свою жизнь Я раскладываю на несколько сфер и каждая ассоциируется со своим цветом. Сферы жизни – это векторы развития. Каждый квартал Я определяю, по каким фронтам Я собираюсь бить, куда направлять больше всего времени и энергии – и главное, в какой пропорции. Прошлые кварталы Я писал чисто текстовый документ-стратегию. В этом Я решил попробовать другой формат, где большой акцент сделан на визуализацию.
Есть гипотеза, что >90% информации, с которой работает наш мозг, – это визуальные образы. Даже когда мы говорим о языке и тексте, это лишь "вход" и "выход", а само мышление, сами цепочки ассоциаций возникают в некотором зримом пространстве в голове.
#MyProtocols
1:1 with Myself
Вдвоем человек бывает более одиноким, чем наедине с собой.
– Фридрих Ницше, "Так говорил Заратустра"
Одна из Моих давних практик, которая насчитывает уже 8 лет и которая помогает оставаться в гармонии с собой, контролировать стресс, понимать и слышать себя – это разговоры с собой. Буквально, хожу по дому или иду вдоль дороги – и говорю с собой вслух. Всегда это делаю в движении, потому что...
Только выхоженные мысли – имеют смысл.
– Фридрих Ницше, "Сумерки Идолов"
В разные годы Я называл эту практику разными именами: разговор с собой, персональный 1:1, мистерии, walk-n-talk... однажды ChatGPT подсказал Мне термин Soliloquy (в русском аналогов не нашёл), приём из театральной практики, когда герой озвучивает свои размышления – как например Гамлет в известном "Быть... или не быть?". Не путать с монологом, который обращён к другому человеку.
Посоветуйте фильм к просмотру.
Какой Ваш любимый и почему?
P.S. Сейчас попробую параллельно свою подборку склепать по памяти.
https://uberkinder.notion.site/02e6cf2a24f64607857083c880f7781c?v=351cee670d2f41b4827d4d3707f2bc2e&pvs=4
В общем, мы сделали токсичную ChatGPT-2 на чистом numpy
. А как прошла ваша суббота?