Pull to refresh
37
0
Юрий @yurixi

Программист

Send message

Синтаксис, синглтон и смертельный ромб в С++: взгляд опытного разработчика на C

Level of difficultyMedium
Reading time15 min
Views9.9K

Давайте знакомиться: меня зовут Анатолий Семятнёв, я и моя команда разрабатываем ПО для опорных сетей 5G в YADRO. В IT-сфере работаю давно, и мой опыт в основном связан с языком С: занимался Board Support Package (BSP) и драйверами, много работал с операционной системой QNX. 

До того, как начал полноценно работать на С++, сталкивался с языком в нулевые, писал на С++98. Тем не менее все это время я краем глаза поглядывал, что происходит в С++, и хотел вернуться к программированию на этом языке. Читал книги, делал пет-проекты, смотрел записи конференций и митапов по С++. А когда пришел в YADRO, стал писать на С++.

Мне с ходу дали большую фичу для имплементации, я писал много кода, и получал комментарии от коллег. В этом материале собрал все, что изучил или вспомнил по итогам код-ревью. Что рассмотрим в статье:

• Ключевые концепции — explicit, final, default, string — и как их использовать.

• Инициализацию мемберов с помощью пустого брейс-листа.

• Синглтон Майерса в корутинах.

• «Смертельный ромб» и все, что связано с виртуальным наследованием.

Читать далее

Выкинь свой RoadMap: что на самом деле нужно знать начинающему фронтендеру

Level of difficultyEasy
Reading time4 min
Views5.4K

Сколько бы раз я ни смотрел RoadMap для начинающих фронтендеров, всегда натыкаюсь на одну проблему: RoadMap, как правило, — просто свалка технологий, которую можно описать одной фразой: "Учи всё, что есть". Но так ли это? Нужно ли учить всё это в самом начале? Давайте отбросим большую схему с технологиями в сторону и поговорим начистоту.

Читать далее

Как понять нейронные сети? Часть 2

Level of difficultyEasy
Reading time17 min
Views2.2K

Начало обзора здесь.

Первые необъяснимые результаты

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


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

В довольно простой задаче распознавания рукописных цифр, используя хорошо известную базу MNIST (60 тысяч обучающих образцов и десять тысяч тестовых) в упрощенном варианте MNIST-1D (всего 4000 обучающих образцов). Каждый упрощенный образец дискретизируется в 40 точках и на каждый из сорока входов модели подается горизонтальное смещение точки образца (поэтому набор данных и называется MNIST-1D). В модели два слоя по 100 элементов в каждом. Для оптимизации используется стохастический градиентный спуск. По ходу обучения ошибка классификации образцов, подаваемых на вход плавно снижается до нуля. Однако ошибки на тестовом наборе, которые начинают снижаться, дойдя до 40%, остаются на этом уровне. Значение функции потерь при этом даже увеличивается, приближаясь к единице, что означает, что модель делает те же ошибки, но с большей уверенностью.

На простых регрессионных моделях исследуются три источника ошибок (шум, дисперсия и смещение) при генерации тестовых данных и предлагаются методы сокращения дисперсии (за счет увеличения количества тестовых данных) и смещения за счет увеличения мощности модели (с шумом ничего поделать нельзя). При этом еще существует баланс дисперсии и смещения — увеличивая мощность модели, чтобы сократить ошибку смещения, мы получаем увеличение дисперсии как компоненты ошибки. Это значит, что для каждой модели существует некоторая оптимальная мощность для заданного объема обучающих данных.

Читать далее

Пишем свою Diffusion модель с нуля

Level of difficultyMedium
Reading time12 min
Views15K

Всем привет, думаю у вас на слуху разного рода Diffusion модели последние 2 года. На его основе генерируют реалистичные изображения и видео, поэтому мне захотелось копнуть поглубже и узнать какова кроличья нора...

Меня зовут Юра, я - разработчик, фаундер и ML энтузиаст, также пишу свои заметки в своем ТГ канале. Я решил разобраться и понять, как устроена Diffusion модель внутри, понять ее математику и постараться объяснить и разложить ее на пальцах. Ну и конечно пописать код, который (спойлер) заработал. На гифке изображены примеры итоговых картинок на моей финальной модели.

Если вам тоже интересно, то читайте дальше

Читать далее

Использование Graphviz для построения блок-схем

Reading time3 min
Views32K
Мы создаем ПО для разработки и поддержки баз данных Oracle, и статический анализатор PL/SQL является одной из основных фич наших приложений. Кто знаком с Oracle, тот хорошо знает что такое PL/SQL.

Известная поговорка гласит: «Лучше один раз увидеть, чем сто раз услышать». Поэтому мы решили заимпрувить статический анализатор таким образом, чтобы он визуализировал код в виде блок-схем (Flowcharts) и диаграмм вызовов (Call Trees). Хоть и нарисовать блоки и их связи несложно, оптимизировать их расположение на «листе» представлялось задачей, требующей значительных усилий. Чтобы стрелки минимально пересекались и обтекали блоки, блоки объединялись в группы, и диаграмма при этом не превращалась в «кашу», нужно было потратить много сил и времени.

И тогда мы решили поискать готовое решение, дабы не изобретать велосипед. Наше внимание сразу привлек Graphviz – open source решение по визуализации диаграмм. Первые его версии были разработаны компанией AT&T, а теперь он доступен как набор утилит и библиотек, а также в исходниках под лицензией Eclipse Public License (EPL).

Его движок диаграмм использует язык описания графов DOT, который представляет собой текстовое описание структуры графа: вершины, их связи, группы и атрибуты для их визуального оформления.
Читать дальше →

Записываем PNG без мам, пап и внешних библиотек

Reading time9 min
Views17K

Я решал очередную техническую задачу и столкнулся с проблемой: нужно сохранять изображения, а у меня нет сериализаторов и я не могу использовать готовые библиотеки. Ситуацию ухудшает, что из доступных форматов только PNG, JPEG и WebP. Выбор пал на PNG.

Формат изображения PNG известен с 1996 года, а на Хабре опубликовано несколько статей о декодировании этого формата. И ни одной — о кодировании. Я расскажу, как сохранить PNG своими руками на случай, если вам тоже придется это делать. Например, в академических целях.

Под катом вас ждет подробный разбор каждого байта на множестве иллюстраций.
Читать дальше →

Генеративная графика — не только ИИ

Level of difficultyMedium
Reading time10 min
Views1.8K

Привет, Хабр! В прошлый раз мы с вами создавали «Игру жизни» на Godot. Движок показал себя отлично, но для такой простой задачи это всё равно что забивать микроскопом гвозди. Особенно когда речь идёт о веб‑экспорте.

В последнее время стоит заикнуться про генерацию изображений, как все сразу вспоминают про нейросети. Stable Diffusion, Midjourney и прочие модели впечатляют, не спорю. Но давайте взглянем на другую сторону генеративного искусства. Ту, где картинки создаются не гигабайтами весов нейронной сети, а несколькими килобайтами JavaScript-кода.

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

Читать далее

Как много общаться с людьми и не возненавидеть их

Level of difficultyEasy
Reading time4 min
Views4.8K

Привет! Мы — Лера и Наташа — исследователи в UX-лаборатории Контура. Мы много общаемся с командой-заказчиком, с пользователями продукта и с другими коллегами.

Но есть одно существенное отличие: у исследователя лаборатории каждые 3-4 недели новый заказчик и новый продукт. Хотя мы далеко не суперэкстраверты и не особо заряжаемся от бесконечного общения.

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

Читать далее

Как мы делаем Автограф — «русское Visio»

Reading time6 min
Views23K
image
Самая первая инженерная версия редактора, не самая удобная для конечных пользователей

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

Мы начинали в 1991 году с софта для автоматизации проектирования электросхем — когда вы рисовали одну схему, а по ней синтезировались недостающие участки, вроде расчёта типа и количества реле, нужного сечения кабеля и так далее. К 2010 году дорога приключений привела нас к тому, что мы начали делать уже схемы для объектов энергетики.

Сейчас мы замещаем Visio в России и поддерживаем VSD/VSDX-форматы в обе стороны.

Собственно, я хочу рассказать немного о техническом аспекте работы с большими схемами.

Сильно упрощая, каждая схема и в нашем движке, и в движке Visio состоит из векторных элементов. Пользователь перемещает окно с полем зрения по схеме, и для этого места идёт рендер — рисуются только те элементы, которые видно. Для каждого масштаба делается пререндер этого вектора с разной детализацией, то есть пользователь каждый момент времени работает со всего одной группой SVG-элементов. Всё остальное только кажется схемой из деталей, на самом деле — это единая отрендеренная большая картинка.
Читать дальше →

Капитализм Vs Инфономика

Level of difficultyEasy
Reading time3 min
Views1.8K

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

Читать далее

Языковое моделирование с помощью управляемых сверточных сетей

Reading time21 min
Views2.5K

Доминирующий на сегодняшний день подход к языковому моделированию  основан на рекуррентных нейронных сетях. Их успех в моделировании часто связан со способностью таких сетей обработать неограниченный контекст. В этой статье мы разрабатываем подход для конечного контекста с помощью сложенных (композитных) сверток, которые могут быть более эффективными, поскольку они позволяют распараллеливать последовательные порции данных. Мы предлагаем новый упрощенный нейро-управляемый механизм и исследуем для него влияние ключевых архитектурных решений. Предложенный подход достигает наиболее значимых результатов на бенчмарке WikiText103, даже несмотря на то, что он характерен долгосрочностью зависимостей, а также сопоставимых результатов на бенчмарке Google Billion Words. Наша модель уменьшает задержку при оценивании предложения на порядок, по сравнению с рекуррентными базовыми значениями. Насколько нам известно, это первый случай, когда непериодический подход конкурентоспособен с сильными рекуррентными моделями в подобных крупномасштабных языковых задачах.

Читать далее

Настройка ПИД-регулятора для беспилотных автомобилей

Level of difficultyMedium
Reading time5 min
Views2.5K

Настройка ПИД-регулятора для беспилотных автомобилей

Этот проект иллюстрирует концепцию ПИД-регулятора, применяемого в беспилотных автомобилях в рамках программы Udacity «Беспилотный автомобиль»

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

В контексте беспилотных автомобилей они играют важную роль в управлении такими параметрами движения, как рулевое управление, ускорение и т. д. Сложные алгоритмы, используемые в беспилотных автомобилях, по сути, рассчитывают траекторию и скорость движения беспилотного автомобиля. Автономность может быть реализована только в том случае, если автомобиль следует по траектории с заданной скоростью. Именно здесь PID-регулятор играет свою роль, обеспечивая соблюдение беспилотным автомобилем рассчитанных параметров. Любое отклонение от рассчитанных параметров может привести к непредвиденным или катастрофическим последствиям.

Читать далее

Как исследователи нарушают привычные подходы в ИИ, исключая матричное умножение

Level of difficultyMedium
Reading time6 min
Views3.7K

Привет, на связи Елена Кузнецова, специалист по автоматизации Шерпа Роботикс. Сегодня я перевела для вас статью, посвященную использованию моделей ИИ без лишней математики. Все мы знаем, что нейросети - дело энергозатратное. А описанные в статье исследования могут помочь снизить энергопотребление в работе нейросетей.

Исследователи из Университета Калифорнии в Санта-Круз, UC Дэвис, LuxiTech и Университета Сучжоу объявили о разработке нового подхода к оптимизации работы языковых моделей ИИ, который исключает матричное умножение из вычислительных процессов. Это принципиально меняет операции нейронных сетей, которые в настоящее время ускоряются с помощью графических процессоров (GPU). Результаты работы, изложенные в недавней препринте, могут существенно повлиять на экологическую устойчивость и операционные расходы систем ИИ.

Читать далее

Распределение IQ: как программисту выживать в мире, рассчитанном на дураков?

Level of difficultyEasy
Reading time8 min
Views44K

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

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

В этом посте я хочу рассмотреть вопрос, ответ на который, надеюсь, поможет вам понять, почему многие вещи в мире устроены так, как они устроены. Почему многие законы такие нелогичные? Почему идущие в кинотеатрах фильмы такие незамысловатые, а шедевры всегда проваливаются в прокате? Почему до сих пор так распространено мошенничество "с безопасным счётом", если о нём трындят на каждом шагу? Почему в США так важно кого на выборах поддержит Тейлор Свифт? Почему существует общество плоской Земли? Почему полиция работает так, как она работает? Причём я не буду прямо рассматривать ни один из этих вопросов, а рассмотрю только метавопрос, метаответ на который безмолвно отвечает на них все.

Читать далее

Как идеи Аристотеля применяются в GenAI. Разбираем вопросы этики ИИ в образовании и создаем философский чат-бот

Level of difficultyMedium
Reading time16 min
Views1.6K

Учёные Лаборатории цифровой философии Санкт-Петербургского государственного университета на протяжении нескольких лет занимаются глубоким исследованием цифрового мира. Проект объединяет междисциплинарные исследования и занимается вопросами, которые задают философам представители цифровых технологий, статусом традиционных философских вопросов в сфере технологий и разработкой цифровых инструментов в изучении философии. Исследование генеративных нейронных сетей и их использование в педагогике вообще и в философии в частности – одна из сфер интересов учёных Лаборатории. Опыт применения этих сетей на семинарах показал ряд интересных особенностей использования GenAI (Generative Artificial Intelligence) в философии.

Об этике применения генеративных нейронных сетей в образовании, а также о философском чат-боте рассказывает координатор семинара «Лаборатория цифровой философии» Дмитрий Ярочкин.

Читать далее

Как у нейросетей работает внимание? Статья про self-attention и cross-attention

Level of difficultyMedium
Reading time5 min
Views3.8K

Удивительно, как нейросети похожи на нас. У них тоже есть внимание, и на примере коня на ракете я расскажу, как оно работает!

Читать далее

12 причин, почему технологии Wolfram — это не Open Source

Reading time18 min
Views5.8K

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

Я рискую тем, что спровоцирую open-source сообщество, но решил поделиться некоторыми своими взглядами. Хотя есть контрпримеры к большинству моих слов, не все пункты применимы к каждому проекту, и я несколько упускаю из виду различные виды "свободного" и "открытого", я надеюсь, что мне удалось выкристаллизовать некоторые ключевые моменты.

Подскаст, посвященной это теме размещен в SoundCloud.

TLDR: Большая часть этой статьи может быть подытожена двумя выводами: (1) бесплатное программное обеспечение с открытым исходным кодом может быть очень хорошим, но оно плохо справляется с тем, что мы пытаемся сделать; и большая часть причины в том, что (2) открытый исходный код распределяет разработку среди небольших, самостоятельно собирающихся групп, которые по отдельности решают части общей задачи, но масштабная, единая разработка требует централизованного контроля и постоянных усилий.

Я описал 12 причин, по которым считаю, что создание технологического стека Wolfram с использованием бесплатной модели с открытым исходным кодом было бы невозможным. Мне было бы интересно узнать ваше мнение в комментариях к этой статье.

Читать далее

Полезные Youtube-каналы

Level of difficultyEasy
Reading time2 min
Views8.1K

Сегодня хотим поделиться с вами подборкой Youtube‑каналов по ИИ, машинному обучению и математике. Если у вас есть еще рекомендации, обязательно дополняйте пост в комментариях!

Читать далее

Могут ли трансформеры «думать»

Level of difficultyMedium
Reading time21 min
Views6.3K

Недавние исследования показывают, что модели трансформеров способны почти безошибочно решать задачи, требующие нескольких логических шагов. Например, из утверждения А вывести Б и дойти логически до В. И что удивительно, это достигается без использования Chain-of-Thought или особых промптов — только классический GPT-2. Давайте посмотрим, как трансформеры «думают» при решении задач рассуждения, и напишем для этого код с использованием библиотеки Hugging Face.

Читать далее

Information

Rating
6,378-th
Location
Иркутск, Иркутская обл., Россия
Registered
Activity