Search
Write a publication
Pull to refresh
145
11
Александр Рябиков @rsashka

Системный архитектор

Send message

PyTorch — ваш новый фреймворк глубокого обучения

Reading time22 min
Views216K

Gotta Torch?


PyTorch — современная библиотека глубокого обучения, развивающаяся под крылом Facebook. Она не похожа на другие популярные библиотеки, такие как Caffe, Theano и TensorFlow. Она позволяет исследователям воплощать в жизнь свои самые смелые фантазии, а инженерам с лёгкостью эти фантазии имплементировать.


Данная статья представляет собой лаконичное введение в PyTorch и предназначена для быстрого ознакомления с библиотекой и формирования понимания её основных особенностей и её местоположения среди остальных библиотек глубокого обучения.

Fire walk with me

Первое правило машинного обучения: начните без машинного обучения

Reading time6 min
Views9K

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

Что? Начинать без машинного обучения?


Об этом говорю не только я.

Догадайтесь, какое правило является первым в 43 правилах машинного обучения Google?

Правило №1: не бойтесь запускать продукт без машинного обучения.

Машинное обучение — это здорово, но для него требуются данные. Теоретически, можно взять данные из другой задачи и подстроить модель под новый продукт, но она, скорее всего, не справится с базовыми эвристиками. Если вы предполагаете, что машинное обучение придаст вам рост на 100%, то эвристика даст вам 50%.
Читать дальше →

Mixture Density Networks

Reading time12 min
Views14K

Всем привет!

Давайте поговорим о, как вы уже наверное смогли догадаться, нейронных сетях и машинном обучении. Из названия понятно, что будет рассказано о Mixture Density Networks, далее просто MDN, переводить название не хочу и оставлю как есть. Да, да, да… будет немного скучной математики и теории вероятности, но без неё, к сожалению, или к счастью, тут уж сами решайте, трудно представить мир машинного обучения. Но спешу вас успокоить, ее будет относительно мало и она будет не сильно сложная. Да и вообще ее можно будет пропустить, а просто посмотреть на небольшое количество кода на Python и PyTorch, все верно, сеть мы будем писать с помощью PyTorch, а так же на различные графики с результатами. Но самое главное то, что будет возможность немного разобраться и понять что же такое MD сети.

Что ж начнем!
Читать дальше →

Задача о многоруком бандите — сравниваем эпсилон-жадную стратегию и Томпсоновское сэмплирование

Reading time12 min
Views22K
Привет, Хабр! Представляю вашему вниманию перевд статьи Solving multiarmed bandits: A comparison of epsilon-greedy and Thompson sampling.

Задача о многоруком бандите


Задача о многоруком бандите – одна из самых основных задач в науке о решениях. А именно, это задача об оптимальном распределении ресурсов в уcловиях неопределенности. Само название «многорукий бандит» пошло от старых игровых автоматов, которыми управляли при помощи ручек. Эти автоматы получили прозвище «бандиты», потому что после общения с ними люди обычно чувствовали себя ограбленными. А теперь представьте, что таких машин несколько и шанс выиграть у разных машин разный. Раз уж мы взялись играть с этими машинами, мы хотим определить, у какой этот шанс выше и использовать (exploit) эту машину чаще, чем другие.


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


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

Позолоченный век интернета: как монополии уничтожают свободный рынок, который их создал

Reading time20 min
Views29K
За последние 10 лет, во втором десятилетии XXI века, рынок стартапов и венчурного инвестирования для многих незаметно, но кардинально изменился. Парадигмой пионеров интернета было создать проект, который изменит интернет к лучшему — «сделать новый Google» (новый Facebook, новый YouTube, новый айфон и так далее). Новой парадигмой стартапера, задумывающегося о своём вкладе в интернет, вступившей в силу в последнее десятилетие, стало создать проект, который будет куплен «Гуглом», «Фейсбуком», Apple (или «Яндексом» или Mail.ru в случае Рунета). Об изменении мира или хотя бы интернета речи уже не идёт — мир уже изменился, а в процессе был открыт, изучен и поделён. Все точки входа и торговые пути под контролем выросших за первые два десятилетия XXI века империй, и новоприбывающим колонистам ничего не остаётся, кроме как выбирать, флагу какой из них присягнуть. Для многих людей, включая автора этих строк, заставших нынешние интернет-империи «в коротких штанишках», когда мы дышали с ними одним воздухом интернет-вольницы, а «Гугл» ещё верил в свой девиз Don't be evil, произошедшее преображение оказалось неприятным, болезненным и неожиданным поворотом. И — отрезвляющим. Но, на самом деле, за последние 10 лет не произошло совершенно ничего нового.

image
Мораль золотого века интернета Don't be evil уступила место морали позолоченного: unless it's profitable

Это не просто этап развития интернет-бизнеса и временная стадия, а отражение фундаментальных экономических процессов развития свободного (нерегулируемого) рынка, которые в этот раз на примере интернета и IT-индустрии в целом продемонстрировали ту же динамику, что уже разыгрывалась в экономической истории мира.
Читать дальше →

Потребительский экстремизм в GameDev

Reading time7 min
Views15K

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

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

Интересно, чем все закончилось?/

Что в этом случае делает администрация? Сначала банит клиента на форуме, если не помогает – блокирует персонажа до устранения нарушений. Примерно так развивался сюжет и в моем случае с одним отличием: клиент выйдя из бана повторно спровоцировал конфликтную ситуацию, получил отказ на претензию, зафиксировал ответы в нотариальном порядке и пошел в суд по Закону «О защите прав потребителей.» (далее - ЗЗПП для краткости).

В иске игрок потребовал все, на что хватило фантазии:

Рекомендации по защите под катом

Шпаргалка по функциональному программированию

Reading time23 min
Views44K

Привет, меня зовут Григорий Бизюкин, я преподаватель Школы разработки интерфейсов и фронтенд-разработчик в Яндексе. Давайте поговорим о функциональном программировании в мире JavaScript. Мы все про ФП что-то слышали, нам всем оно интересно, но у меня, когда я искал полезные материалы для подготовки к лекциям, сложилось такое впечатление: есть куча статей, каждая из которых либо говорит об ФП общими словами, либо раскрывает отдельный маленький кусочек темы, чего, конечно, недостаточно.



Добавим функционального света


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

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

Почти детективная история одной «кровавой» ошибки

Reading time2 min
Views8.7K


Дополнение статьи «Размещение кучи FreeRTOS в разделе CCMRAM для STM32», и в продолжение серии статей про различные полезности для STM32 (1, 2 и 3), хочу обратить внимание на одну особенность работы с CCM RAM памятью, которая может быть причиной совершенно не очевидных ошибок в работе устройств, одна из которых выпила у автора достаточно много крови, так что с чистой совестью её действительно можно назвать «кровавой».

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

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

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

Уведомления при изменении цены акций в Тинькофф Инвестициях

Reading time2 min
Views15K

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

Для инвестиций я выбрал Тинькофф, как один из наиболее популярных и функциональных сервисов. Очень быстро появилась потребность отслеживать цену акций, чтобы держать руку на пульсе. В Тинькофф Инвестициях есть инструмент для этого: уведомления по достижении некоего уровня цены. Но это уведомление срабатывает один раз и его приходится ставить заново, что неудобно. Подходящий для меня функционал я обнаружил в приложении Investing.com: уведомление придёт, если цена акции изменится на заданную в процентах величину. После уведомления счётчик сбрасывается и уведомление придёт снова, если это повторится. Я установил приложение и добавил для отслеживания свои акции - то что нужно!

Но со временем, когда я продал несколько акций и купил другие, стало понятно, что вносить те же изменения в приложении Investing.com мне лень + раздражало лишнее приложение на телефоне. Благо, у Tinkoff Investing есть API. Я решил реализовать тот же функционал с уведомлениями, но непосредственно для моих акций, а уведомления получать в Telegram. Так родился проект https://github.com/DiTsi/tinkoff_investing_notifier.

Читать далее

Без new: Указатели будут удалены из C++

Reading time3 min
Views82K

Две недели назад в Джэксонвилле встречался комитет стандарта ISO C++. Сегодня я хочу представить короткую сводку и написать о революционном решении, принятом на собрании в Джэксонвилле. Для получения дополнительной информации я рекомендую к прочтению статью C++ больше не будет иметь указатели. Комитет по стандартизации языка принял решение о том, что указатели будут объявлены устаревшими в C++20 и с большой долей вероятности будут удалены из C++23.


Откровенно говоря, то, что кажется революционном, — всего лишь последний шаг длинной эволюции.


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

Добавить две кнопки — почему так дорого?

Reading time7 min
Views44K

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

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

— Два месяца? На простейший функционал? Это неприемлемо! — вы пытаетесь давить, пугать, просить, торговаться; разработчики явно нервничают, но сроки не двигают. В итоге вы приходите к какому-то компромиссу, который не нравится никому, злые и недовольные. 

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

Читать далее

Динамическая JIT компиляция С/С++ в LLVM с помощью Clang

Reading time10 min
Views10K


При создании компилятора для собственного языка программирования я сделал его как транспайлер в исходный код на С++, вот только реализация сильно подкачала. Сначала приходится генерировать динамическую библиотеку с помощью вызова gcc, который и сам по себе не очень быстрый, так еще его может и не быть на целевой машине, особенно на другой платформе (например Windows). Конечно, для первых экспериментов и такой реализации было достаточно, но сейчас, когда я начал готовить код компилятора к публикации, стало понятно, что текущий вариант с фоновым запуском gcc никуда не годится.

Из-за этого, я решил не откладывать перевод компилятора на использование LLVM, который планировался когда нибудь в будущем, а решил сделать это уже сейчас. И для этого нужно было научиться запускать компиляцию C++ кода с помощью библиотек Clang, но тут вылезло сразу несколько проблем.

Оказывается, интерфейс Clang меняется от версии к версии и все найденные мной примеры были старыми и не запускались в актуальной версии (Сlang 12), а стабильный C-style интерфейс предназначен для парсинга и анализа исходников и с помощью которого сгенерировать исполняемые файлы не получится*.

Дополнительная проблемой оказалось, что Clang не может анализировать файл из памяти, даже если для этого есть соответствующие классы. Из объяснений выходило, что в экземпляре компилятора проверяется, является ли ввод файлом**.

А теперь публикую результат своих изысканий в виде рабочего примера динамической компиляции С++ кода с последующей его загрузкой и выполнением скомпилированных функций. Исходники адаптированны под актуальную версию Clang 12. Пояснения к коду я перевел и дополнил перед публикацией, а ссылки на исходные материалы приведены в конце статьи.

  • *) Кажется в 14 версии планируется реализовать C интерфейс для генерации исполняемых файлов.
  • **) На самом деле, Clang может (или теперь может) компилировать файлы из оперативной памяти, поэтому в исходники я добавил и эту возможность.
Читать дальше →

Тензоры в TensorFlow

Reading time6 min
Views33K

image


Основным объектом которым манипулируют в Tensorflow, является тензор. О том, что такое тензор, какие бывают тензоры, какие у них есть свойства и как ими манипулировать читайте в переводном руководстве с сайта tensorflow.org.

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

Цветовое оформление консольного вывода

Reading time1 min
Views76K
Кратко о том, как сделать для своей консольной программы или скрипта цветной вывод текста, а также дополнить его другими элементами оформления. Собственно, назначить можно цвет текста, цвет фона под ним, сделать текст жирным, подчеркнутым, невидимым и даже мигающим.
Читать дальше →

Как айтишнику издать свою книгу. Часть 3. Издательства: как попасть на полки книжных магазинов

Reading time13 min
Views5.4K

Как работает книжный бизнес сейчас и насколько реально простому айтишнику выпустить книгу, не имея подписчиков и статуса медийной личности? 

Сегодня — и после долгого перерыва — поговорим, наконец, о шансах на интерес к вам со стороны издательств, опасных договорах и этапах создания книги с профессионалами книжного рынка. Прошу:

Процесс и про внимательность

И пришел лесник

Reading time8 min
Views17K

Знаете, что самое неприятное в научных спорах? Вот ты беседуешь, о какой-то космологической концепции, а оппонент берёт и приводит довод: «А вот в фантастическом романе…»

Знаете, что самое неприятное в научных спорах? Вот ты беседуешь, о какой-то космологической концепции, а оппонент берёт и приводит довод: «А вот в фантастическом романе…»

И ты такой: «А… ну… да…». И быстренько сворачиваешь дискуссию. Потому что художественная литература очень сильно отличается от реальности. Это я вам как литератор говорю. Персонажи и события в книгах происходят не по воле случая, как в реальной жизни, а следуют воле творца — который составляет из них историю или иллюстрирует мысль. Даже к точным и честным мемуарам нужно относиться с настороженностью, из-за гнездящейся в них «систематической ошибки выжившего».

Это необходимый дисклеймер я написал потому, что собираюсь критически переосмыслить концепцию «Темного Леса» Лю Цысиня. Не покритиковать, нет — сама по себе эта концепция прекрасна. Если принимать её как метафору взаимодействия власти и оппозиции. Тоталитаризм так работает — если ты начинаешь мыслить и обретаешь голос, то ты исчезаешь. В лучшем случае тебя просто удаляют из информационного пространства. В худшем… не будем о худшем. Эта статья не о «Темном лесе» как метафоре.

Я предлагаю рассмотреть «Темный лес» с точки зрения теории игр. Конечно, в определенном смысле, это тоже будет не научная, а литературная интерпретация. Просто потому, что точных научных данных пока нет, а «Similia similibus curentur» (подобное лечится подобным).

Читать далее

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

Reading time9 min
Views8.9K


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

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

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

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

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

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

Как я оседлала лошадку тревожной прокрастинации, и что из этого вышло

Reading time11 min
Views27K

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

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

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

Читать далее

7 очевидных приемов копирайтинга, которые используются не всеми (почему-то)

Reading time6 min
Views8.3K

Приемы в текстах, основанные на поведенческих реакциях человека. Некоторые известные (особенно в профессиональных кругах), некоторые новые.

Если вы хотите писать более результативно, читайте до конца!

Читать

5 самых старых нерешенных задач Математики о простых числах

Reading time6 min
Views39K

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

Наши размышления о закономерностях в простых числах привели к некоторым сложнейшим проблемам, нерешенным даже величайшими математическими гениями. Сегодня мы рассмотрим 5 старейших математических задач о простых числах, которые интуитивно понятны старшекласснику, но все еще не доказаны даже после упорных попыток в течение 500-2000 лет.

Читать далее

Information

Rating
1,107-th
Location
Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Software Architect
Lead
C++
OOP
Linux
Programming microcontrollers
Embedded system
C
Qt
Software development