Pull to refresh
0
0
Олег @pilipenok

User

Send message

Под капотом графовых сетей

Level of difficultyEasy
Reading time11 min
Views3.8K

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

Клац-клац
Total votes 4: ↑4 and ↓0+4
Comments1

Компилятор за выходные: избавляемся от переменных

Level of difficultyMedium
Reading time15 min
Views12K

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

Продолжаем разговор о минималистичном компиляторе, который вполне реально написать за выходные. Задачей стоит транслировать код из придуманного мной языка в x86 ассемблер. Мой компилятор состоит из 611 строк кода, при этом не имеет ни единой зависимости:

ssloy@khronos:~/tinycompiler$ cat *.py|wc -l

611

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

Итак, тема сегодняшнего разговора: генерация кода на питоне без использования переменных.

Читать далее
Total votes 43: ↑42 and ↓1+41
Comments35

Работа процессора (физический препроцессор) без счётчика команд

Level of difficultyMedium
Reading time7 min
Views2K

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

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

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

Читать далее
Total votes 10: ↑3 and ↓7-4
Comments18

Как языковая модель предсказывает следующий токен (часть 1)

Reading time27 min
Views6.8K

Я обучил небольшой (порядка 10 миллионов параметров) трансформер по превосходному туториалу Let’s build GPT: from scratch, in code, spelled out Андрея Карпати. После того, как он заработал, я захотел максимально глубоко понять, как он устроен внутри и как создаёт свои результаты.

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

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

Если вы знакомы с трансформерами и хотите сразу узнать вывод, то он таков: каждый блок трансформера (содержащий слой многоголового внимания и сеть с прямой связью) изучает веса, связывающие конкретный промт с классом строк, найденных в обучающем корпусе. Распределение токенов, соответствующее этим строкам в обучающем корпусе, и есть приблизительно то, что блок выводит как прогноз для следующего токена. Каждый блок может ассоциировать один и тот же промт со своим классом строк обучающего корпуса, что приводит к другому распределению следующих токенов, а значит, и к другим прогнозам. Окончательный результат работы трансформера — это линейное сочетание прогнозов каждого блока.

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

Нужно больше нейросетей: корпорация Google открыла общий доступ к старшей модели. Как это работает?

Reading time3 min
Views4.4K

Сейчас крупные IT-компании спешат разработать собственный продукт на базе ИИ-моделей, и многим это удается. Например, корпорация Google не так давно представила сразу несколько моделей, а сейчас открыла доступ к наиболее мощной из них. Кроме того, компания анонсировала и приложение, которое позволит работать с этой технологией. Что именно предлагает Google? Подробности - под катом.

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

Расширяем тестовый фреймворк с помощью Pytest-плагинов. Часть 1: теория

Level of difficultyEasy
Reading time8 min
Views4.7K

Всем привет! Меня зовут Александр Волков, я занимаюсь интеграционным и компонентным тестированием в YADRO. В числе продуктов компании есть системы хранения данных и, говоря о тестировании, я буду иметь в виду в первую очередь работу с СХД. Однако описанные подходы пригодятся всем, кто ищет инструменты для создания тестового фреймворка и расширения его возможностей под свои задачи. 

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

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

Компилятор за выходные: таблицы символов

Level of difficultyMedium
Reading time9 min
Views7.7K

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

На всякий случай я даю код и на wend, и на C, поскольку понимаю, что код на моём языке вряд ли интересен кому-то помимо того, кто реально возьмётся за компилятор. А вот мелкий код с интересными эффектами всегда найдёт свою публику. Кстати, если у вас есть идеи на тему чего-то интересного, что можно запрограммировать в полста строчек кода, делитесь в комментариях, я внимательно слушаю!

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

«Хватит программировать в YAML и JSON!»: неочевидные проблемы шаблонизирования

Reading time10 min
Views15K

Часто в IT-компаниях разработчики используют шаблонизаторы в YAML, JSON и Terraform, управляя параметрами конфигураций, ACL-списками и другими сущностями. Но у такого подхода много подводных камней: шаблоны не всегда корректно отрабатывают и превращают код в спагетти. Особенно если приспичило добавить десятки вложенных условий.

В этой статье рассказываем, откуда соблазн «программировать» в YAML и JSON и почему этого лучше не делать. А еще делимся полезными инструментами, которые помогут избавиться от зловредной привычки. Подробности под катом!
Читать дальше →
Total votes 43: ↑41 and ↓2+39
Comments15

Релиз Ruby 3.3.0: что появилось нового в языке программирования и что изменилось

Reading time4 min
Views3.9K

На днях появился новый релиз динамического объектно ориентированного языка программирования Ruby 3.3.0. Он вобрал в себя лучшие возможности многих других ЯП, включая Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Что касается кода проекта, то он распространяется под лицензиями BSD (2-clause BSDL) и Ruby, которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Подробности — под катом.

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

100 вопросов для подготовки к собесу Data Science

Level of difficultyMedium
Reading time98 min
Views58K

Доброго времени суток!

Представляю вашему вниманию чек-лист из 100 вопросов по Data Science. Вопросы покрывают 5 областей: SQL, Python, Machine Learning, статистику и собственно саму DS.

Кому это вообще может быть полезно?

Читать далее
Total votes 17: ↑15 and ↓2+13
Comments10

Статья 214 (b) — черная метка для временных релокантов в США

Reading time12 min
Views10K

Для многих российских ИТ-специалистов  возможность поработать или учиться в США если не заветная мечта, то, как минимум, серьезная цель. Несмотря на геополитическую напряженность, зарплаты, качество образования и другие приятные бонусы пребывания в Штатах продолжают привлекать российских разработчиков, ИТ-менеджеров, тестировщиков, аналитиков и студентов. Между тем, с распростертыми объятиями там не ждут не всех и не всегда.

В сети достаточно материалов про визы H-1B, L-1, О-1, F-1, B-1, специальных программах для “технических специалистов”, однако большинство из них дают поверхностную общую информацию и мало применимы на практике. В этом посте я предлагаю обзор самой “страшной” и широко используемой статьи Акта об иммиграции и национальности — 214(b).  Такое основание признаётся юристами наиболее гибким инструментом для отказов в неиммиграционных визах (рабочих, студенческих), а за её стандартной формулировкой может скрываться широкий спектр неочевидных и “коварных” причин.  К сожалению, я не юрист, а системный аналитик, поэтому в подготовке поста мне помог Мэтью Морлей - человек и пароход, американский адвокат, работающий в Москве, доктор юридических наук (JD) в Массачусетской Школе Права, специалист, на которого ссылается Reuters, член Американской коллегии адвокатов (АВА) и Американской ассоциации иммиграционных адвокатов (AILA).

Читать далее
Total votes 15: ↑11 and ↓4+7
Comments20

'Attention is all you need' простым языком

Level of difficultyEasy
Reading time6 min
Views7.8K

Некоторое время назад я повесил здесь статью с кратким обзором техник векторизации, и мне показалось логичным продолжить эту тему попыткой разобраться с тем, в какую сторону NLP шагнула дальше, как научилась оцифровывать смысл: выбор пал на механизм attention. Мы с коллегой-переводчицей перевели и переработали Youtube-ролик 'Attention is all you need explained' в статью, которую и представляем вашему вниманию.

Заранее прошу прощения за светофор в картинках: по-другому черный фон из скриншотов убрать не получалось :).

В 2017 году, в статье Attention is all you need, исследователи из Google представили архитектуру Transformer. Новизна Transformer заключалась в использовании self-attention (досл. с англ. — самовнимание, внутреннее внимание) — механизма, благодаря которому модель может сосредоточиться не на всех сразу, а на наиболее важных элементах входной последовательности...

Читать продолжение
Total votes 6: ↑5 and ↓1+4
Comments8

LSTM и GRU

Level of difficultyEasy
Reading time9 min
Views6.1K


Рекуррентные нейронные сети уникальны тем, что способны обрабатывать последовательности данных, будь то тексты, временные ряды или даже музыка. В отличие от их бро — сверточных нейронных сетей, которые идеально подходят для обработки изображений, RNN обладают способностью «помнить» предыдущую информацию и использовать ее для обработки текущих данных. Это делает их идеальными для задач, где контекст важен, например, при генерации текста или прогнозировании временных рядов.

Но не все так радужно, как может показаться на первый взгляд. Основной головной болью при работе с RNN являются проблемы затухания и взрыва градиента. Эти явления возникают в процессе обучения сети, когда веса модели корректируются с помощью обратного распространения ошибки. Затухание градиента происходит, когда веса корректируются настолько слабо, что обучение становится неэффективным. С другой стороны, взрыв градиента происходит, когда эти корректировки слишком велики, что также ведет к нестабильности обучения. Обе эти проблемы могут серьезно затруднить обучение RNN.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments3

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

Reading time9 min
Views29K

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

(1) Школа. (2) Матанализ. (3) Аналитическая геометрия. (4) Линейная алгебра.

Все плейлисты, материалы, курсы в открытом доступе и бесплатны.

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

Вся мощь паттернов в Wolfram Language

Level of difficultyMedium
Reading time32 min
Views3.9K

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

В этой статье я постараюсь сделать как можно более подробный обзор на механизм сопоставления с образцом в Wolfram Language (WL) и покажу реальные примеры, где я сам и мои товарищи его активно используют. А также я поделюсь всеми неочевидными тонкостями работы с шаблонами, с которыми лично я столкнулся в процессе написания кода на WL. По возможности я буду приводить примеры на других языках программирования - на Python и C#. Это позволит всем, кто не знаком с WL лучше понять код и сравнить синтаксис.

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

Раскрывая секреты LLM: руководство по основным понятиям больших языковых моделей без хайпа

Level of difficultyMedium
Reading time27 min
Views34K

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

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

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

Transformer в картинках

Reading time14 min
Views114K

В прошлой статье мы рассматривали механизм внимания (attention) – чрезвычайно распространенный метод в современных моделях глубокого обучения, позволяющий улучшить показатели эффективности приложений нейронного машинного перевода. В данной статье мы рассмотрим Трансформер (Transformer) – модель, которая использует механизм внимания для повышения скорости обучения. Более того, для ряда задач Трансформеры превосходят модель нейронного машинного перевода от Google. Однако самое большое преимущество Трансформеров заключается в их высокой эффективности в условиях параллелизации (parallelization). Даже Google Cloud рекомендует использовать Трансформер в качестве модели при работе на Cloud TPU. Попробуем разобраться, из чего состоит модель и какие функции выполняет.


Впервые модель Трансформера была предложена в статье Attention is All You Need. Реализация на TensorFlow доступна как часть пакета Tensor2Tensor, кроме того, группа NLP-исследователей из Гарварда создали гид-аннотацию статьи с реализацией на PyTorch. В данном же руководстве мы попробуем максимально просто и последовательно изложить основные идеи и понятия, что, надеемся, поможет людям, не обладающим глубоким знанием предметной области, понять данную модель.

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

Свежий Google Gemini, GPT-4 и математика

Level of difficultyMedium
Reading time10 min
Views24K

Итак, Google всё‑таки решилась выпустить в свет языковую модель Gemini не дожидаясь Нового Года, и, конечно, обещая революцию. Она де превосходит все публично доступные модели, и местами превосходит людей. Отдельной её особенностью является мультимодальность (в частности способность работать с изображениями и видео) в почти реалтайм режиме, чему есть довольно впечатляющие демонстрации.

Давайте же сравним её с флагманом OpenAI/Microsoft — GPT-4, на трудном поле математики.

Читать далее
Total votes 28: ↑27 and ↓1+26
Comments25

Редактор коннектома

Level of difficultyEasy
Reading time13 min
Views2.2K

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

Более шести лет назад я презентовал статьёй на habr свой проект OpenTadpole. Это был редактор коннектома некой спайковой нейронной сети которая управляла телом головастика лягушки в симуляции среды. Этот проект показывает возможность формировать с помощью достаточно простых нейронов сложное рефлекторное поведение. Тут речь идет конечно только о безусловных рефлексах, без какого либо обучения. Интересным моментом для меня стало, то что многие интересовались есть ли web версия (это же проект сделанный на unity) или есть ли версия для Mac, linux. По существу, даже людям которым тема проекта была интересна и были обладателями windows не спешили что‑то скачивать, распаковывать, пробовать. И это понятно, куда удобнее просто пройти по ссылке и получить нужный опыт работы с редактором. К сожалению, web версию я не мог представить, так как использовал для симуляции жидкости сторонние плагины которые конфликтовали с компилятором под WebGL unity, ну очень уж капризный этот компилятор. С того момента зародилось идея сделать подобный редактор и делать его еще более доступным.

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

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

Level of difficultyMedium
Reading time7 min
Views7.4K
Когда я только начинал изучать компиляторы, я не понимал одного важного момента: Разработка языка программирования и написание компилятора — это два почти совершенно разных навыка. Конечно, между ними есть некоторое пересечение, но меньшее, чем может показаться на первый взгляд!

Я думаю, что это важно знать, потому что обе эти задачи очень сложны! Легче овладеть этими навыками, если решать их по очереди. Ваше первое решение сложной задачи, скорее всего, будет… ну, не таким хорошим, как десятое! Однако довольно часто разработчики создают игрушечный язык, когда пишут свой первый компилятор, а это значит, что они совершают ошибки и учатся сразу на двух сложных проблемах. Хуже того, эти две проблемы взаимосвязаны: Ошибка в одной из них усложняет жизнь в другой. Кроме того, как мы увидим, хотя компиляторы и сложны на первых порах, они, по сути, являются решенной проблемой, в то время как разработка языка программирования — это, скажем так, область продолжающихся исследований.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments5

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity

Specialization

ML Engineer
Lead
From 120,000 $