Рубрика «Алгоритмы» - 80

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

Как мы обучили нейронную сеть классифицировать шурупы - 1

Проблема интернет-магазина шурупов — в ассортименте. Тысячи или десятки тысяч моделей. У каждого шурупа свое описание и характеристики, поэтому на фильтры нет надежды. Что делать? Искать вручную или искать в гипермаркете на полках? В обоих случаях это потеря времени. В итоге клиент устанет и пойдет забивать гвоздь. Чтобы помочь ему, воспользуемся нейросетью. Если она может находить котиков или диваны, то пусть занимается чем-то полезным — подбирает шурупы и болты. Как научить нейросеть подбирать для пользователя шурупы быстро и точно, расскажем в расшифровке доклада Марии Мацкевичус, которая в компании Grid Dynamics занимается анализом данных и машинным обучением.
Читать полностью »

Пирамидальная сортировка (HeapSort) - 1

Перевод статьи подготовлен специально для студентов курса «Алгоритмы для разработчиков».


Пирамидальная сортировка (или сортировка кучей, HeapSort) — это метод сортировки сравнением, основанный на такой структуре данных как двоичная куча. Она похожа на сортировку выбором, где мы сначала ищем максимальный элемент и помещаем его в конец. Далее мы повторяем ту же операцию для оставшихся элементов. Читать полностью »

Несколько дней назад случилась конференция Hydra. Ребята из JUG.ru Group пригласили спикеров мечты (Лесли Лэмпорт! Клифф Клик! Мартин Клеппманн!) и посвятили два дня распределённым системам и вычислениям. Контур был одним из трёх партнёров конференции. Мы общались на стенде, рассказывали про наши распределённые хранилки, играли в бинго, решали задачки.

Это пост с разбором задач на стенде Контура от автора их текста. Кто был на Гидре — это ваш повод вспомнить приятные впечатления, кто не был — шанс размять мозги big O-нотацией.

Были даже участники, которые разобрали флипчарт на слайды, чтобы записать своё решение. Я не шучу — они сдали на проверку вот такую пачку бумаги:

Разбор задач с конференции Hydra — балансировка нагрузки и in-memory хранилища - 1

Всего было три задачи:

  • о выборе реплик по весам для балансировки нагрузки
  • о сортировке результатов запроса к in-memory базе данных
  • о передаче состояния в распределённой системе с кольцевой топологией

Читать полностью »

Всем привет. Уже в этом месяце в ОТУС стартует новый курс — "Математика для Data Science". В преддверии старта данного курса традиционно делимся с вами переводом интересного материала.

Глубокое обучение (Deep Learning): обзор - 1

Аннотация. Глубокое обучение является передовой областью исследований машинного обучения (machine learning — ML). Оно представляет из себя нескольких скрытых слоев искусственных нейронных сетей. Методология глубокого обучения применяет нелинейные преобразования и модельные абстракции высокого уровня на больших базах данных. Последние достижения во внедрении архитектуры глубокого обучения в многочисленных областях уже внесли значительный вклад в развитие искусственного интеллекта. В этой статье представлено современное исследование о вкладе и новых применениях глубокого обучения. Следующий обзор в хронологическом порядке представляет, как и в каких наиболее значимых приложениях использовались алгоритмы глубокого обучения. Кроме того, представлены выгода и преимущества методологии глубокого обучения в ее многослойной иерархии и нелинейных операциях, которые сравниваются с более традиционными алгоритмами в обычных приложениях. Обзор последних достижений в области далее раскрывает общие концепции, постоянно растущие преимущества и популярность глубокого обучения.Читать полностью »

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

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

В последние годы новые методы смогли победить лучших людей в хэдзапе (бот Libratus). А сейчас достигнута ключевая веха: бот Pluribus, разработанный в университете Карнеги — Меллона и Facebook, победил элитных игроков за столом с шестью игроками (научная статья опубликована в Science). Что характерно, самообучение программы проводилось на одном 64-ядерном сервере с 512 ГБ памяти. Это не какие-то корпоративные проекты, где нейросеть обучается на десятках тысяч процессорных ядер. Обучение программы вроде Pluribus может повторить практически любой исследователь.
Читать полностью »

AI-Based Photo Restoration - 1

Hi everybody! I’m a research engineer at the Mail.ru Group computer vision team. In this article, I’m going to tell a story of how we’ve created AI-based restoration project for old military photos. What is «photo restoration»? It consists of three steps:

  • we find all the image defects: fractures, scuffs, holes;
  • we inpaint the discovered defects, based on the pixel values around them;
  • we colorize the image.

Further, I’ll describe every step of photo restoration and tell you how we got our data, what nets we trained, what we accomplished, and what mistakes we made.
Читать полностью »

Представьте, что вам нужно сгенерировать равномерно распределённое случайное число от 1 до 10. То есть целое число от 1 до 10 включительно, с равной вероятностью (10%) появления каждого. Но, скажем, без доступа к монетам, компьютерам, радиоактивному материалу или другим подобным источникам (псевдо) случайных чисел. У вас есть только комната с людьми.

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

Самое простое — попросить кого-нибудь: «Эй, выбери случайное число от одного до десяти!». Человек отвечает: «Семь!». Отлично! Теперь у вас есть число. Однако вы начинаете задаваться вопросом, является ли оно равномерно распределённым?
Читать полностью »

Вот цитата из Линуса Торвальдса за 2006 год:

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

Что очень похоже на «правило представления» Эрика Реймонда от 2003 года:

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

Здесь просто резюме идей, подобных мысли Роба Пайка от 1989 года:

Доминируют данные. Если вы выбрали правильные структуры данных и всё хорошо организовали, то алгоритмы почти всегда будут самоочевидными. Структуры данных, а не алгоритмы, играют центральную роль в программировании.

Читать полностью »

«Эмпирические результаты лишь для публикации, реальные мотивы работ — эстетические». Большое интервью с Майклом Скоттом - 1 Майкл Скоттуже 34 года как профессор Computer Science в Рочестерском университетe, а в родном универститете Wisconsin–Madison был деканом в течение пяти лет. Он занимается исследованиям в области параллельного и распределённого программирования и дизайна языков и обучает этому студентов.

Мир знает Майкла по учебнику «Programming Language Pragmatics», а работа «Algorithms for scalable synchronization on shared-memory multiprocessors» получила премию Дейкстры как одна из наиболее известных в области распределённых вычислений. Также вы можете знать его как автора того самого алгоритма Майкла-Скотта.

Вместе с Дагом Ли разработал те неблокирующие алгоритмы и синхронные очереди, на которых работают библиотеки Java. Внедрение «dual data structures» в JavaSE 6 позволило в 10 раз улучшить производительность ThreadPoolExecutor.

Содержание:

  • Начало карьеры, Рочестерский университет. Проект Charlotte, язык Lynx;
  • IEEE Scalable Coherent Interface, блокировка MCS;
  • Выживание в постоянно меняющемся мире;
  • Становятся ли студенты глупее? Глобальные тренды, интернационализация;
  • Эффективная работа со студентами;
  • Как не отстать при подготовке новых курсов и книг;
  • Связь между бизнесом и академией;
  • Практическая реализация идей. MCS, MS, CLH, JSR 166, работа с Дагом Ли и многое другое;
  • Транзакционная память;
  • Новые архитектуры. Близкая победа транзакционной памяти;
  • Энергонезависимая память, Optane DIMM, сверхбыстрые устройства;
  • Следующий большой тренд. Dual data structures. Hydra.Читать полностью »

Машинное обучение vs. аналитический подход - 1

Какое-то время назад мы нашли свои старые материалы, по которым обучали первые потоки на наших курсах машинного обучения в Школе Данных и сравнили их с теперешними. Мы удивились, сколько всего мы добавили и поменяли за 5 лет обучения. Осознав, почему мы это сделали и как, на самом деле, поменялся подход к решению задач Data Science, мы решили написать вот эту публикацию.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js