Pull to refresh
406
-16
Роман @Ariman

ML-исследователь

Send message

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

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

В остальном это борьба с соломенными чучелами и какими-то абстрактными Вовами, верящими абстрактным Васям.

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

Опять же - достаточно вон на коммент ниже глянуть, где на полном серьезе кто-то заявляет, что микроконтроллеры использовать - "не по совести". Не "не по ТЗ", не "неоптимально с учетом наших требований", а "не по совести". Вот это как раз - натуральная религия уже.

Не очень понятно, что вам мешает в этом случае в САПР подать правильные входные данные и продемонстрировать совпадение с расчетами, это как минимум сместит фокус с доверия или недоверия САПРу на конкретные параметры.

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

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

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

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

А у вас есть какие-то аргументы или предположения, почему "на уровне школьной задачки о бассейне с трубами" не сошлось, а в САПР - сошлось?

Потому что, знаете, говорить "фу, да в этом вашем сапр может что угодно быть, пофиг что оно там показывает" так-то не менее глупо, чем говорить "фу, да пофиг на твои расчеты, сапр показал и ладно". Если это не очередное соломенное чучело, призванное усилить эмоциональный акцент, то это серьезная проблема. Я бы обеспокоился, если бы у меня САПР выдал один результат, а расчеты - другой, потому что это значит только одно: долгое разбирательство, что же конкретно вызывает расхождение, т.к. кому-то в этом случае придется в итоге принимать решение, чему конкретно верить, и чтобы это не было "пальцем в небо" и не пришлось за это отвечать, придется перепроверять и первое и второе.

Смотрите, у меня претензия в другом. Вопрос в том, как человек эту правоту защищает.

Если он имеет смелость признаться, что использовал микросхему потому, что у него только с ней и был опыт и он учился по каким-то статьям, в каждой из которых была такая микросхема, это вполне валидное обоснование. Оно может не стыковаться с моей целью, как заказчика (или тим-лида, или кого там еще, кто с этим товарищем будет взаимодействовать), но оно дает вполне разумное объяснение почему человек это сделал - потому что это решение, которое многократно и много где было реализовано как rule of thumb и потому, что лично у этого человека есть опыт работы именно с ним.

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

Вы вот мои посты упомянули - может, вас это разочарует, но я железо не брал в руки лет 10, я с 2012го года с головой погрузился в машинное обучение. Вот захватило оно меня, когда это еще не было мейнстримом, когда еще о "пришествии ИИ" не кричал каждый блоггер. Я тогда прикинул, в каком направлении мы движемся и с удовольствием начал подтягивать свое понимание математики и работать с нейросетевыми моделями, понимая, что это станет самой громкой темой грядущих десятилетий (а заодно инвестировал в NVidia, как в основного производителя ускорителей для таких вычислений, чему сейчас очень рад).

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

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

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

У меня раньше такое было, когда мне было 20+

Как это так - чуваки ардуинку юзают, вместо того, чтобы хреначить плату с нуля!

К счастью, к 30+ это прошло, и пришло понимание, что имеет значение только цель и стратегия ее достижения. И если у кого-то цель - поскорее проверить свою идею, то пусть использует хоть ардуинку, хоть конструктор Лего.

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

Вы так мой поинт и не поняли, к сожалению. Или предпочли сделать вид, что не поняли.

достаточно времени чтобы во всём этом разбираться. Но при этом - у нас достаточно времени на всё остальное.

"всем в этом" - в чем? "на все остальное" - на что? Почему вы подменяете "выбирать, на что тратить свое время" своим "отказываться от познания"?

Я умею водить машину с ручной коробкой с правым и левым рулём. Я всё ещё знаю как работает манифолд и что такое карбюратор.

Круто, а вертолетом управлять можете? Двигатель его починить? А операцию на сердце проведете?

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

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

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

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

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

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

Но это все так, лирика. Главная моя претензия вот к этому тезису:

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

Но что в этом плохого? Абсолютно ничего. Нет ничего ужасного в том, чтобы учиться чему-то новому. Даже если вы читаете абсолютно бесполезную книгу о том, как ловить котиков в капканы, вы от этого не станете глупее.

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

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

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

без понимания причин ничего не надо трогать

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

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

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

Да, разваливается из-за ошибок интегрирования. Чем выше энергия столкновений, тем меньше нужен шаг интегрирования, это реальная плата за виртуальную энергию)

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

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

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

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

нужно учесть, что суммы энергий не изменились до и после просчета для каждой пары: Vi+Ui +Vj+Uj = const

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

Суть ее в том, что силу между точками интегрирования, нужно проинтегрировать и получить среднее.

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

Вот про метрики для ошибки - совершенно согласен, сам к таким же пришел. Более того, если предположить, что делаем динамический шаг, и нам нужно, чтобы система совершила шаг, максимальный по времени и минимальный по отклонению, получается, что нужно оптимизировать dE*dt - что внезапно совпадает с экшеном (тем, что джоуль-секудны) из принципа стационарного действия!

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

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

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

А, понятно. Я что-то подумал, что речь о кулоновском барьере, о взаимодействии на уровне нуклонов уже, не сразу понял, причем тут он.

Да, но тут ситуация немного другая - за пределами нескольких r_{min}потенциал почти нулевой, в основном тут важно именно действие соседних частиц. BH, если я правильно понимаю, скорее для случая, когда есть силы, тянущиеся на огромные расстояния - слипающиеся под гравитацией частички для других, удаленных от них, частиц, выглядят как одна большая гравитирующая масса, поэтому ее нельзя просто так отбросить.

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

И, кстати, почему некоторые комменты не сразу постятся, а ожидают от меня подтверждения? Это при низкой карме?

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


Ну, я на это уже отвечал. "Таких винтовок много, но эта - моя")
Хотя на самом деле - не то чтобы много. Даже если опустить тот момент, что мне захотелось разработать эту штуку самому, она еще и на других технологиях. Этот симулятор полностью на питоне, что позволяет его очень легко стыковать с пайплайном машинного обучения. Я его сделал для не для исследований химических реакций, а для исследований в области машинного обучения, прежде всего.
И мне копаться в своем питоновском коде (зная каждую его строку, каждый компромисс, каждую оптимизацию) куда проще, чем прикручивать к питоновскому пайплайну с пайторчем эту махину на C++ и перекомпилять ее каждый раз, когда мне потребуется там что-то отрезать или прикрутить)

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

Примерно так это выглядит)

Ну вот пример из заголовка, с достаточно высокоэнергетическим столкновением при 10 под-шагах выдает у меня около 50 FPS, реалтайм. При ~30к частиц. У моей подруги на 2060 дает 60 FPS на тех же настройках. Все зависит от количества под-шагов, а оно зависит от предельной энергии, которую может выдержать симуляция, не развалившись) В этом случае 10 хватает, чтобы не бомбануло.

В более затратных, типа дистилляции, конечно, либо сам процесс будет идти медленно - у меня тоже примерно 40 FPS выдает, но сама дистилляция длится 10 минут (в видео ускорено в 10 раз) - либо надо повышать энергию частиц вместе с количеством под-шагов.
65к частиц примера vortex, где они с большими энергиями крутятся, у меня идет на 15 фпс примерно, на ноуте.

Нет, 3д я пока не планирую, там нужно много чего менять будет прямо в самом сердце алгоритма, в расчете сил. Сейчас он базируется на 2д hash-grid (или, как я это зову, "поле индексов"), и этот код я достаточно долго оптимизировал - собственно, эти графики - это как раз и есть процесс оптимизации, я пробовал разные штуки и замерял скорость. В 3д нужно уже что-то другое придумывать и снова оптимизировать.
Я, скорее, вместо 3д буду пытаться 2д ускорить, очень уж хочу дистилляцию быструю и в реалтайме.

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

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity