Святослав Ковалёв

Святослав Ковалёв

Неделя
Jun 29, 2020 → Jul 5, 2020
Темы
NLP
Блокчейн
Кулстори
Графы
DataViz
Adversarial

Архив недели @iggisv9t

Понедельник


Приветики. Меня зовут Святослав Ковалёв. На этой неделе я твиттором командую.

Кто я такой: Сейчас Data Scientist в Самокате. Делаю там эксперименты на живых людях. До этого кластеризовал блокчейн биткоина в Clain. Ещё менеджерю ML4SG проект про визуализацию новостей. Остальное по ходу расскажу. План ниже:

Не по дням, а по порядку. В двух частях: 1. Малян о себе, Самокат, Clain 2. Как отмывать биткоины 3. Графы: что с ними вообще делать 4. Графы: визуализация 5. Кластеризация, как заэмбеддить что угодно 6. Старомодное NLP ⬇️⬇️

⬆️⬆️ 7. ODS ML4SG, Манаджемент 8. Real world adversarial attacks 9. Датавиз 10. Треш-байки с собеседований и заводов 11. Свободная тема, общение

Про карьеру расскажу в обратном порядке, потому что если начну с заводов в Омске, будет вообще не понятно причём здесь Data Science.

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

Что касается самой конторы, то именно DS команда пока работает полностью в формате стартапа. Каждый сам себе one-man-army и пилит свою большую задачу. В Clain я тоже был как первый наёмный сотрудник и пилил там в одиночку много чего. Сейчас немного расскажу о той области.

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

Это называется "псевдонимность". Где-то видел сравнение, что это как ходить в маске, но с прозрачными карманами.

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

А дальше нужно уже лезть в детали, как устроен блокчейн и что делают KYC AML конторы. Разумеется, я не расскажу всех секретов, иначе меня в лес увезут, но есть две базовые вещи, которые легко узнать и без меня.

common spending heuristic. Если у вас есть адреса на которых допустим 0.1 BTC и 0.2 BTC, а вам надо отправить, скажем, 0.25, то ваш кошелёк скорее всего сделает транзакцию где на входе эти оба адреса, а на выходе два новых 0.25 для получателя и 0.05 (минус коммисия) сдача

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

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

one time change heuristic. В примере у нас была сдача 0.05 BTC. Так уж устроен блокчейн биткоина, что нельзя потратить баланс частично. На самом деле атомарная единица в биткоине -- это UTXO: Unspent Transaction Output. Она двигается только целиком.

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

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

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

Предварительно, мораль такая: биткоин не анонимен адреса лучше не смешивать

@dsunderhood А миксеры работают?)
Ждал этого вопроса. Работают очень плохо. В хорошем миксере на выходе у вас будут просто ещё более грязные деньги и приличные заведения их не примут. А если поток на миксер не большой, то можно будет ещё и сопоставить вход с выходом. twitter.com/niemalsnoch/st…

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

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

Но есть ещё coinjoin. Это когда вы с другими чуваками подписываете входы одной транзакции, будто вы один и тот же владелец средств.

Шифропанки считают, что это прямо то, что надо, но там можно устроить sibyl attack. Чаще там просто недостаточно участников, чтобы надёжно что-то скрыть. Ещё это очень дорого, потому что нужно провести много транзакций.

Если хотите ещё подробнее, то вот можно почитать статейки клейна. Вот над этой ещё я работал blog.clain.io/binance-hack-2… А дальше давайте я больше расскажу про большие графы и как с ними работать.

А ещё есть единственный наверное публичный датасет на каггле по этой теме, и мой коллега его деанонил когда-то. Вот статья на хабре habr.com/ru/post/479178/ Можно поковырять самостоятельно и увидеть на что это похоже.

Давайте теперь про огромные графы и что с ними делать. Вот как выглядит, например, уже граф кластеров в биткоине.
notion image

Шаг 1: найдите очень мощную машину, у которой как минимум 64 ГБ ОЗУ, а лучше 256 ГБ. Нет ни одного универсального инструмента, чтобы работать с графами распределённо или батчами.

Ещё сэкономлю вам время при выборе графовой БД. Только neo4j. Не смотрите на эти графики с бенчмарками. Это единственная графовая БД, которую можно поднять без команды девопсов, наполнить данными и потом использовать.

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

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

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

Конечно, вы мне скажете "я читал статьи, там пишут что надо GraphSAGE использовать". Не знаю, как сейчас дела обстоят, но я пробовал ещё до Pytorch Geometric, и референсная имплементация, конечно чему-то училась, но ничего не выучила.

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

В общем, есть такая статья: arxiv.org/pdf/1902.07153… Там учат, что можно просто агрегировать информацию по соседям вершины, и это будет в общем-то однослойной GCN.
notion image

А нелинейностей можно добавить, если поверх учить нелинейную модель.

Если делать это прямо по науке, то будет примерно так: Получаем нормализованный лапласиан матрицы смежности: S = sparse.csgraph.laplacian(adj, normed=True) shape1 = feats.shape[1] Умножаем матрицу признаков слева на лапласиан conv1 = S @ feats[:, -shape1:]

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

Я писал туториал об этом github.com/iggisv9t/graph…

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

Когда я в первый раз испробовал такой подход, получились вот что
notion image

Граф двудольный был, поэтому там два куска разделённых пустым пространством.

А ещё есть такая статья, чтобы въехать в тему издалека и понять концептуально, что происходит. arxiv.org/pdf/1611.08097…
notion image

Ещё для извлечения признаков из графов без использования нейронок у меня есть вот такой туториал github.com/iggisv9t/graph…

Там половина инструментов реализованы @tsitsulin_ и они очень шустро работают на больших графах.

За что я люблю графы -- это универсальность. Тот же node2vec -- это обобщение word2vec на графы. GCN -- это обобщение CNN. Всякие привычные форматы данных можно представить как вырожденные формы графов, соответственно графовые подходы будут работать и в других местах.

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

Вторник


У меня схема для решения задач на графах вот такая. Там везде могут быть нюансы, разумеется.
notion image

Ещё для всего этого есть GNN, но для моих задач они не подходили. Сейчас могло что-то поменяться. Почти год прошёл ведь.

Обещал говорить, о графах из блокчейна, а говорил просто о больших графах. Просто размеры, наверное, самая большая проблема.

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

Давайте тут заканчивать с графами и криптой. Могу сказать на последок, что команды связаные с криптовалютами очень закрытые и параноидальные. Сидишь там и не можешь ничего рассказывать. Уходишь и всё равно не можешь.

Про визуализацию больших графов рассказывать? Просто это будет в основном пересказ моей статьи с хабра и картинки с моего канала в телеге. Может надоело уже всем.

Ну вы сами напросились.

Сами статьи здесь Хабр: habr.com/ru/company/ods… Медиум: towardsdatascience.com/large-graph-vi…

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

Почти все просто не работают, или для больших графов не применимы. Для мелких работает почти что угодно, особенно, если вы дружите с JS или какой-нибудь обёрткой на D3.

Поэтому про мелкие я рассказывать не буду подробно. Я толком ими и не занимался. Большими будем считать от 10 000 вершин. На таких масштабах уже почти нет смысла рисовать отдельные кружочки и палочки.

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

Выглядеть может например вот так. Это скрин из Graphistry -- коммерческая штука, которая рисует на своих серверах, потом показывает в браузере.
notion image

Если вы шарите в WebGL то вот вам идея для стартапа. У Graphistry кроме хорошей палитры по умолчанию особо никаких преимуществ нет.

В Gephi другой граф, но такая же укладка будет выглядеть вот так. И то для этого надо сначала покрутить много крутилок. Зато бесплатно и много чего другого можно сделать.
notion image

Я по прежнему рекомендую Gephi как самый полный и универсальный инструмент для визуализации и какого-то анализа. Но он заброшен уже лет 10.

И вот недавно я узнал, что есть такая штука, как graphia.app -- выглядит почти как замена Gephi. Но очень сырая штука и именно для укладки и отрисовки там пока мало всего. Но зато в активной разработке.

Я вот тут у себя постил, как оно работает. t.me/sv9t_channel/6…
notion image

Но всё равно, уже на сотне тысяч вершин большого смысла рисовать отдельные вершины и рёбра нет. Дальше важна только плотность.

Поэтому можно переходить на вот такие штуки. На картинке весь блокчейн в терминах адресов и транзакций. Нарисовано через largeviz и viewpoints.
notion image

LargeViz -- это инструмент для снижения размерности. Тут про него статейка и имплементация. Может переваривать очень большие датасеты и не обязательно графовые. arxiv.org/abs/1602.00370 github.com/lferry007/Larg…

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

А увидеть можно многое. Базовый принцип: близкие по свойствам объекты находятся близко друг к другу на картинке. Часто видно сгустки, или большие пустые промежутки.

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

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

А тут то же самое, то по времени выхода фильма. Старые группируются в отдельный кластер. Таким образом, если бы мы заранее не знали этих свойств, их можно было бы частично восстановить только по связям объектов.
notion image

Это очень долгая тема, поэтому последняя картинка и вывод. Это node2vec + UMAP. Мне просто визуально нравится, но все эти отдельные куски оправдали себя при дальнейшем анализе.
notion image

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

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

Потому что из tSNE можно получить что угодно и оно скорее запутает, чем поможет. Например это -- Рикардо Милос после tSNE
notion image

А это он же, после инструмента с очень модной презентацией. Я тут у себя рассказывал, что за дичь тут происходит t.me/sv9t_channel/5…
notion image

Среда


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

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

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

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

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

А вообще говоря, признаки не обязаны быть одной природы. И частенько там смесь категорий, числовых значений дискретных и непрерывных.

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

Но что-то надо делать, да?

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

При этом важно не терять совместную информацию. Как они вместе себя ведут, эти категории. Тут работает всё, что предназначено для bag of words. Мощь донейронного NLP.

Ещё внезапно хорошо работает NMF. Он чудесно справляется с тематическим моделированием, хотя от него этого не ждали, и всякие One-Hot и счётчики ему тоже можно кормить.

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

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

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

Это видео, которое должно хвалить алгоритм ivis Взято отсюда reddit.com/r/mathpics/com…
notion image

И кажется, будто круто. Вся геометрия на месте. Был динозавр и остался динозавр. tSNE превратило его в кровь кишки, тоже понятно. На самом деле выигрывает UMAP.

А это он же, после инструмента с очень модной презентацией. Я тут у себя рассказывал, что за дичь тут происходит t.me/sv9t_channel/5… https://t.co/RErmRjgcQT
Тут я постил, что оно сделало с Рикардо twitter.com/dsunderhood/st…

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

UMAP сломал геометрию, но задачу выполнил. Он отделил фон и разобрал на части и сгруппировал Рикардо.
notion image

Наверняка можно что-то подобное выжать и из tSNE, но это сложно.

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

Но от признаков разной природы это плохо спасает. А вот автоэнкодеры тут вывозят отлично.

Не нашёл картинку с хорошим примером, поэтому пусть будет не самый хороший. Заодно напоминание: всегда выкидывайте время из данных перед всеми этими трюками.
notion image

Тут данные после всех этих этапов и автоэнкодера раскрашены по времени. Так как это признак с самым большим масштабом и особо не связан с остальными свойствами, автоэнкодер просто взял и растянул по нему все данные.

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

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

Твиттер ужасно кропает изображения, но я просто должен напомнить вам, какой сегодня день. С понедельника готовился.
notion image

Четверг


По плану у нас старомодное NLP. Я в основном занимался тематическим моделированием плотно. Весь 2019-й прошёл мимо меня. С другой стороны я не застал rule-based системы и всё такое, что было в моде до word2vec и подобных штук.

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

Что-то мало за TM. Но я про него всё равно расскажу.
notion image

Лидируют грязные хаки и всё с самого начала. Я так понимаю -- это два совершенно противоположных лагеря: прожжённые нлпшники и те, кто текстами (почти) не занимался.

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

Но в плане извлечения признаков из неевклидовых данных часто работают как раз вот эти штуки. ТМ тоже про это. Он и в рекомендациях тащит.

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

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

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

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

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

И вообще для факторизаций матриц. А там и до двудольных графов недалеко. Графы мои графы.

Тут новое действующее лицо: проект OSD ML for Social Good. Если раньше не слышали -- это внутри ОДС движуха со всякми некоммерческими проектами во имя добра.

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

А я вот по соседству веду проект по визуализации новостей. Вот он основан на тематическом моделировании. Мы там накачали кучу новостей, разбили по темам и отрисовываем, как они менялись во времени.

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

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

Поэтому в двух словах напишу сразу выводы: Лемматизация: pymorphy Тематическое моделирование: bigARTM NER (в русском языке): Polyglot.

А ещё либа flashtext. Это просто каеф. github.com/vi3k6i5/flasht… Может быть поможет вам выкинуть регулярки.

Про NER у нас интересная штука получилась. Это 20 лет ленты.ру. Как менялись ранги в топе упоминаний имён в новостях.
notion image

И вот легенда.
notion image

Там можно увидеть, как два года нам рассказывали, что будет если обидеть Путина: в топе три участницы Pussy Riot. Потом 4 года Порошенко упоминался в 4 раза чаще Путина.

Ещё как влияние технологий входило в политику. Билл Гейтс сначала был один из категории, и то скорее как богач, а потом вот пошли соцсети и всё такое.

И ещё Парфёнов красавчик.

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

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

Так вот. Вроде интересная тема и многим хочется поучаствовать. Но в жизни видно, что много таких проектов заброшены. В чём причина?

А в том, что это весело только пока ты прогоняешь один jupyter notebook и рисуешь графики. В общем, наш проект быстро наполнился такими ноутбучеками, а теперь со страшным скрипом делается сам продукт.

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

Обычно есть какие-то рычаги мотивации. Зарплата, повышение, работа в принципе. А тут никто никому ничего не должен. Даже сроки планировать невозможно.

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

Так что если хотите получить экстремальный опыт управления проектами -- то велком в ML4SG. В ОДС есть канальчик для этого с таким названием.

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

Но большинство парализовано страхом неудачи, поэтому даже не начинают. 95% таких.

Пятница


В прошлом году по чатам ходила вот эта статья medium.com/syncedreview/p… И я подумал, было бы круто воспроизвести.

Но вот эти ребята не оставили код, поэтому я поискал и нашёл другую статью с кодом. gitlab.com/EAVISE/adversa…

Там чуваки тренируют адверсариал патч -- то есть заплатку, которая должна сбивать с толку детекторы человека.
notion image

И вот сейчас, после того как я почитал статей и попытался воспроизвести сам я замечаю мелкие подвохи в этих всех фотках.

Первым делом, я взял тот код, заменил картинку-сид, чтобы получить всё-таки хоть чем-то отличающийся результат и натренировал патч.
notion image

Сходилось к тому же, что было в иллюстрациях к статье, но только не к тому, что на финальном результате.
notion image

Ну я напечатал и попробовал живьём.
notion image

Но это я сейчас проделал тот же трюк, что и все авторы этих статей, и пропустил половину истории.

У меня в канале ещё есть видосики с демонстрацией, но они почему-то не грузятся в твиттер. Вот последний t.me/sv9t_channel/5…

Так вот, я по пути нашёл ещё много статей со смешными картинками. Судя по картинкам в соседних каналах ту статью про геометрик дип лёрнинг растащили на отдельные кусочки. Так что вот например ещё arxiv.org/pdf/1906.11897…
notion image

И там было много интересных идей. Например вот это github.com/mahmoods01/acc… С кодом на матлабе.
notion image

И ещё я протестировал те знаменитые стикеры, с которых всё началось
notion image

notion image

Но вся интрига заканчивается вот на этих графиках из исходной статьи от чуваков из фейсбука.
notion image

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

А разгадка этих фотографий с эффектными результатами вот в чём: ГОЛОВА РYКN

Детекторы очень надёжно определяют человека если в кадре есть голова и хоть чуть-чуть рук. Чуваки с фейсбука на фотках всё время прятали руки за спину. А в старте треда чувак в капюшоне стоит.
notion image

Зато можно как угодно одеться, закрыть голову, и YOLOv4 тебя теряет.

Есть идеи, как это дело можно сдлеать более надёжным, конечно. Но это ужасно дорого и долго. Для петпроджекта немного перебор.

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

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

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

А если продолжать в реальном мире, то больше надежд на грубые методы, вроде такого reflectacles.com Они отражают ИК свет от камер и делают засветку.
notion image

Зато, написать свою работу и прославиться ещё можно. Они очень много внимания набирают, а проверять их сложно. Например эти ребята обещали чудо, а оно вообще не работает никак arxiv.org/pdf/1910.11099…

Суббота


Как дела, чат?

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

Чё какие синтезаторы частот делал? Какой чип ставил? Мы ОНИИП не уважем, а ЦКБА уважаем. Ну ты позвони, чё, земля круглая ещё встретимся.

Но моё первое собеседование было не многим менее трешовое. Там два каких-то чувака просто задвали мне вопросы и ржали. Например "какие колготки носишь". Это была моя вторая работа. Чуваки потом оказались начальником отдела и сектора.

Вы всегда работали в ИТ компаниях?

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

Он не ладил ни с кем с соседних секторов, поэтому меня устроил как шпиона, осваивать технологии которые ему не хотели раскрывать.

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

Чтобы познакомиться с такими технологиями, я согласился на пять лет невыезда. Правда меня всё равно раньше выпустили в итоге.

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

Росту самооценки это не способствует.

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

Там прямо был настоящий спектакль в пять актов. И в начале ещё какая-то безумная форма на несколько страниц. Я пытался отшучиваться от самых неприятных вопросов, типа "назовите свои слабые места". Я вписал "при звуках флейты теряю волю".

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

Поэтому, я крепко усвоил "всё сказанное может быть использовано против вас", как в кино.

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

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

Дальше тред мотивации для тех, кто считает что недостаточно умён/образован/whatever. Про то, как я не отупев за 3 года без математики не мог возвести 2 в восьмую степень, 4 месяца без работы ходил по собеседованием и оставшись почти без денег всё-таки устроился джуном.

Как я говорил в соседнем треде, я до этого электроникой занимался. Сначала разрабатывал, а потом продавал. Прямо по наклонной вниз, зато по ЗП вверх. Правда по айтишным меркам это всё равно крохотные суммы.

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

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

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

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

И мне попалась реклама курсика от Яндекса и МФТИ. Он тогда только запустился. Я подумал, что надо рискнуть. Для меня в тот момент такое решение было прямо прыжком в никуда.

Ещё я не знал, что можно написать Lorem Ipsum в курсеру и учиться бесплатно. Поэтому заплатил очень значимые для меня в тот момент 4К.

И так как ждать 6 месяцев до конца специализации я не мог, я просто пошёл по всем собеседованиям подряд. Сделал резюме. Потом сделал его лаконичнее. Потом ещё лаконичнее. Потом на английском.

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

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

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

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

Но блин, денег у меня было на 2 месяца, а я их растянул на 4. В два раза снизил к тому моменту свои ожидания по ЗП и растерял всю уверенность после такого количества отказов. Думал, уже придётся в Омск возвращаться.

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

Я не решил одну задачу на алгоритмы из двух, потому что не хватило времени и я час зря тупил. Вместо этого написал идею как решать вместо кода. Благодаря этому меня пригласили на очное собеседование и я там неплохо отстрелялся по математике.

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

А специализацию от яндекса бросил на середине.

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

Воскресенье


Сегодня последний день моих баек здесь. Никакой особенной темы сегодня не будет. Расскажу, что в голову взбредёт. Кому понравилась эта неделя, приглашаю в свой канал в телеграме. t.me/sv9t_channel

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

С другой стороны, судя по моему опыту, мало кто может оценить насколько это круто. Да и я довольно быстро привык и обнаглел.

Ну в смысле, мне теперь мало того, что раньше казалось прямо шикарными условиями. Потому что по айтишным меркам это плохие условия.

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

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

И потом час пытаться скачать pdf на 3МБ. Потому что скорость как на dial-up, и соединение рвётся каждые несколько минут.

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

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

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

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

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

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

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

На другом заводе у нас даже была доска позора. И ещё там всё начальство было помешано на соционике. Они даже наняли штатного психолога.

Когда я увольнялся, психолог позвал меня поговорить наедине. Я думал, начнёт докапываться, хорошо ли я подумал. Но как только мы сели, он сказал что они тут все поехавшие и я всё правильно делаю.

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

Начальник сектора любил проходя мимо сказать на ухо шёпотом очень быстро "мягкие зубы".

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

Я всё никак не привыкну, что тут нельзя редактировать посты. Делаю опечатки и жму Tweet не перечитывая. Простите мою орфографию, пожалуйста.

Про что ещё рассказать?

Ок, победили треш-истории. Если что-то конкретное про датасаенс хотите, лучше задайте вопрос. А треш-история будет в треде.

Так вот. Я устроился ремонтировать какие-то агрегаты на производстве пластиковых окон. Просто ничего лучше я на тот момент в Омске не нашёл.

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

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

А это прямо такие хардкорные электрики. Они даже пинками пытались починить компьютер, когда на нём интернет пропал.

Документация -- толстенная книга на итальянском. Хорошо, хоть схемы -- это просто линии, которые переводить не надо.

В общем, аппарат включался, выдавал какую-то ошибку про его определённую часть и ничего не давал сделать. Как я говорил, рабочие отпинали системник, а интернет не починился, поэтому сначала мы пошли чинить интернет.

Интернет был в другой части здания. Там где-то на чердаке была комната, в которой стоял огромный слой пыли, много проводов и комп с толстым старым монитором. Починили перетыкиванием проводов.

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

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

И вот они подкручивали ножки, роняли листы, снова подкручивали. Пока не откалибровали.

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

В конце я наткнулся на шкафчик в который уходил пучок проводов. Открыл шкафчик, а он пустой и эти провода торчат обрезанные. Бум-да-тсс.

Деньги мне не заплатили, на следующий день я не пришёл.

Пока у меня не отобрали доступ к акку, я могу ещё что-то ответить. Но уже на всякий случай попращаюсь. Спасибо, что читали мои посты на этой неделе. Надеюсь, кому-то было интересно. И спасибо @tiulpin за приглашение. С вами был @iggisv9t До скорых встреч.
notion image

Ссылки