LOVESYUK @lovesyuk Channel on Telegram

LOVESYUK

@lovesyuk


Пишу тут о том что интересно. А интересно мне про IT, нейросети, стартапы и много ещё чего.

Обо мне: основатель двух IT компаний. Люблю писать код и обучать ML модели. Делаю мини-проекты и рассказываю о них тут.

with 💙 from @mr_vvv

LOVESYUK (Russian)

LOVESYUK - это канал, где можно найти информацию о самых интересных темах, которые увлекают его создателя. Пользователь @lovesyuk делится знаниями о IT, нейросетях, стартапах и многом другом.

Основатель двух IT компаний, он не только любит писать код, но и обучать модели машинного обучения. Благодаря своему опыту, он регулярно создает мини-проекты и делится с подписчиками результатами своей работы.

Присоединяйтесь к LOVESYUK, чтобы быть в курсе последних технологических новинок и узнавать интересные факты из мира IT. Получайте вдохновение и знания, а также общайтесь с другими единомышленниками. Вас ждет увлекательное погружение в мир технологий от пользователя @mr_vvv с ❤️.

LOVESYUK

08 Jan, 03:20


Воу! Выиграл у 2700. Нельзя таким не поделиться 😎

LOVESYUK

30 Dec, 20:23


💖️Готовы пожертвовать всем ради любимого дела? 💀

Недавно перечитывал книгу моего любимого автора Дерека Сиверса Your music and people. Книга про то как стать успешным музыкантом. Но многие идеи из книги супер универсальны и полезны, чем бы вы не занимались.

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

***

Выдающихся результатов не добиться без выдающихся действий

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

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

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

Пока вы не тренируетесь, где-то тренируется кто-то другой. И когда вы встретитесь, он победит.

Посвятите себя делу целиком.  Find you love and let it kill you.

LOVESYUK

06 Jul, 18:43


🌟 200 тыс. шуток, вебсокеты и Gemini: История одного обновления 🌟

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

Делал первую версию чтобы играть с друзьями, но проект стал достаточно популярным и игроки уже написали порядка 200k панчлайнов.

Так вот, хочу рассказать о гигантском обновлении PunchMe

Чистый новый интерфейс

Прекрасный новый минималистичный UX/UI дизайн сделал Илья. Оживили и сверстали фронт Вова с командой на VueJs + Tailwind.

Можно играть со своими иностранными друзьями

Добавил поддержку английского в интерфейсе + есть англоязычный пакет вопросов. Работает даже озвучка.

Панчетрон ещё смешнее

AI бот, который играет с вами, теперь на голову смешнее предыдущей версии. Основной буст произошёл от перехода с gpt4 на gemini, который прекрасен на русском и, на удивление, не сдерживает себя в политкорректности. Иногда даже краснею за него.

Новый пакет: вопросы с никами

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

Всё работает быстрее на вебсокетах и асинхронно

Бек и фронт перевёл с rest-api на вебсокеты. Переписал весь код на асинхронный (flask → fastapi). Всё стало работать бодрее.

Бекэнд теперь организован

Перешёл с sqlite на mongo, который очень удобно поднимать с помощью докера. Сам бекенд и сборка фронта теперь тоже живут в своих контейнерах. Прокачал тут свой докер скилл.

Пробуйте с друзьями 🎉️️️️

LOVESYUK

28 Jun, 18:31


🎓 Alma Mater Folder 🎓

Ребята-физтехи организовались и сделали папку классных телеграм каналов. В которой я тоже есть 😏.
Много ребят C-уровня: фаундер Skyeng, CEO Epic Growth, VP в Osome, CPO в Яндекс.Лавке, etc.

Рекомендую заценить! Кучу интересного: много мейкеров (кто пилит свои проекты), датасаенс конечно же, истории про создание настольных игр и многое другое на что можно залипнуть.

Чек ит аут

LOVESYUK

01 Jun, 16:18


🔮 Как считать экспоненту с помощью умножения и сложения 🔮


const int L = 1 << 23; // == 2^23
const float a = L / std::log(2);
const float b = L * 127;

float fastExp(float x) {
x = a * x + b;
return std::bit_cast<float>((int)x);
}


Выше упрощенная версия кода, который считает приблизительное значение экспоненты, который я недавно встретил на GitHub.

Я был супер удивлен, что тут умножение + сложение + преобразование типов, и всё — экспонента подсчитана.
В моей голове экспонента всегда была нетривиальной операцией, на которую требуется много тактов. Как же так, давайте разбираться.

Целые и дробные числа хранятся в битах по-разному

Числа в формате int хранятся ожидаемым образом, например, для числа 123:
123: int = 0000000000000000000000000 1111011

Числа в формате float хранятся в виде маски битов:
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm

s — 1 бит знака. Определяет, положительное число или отрицательное.
e — 8 битов экспоненты. Показывают степень двойки.
m — 23 бита мантиссы. Хранят дробную часть числа.

Само число = (-1)^{s} * 2^{e} * 1.{m}

Например для нашего числа 123:

123: float = 0 00000110 11101100000000000000000

e = 00000110b = 6
m = 0.1110110b = 0.921875

Проверяем: 2^{e} x 1.{m} = 2^6 x 1.921875 = 123. Сходится!

Переводить представления из int в float и обратно несложно, и процессор умеет делать это очень эффективно.

Чтобы понять суть алгоритма, вместо e^{x} будем считать 2^{x}

Считаем быстро 2^{x} если x - int

Заметим, что если мы знаем двоичное представление x, то если мы его засунем в биты экспоненты float, то задача уже решена (e = x, m = 0). Это ключевое наблюдение для понимания алгоритма!

В int представлении все биты числа x у нас хранятся в правом конце числа. Чтобы сдвинуть их в область экспоненты, мы умножим наш int x на 2^23. Тем самым просто допишем 23 нуля справа.

В этих двух идеях и есть вся суть. Как перейти от 2^{x} к e^{х} в других деталях можно разобраться самому или заглянуть в оригинальную статью.

Cчитать экспоненту в десятичной системе мы (человеки) тоже можем с помощью одного умножения (wow!)

Например, чтобы оценить exp(36) мы можем переписать

exp(36) = 10^{36 * log10(e)} = 10^{15.634} ~ 10^16

Эта неожиданная похожесть алгоритмов, получается из-за того что научная запись чисел вроде 5.34e7 очень похожа на то, как хранятся float в компьютере.

P. S. На самом деле степень двойки в экспоненте float сдвинута на 127, чтобы мы могли записывать как большие числа, так и очень маленькие. Мы учитываем этот сдвиг, добавляя b = L * 127. Я убрал его, чтобы он не отвлекал от основной идеи.

P. P. S. Для тех кто всё понял: почему умножение на 2^32 в коде происходит в float, а не в int и что происходит с мантиссой в этом случае?

@lovesyuk

LOVESYUK

26 May, 13:03


🎱 Задачка по битовой магии 🎱


const int L = 1 << 23; // == 2^23
const float a = L / std::log(2);
const float b = L * 127;

float fast_math_function(float x) {
x = a * x + b;
return std::bit_cast<float>((int)x);
}


Выше упрощенная версия кода который считает приблизительное значение некоторой стандартной математической функции. Из действий тут только умножение + сложение + преобразование типов. А результат получается супер нетривиальный!

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

А пока два вопроса:
- Что это за функция?
- Как и почему работает этот магический код?

@lovesyuk

LOVESYUK

19 Mar, 12:23


Claude-opus на русском умнее chatgpt-4!

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

Сейчас это самый объективный рейтинг. Часто его смотрю.

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

На русском языке claude-opus выигрывает у gpt-4 c вероятностью ~58%.
Заметный перевес!

@lovesyuk

LOVESYUK

14 Mar, 16:09


Всех с 3.14 - днём Пи!

Сейчас получил большое удовольствие от новой попытки Мэта Паркера организовать вычисление Пи с помощью машины из очень плохих вычислителей - из пары сотен людей с ручками и листочками. Офигенно как они устроили конвейер вычислений и верификации результатов. Мощь!

https://youtu.be/LIg-6glbLkU

LOVESYUK

21 Feb, 14:25


Ого. Гугл выложил свои LLM модели в опенсорс которые сильно бьют llama2 на всех бенчмарках.

Выложены мелкие версии сетей: 2B и 7B параметров.

Прогресс в открытых моделях всё ещё идёт благодаря щедрости нескольких больших корпораций.

https://blog.google/technology/developers/gemma-open-models/

LOVESYUK

23 Jan, 21:00


✍️ Небольшое обновление Chess Brain Scorer из предыдущего поста ✍️

* Починил подсчёт рейтинга. При решение большого числа задач рейтинг считался неправильно и улетал в небеса. Удивительно, но баг в js библиотеке glicko2, которой уже 8 лет. Чтобы пофиксить пришлось самому написать оценку волатильности рейтинга.
* Добавил комментарии к истории, чтобы можно было что-то отмечать про своё состояние.

Check it out 😎

LOVESYUK

17 Jan, 19:22


🔋 Измеритель мыслетоплива 🔋

TLDR: Сделал измеритель как в течение дня меняется уровень когнитивной энергии и остроты ума. С помощью простых шахматных задачек. Попробуйте здесь.

# Энергия меняется в течение дня и зависит от многих факторов

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

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

# Шахматы как индикатор когнитивной бордрости

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

# Измеритель остроты ума

Что я сделал:

- Скачал датасет 3M шахматных задачек с сайта lichess.
- Из них выбрал все с хорошим рейтингом от пользователей и те которые решаются в 1-3 хода.
- Написал бэкенд который по вашему текущему рейтингу присылает следующую задачку.
- Вы решаете или не решаете задачку, и в зависимости от этого ваш рейтинг меняется.
- История рейтинга сохраняется локально, так что вы можете отслеживать как он меняется в течение дня и что на него влияет.
- Чем больше вы решаете задачек, тем точнее будет оценка рейтинга. Разумно остановиться на точности +- 50 пунктов.
- Фронт я написал на Vuejs и думаю, что получилось приятно и динамично.

# Не важно как хороши вы в шахматах

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

Пробуйте и делитесь впечатлениями.

LOVESYUK

17 Jan, 19:21


Гифка к посту Измеритель мыслетоплива

LOVESYUK

19 Dec, 22:11


Как я использовал время за ноутом в 2023 году

71% -- Работал над Wunderfund. Это основной мой фокус.
5% -- Делал какой-то новый интересный сайд проект.
2% -- Играл в шахматы.
2% -- Смотрел фильмы/сериалы. Офис & Друзья 🤍
1% -- Созванивался с друзьями. Всегда большая радость.

По приложениям:
40% времени я программировал разные штуки в vscode.

Такой вот год.

* Трекаю время с помощью классного Timing app приложения.

LOVESYUK

03 Dec, 17:08


💀 Человечество вымрет через 9000 лет. Теорема о конце света. 💀

Расскажу элегантное математическое рассуждение о том, как предсказать конец света.

Сначала представим, что каждый человек имеет порядковый номер рождения от 1 до N, где N - это общее количество людей, которые когда-либо будут существовать.

Теперь воспользуемся общим принципом Коперника, который говорит, ваш момент рождения ничем не уникален. Вы одинаково вероятно могли иметь любой порядковый номер рождения в истории человечества, как и любой другой человек. Из этого имеем, что порядковый номер вашего рождения равномерно распределён между 1 и N.

А это значит, что с вероятностью 95% ваш порядковый номер рождения X лежит в интервале 0.05 * N < X < N. Отсюда получаем оценку на N < X / 0.05 с вероятностью 95%.

С начала существования человечества к текущему моменту родилось порядка 60 млрд. человек. Это и будет ваш порядковый номер X. Поэтому получаем, оценку на общее число людей в будущем N ≤ 1200 млрд. людей.

Считая, что население стабилизируется на числе 10 млдр., можно прикинуть что таким образом нам остается не больше 9000 лет. Важно помнить, что это вероятностная оценка, а не точное предсказание.
Да, для Адама с Евой и последних живущих перед апокалипсисом эта оценка сработает плохо, но большинства остальных людей она будет потрясающе хороша.

Такой супер простой и красивый метод предсказания будущего. Если всё рассуждение кажется магией, то можно углубиться в вики.

@lovesyik

LOVESYUK

16 Nov, 15:28


🦫 Человечество никогда не сможет вычислить число Busy Beaver для 748 🦫

Расскажу о факте о котором недавно узнал, он меня так поразил, что я до 6 утра разбирался что к чему: Busy Beaver для 748 — это существующее конечное целое число которое мы не сможем вычислить никогда. Оно невычислимо в рамках любой системы математических аксиом. Его нельзя вычислить принципиально - даже при неограниченных времени и памяти.

Что такое Busy Beaver от N

Числа Busy Beaver (BB) - это ключевые числа в теории информатики. Первоначально BB определяется для машин Тьюринга, но для простоты будем рассматривать программы на Python.
BB от N — это сколько шагов будет работать самый долгий скрипт на Python длиной до N символов из тех, что когда-либо остановятся. Например:


for i in range(5): pass
#
 Это программа проработает 5 шагов

while True: pass
#
 А эт
а
 никогда не остановится, поэтому нам не подходит


Можно понять, что число программ короче N символов конечно. Из тех что останавливаются, будет та которая работает дольше всех. Число шагов которая она работает и будет BB(N).

Математика опирается на систему аксиом

Для краткости эту систему называют ZFC. Мы предполагаем, что эти аксиомы не противоречат друг другу: нельзя из них вывести утверждение A и not A. Однако Гёдель показал, что ZFC не может доказать свою собственную непротиворичивоть. Этот факт мы используем далее.

Пишем программу для поиска противоречий

Оказывается 748 символов достаточно чтобы написать программу на Python которая будет искать противоречия в ZFC всеми возможными способами. Если она найдет противоречие, она остановится; в противном случае она будет работать бесконечно. Мы считаем, что ZFC последовательна, следовательно, программа никогда не должна остановиться.

Если бы мы знали BB(748), мы могли бы оспорить теорему Гёделя.

Мы бы запустили нашу 748 символьную программу по поиску противоречий и подождали BB(748) шагов. Если бы она не остановилась, то это бы значило что она не принадлежит к классу программ которые когда-то останавливаются. Иначе BB(748) было бы больше. А раз она не остановится никогда, тогда мы доказали что в нашей системе аксиом нет противоречий. Что мы принципиально не можем сделать.

И поэтому мы никогда не сможем узнать BB(748).

Wake up Neo

BB от 748 — это непознаваемое число. Мы даже никогда не сможем узнать верхнюю границу для него. Но это конечное целое число! WOW.

LOVESYUK

18 Oct, 20:20


Мама: у нас есть вёрстка дома
Вёрстка дома: ...

(пробую картиночную gpt-4v на разных штуках)

LOVESYUK

17 Oct, 09:07


🤖 Панчетрон, комедийный ИИ, требует запись концерта для Netflix после того, как переиграл людей 🤖

В прошлом посте я рассказывал о моем эксперименте с промптами для юмора. Теперь представляю Панчетрона - chatgpt бота, для юмористической игры PunchMe. Он участвует наравне с другими игроками, пытаясь закончить шутки как можно смешнее.

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

Решение - добавляем контекст
Тогда я решил добавить контекст в промпт для Панчетрона: успешные шутки с предыдущих раундов игры. Вторая версия с использованием отсылок, стала играть существенно сильнее, часто обыгрывая людские варианты. Через несколько игр Панчетрон даже занял первое место обыграв 6 мясистых комиков. Было нетривиально осознать, какой гигантский буст в смехе нам даёт радость того, что мы в шутке поняли отсылку.

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

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

Что сейчас
Сейчас вторая версия участвует во всех играх PunchMe. Можете протестировать его с друзьями.

P. S. Заголовок поста придуман, конечно же, Панчетроном.

@lovesyuk

LOVESYUK

13 Aug, 14:07


💵 Я потратил $200 чтобы написать 6000 шуток 💵

Юмор и нейронки — это темы которые мне всегда интересно совмещать. Например, для моей юмористической игры punchme 100 тыс. заходов шуток (сетапов) я сгенерировал нейросетью ещё до эпохи chatgpt. Кроме того, база сетапов ежедневно пополняется из абсурдных новостных заголовков нашей реальности.

Так вот, для этой игры я давно хотел добавить Панчетрона - chatgpt бота который будет добивать шутки и соревноваться в остроумии с обычными людьми.

Для этого мне нужно было подобрать промпт который заканчивает шутки самым смешным образом. Но промптов можно придумать большое множество: “закончи шутку как Джим Карр”, “закончи шутку как абсурдный заголовок для The Onion” и т. д.

Как понять какой промпт генерит шутки лучше? А какая модель более остроумная: gpt-4 или gpt-3.5.-turbo?

Тут я решил действовать систематично.
Сначала я написал систему оценки шуток с помощью gpt-4 в след формате:
```
{'joke': 'Я пошел к врачу и сказал: "Мне кажется, у меня проблемы с памятью." Он спрашивает: "Когда это началось?" Я отвечаю: "Что началось?"',
'surprise': 0.7, 'cleverness': 0.8,
'sarcasm': 0.3, 'punny': 0.0,
'satire': 0.0, 'offensive': 0.0,
'absurdity': 0.5, 'funny': 0.7}
```
- Имея эту систему, я начал тесты.
- Для тестов я взял 10 разнообразных начал шуток (сетапов) и просил chatgpt заканчивать шутки в разных ролях и стилях. Для всех промтов протестировал все доступные модели OpenAI, чтобы сравнить их между собой.
- Всего я сгенерировал и оценил ~6000 шуток. Это $200 в токенах OpenAI.

Результаты
- См. график выше в канале
- На английском все chatgpt модели шутят существенно смешнее, чем на русском. Как по оценкам gpt-4, так и по моим субъективным ощущениям.
- Неплохо работает двухходовая генерация: прошу chatgpt сгенерировать шутки, а потом прошу переписать их чтобы они стали ещё остроумней.
- gpt-4 точно умеет в юмор, особенно на английском, просто нужно правильно промптить и фильтровать.
- Новая версия gpt-3.5-turbo стала существенно остроумней и на английском практически не уступает gpt-4. Ура.

А про Панчетрона напишу ещё отдельный пост.

@lovesyuk