Все потоки
Поиск
Написать публикацию
Обновить
207.73

Алгоритмы *

Все об алгоритмах

Сначала показывать
Порог рейтинга
Уровень сложности

Распознаем номера автомобилей. Разработка multihead-модели в Catalyst

Время на прочтение5 мин
Количество просмотров6.5K

Фиксация различных нарушений, контроль доступа, розыск и отслеживание автомобилей – лишь часть задач, для которых требуется по фотографии определить номер автомобиля (государственный регистрационный знак или ГРЗ). 

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

Сделать модель для распознавания можно с помощью разных подходов, например, путем поиска и определения отдельных символов, или в виде задачи image-to-text. Мы рассмотрим модель с несколькими выходами (multihead-модель). В качестве датасета возьмём датасет с российскими номерами от проекта Nomeroff Net. Примеры изображений из датасета представлены на рис. 1.

Читать далее

DataScience Digest — 10.06.21

Время на прочтение3 мин
Количество просмотров2.1K

Приветствую всех!

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

Встречайте свежий выпуск дайджеста полезных материалов из мира Data Science & Machine Learning и не забывайте подписываться на наш Telegram-канал.

Читать дальше →

Психотронная тюрьма риторики: история о том, что мешает нам мыслить здраво

Время на прочтение13 мин
Количество просмотров74K

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

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

Что же, ответ у меня есть. Я считаю, что этос — это бич мыслящего человека. Кайрос — кандалы, который выковал информационный век. А понимание того, как работает риторика — базовый инструмент критического мышления. Особенно для IT-специалиста.

Я так много рассказывал об этом на кухнях и в чатах, что решил написать статью. А получился лонгрид с научными исследованиями, разбором влияния алгоритмических новостных лент, и безумным комиксом из мемов, который я делал 4 часа в Фигме. Поехали!

UPD Большое спасибо всем тем людям, что помогли мне исправить ошибки и очепятки! Только на Хабре так стремятся помочь, и это неоценимо.
Читать дальше →

Как Яндекс применил генеративные нейросети для поиска ответов

Время на прочтение11 мин
Количество просмотров71K


Только что мы представили новую версию поиска Y1. Она включает в себя комплекс технологических изменений. В том числе улучшения в ранжировании за счёт более глубокого применения трансформеров. Подробнее об этом направлении мой коллега Саша Готманов уже рассказывал в нашем блоге. В новой версии модель стала мощнее: количество параметров возросло в 4 раза. Но сегодня мы поговорим о других изменениях.

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

Сегодня мы поделимся опытом создания и внедрения технологии YaLM (Yet another Language Model), которая теперь готовит ответы для Поиска и Алисы. В этом мне помогут её создатели — Алексей Петров petrovlesha и Николай Зинов nzinov. Эта история основана на их докладе с Data Fest 2021 и описывает опыт внедрения модели в реальные продукты, поэтому будет полезна и другим специалистам в области NLP. Передаю слово Алексею и Николаю.

Что такое алгоритм?? Part three and a quarter. «Язык»

Время на прочтение19 мин
Количество просмотров2.9K

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


Ἐν ἀρχῇ ἦν ὁ Λόγος.

Title

Читать дальше →

Процессор, эмулирующий сам себя — может быть быстрее самого себя

Время на прочтение1 мин
Количество просмотров38K

Современный мир ПО содержит настолько много слоёв, что оптимизации могут быть в самых неожиданных местах. Знакомьтесь - год 2000, проект HP Dynamo. Это эмулятор процессора PA-8000, работающий на этом же процессоре PA-8000, но с технологией JIT. И реальные программы, запускающиеся в эмуляторе - в итоге работают быстрее, чем на голом процессоре.

td;dr - всё сказано в заголовке

Читать далее

Сетки из треугольников в играх

Время на прочтение6 мин
Количество просмотров7.8K

Поговорим о сетках треугольников. Сетки квадратов используются практически повсюду, от пикселей изображения до расположения домов в квартале. Сетки шестиугольников представлены тоже довольно широко, особенно в настольных играх. Однако сетки треугольников (равномерное заполнение 2D-плоскости равносторонними треугольниками) почему-то не очень популярны. Я встречал заявления, что они бесполезны, или что у них сложная математика. Но этой статьёй я докажу, что оба заявления ошибочны: вычисления на самом деле проще, чем при работе с шестиугольниками, к тому же треугольники обладают множеством преимуществ.

Все вычисления я выполнил в своём коде на github, однако стоит объяснить, как и зачем нужно использовать такие сетки.

Что такое «сетка треугольников»


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


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

2500 дней создания AI без использования нейронных сетей или покерный бот, который дороже $50к

Время на прочтение12 мин
Количество просмотров29K

Давно хотел написать статью про своё хобби, которое стало нечто большим для меня. 

Я закончил математический факультет(ТвГУ) в 2012г.  В период учёбы я профессионально играл в покер, как вживую, так и онлайн(yura_$198802,основной аккаунт PS). Не могу сказать, что был супер успешен, но для студента вполне себе подработка. Уже с 2011 года я начал карьеру программиста и продолжаю её по сей день. Это мой основной источник заработка. Но где-то в 2014 я серьёзно решил заняться написание покерного бота, для онлайн площадок. На данный момент “я” превратился в команду энтузиастов, которая двигает этот проект вперёд! Еще в университете довольно таки плотно был знаком с Байесовским классификатором, а также имел  базовые представления по нейронным сетям. Сейчас стало "мейнстримом" считать, что если вы нашли релевантные данные и корректно обучили сетку с использованием (ML,CatBoost,TensorFlow и т.д.), то вы сделали что-то похожее на “искусственный интеллект”(далее AI). Я решил ,что если раскрою верхнеуровневую архитектуру своего проекта, это может кого-то удивить тем, что AI - это нечто большое.(только не профессионалов в этой области) И даже в такой игре как покер, где казалась бы не обойтись без нейронных сетей(на самом деле это действительно так), до момента органического встраивания их в продукт, лично у меня прошло примерно 2500 дней. Сразу хочу отметить, что  способ, когда ты знаешь всю информацию обо всех участниках и играешь с одними и теми же, где можно просто собрать модель и обучить её по лучшим и быть в их числе, не подходит для так называемого реального онлайн покера. Тут  нужно делать изначально экспертную систему, которую уже можно бесконечно долго улучшать и модифицировать.

Читать далее

Как в PHP улучшить читаемость регулярных выражений

Время на прочтение11 мин
Количество просмотров8.3K

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

PHP использует диалект регулярных выражений PCRE — до версии PHP 7.3, и PCRE2 — в более новых версиях. Поэтому в PHP можно использовать различные продвинутые приемы, помогающие писать читаемые, самодокументируемые и поддерживаемые регулярные выражения. При этом не надо также забывать и о наличии в PHP функций фильтрации переменных, а также семейства функций ctype*, позволяющих валидировать такие распространенные значения как url-ссылки, адреса электронной почты и строки из букв и цифр — вообще без использований регулярный выражений. Во многих IDE есть подсветка регулярных выражений, помогающая их читать, а иногда даже и проверка выражений, с подсказками по их улучшению.

Читать далее

Каждый браузер видит цвета видео по-разному

Время на прочтение10 мин
Количество просмотров11K

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

В преобразовании значения RGB-триплета в конкретную длину волны света задействовано множество систем. Это преобразование должно быть стандартизовано, чтобы всё ПО, все декодеры видео, видеокарты и мониторы (даже изготовленные разными производителями в разные десятилетия) могли создавать одинаковые результаты по одинаковым входным данным. Для решения этой задачи были разработаны цветовые стандарты. Однако со временем дисплеи и другие технологии развивались. Телевидение стало цифровым, начали применять сжатие, а мы отказались от ЭЛТ в пользу LCD и OLED. Новое оборудование было способно отображать больше цветов при большей яркости, но получаемые им сигналы по-прежнему были адаптированы под возможности старых дисплеев.
Читать дальше →

Альтернативный способ заполнения «спиральной матрицы»

Время на прочтение10 мин
Количество просмотров44K

В процессе изучения основ алгоритмизации и программирования в качестве студента еще в середине 2000х мне попалась довольно известная всем задача по заполнению «спиральной» матрицы. Суть состоит в том, начиная с позиции [1, 1], продвигаясь по часовой стрелке, заполнить квадратную матрицу заданной величины числами в возрастающем порядке. На ее решение было потрачено около двух часов.

Читать далее

Анализ результатов работы архитектуры YoloV3 на медицинских снимках

Время на прочтение10 мин
Количество просмотров3.9K

Данная статья представляет собой обзор на оригинальную статью на Medium (эксперименты проводятся с изменениями некоторых условий =).

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

Читать далее

Решаем вопрос сортировки в JavaScript раз и навсегда

Время на прочтение9 мин
Количество просмотров46K

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

Читать далее

Ближайшие события

Прогнозирование временных рядов с помощью AutoML

Время на прочтение16 мин
Количество просмотров27K


Хабр, привет!


В лаборатории моделирования природных систем Национального центра когнитивных разработок Университета ИТМО мы активно исследуем вопросы применения автоматического машинного обучения для различных задач. В этой статье мы хотим рассказать о применении AutoML для эффективного прогнозирования временных рядов, а также о том, как это реализовано в рамках open-source фреймворка FEDOT. Это вторая статья из серии публикаций, посвященной данной разработке (с первой из них можно ознакомиться по ссылке).


Все подробности — под катом!

Читать дальше →

В аквариуме: вычислительная генетика на Python и Mathcad (часть 1)

Время на прочтение3 мин
Количество просмотров4.5K

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

Читать далее

Развеиваем мифы об управлении памятью в JVM

Время на прочтение9 мин
Количество просмотров24K

В серии статей я хочу опровергнуть заблуждения, связанные с управлением памятью, и глубже рассмотреть её устройство в некоторых современных языках программирования — Java, Kotlin, Scala, Groovy и Clojure. Надеюсь, эта статья поможет вам разобраться, что происходит под капотом этих языков. Сначала мы рассмотрим управление памятью в виртуальной машине Java (JVM), которая используется в Java, Kotlin, Scala, Clojure, Groovy и других языках. В первой статье я рассказал и разнице между стеком и кучей, что полезно для понимания этой статьи.
Читать дальше →

«Швейцарский нож» науки: как методы Computer Science используются в других дисциплинах

Время на прочтение9 мин
Количество просмотров5K

Математику часто называют «языком науки». Она хорошо приспособлена для количественной обработки практически любой научной информации, независимо от ее содержания. А при помощи математического формализма ученые из разных областей могут в какой-то степени «понимать» друг друга. Сегодня похожая ситуация складывается с Computer Science. Но если математика — это язык науки, то CS — её швейцарский нож. Действительно, трудно представить современные исследования без анализа и обработки огромных объемов данных, сложных вычислений, компьютерного моделирования, визуализации, применения специального ПО и алгоритмов. Разберем несколько интересных «сюжетов», когда разные дисциплины используют методы CS для решения своих задач. 

Биоинформатика: от чашек Петри к биологии In silico


Биоинформатику можно назвать одним из самых ярких примеров стыка CS и других дисциплин. Эта наука занимается анализом молекулярно-биологических данных при помощи компьютерных методов. Биоинформатика как отдельное научное направление появилась в начале 70-х годов прошлого века, когда впервые были опубликованы нуклеотидные последовательности малых РНК и созданы алгоритмы предсказания их вторичной структуры (пространственного расположения атомов в молекуле).

С проекта «Геном человека» по определению последовательности нуклеотидов в ДНК человека и идентификации генов в геноме началась новая эра биоинформатики. Стоимость секвенирования ДНК (определение последовательности нуклеотидов) упала на несколько порядков. Это привело к колоссальному увеличению числа последовательностей в публичных базах данных. На графике ниже изображен рост количества последовательностей в публичной базе данных GenBank с декабря 1982 года по февраль 2017 в полулогарифмическом масштабе. Чтобы накопленные данные стали полезными их нужно каким-то образом проанализировать.
Читать дальше →

Обзор счётчиков Морриса

Время на прочтение7 мин
Количество просмотров5.3K

При реализации потоковых алгоритмов часто возникает задача подсчёта каких-то событий: приход пакета, установка соединения; при этом доступная память может стать узким местом: обычный n-битный счётчик позволяет учесть не более 2^n - 1событий.
Одним из способов обработки большего диапазона значений, используя то же количество памяти, является вероятностный подсчёт. В этой статье будет предложен обзор известного алгоритма Морриса, а также некоторых его обобщений.

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

Мы начнём с разбора простейшего алгоритма вероятностного подсчёта, выделим его недостатки (раздел 2). Затем (раздел 3) опишем алгоритм, впервые преложенный Робертом Моррисом в 1978 году, укажем его важнейшие свойства и приемущества. Для большинства нетривиальных формул и утверждений в тексте присутствуют наши доказательства — интересующийся читатель сможет найти их во вкладышах. В трёх последующих разделах мы изложим полезные расширения классического алгоритма: вы узнаете, что общего у счётчиков Морриса и экспоненциального распада, как можно уменьшить ошибку, пожертвовав максимальным значением, и как эффективно обрабатывать взвешенные события.

Читать далее

Майнкрафт для геологов: 3D-рендеринг миллиарда ячеек на встроенной видеокарте (часть 2)

Время на прочтение30 мин
Количество просмотров3.5K

В первой части статьи мы реализовали простой (и не очень эффективный) рендерер сетки ГУТ, и пообещали, что оптимизируем рендерер настолько, что он сможет отобразить заявленный в заголовке миллиард ячеек.

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

Читать далее

N-e число обобщённых Фибоначчи за O(log N)

Время на прочтение2 мин
Количество просмотров5.2K

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

Читать далее

Вклад авторов