Pull to refresh
68
0.1
Send message

Десять основных упражнений для предотвращения болей в спине у программистов

Reading time5 min
Views8.2K
Привет всем коллегам-программистам! Давайте углубимся в тему, которая имеет не меньшую важность, чем дебаггинг того дурацкого фрагмента кода, с которым вы столько воюете – тему вашего здоровья, а если конкретнее – предотвращения болей в спине. Речь не о затекающих время от времени мышцах, а о глубокой, настойчивой, ноющей боли, которая является последствием написания кода в режиме марафона. Под катом вы найдете десять упражнений, которые станут для вас палочкой-выручалочкой и сделают вашу спину такой же крепкой, как ваш код.
Читать дальше →
Total votes 26: ↑22.5 and ↓3.5+19
Comments12

Attention is Not All You Need: как менялась архитектура трансформера

Level of difficultyHard
Reading time4 min
Views4.3K

С момента выхода оригинальной статьи про трансформер прошло уже больше 7 лет, и эта архитектура перевернула весь DL: начав с NLP архитектура теперь применяется везде, включая генерацию картинок. Но та ли это архитектура или уже нет? В этой статье я хотел сделать краткий обзор основных изменений, которые используются в текущих версиях моделей Mistral, Llama и им подобным.

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments4

Преобразование Уолша-Адамара

Level of difficultyHard
Reading time11 min
Views12K

На сайте hackerrank.com есть отличная задача. По заданному массиву short[] A; найти максимальное количество его подмассивов, xor элементов которых будет одинаковым. Сам этот xor тоже нужно найти.

Максимальная длина массива равна 105, так что квадратичный алгоритм не укладывается в лимит по времени исполнения. Я в своё время с этой задачей не справился и сдался, решив подсмотреть авторское решение. И в этот момент я понял почему не справился — автор предлагал решать задачу через дискретное преобразование Фурье.

Читать далее
Total votes 64: ↑64 and ↓0+64
Comments5

Quantization Deep Dive, или Введение в современную квантизацию

Level of difficultyMedium
Reading time16 min
Views13K

Привет! Меня зовут Василий Землянов, я занимаюсь разработкой ML-инфраструктуры. Несколько лет я проработал в команде, которая делает споттер — специальную маленькую нейросетевую модельку, которая живёт в умных колонках Яндекса и ждёт от пользователя слова «Алиса». Одной из моих задач в этой команде была квантизация моделей. На пользовательских устройствах мало ресурсов, и мы решили, что за счёт квантизации сможем их сэкономить — так в итоге и вышло.

Потом я перешёл в команду YandexGPT. Вместо маленьких моделей я стал работать с очень крупными. Мне стало интересно, как устроена квантизация больших языковых моделей (LLM). Ещё меня очень впечатляли истории, где люди берут гигантские нейросети, квантизируют в 4 бита и умудряются запускать их на ноутбуках. Я решил разобраться, как это делается, и собрал материал на доклад для коллег и друзей. А потом пришла мысль поделиться знаниями с более широкой аудиторией, оформив их в статью. Так я и оказался на Хабре :)

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

Читать далее
Total votes 83: ↑82 and ↓1+81
Comments13

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

Level of difficultyHard
Reading time10 min
Views3.1K

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

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments0

Книги, о которых редко говорят

Reading time4 min
Views46K

Дал ему подборку книг, он приходит месяца через два, и с порога такой сразу:
— Я с друзьями не могу разговаривать.
— Ну да есть такой, недостаточек.
интервью Жака Фреско

Читать далее
Total votes 91: ↑89 and ↓2+87
Comments26

Разработка тензорного компилятора под RISC-V CPU с помощью OpenVINO и MLIR

Level of difficultyHard
Reading time11 min
Views3.9K

Привет, Хабр! Меня зовут Владислав Виноградов, я инженер группы исследований и разработки ПО глубокого обучения в YADRO. Моя команда создает и оптимизирует связанное с искусственным интеллектом программное обеспечение. Сегодня я расскажу, как можно разработать тензорный компилятор для процессора на базе открытой архитектуры RISC-V. 

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

Читать далее
Total votes 18: ↑17 and ↓1+16
Comments6

Функциональное программирование в Python: ежедневные рецепты

Level of difficultyMedium
Reading time21 min
Views15K
Как говорится, спроси пять программистов, что такое функциональное программирование, получишь шесть разных ответов. В целом это программирование через функции в их математическом понимании, то есть когда функция принимает что-то на вход и что-то возвращает на выходе, не меняя глобального состояния.

В своей команде — команде разработки инструментов для разработчиков под KasperskyOS — мы создаем разные интересные консольные утилиты, эмулятор, обеспечиваем интеграцию с IDE и так далее. И для этого мы используем разные языки — C++, C, TypeScript; но больше всего пишем на Python.



В этой статье, которая написана по следам моего выступления на конференции PiterPy, я обращаюсь к практикующим разработчикам — расскажу о том, какие функциональные приемы можно использовать в этом языке. Сконцентрируюсь на практике — на тех примерах, которые можно использовать уже буквально сейчас, не переписывая свой проект.
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments3

Футбольная аналитика: что поменялось за 2 года

Reading time10 min
Views7.3K
Пару лет назад я рассказывал, как мы трекаем движения игроков на поле, что помогает очень круто оцифровать тренировки детей (в наших футбольных школах). Потом оказалось, что это нужно футбольным клубам по всему миру. Но там классическая засада — мы дошли до определённого предела точности и остановились. А дальше последовал мир дивных открытий, отчасти связанный с ночной лигой Лондона, которая играет, внезапно, вечером. Ну и потому что наш софт начали тестить в большом футболе, и им зашло.

Принцип такой:
  1. Берём кадр видео и Ёлу, она размечает все объекты (игроков, зрителей, мяч, ворота и так далее), затем мы отсеиваем птичек, зрителей и судей и оставляем только значимые объекты.
  2. Делаем так для каждого кадра видео.
  3. Затем привязываем координаты игроков к плоскости поля и получаем положение каждого объекта с точностью до 0,5 метра.
  4. Пытаемся связать игрока из первого кадра с максимально близким (или похожим) объектом во втором кадре и так далее, то есть оттрекать каждого конкретного человека, чтобы можно было видеть их движение по полю весь матч.
  5. Пытаемся понять, что с мячом: кто-то им владеет, он летит и где он вообще.

То есть сначала у нас есть группа разрозненных объектов, потом каждый из них приобретает траекторию, потом, когда есть траектории, на них появляются события вроде «получил мяч», «отдал пас» и так далее.

Чтобы вы понимали глубину проблемы, покажу вот этого архангела:



Вокруг него не святая аура, а футболист другой команды. И нужно как-то это понять.

Давайте сначала перечислю проблемы, а потом расскажу, что мы с этим делали (или не делали).
Читать дальше →
Total votes 45: ↑43 and ↓2+41
Comments40

Теория типов

Level of difficultyMedium
Reading time43 min
Views29K

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

Что можно узнать из этой статьи?
Total votes 75: ↑75 and ↓0+75
Comments70

Python декораторы на максималках. Универсальный рецепт по написанию и аннотированию от мала до велика

Level of difficultyMedium
Reading time13 min
Views27K

Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python. С декораторами, наверное, знакомы все джуны (хотя бы в рамках подготовки к собеседованиям). Однако, крайне мало разработчиков пишут их правильно. Особенно принимая во внимания тенденции последних нескольких лет к аннотированию всего и вся. Даже популярные open-source проекты (если основная часть их кода была написана до 2018 года) вряд ли дадут вам примеры декораторов, отвечающих всем современным требованиям к коду.

Так давайте разбираться!

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

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

Давайте разбираться
Total votes 43: ↑43 and ↓0+43
Comments9

Свободный интернет, или как мы реализовали бесплатный VPN в России

Reading time9 min
Views23K

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

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

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

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

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

Мы не поддерживаем использование VPN для посещения экстремистских ресурсов или запрещенных в РФ веб-сайтов, и не рекомендуем это. Наш сервис предназначен для тех, кто ищет безопасный и свободный доступ в интернет, соблюдая все законы и правила России.


Содержание статьи:

Читать далее
Total votes 35: ↑24 and ↓11+13
Comments67

Всё, что вам нужно — это внимание (часть 1)

Level of difficultyHard
Reading time14 min
Views20K
Источник

Примечание переводчика: Недавно на Хабре мы рассказывали о статьях, которые нужно прочитать, если вы хотите заниматься искусственным интеллектом. Среди них была культовая статья Attention is all you need, выпущенная в 2017 году. С неё началось развитие больших языковых моделей, в том числе всем известного чат-бота ChatGPT. Оказалось, что у такой важной статьи нет перевода на русский язык. Мы решили исправить это. Ниже вы найдёте перевод первой части статьи, вторая часть доступна по ссылке.

Краткое содержание


Наиболее распространённые модели преобразования последовательностей основаны на сложных рекуррентных или свёрточных нейронных сетях, которые включают энкодер и декодер. В самых успешных моделях энкодер и декодер соединяются с помощью механизма внимания. В статье авторы предлагают новую простую архитектуру нейронных сетей — Трансформер. Он основан исключительно на механизмах внимания, без рекуррентности или свёрток. Эксперименты на двух задачах машинного перевода показали лучшее качество, а также больше возможностей к распараллеливанию и меньшие временные затраты на обучение. Модель достигает 28.4 по метрике BLEU на задаче перевода с английского на немецкий на данных WMT 2014, что превосходит предыдущий лучший результат на 2 пункта. На задаче перевода с английского на французский на данных WMT 2014 модель достигла наилучшего результата для решения, основанного на одной модели — 41.8 по метрике BLEU — после всего 3.5 дней обучения на 8 GPU, что составляет совсем небольшую часть тех вычислительных мощностей, которые были затрачены на обучение лучшей модели, известной из имеющихся публикаций. Авторы показывают, что Трансформер может также успешно применяться и в других задачах, таких как, например, синтаксический разбор предложений на английском языке с использованием как больших, так и весьма ограниченных наборов данных для обучения.
Читать дальше →
Total votes 61: ↑60 and ↓1+59
Comments5

Neural Network Optimization: океан в капле

Level of difficultyEasy
Reading time14 min
Views13K

Всех приветствую, меня зовут Антон Рябых, работаю в Doubletapp. Вместе с коллегой Данилом Гальпериным мы написали статью про важный этап в процессе обучения нейронных сетей и получения необходимых нам результатов —  оптимизацию модели. Зачем нужно оптимизировать модель, если и так все работает? Но как только вы начнете разворачивать модель на устройстве, которое будет ее обрабатывать, перед вами встанет множество проблем.

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

Оптимизация моделей направлена на уменьшение размера моделей при минимизации потерь в точности и производительности.

Методы оптимизации

Pruning — устранение части параметров нейронной сети.
Quantization — уменьшение точности обрабатываемых типов данных.
Knowledge distillation — обновление топологии исходной модели до более эффективной, с уменьшенным количеством параметров и более быстрым выполнением.
Weight clustering — сокращение количества уникальных параметров в весах модели.
OpenVino, TensorRT — фреймворки, с помощью которых можно оптимизировать модели.

Читать далее
Total votes 28: ↑28 and ↓0+28
Comments3

5 полезных библиотек Python (с примерами)

Level of difficultyEasy
Reading time6 min
Views27K

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

Ознакомиться
Total votes 56: ↑54 and ↓2+52
Comments14

Неравенство Белла

Level of difficultyMedium
Reading time4 min
Views6.4K

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

Читать далее
Total votes 16: ↑15 and ↓1+14
Comments63

Крипота: как истории ужаса стали частью интернет-культуры

Level of difficultyEasy
Reading time16 min
Views15K

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

Почему страшные истории так «выстрелили» во времена бурного роста аудитории Интернета и «золотой век» становления интернет-культуры? И почему со временем классические форматы «крипоты» почти сошли на нет, уступив место фанарту, пародиям и мемам?
Читать дальше →
Total votes 68: ↑63 and ↓5+58
Comments34

6 Python декораторов, которые значительно упростят ваш код

Reading time5 min
Views55K

"Простое лучше сложного".

Лучшая функция Python, которая применяет эту философию из "дзен Python", - это декоратор.

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

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

Болтать не буду. Давайте посмотрим на отобранные мной 6 декораторов, которые покажут вам, насколько элегантен Python.

Читать далее
Total votes 77: ↑73 and ↓4+69
Comments26

Графы в Python: введение и знакомство с лучшими библиотеками

Reading time11 min
Views39K

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

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

  • NetworkX для общего анализа графов;
  • PyVis для интерактивной визуализации графов прямо в браузере;
  • PyG и DGL для решения различных задач в области машинного обучения на графах.
Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments0

Трекинг множества объектов без разметки или как следить за пузырьками во время пенной флотации

Reading time10 min
Views9.3K


Привет, Хабр! Меня зовут Клоков Алексей, сегодня поговорим об алгоритмах компьютерного зрения, обработке видеопотока и методах трекинга множества объектов без разметки (unsupervised multiple object tracking) на примере пузырьков. Методичка будет полезна как опытным специалистам, перед которыми стоит похожая задача, так и начинающим энтузиастам. На основе черновика этого текста и экспериментов получилось опубликовать научную статью в Journal of Mineral and Material Science.


В тексте вы найдете:
— описание домена данных и технологического процесса флотации;
— подход к cегментации множества подобных объектов;
— существующие методы трекинга без разметки;
— подход к одновременному сопровождению множества подобных объектов;
— сравнение качества работы алгоритмов и много демонстраций

Читать дальше →
Total votes 60: ↑60 and ↓0+60
Comments8
1
23 ...

Information

Rating
3,115-th
Registered
Activity