Как стать автором
Обновить
312.59

Алгоритмы *

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

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

Градиентный бустинг. Реализация с нуля на Python и разбор особенностей его модификаций (XGBoost, CatBoost, LightGBM)

Уровень сложности Сложный
Время на прочтение 28 мин
Количество просмотров 782

На сегодняшний день градиентный бустинг (gradient boosting machine) является одним из основных production-решений при работе с табличными, неоднородными данными, поскольку обладает высокой производительностью и точностью, а если быть точнее, то его модификации, речь о которых пойдёт чуть позже.

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

Новости

Extropic: Добро пожаловать в Термодинамическое Будущее (перевод)

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 1K

Всем привет, Меня зовут Богдан Печёнкин. Я соавтор Симулятора ML на Karpov.Courses и фаундер AI Dating Copilot стартапа Adam.

Только что Мне на глаза попалась одна новость от компании Extropic с новостями из мира квантовых компьютеров, которую Мне захотелось перевести и прокомментировать.

Extropic - лаборатория, разрабатывающая квантовые вычисления и алгоритмы искусственного интеллекта на их основе.

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

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 1

Криптографические пруфы zkSNARKs для масштабирования и безопасности

Уровень сложности Сложный
Время на прочтение 15 мин
Количество просмотров 552

Привет, Хабр! Меня зовут Сергей Прилуцкий, я руковожу отделом исследований компании MixBytes. Мы занимаемся аудитами безопасности смарт-контрактов и исследованиями в области блокчейн-технологий. В числе прочего занимаемся и направлением zero-knowledge. Эта статья подготовлена по мотивам моего доклада на Highload про zkSNARKs. Это одна из самых горячих тем в современной криптографии. Они используются для обеспечения приватности и масштабируемости в децентрализованных системах. Поговорим, как масштабировать криптографические системы, какие проблемы существуют у снарк-алгоритмов и зачем они нужны.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

Стекинг и блендинг в ML. Ключевые особенности и реализация с нуля на Python

Уровень сложности Сложный
Время на прочтение 11 мин
Количество просмотров 2.2K

Среди всех методов ансамблирования особое внимание заслуживают две очень мощные техники, известные как стекинг (stacked generalization) и блендинг, особенность которых заключается в возможности использования прогнозов не только однородных, но и сразу нескольких разных по природе алгоритмов в качестве обучающих данных для другой модели, на которой будет сделан итоговый прогноз. Например, прогнозы логистической регрессии и градиентного бустинга могут быть использованы для обучения случайного леса, на котором уже будет выполнен итоговый прогноз.

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

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 0

Истории

Трансформеры, группы преобразований и self-attention

Уровень сложности Сложный
Время на прочтение 10 мин
Количество просмотров 1.8K

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

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 0

Пароль как мелодия. Генерация стойких паролей в музыкальных аккордах

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


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

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

Но существуют более простые методики.
Читать дальше →
Всего голосов 21: ↑17 и ↓4 +13
Комментарии 20

Разбираемся в АА-деревьях (Python)

Уровень сложности Сложный
Время на прочтение 7 мин
Количество просмотров 5.5K

АА-дерево - это модификация красно-черного дерева с целью упрощения реализации

Как его реализовать и как оно работает на конкретных примерах - вот о чем эта статья

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 9

Создание генетического алгоритма для нейросети и нейроcети для графических игр с помощью Python и NumPy

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 4.2K

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

Сегодня я расскажу и покажу, как сделать Genetic Algorithm(GA) для нейросети, чтобы с помощью него она смогла проходить разные игры. Я его испробовал на игре Pong и Flappy bird. Он себя показал очень хорошо. Совет прочитать, если вы не читали первую статью: "Создание простого и работоспособного генетического алгоритма для нейросети с Python и NumPy" , так как я доработал свой код который бы показан в той статье.

Я разделил код на две скрипта, в одной нейросеть играет в какую-то игру, в другой обучается и принимает решения(сам генетический алгоритм). Код с игрой представляет из себя функцию которая возвращает фитнес функцию (она нужна для сортировки нейросетей, например, сколько времени она продержалась, сколько очков заработала и т.п.). Поэтому код с играми(их две) будет в конце статьи. Генетический алгоритм для нейросети для игры Pong и игры Flappy Bird различаются лишь параметрами.

Используя скрипт, который я написал и описал в предыдущей статье, я создал сильно изменённый код генетического алгоритма для игры Pong, который я и буду описывать больше всего, так как именно на него я опирался, когда я уже создавал GA для Flappy Bird.

Вначале нам потребуется импортировать модули, списки и переменные:

Читать далее
Всего голосов 14: ↑12 и ↓2 +10
Комментарии 3

Метод главных компонент (PCA). Принцип работы и реализация с нуля на Python

Уровень сложности Сложный
Время на прочтение 8 мин
Количество просмотров 5.2K

Метод главных компонент (Principal Component Analysis или же PCA) — алгоритм обучения без учителя, используемый для понижения размерности и выявления наиболее информативных признаков в данных. Его суть заключается в предположении о линейности отношений данных и их проекции на подпространство ортогональных векторов, в которых дисперсия будет максимальной.

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

Как калькуляторы вычисляют синус?

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 46K

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

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

Читать далее
Всего голосов 89: ↑87 и ↓2 +85
Комментарии 48

Кластеризация в ML: от теоретических основ популярных алгоритмов к их реализации с нуля на Python

Уровень сложности Сложный
Время на прочтение 34 мин
Количество просмотров 6.6K

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

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

Читать далее
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 2

Многокритериальная оптимизация для ранжирования и отбора торговых систем

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 1.5K

Отбор торговых систем: как выбрать лучшие из произвольного количества имеющихся

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

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

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 2

Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 17K

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

Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.

Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.

Читать далее
Всего голосов 62: ↑60 и ↓2 +58
Комментарии 20

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

Moscow QA #3 — митап по тестированию ПО
Дата 14 марта
Время 18:30 – 21:30
Место
Москва Онлайн
Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Как мы решали задачу оптимизации доставки грузов с использованием численных методов на примере метода имитации отжига

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 2.7K

В статье хотим поделиться своим опытом реализации алгоритма решения задачи маршрутизации на основе метода имитации отжига в Norbit CDS – умной системе управления доставкой. 

Проанализировав материалы, можно обнаружить различные предлагаемые способы решения VRP-задач (Vehicle Routing Problem). Главная их цель – планирование маршрутов для транспортных средств оптимальным способом. Основными критериями, как всегда, остаются наикратчайший путь для транспортного средства и доставка услуг во все заданные точки. В рабочем месте логиста Norbit CDS задача не отличается. 

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

Читать далее
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 3

Шпаргалка для алгособеса 2 — графовые и строковые алгоритмы

Уровень сложности Средний
Время на прочтение 22 мин
Количество просмотров 14K

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

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

Самым прямым образом — алгоритмы прокачивают умение системно мыслить, искать нестандартные пути решения; человека, у которого эти скиллы на высоте, вряд ли заменит ИИ. Так что, тратя бесценное время на алгоритмы, вы занимаетесь очень полезным делом, расслабьтесь и получайте удовольствие) В качестве бонуса к прокачиванию серого вещества вы получите сверхспособность пройти любой алгособес в FAANG и удовлетворить любые потребности пирамиды Маслоу — довольно приятно)

В этой статье мы разберём графовые алгоритмы типо DFS, Флойда–Уоршелла и строковые наподобие Ахо-Корасик.

Читать далее
Всего голосов 41: ↑39 и ↓2 +37
Комментарии 35

Азы больших языковых моделей и трансформеров: декодер

Уровень сложности Сложный
Время на прочтение 14 мин
Количество просмотров 4.3K

В этом материале мы поговорим об устройстве компонента‑декодера в системах машинного обучения, построенных по архитектуре «трансформер», уделив особое внимание отличию декодера от энкодера. Уникальной особенностью декодеров является то, что они похожи на циклы. Они, по своей природе, итеративны, что контрастирует с линейными принципами обработки данных, на которых основаны энкодеры. В центре декодера находятся две модифицированные формы механизма внимания: механизм множественного внимания с маскировкой (masked multi‑head attention) и механизм множественного внимания энкодера‑декодера (encoder‑decoder multi‑head attention).

Слой множественного внимания с маскировкой в декодере обеспечивает последовательную обработку токенов. Благодаря такому подходу предотвращается воздействие последующих токенов на сгенерированные токены. Маскировка важна для поддержки порядка следования и согласованности сгенерированных данных. Взаимодействие между выходом декодера (из слоя множественного внимания с маскировкой) и выходом энкодера организовано с помощью механизма множественного внимания энкодера‑декодера. Этот последний шаг даёт декодеру доступ к входным данным.

Мы, кроме того, продемонстрируем реализацию этих концепций с использованием Python и NumPy. Мы создали простой пример перевода предложения с английского языка на португальский. Практическая демонстрация обсуждаемых здесь идей поможет проиллюстрировать работу внутренних механизмов декодера в трансформерах и позволит лучше понять роль декодеров в больших языковых моделях (Large Language Model, LLM).

Читать далее
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 0

Построение годографа точки звуковой волны в изотропной среде при изменении ветра по высоте в вертикальной плоскости

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 525

Построение годографа точки звуковой волны в изотропной среде при линейном изменении скорости с высотой. Возврат к геометрической акустике.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 0

Инь-Ян консолидация для процедурной генерации границ

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 1K
Способ процедурной генерации граничного перехода от одной среды к другой, которые заданы на какой-либо регулярной решетке точек в квадрате или равностороннем треугольнике. Допускает обобщение на произвольные фигуры, а также на любые тайловые покрытия.

yin yang consolidation, four mediums
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 3

Кодируем крестики-нолики в 15 битах

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 9.2K

Недавно я наткнулся на пост Алехандры Гонсалес (@blyxyas), в котором рассказывается о попытке сжать игру крестики-нолики в минимальное количество битов. Она пришла к решению из 18 битов. Это заставило меня задуматься: а можно ли улучшить этот результат?

Как говорит Алехандра, существует 765 возможных состояний игры1. Мы можем просто назначить число каждому состоянию, что займёт 10 битов2. Но, по словам Алехандры, это «скучно». С таким описанием игры мы практически ничего не сможем сделать. Когда будет нужно считать значение из конкретной ячейки или перейти из одного состояния в другое, на практике нам придётся использовать таблицу поиска, сопоставляющую каждое число с более крупным и структурированным описанием, что делает бессмысленным саму идею сжатого описания.

Читать далее
Всего голосов 46: ↑44 и ↓2 +42
Комментарии 33

Нахождение порогов с оптимальным балансом классов

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

Решим такую алгоритмическую задачу: дано множество точек (x_i,y_i) на плоскости, имеющих метки 0 или 1. Требуется выделить область \{x\geq a \,\&\, y \geq b\}, в которой отношение числа 1 к числу 0 максимально, при условии, что число нулей в этой области не меньше заданного числа.

Читать далее
Рейтинг 0
Комментарии 5

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