Pull to refresh
-4
0
Send message

Нейросети без градиентов: спектральное моделирование и построение решений

Level of difficultyHard
Reading time19 min
Views6K

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

Читать далее

Что такое графовые нейронные сети

Reading time10 min
Views30K

Графовые сети — это способ применения классических моделей нейронных сетей к графовым данным. Графы, не обладая регулярной структурой как изображения (каждый пиксель имеет 8 соседей) или тексты (последовательность слов), долгое время оставались вне поля зрения классических нейронных моделей, которые получили широкое распространение в области машинного обучения и искусственного интеллекта. Большинство моделей векторизации графов (построения векторного представления вершин в графе) были достаточно медленными и использовали алгоритмы на основе матричной факторизации или спектральной декомпозиции графа. В 2015-16 годах появились более эффективные модели (DeepWalk, Line, Node2vec, Hope) на основе случайных блужданий. Однако и они имели ограничения, потому что никак не затрагивали при построении векторной модели графа дополнительных признаков, которые могут храниться в вершинах или на ребрах. Появление графовых нейронных сетей стало логичным продолжением исследований в области графовых эмбеддингов и позволило унифицировать под единым фреймворком предыдущие подходы.
Читать дальше →

Визуализация графов. Метод связывания ребер

Reading time7 min
Views58K
Иногда полезно представить граф в графической форме, так чтобы была видна структура. Можно привести десятки примеров, где это может пригодиться: визуализация иерархии классов и пакетов исходного кода какой-нибудь программы, визуализация социального графа (тот же Twitter или Facebook) или графа цитирования (какие публикации на кого ссылаются) и т.д. Но вот незадача: количество ребер в графе зачастую настолько велико, что нарисованный граф просто невозможно разобрать. Взгляните на эту картинку:



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

Настоящее предназначение OpenAI SORA: как и зачем симулировать «Матрицу» для ChatGPT

Level of difficultyMedium
Reading time41 min
Views108K

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

Войти в симуляцию →

Rust: объясняем Владение и Субструктурные типы на пальцах

Reading time14 min
Views5.5K

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

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

Читать далее

Три необсуждаемых вопроса о микросервисах и параллельной распределённой обработке данных — чтобы жить стало легче

Level of difficultyMedium
Reading time12 min
Views2.5K

Воркшоп для тех, кто впервые сталкивается с распределёнными системами.

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

Читать далее

Моделирование управления AC двигателя — Field oriented control of PMSM с помощью opensource решений

Level of difficultyHard
Reading time50 min
Views4.9K

В этой статье я хочу поделиться результатом своих исследований в области моделирования систем управления двигателями переменного тока. В качестве объекта управления был выбран синхронный двигатель с постоянными магнитами PMSM (Permanent Magnet Synchronous Machine) как наиболее распространенная машина в современных транспортных средствах. Основное внимание будет уделено построению математической модели системы, объекта управления, и алгоритмов для симуляции. Для реализации модели я выбрал open source решения: Python control, Scilab. Мне было интересно, возможно ли использование свободных средств моделирования для построения более-менее сложных и реальных систем. Далее я поделюсь своими впечатлениями. В первой части статьи приводится теоретический материал, где описываются основные уравнения двигателя и элементы теории управления. Для теоретической части необходимы базовые понимания электротехники, ниже приложу ссылки, где можно обновить знания. Я постарался проработать разные источники литературы, чтобы взять необходимый минимум, с которым самому пришлось столкнуться для понимания сути процессов управления двигателем. Читатель вправе пропустить матчасть и перейти сразу к описанию реализации, и при необходимости вернуться к некоторым теоретическим аспектам в этом материале, или других источниках. Реализация алгоритмов управления построена по классическому принципу с помощью диаграммы потоков.

Читать далее

Транспортный уровень: TCP И UDP

Reading time7 min
Views12K

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

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

Читать далее

Типы и архитектуры параллельных вычислений: какие они бывают?

Level of difficultyMedium
Reading time19 min
Views5.2K

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

Читать далее

Кто реально угрожает C++ (нет, Rust, не ты)

Reading time14 min
Views81K

Привет! Меня зовут Александр Каленюк, и я крепко подсел на C++. Пишу на C++ 18 лет кряду, и все эти годы отчаянно пытаюсь избавиться от этой разрушительной зависимости.

Всё началось в конце 2005 года, когда мне довелось писать движок для симуляции 3D-пространства. В этом движке было буквально всё, чем язык C++ мог похвастаться в 2005 году. Трёхзвёздочные указатели, восьмиуровневые зависимости, C-подобные макросы повсюду. Кое-где – вкрапления ассемблера. Итераторы в стиле Степанова и мета-код в стиле Александреску. В общем, всё. Кроме ответа на самый важный вопрос: зачем?

Читать далее

Как привести электроны и фотоны к общему знаменателю

Reading time8 min
Views7.5K

Меня довольно смущает плохо замаскированная эмерждентность окружающего мира, причём не только пространства, но и времени. Ранее я не мог не высказаться о знаменитом эксперименте с двумя щелями, а также о некоторых парадоксальных свойствах субатомного мира. Например, о том, что протон, по-видимому, самопроизвольно не распадается вообще, а нейтрон не распадается только в составе атомного ядра — в свободном же состоянии период полураспада нейтрона составляет около 10 минут. Как я ещё раньше упоминал в статье «Вы снова здесь, изменчивые тени», можно каким-то рациональным образом обосновать подобные факты, если допустить, что элементарные частицы – это тени четырёхмерных объектов, однако, это скорее фантазия, чем гипотеза. Сегодня же я хочу рассказать ещё об одних удивительных фермионах, зафиксированных в ушедшем 2024 году и названных «электронами Дирака». Электроны Дирака приобретают массу, лишь будучи в движении, и догадки о сути их природы, возможно, потребуют уточнить наши представления об электронах и фотонах.

Читать далее

Мультиагенты ИИ, мультиагенты неИИ и актеры. Адаптивность и автономность

Level of difficultyMedium
Reading time7 min
Views1.7K

Данная статья является попыткой моего личного обобщения и выделения различий над зоопарком современных технологий, в которых в том или ином виде используются термины: мульти-агенты ИИ (ollama, meta, camel), мульти-агенты неИИ (MAS, эмержность, интеллект роя) и актеры (Akka, асинхронность, сообщения). А также интерес применимости к домену планирования - логистики, производства. Составления расписаний. С упором на футуристичность =)

Читать далее

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

Level of difficultyMedium
Reading time3 min
Views906

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

Читать далее

Кэш. Теория кэширования. Устройство и разновидности кэша

Level of difficultyEasy
Reading time7 min
Views17K

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

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

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

Стать гуру кэша

Транскриптомный анализ: как посчитать гены?

Level of difficultyEasy
Reading time20 min
Views3.5K

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

Читать далее

Rust 1.84: новый релиз отличного языка программирования. Еще лучше, еще эффективнее, как всегда

Reading time6 min
Views13K

Источник изображения.

Вышел новый релиз языка программирования Rust версии 1.84. Этот язык общего назначения изначально разрабатывался проектом Mozilla, но теперь его поддерживает независимая некоммерческая организация Rust Foundation. Rust ориентирован на безопасную работу с памятью и обеспечивает высокий уровень параллелизма выполнения задач, не прибегая к сборщику мусора или полноценному runtime (runtime ограничен базовой инициализацией и поддержкой стандартной библиотеки). Что нового? Давайте разбираться.
Читать дальше →

Создание алгоритма для мультиагентной системы

Level of difficultyEasy
Reading time5 min
Views3K

Интеллектуальный агент — это элемент в системе, выполняющий задачи, стоящие перед ним. Агент обладает следующими свойствами: активность, автономность, целенаправленность.

Существует 2 вида структуры агента: гетерогенное и гомогенное. Гомогенные агенты сконструированы идентично, то есть особо не отличаются друг от друга. А гетерогенный вид означает, что агенты отличаются друг от друга.

Также существует 2 вида среды: детермированная и недетермированная. В детермированной среде нет никакой случайности, то есть всегда выполнение действий будет приводить к одному и тому же результату. А недетермированная среда характеризуется непредсказумостью.

Существует 2 основных подхода управления роботами: централизованная и децентрализированная. Централизованная система означает, что есть один какой‑то агент, который руководит всем. А децентрализованная противоположна централизованной, то есть каждый агент действует независимо.

Мультиагентная система (МАС) — это система, состоящая из нескольких интеллектуальных агентов. Например, муравейник, он состоит из множества агентов, муравьев.

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

Цель работы — Создание математической модели и алгоритма для роботизированной системы. Задачи:

Читать далее

Суперкомпьютер Эльбрус-3

Level of difficultyMedium
Reading time16 min
Views15K

История Эльбрус-3

В период с 1984 по 1985 год, когда завершалась разработка первых процессоров «Эльбрус-2», команда Эльбруса под руководством Бориса Арташесовича Бабаяна приступила к предварительным работам над машинами следующего поколения. В 1985 году ИТМиВТ получил государственный заказ на проектирование и создание машины с теоретической максимальной производительностью в 10 ГФлопс. Основные требования к «Эльбрусу-3» оставались такими же, как и к «Эльбрусу-1» и «Эльбрусу-2». Особое внимание уделялось высокой производительности как в научных, так и в универсальных вычислениях, надёжности и совместимости программного обеспечения с ранними моделями «Эльбруса».

В конструкции «Эльбруса-1» и «Эльбруса-2» присутствовал ряд недостатков, которые делали их неподходящими в качестве основной машины с требуемой производительностью, необходимой в государственном применении. Помимо архитектурных ограничений в производительности, требовалось получать больше информации о выполнении программного кода и зависимостях команд и данных в момент исполнения, которая не была доступна динамическому планировщику в момент исполнения.

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

Читать далее

Кроме шуток — шмели тоже обучаются и не знают всё по «инстинктам»

Level of difficultyEasy
Reading time3 min
Views3.7K

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

Тут работает прямой дарвиновский отбор - первые вылетевшие шмели начинают искать цветы. Они порой летают зазря, садясь на цветы-пустышки и погибают. Те кто удачно выбирал цветы - возвращаются назад к улью и потом за ними увязываются новые, ещё не обученные шмели. Цепь из прямого положительного отбора, только уже касаемого опыта и выживания. Плохо выбирал, плохо думал - умер, а если хорошо - выжил и ещё других обучишь. А как без обучения шмель вообще понимает - надо летать на цветы? Да очень просто - за миллионы лет они стали хоботковыми насекомыми, они при всём желании ничего кроме нектара не поедят. Ещё по ДНК шмели явно имеют некоторые цветовые предпочтения, садятся чаще на синие цветы.

Ларчик в этом случае открывается просто. Во первых в климатической зоны где жили предки именно этих шмелей, видимо больше нектара несли синие цветы. Это запускало дарвиновский отбор и лучше выживали те шмели, кто лучше видел синий цвет. Судя по гексагональной схеме справа (она показывает чувствительность шмелей и пчёл к цветам ) - синий цвет лучше улавливается чем жёлтый, он ближе к центру и шмели улавливают его лучше в трёх спектрах из трёх. Это вот - чистая генетика и её выживание. Это и есть "память предков" Вот только если шмель будет просто копировать её, он не выживет. Её достаточно только для первичного влезания в жизнь, дальше надо обучаться.

Читать далее

Rust без прикрас: где мы продолжаем ошибаться

Level of difficultyEasy
Reading time8 min
Views8.4K

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

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

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

Начнем с первой проблемы при работе с .iter() и .iter_mut.

Читать далее
1
23 ...

Information

Rating
5,673-rd
Registered
Activity