Как стать автором
Обновить
69.7
Wunder Fund
Мы занимаемся высокочастотной торговлей на бирже
Сначала показывать

Увлекательная история о раскрашивании парных скобок — как VSCode ускорил раскраску в 10,000 раз

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

Прим. Wunder Fund: в этой статье из блога VSCode рассказана увлекательная алгоритмическая история о решении проблемы раскрашивания скобок. Господам удалось достичь значительногоускорения этого процесса. Нам самим очень нравится решать подобные задачи при работе над торговой системой, а если они вам тоже интересны, то пишите:)

Когда имеешь дело с глубоко вложенными скобками в Visual Studio Code — может быть непросто понять то, у каких скобок есть пары, а у каких — нет.

Для того чтобы упростить решение этой задачи, в 2006 году пользователь CoenraadS разработал восхитительное расширение для VS Code — Bracket Pair Colorizer, позволяющее раскрашивать парные скобки, и опубликовал его в VS Code Marketplace. Это расширение стало весьма популярным, теперь оно, с более чем 6 миллионами установок, входит в 10 самых скачиваемых расширений.

Для того чтобы решить проблемы, касающиеся производительности и точности работы расширения, в 2018 году CoenraadS выпустил расширение Bracket Pair Colorizer 2, которое тоже стало популярным и было установлено более 3 миллионов раз.

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

Разбираемся с параллельными и конкурентными вычислениями в Python

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

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

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

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

А именно, я раскрою здесь следующие вопросы:

▪ Отличия конкурентности от параллелизма.
▪ Различные варианты организации конкурентного выполнения кода (многопоточность, модуль asyncio, модуль multiprocessing, облачные функции) и их сравнение.
▪ Сильные и слабые стороны каждого подхода к организации конкурентного выполнения кода.
▪ Выбор конкретного варианта организации конкурентного выполнения кода с использованием специальной блок-схемы.

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

Перплексия в языковых моделях

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

В этом материале я хочу сделать подробный обзор такого понятия, как «перплексия» («коэффициент неопределённости»), так как оно применяется в обработке текстов на естественном языке (Natural Language Processing, NLP). Я расскажу о двух подходах, которые обычно используются для определения этого понятия, и о тех идеях, которые лежат в основе этих подходов.

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

Логарифмируй это: метод логарифмической производной в машинном обучении

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

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

Довольно математично.
Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии1

Генеративные модели от OpenAI

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


Эта статья посвящена описанию четырех проектов, объединенных общей темой усовершенствования и применения генеративных моделей. В частности, речь пойдет о методах обучения без учителя и GAN.
 
Помимо описания нашей работы, в этой статье мы хотели бы подробнее рассказать о генеративных моделях: их свойствах, значении и возможных перспективах развития.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии2

LSTM – сети долгой краткосрочной памяти

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

Рекуррентные нейронные сети


Люди не начинают думать с чистого листа каждую секунду. Читая этот пост, вы понимаете каждое слово, основываясь на понимании предыдущего слова. Мы не выбрасываем из головы все и не начинаем думать с нуля. Наши мысли обладают постоянством.

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

Решить эту проблемы помогают рекуррентые нейронные сети (Recurrent Neural Networks, RNN). Это сети, содержащие обратные связи и позволяющие сохранять информацию.
Читать дальше →
Всего голосов 41: ↑39 и ↓2+37
Комментарии4

Dropout — метод решения проблемы переобучения в нейронных сетях

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


Переобучение (overfitting) — одна из проблем глубоких нейронных сетей (Deep Neural Networks, DNN), состоящая в следующем: модель хорошо объясняет только примеры из обучающей выборки, адаптируясь к обучающим примерам, вместо того чтобы учиться классифицировать примеры, не участвовавшие в обучении (теряя способность к обобщению). За последние годы было предложено множество решений проблемы переобучения, но одно из них превзошло все остальные, благодаря своей простоте и прекрасным практическим результатам; это решение — Dropout (в русскоязычных источниках — “метод прореживания”, “метод исключения” или просто “дропаут”).
Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии4

Обзор исследований в области глубокого обучения: обработка естественных языков

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


Это третья статья из серии “Обзор исследований в области глубокого обучения” (Deep Learning Research Review) студента Калифорнийского университета в Лос-Анджелесе Адита Дешпанда (Adit Deshpande). Каждые две недели Адит публикует обзор и толкование исследований в определенной области глубинного обучения. В этот раз он сосредоточил свое внимание на применении глубокого обучения для обработки текстов на естественном языке.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии2

О том, как в Instagram отключили сборщик мусора Python и начали жить

Время на прочтение8 мин
Количество просмотров45K
Отключив сборщик мусора Python (GC), который освобождает память, отслеживая и удаляя неиспользуемые данные, Instagram стал работать на 10% быстрее. Да-да, вы не ослышались! Отключив сборщик мусора, можно сократить объем потребляемой памяти и повысить эффективность работы кэша процессора. Хотите узнать, почему так происходит? Тогда пристегните ремни!

Читать дальше →
Всего голосов 70: ↑68 и ↓2+66
Комментарии29

Алгоритм Джонкера-Волгенанта + t-SNE = супер-сила

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



После:



Заинтригованы? Но обо всем по порядку.

t-SNE


t-SNE — это очень популярный алгоритм, который позволяет снижать размерность ваших данных, чтобы их было проще визуализировать. Этот алгоритм может свернуть сотни измерений к всего двум, сохраняя при этом важные отношения между данными: чем ближе объекты располагаются в исходном пространстве, тем меньше расстояние между этими объектами в пространстве сокращенной размерности. t-SNE неплохо работает на маленьких и средних реальных наборах данных и не требует большого количества настроек гиперпараметров. Другими словами, если взять 100 000 точек и пропустить их через эту волшебный черный ящик, на выходе мы получим красивый график рассеяния.
Читать дальше →
Всего голосов 65: ↑64 и ↓1+63
Комментарии2

Библиотека Google Benchmark

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


Не так давно я писал о C++ библиотеках для микробенчмаркинга. Я рассказал о трех библиотеках: Nonius, Hayai и Celero. Но в действительности я хотел поговорить о четвертой. Мой Windows тогда не поддерживал Google Benchmark library, так что я не мог ее протестировать. К счастью, из комментариев к прошлому посту я узнал, что теперь библиотека доступна в Visual Studio!

Давайте посмотрим, как можно ее использовать.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии0

Поиск по регулярным выражениям с помощью суффиксного массива

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

Еще в январе 2012 Расс Кокс опубликовал замечательный блог-пост, объясняющий работу Google Code Search с помощью триграммного индекса.

К этому времени уже вышли первые версии моей собственной системы поиска по исходному коду под названием livegrep, с другим метод индексации; я писал эту систему независимо от Google, с помощью нескольких друзей. В этой статье я хотел бы представить немного запоздалое объяснение механизма ее работы.
Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии1

Что такое Resizable Concurrent Map

Время на прочтение6 мин
Количество просмотров11K
В одном из прежних постов я рассказывал, как реализовать «простейшую в мире lock-free хеш-таблицу» на C++. Она была настолько проста, что было невозможно удалять из нее записи или менять ее размерность. С тех пор прошло несколько лет, и не так давно я написал несколько многопоточных ассоциативных массивов без таких ограничений. Их можно найти в моем проекте Junction на GitHub.

Junction содержит несколько многопоточных реализаций интерфейса map – даже «самая простая в мире» среди них, под названием ConcurrentMap_Crude. Для краткости будем называть ее Crude map. В этом посте я объясню разницу между Crude map и Linear map из библиотеки Junction. Linear — самый простой map в Junction, поддерживающий и изменение размера, и удаление.

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


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

Самая простая в мире lock-free хеш-таблица

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

Безблокировочная хеш-таблица — это медаль о двух сторонах. В некоторых случаях они позволяют достигать такой производительности, которой не получить другими способами. С другой стороны, они довольно сложны.
Читать дальше →
Всего голосов 32: ↑30 и ↓2+28
Комментарии4

Введение в lock-free программирование

Время на прочтение8 мин
Количество просмотров55K
image

В этом посте мы хотели бы еще раз поднять тему программирования без блокировок, сперва дав ему определение, а затем выделить из всего многообразия информации несколько ключевых положений. Мы покажем, как эти положения соотносятся между собой, с помощью блок-схем, а потом мы немного коснемся деталей. Минимальное требование к разработчику, постигающему lock-free, — умение писать правильный многопоточный код, используя мьютексы или другие высокоуровневые объекты синхронизации, например, семафоры или события.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии17

Как отлаживать модели машинного обучения

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

Я размышлял, в основном с точки зрения преподавателя, о том, как научить отлаживать модели машинного обучения. Лично мне кажется полезным рассмотреть модель с точки зрения ошибок разного рода: байесовская ошибка (насколько ошибочен лучший из возможных классификаторов), ошибка аппроксимации (что мы потеряем из-за ограничения класса гипотезы), ошибка оценки (связанная с ограниченной длиной выборки), ошибка оптимизации (что случится, если не найти глобальный оптимум для задачи оптимизации). Я понял, что полезно попытаться отнести ошибку к определенной области, а потом устранять недостатки в этой конкретной области.
Читать дальше →
Всего голосов 18: ↑16 и ↓2+14
Комментарии1

Разбор статистической языковой модели от Google — часть 1: векторное представление символов

Время на прочтение8 мин
Количество просмотров15K
В этом году исследователи из Google Brain опубликовали статью под названием Exploring the Limits of Language Modeling (Исследование границ языкового моделирования), в которой была описана языковая модель, позволившая значительно снизить перплексию (с примерно 50 до 30) на словаре One Billion Word Benchmark.

В этом посте мы расскажем про самый низкий уровень этой модели — представление символов.


Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии2

Статьи, лежащие в основе подхода Facebook к компьютерному зрению

Время на прочтение8 мин
Количество просмотров14K
Знаете такую компанию — Facebook? Да-да, ту самую, у сайта которой 1,6 миллиардов пользователей. И если взять все посты-поздравления с днем рождения, ваши позорные детские фотографии (у меня они такие), того дальнего родственника, лайкающего каждый ваш статус, — и вот вам множество данных для анализа.

С точки зрения анализа изображений Facebook весьма далеко продвинулся со сверточными нейронными сетями (Convolutional Neural Network, CNN). В августе подразделение Facebook по исследованиям в области искусственного интеллекта (Facebook AI Research, сокращенно FAIR) опубликовала блог-пост об алгоритмах компьютерного зрения, которые лежат в основе некоторых их алгоритмов сегментации изображений. В этом посте мы кратко изложим и разъясним три статьи, на которые ссылается этот блог.


Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии0

Особенности Jupyter Notebook, о которых вы (может быть) не слышали

Время на прочтение10 мин
Количество просмотров359K
Jupyter Notebook – это крайне удобный инструмент для создания красивых аналитических отчетов, так как он позволяет хранить вместе код, изображения, комментарии, формулы и графики:



Ниже мы расскажем о некоторых фишках, которые делают Jupyter очень крутым. О них можно прочитать и в других местах, но если специально не задаваться этим вопросом, то никогда и не прочитаешь.
Читать дальше →
Всего голосов 49: ↑45 и ↓4+41
Комментарии14

Глубокое обучение для новичков: тонкая настройка нейронной сети

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

Введение


Представляем третью (и последнюю) статью в серии, задуманной, чтобы помочь быстро разобраться в технологии глубокого обучения; мы будем двигаться от базовых принципов к нетривиальным особенностям с целью получить достойную производительность на двух наборах данных: MNIST (классификация рукописных цифр) и CIFAR-10 (классификация небольших изображений по десяти классам: самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль и грузовик).
Читать дальше →
Всего голосов 22: ↑19 и ↓3+16
Комментарии1

Информация

Сайт
wunderfund.io
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
xopxe