Search
Write a publication
Pull to refresh
28
0
Anton Vasin @tony-space

Software Engineer

Send message

Как устроено глубокое обучение нейросетей

Level of difficultyMedium
Reading time13 min
Views3.4K

Глубокое обучение - Способ обучения моделей на большом количестве данных, используя множество слоёв. Каждый слой сети обрабатывает информацию, "взвешивая" её при помощи параметров (весов и смещений), оставляя признаки или отбрасывая, посредством функций активации. Обучение происходит через итеративную (повторяющуюся) корректировку весов: сначала вычисляются градиенты ошибки с помощью обратного распространения (backpropagation), а затем веса обновляются при помощи оптимизаторов (SGD, Adam и др.).

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

Читать далее

Что же такое HDR?

Level of difficultyEasy
Reading time9 min
Views36K

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

В прошлом году мы объявили до добавлении в наше приложение для работы с изображениями фотографий с HDR, или «High Dynamic Range». Большинство пользователей это порадовало, кого-то сбило с толку, а некоторые проявили откровенное беспокойство. Это связано с тем, что HDR может означать два разных, хотя и близких, понятия.

Читать далее

System Design — ТОП 5 ошибок новичка на интервью

Level of difficultyEasy
Reading time9 min
Views15K

Почему так сложно пройти первые System Design Интервью? Какие есть подводные камни? Оказывается, что не все понимают базовый алгоритм прохождения, а также нюансы движения по основным этапам.

Меня зовут Владимир и я senior backend в геораспределенной HighLoad системе. Которая выдерживает пиковые нагрузки в млн RPS. Моя страсть System Design. Я успешно прохожу интервью в BigTech компании, а также готовлю учеников. Выделил ТОП-5 ошибок у новичков и готов поделиться их разбором. Подробности под катом.

Узнать ошибки

Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций

Level of difficultyMedium
Reading time4 min
Views25K

Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций

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

Читать далее

Триангуляция по косточкам

Level of difficultyMedium
Reading time5 min
Views9.5K

Всё началось невинно. Шёл 2009 год, и я просто хотел портировать Earcut на Flash - для своей мини-игры. Тогда это сработало, но с годами стало понятно: простые решения перестают работать, как только хочешь выжать из них максимум.

Триангулировать

Дизеринг в графике и вычислениях: математическая элегантность сеток с низким расхождением

Level of difficultyMedium
Reading time10 min
Views3.5K

На хабре уже пару раз упоминался дизеринг, но в довольно узком ключе. Здесь, я хоть и буду делать упор на применение дизеринга в графике, я хочу продемонстрировать его недооценённость, из-за чего его снова и снова переизобретают.

Читать далее

5 способов нарисовать обводку

Level of difficultyEasy
Reading time13 min
Views7.3K

Рендеринг обводки (контуров) — это техника, часто используемая в играх или из эстетических, или из геймплейных соображений. Например, в игре Sable контуры применяются для создания стиля, напоминающего комиксы, а в The Last of Us контуры используются для выделения врагов, когда игрок переходит в режим скрытности.

В этом посте мы расскажем о пяти способах рендеринга контура вокруг объекта.

Читать далее

Разбор рендеринга в Unity, часть вторая: посмотрим на Genshin Impact

Level of difficultyMedium
Reading time7 min
Views14K

Казалось бы, техническая сторона графики у игр, созданных на одном игровом движке, должна быть более-менее схожей. Вот я и приступил к реверс-инжинирингу рендеринга Genshin Impact, не питая особого энтузиазма, ожидая увидеть там что нибудь вроде Universal Render Pipeline, стандартного решения для мобильных игр на Unity, с шейдером Cell shading для отрисовки персонажей. Но реальность преподнесла немало сюрпризов...

Читать далее

Почему слишком быстрые мыши могут ломать FPS в играх

Level of difficultyEasy
Reading time8 min
Views23K

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

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

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

Читать далее

std::array в С++ не медленнее массива в С

Level of difficultyMedium
Reading time14 min
Views14K

Или почему не нужно бояться того, что удобно работает. Узнаем, что по этому поводу пишет стандарт, потом заглянем в реализации std::array в libc++ и libstdc++, затем посмотрим на ассемблер некоторых операций с этими объектами. Завершим всё это дело, как и полагается, бенчмаркингом.

Проверить, так ли это

Шрифты в играх: (почти) идеальные засечки, кернинги и иероглифы

Reading time11 min
Views7K

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

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

Читать далее

Распределенные транзакции для самых маленьких

Level of difficultyEasy
Reading time8 min
Views18K

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

Читать далее

Максимально точное увеличение разрешения изображений: билинейная аппроксимация

Level of difficultyMedium
Reading time8 min
Views6K

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

Продолжаем увеличивать апскейл...

Точное увеличение растровых изображений

Level of difficultyMedium
Reading time10 min
Views7.1K

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

Увеличим апскейл до максимума!

Почему для меня так важен алгоритм CORDIC

Level of difficultyMedium
Reading time8 min
Views21K

CORDIC — это алгоритм для вычисления тригонометрических функций вроде
sin, cos, tan и тому подобных на маломощных устройствах без использования модуля обработки операций с плавающей запятой или затратных таблиц поиска. По факту он сводит эти сложные функции до простых операций сложения и битового сдвига.

Перейду сразу к делу и скажу, почему я так сильно люблю этот алгоритм, а затем займёмся изучением принципов его работы. По сути, фактические операции CORDIC весьма просты — как я уже сказал, это сдвиги и сложение — но выполняет он их путём комбинирования векторной арифметики, тригонометрии, доказательств сходимости и продуманных техник компьютерных наук. Лично я считаю, что именно это имеют ввиду, описывая его природу, как «элегантную».
Читать дальше →

Твоё освещение настолько дешёвое… Часть 1. Запекаем Ambient Occlusion нестандартным способом

Level of difficultyMedium
Reading time3 min
Views3.7K

Ambient Occlusion (затенение от рассеянного освещения) можно не вычислять в шейдере SSAO, а запечь в текстуру, увеличив fps. Конечно, можно воспользоваться 3D пакетом для запекания, например Blender. Но ведь мы на Хабре. И если вам хочется погрузиться во внутренности данного процесса, в этой статье описан способ вычисления Ambient Occlusion на основе матрицы, преобразующей направление в расстояние.

Читать далее

Вы думаете рисовать линии это просто?

Level of difficultyMedium
Reading time13 min
Views27K

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

Читать далее

Решение проблемы дымки на изображениях с использованием .NET: Простой и эффективный подход

Level of difficultyMedium
Reading time3 min
Views3K

Простое .NET решение для четких фото: избавьтесь от дымки или тумана на изображениях всего за несколько шагов!

Читать далее

Существует ли частотная область в реальности?

Level of difficultyMedium
Reading time7 min
Views12K

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

Однако насколько материально частотное пространство? Дискретное преобразование Фурье (DFT) имеет ключевое значение в сферах связи и анализа сигналов, но не раскрывает ли оно более глубокие, скрытые аспекты реальности? Рассмотрим, к примеру, квадратные волны. Действительно ли они существуют, если преобразование Фурье разлагает их на ряд нечетных гармоник синусоид, которые, в свою очередь, эффективно предсказывают поведение электронных схем в реальном мире?

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

Читать далее

Выявление ошибок в работе с памятью в C и C++: Сравниваем Sanitizers и Valgrind

Reading time24 min
Views13K

В этой статье вашему вниманию представлено сравнение двух инструментов для поиска ошибок в работе с памятью в программах, написанных на memory-unsafe (небезопасных при работе с памятью) языках — Sanitizers и Valgrind. Эти два инструмента работают совершенно по-разному. Поэтому, хоть Sanitizers (разработанный инженерами Google) имеет ряд преимуществ перед Valgrind, у каждого из них есть свои сильные и слабые стороны. Следует сразу отметить, что проект Sanitizers имеет название во множественном числе, потому что он состоит из нескольких инструментов, которые мы рассмотрим в этой статье в совокупности.

Читать далее

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity