Борис опять
15.1K subscribers
1.44K photos
72 videos
30 files
1.48K links
life = curiosity + irreducible noise

Whois: https://xn--r1a.website/boris_again/3400

Лс: @btseytlin
Download Telegram
Forwarded from Мост на Жепи (qplazm3r)
👍34🔥9😁7🤔1
Машинлернеры, нас раскрыли!
🐳11😁3🔥2🤔1
Борис опять
Время посмотреть на JPX Tokyo Stock Exchange Prediction, могут ли кагглеры предсказывать рынок?
Хоба, сработала отложка. Посмотрим как там кагглеры предсказали поведение рынков. Приватный лидерборд все еще недоступен, ждем.
👍4👎1
Forwarded from DLStories
В MIT исследовали феномен гроккинга (grokking) и, кажется, нашли этому эффекту правдоводобное объяснение

Grokking — это эффект, при котором уже после стадии переобучения модели (при возрастающем test лоссе и падаюшем train) при дальнейшем обучении test loss вдруг начинает падать, и сеть лучше генерализуется. Такой эффект наблюдали уже давно (например, вот тут), но, чаще всего, на малых, “игрушечных” датасетах (например, на такой простой задаче как сложение чисел). Никакого сильно убедительного объяснения эффекту не было (насколько я знаю), а также не удавалось повторить эффект на реальных, не игрушечных данных.

Ребята из MIT подошли ближе к пониманию природы grokking’а и даже смогли воспроизвести эффект на разных больших датасетах.

Авторы связывают эффект гроккинга с устройством поверхности лосс-функции. В недавней работе из Стенфорда было показано, что у этой поверхности существует сферическая область, в которой достигается оптимальная генерализация модели: то есть, для модели с параметрами из этой области train и test loss малы, переобучения при этом не наблюдается. Эту сферическую область ребята из Стенфорда назвали Goldilocks zone (“зона Златовласки”, показана на картинке зеленым). Так как область сферическая, она соответствует параметрам модели с определенной нормой. Внутренность это сферической области соответствует параметрам с меньшем нормой, область вне сферы — параметрам с большей нормой.

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

Далее происходит следующее: если у модели нет никакой регуляризации (weight decay, к примеру), то на этом обучение модели заканчивается. Лосс не выходит из точки минимума, grokking не наблюдается, переобучение остается. Но если к модели применяется регуляризация, это выталкивает веса модели из локального минимума, и они начинают стремиться к зоне Златовласки. Обычно регуляризация применяется не очень сильная, поэтому проходит довольно много эпох обучения, прежде чем веса модели достигают точки внутри зоны Goldilocks и модель начинает генерализоваться. Это и объясняет эффект гроккинга: когда через достаточно долгое время после переобучения лосс на тесте вдруг падает и модель начинает лучше обобщаться.

Кстати, если у модели регуляризация довольно сильная, grokking’а тоже не будет: веса модели будут сразу быстро приходить внутрь зоны Златовласки, не задерживаясь в локальном минимуме вне сферы. Модель просто сразу достаточно хорошо генерализуется.

Теперь, почему grokking часто наблюдают на “игрушечных” датасетах, и почти никогда — на реальных. Во-первых, обычно веса любых нейросетей инициализируют значениями с довольно малой нормой, т.е. лежащими внутри зоны Златовласки. Однако на суперпростых датасетах при обучении модели наблюдается более быстрое увеличение нормы весов, потому что градиентный спуск быстрее выталкивает веса модели в локальную точку минимума трейн лосса сильно за пределами сферы. При обучении больших моделей этот эффект не такой сильный, и веса нечасто выходят за пределы зоны Златовласки вообще, и grokking не наблюдается.

Чтобы подтвердить гипотезу об описанном происхождении гроккина, исследователи обучили несколько моделей для разных задач CV и NLP с разными нормами весов. Оказалось, что увеличение нормы весов действительно приводит к возникновению эффекта grokking’а, пусть все же и не настолько выраженно, как на более простых датасетах.

Подробнее читайте в статье
Изначально новость нашла тут
🔥22👍5😱1
Forwarded from Empty Set of Ideas
полезная картинка, раньше я всегда просто пользовался пиклом, теперь буду брать npy или npz для спарсных данных

https://github.com/mverleg/array_storage_benchmark
🔥13👍6
Борис опять
Сейчас идет другое похожее соревнование про предсказание стонксов, где метрика больше про заработанные деньги. Проверка будет так же осуществляться на реальных рыночных данных. Сейчас заработок скор решения 317527.084. В октябре посмотрим, что будет при столкновении…
Результаты соревнования финализированы. Кагглеры должны были предсказывать цены стоков на день вперед. Модели тестировались на реальных рыночных данных в течение 3 месяцев.

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

Так вот, изучив результаты соревнования, я могу уверенно заявить: хрен его знает, вообще ничего не понятно.

Я сломал себе мозг пытаясь понять, как считается скор соревнования и как его перевести в термины “сколько бабла на этом можно заработать или потерять.” У меня не получилось. Если вы готовы забуриться в задротство, то в следующем посте разбор метрики.
👍22🔥2
Как считается метрика, насколько я понял сломав себе мозг о ноутбуки кагглеров:
0. Предсказываем цены закрытия всех стоков на следующий день.
1. Считаем относительное изменение цены по сравнению с предыдущей ценой закрытия. Это и есть таргет кагглеров, то есть их модели предсказывают цены стоков.
2. Отранжируем все стоки по относительным изменениям. Ранги от 0 до 1999. Чем ранг ниже, тем больше цена вырастет к следующему закрытию (ранг 0 означает, что цена вырастет больше, чем у всех остальных стоков). Чем ранг выше, тем больше цена упадет к следующему закрытию (ранг 1999 означает, что цена упадет больше, чем у всех остальных стоков).
3. Предполагаем, что ты купил стоки с рангом 0-199 и вшортил стоки с рангом 1800-1999.
4. Отбираем стоки с рангом 0-199 (самые растущие) и 1800-1999 (самые падающие)
5. Для самых растущих умножаем их относительные изменения на веса пропорциональные рангам.

То есть предполагаем, что сток с рангом 0 мы будем закупать в большем количестве, чем сток с рангом 199. Короче доли стоков в портфеле пропорциональны нашей уверенности в прогнозах по этим стокам.

Суммируем результаты перемножения и делим на среднее от весов. Тут уже совсем сложна.

Сделаем игрушечный пример для двух стоков и рангов 0 и 1. Предсказали, что цена увеличится на 1% и 5% соответственно. Веса у них будут 1 и 2.
Считаем числитель: 1% * 1 + 5%*2 = 11%
Делим на сумму весов: 11%/3 = 3.6%

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

6. Делаем то же самое для самых падающих стоков. Получаем ожидаемую доходность от шортинга.

7. Считаем daily spread return: сумму доходности от покупки и доходности от шортинга. То есть сколько мы всего зарабатываем.

8. Daily spread return всех дней складываются во временной вряд.
Далее считается средний daily spread return и потом делится на стандартное отклонение daily spread return. Это и есть финальная метрика.

Окей, что это значит? Поделили среднюю доходность на разброс доходностей, получили какую-то нормализованную доходность.

Получается, что метрику максимизирует такое предсказание, которое максимизирует числитель (средний daily spread return) и минимизирует знаменатель (стандартное отклонение). Чтобы увеличить числитель нужно точно предсказывать цены. Чтобы уменьшить знаменатель, нужно чтобы модель выдавала схожие daily spread return, то есть была стабильной.

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

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

Топ скор в соревновании 0.381. Что это значит? Обгонит ли такая модель инфляцию и комиссии? Обгонит ли она индексы? Всей правды мы не знаем… Если вы знаете, то пожалуйста объясните

UPD:
Андрей в комментариях неплохо пояснил
real_cv.pdf
31.2 KB
Многие спрашивают меня: как выглядит резюме настоящего сениора?

Ловите шаблон. Эксклюзивно для подписчиков канала.
😁54🔥13🤔2👍1👎1
# Доверие к себе

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

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

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

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

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

Недавно я оплошал и стал причиной неприятной ситуации. Это был этап fuck around. Потом наступил этап find out: время отвечать за последствия.

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

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

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

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

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

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

Зато это очень приятное ощущение. Кажется, будто можно перешануть море. Не как раньше, когда все казалось по силам просто потому что я такой уникальный молодец и мне обязательно улыбнется удача. Теперь подход другой: море не по колено, но я смогу изучить проблему, смогу сделать достаточно попыток, смогу дойти до конца или уйти, если оно того не стоит. В любом случае я смогу сделать так, как будет лучше для меня.
30👍8🔥3🤔1
Это кстати не к тому, что всем нужно доверять себе. Если вы принимаете плохие решения, то доверять себе стоит только трижды все перепроверив. Доверие должно быть подтверждено опытом. Но стоит избегать ситуации, когда вы уже неплохо принимаете решения, но все равно себе не доверяете.
👍3
К предыдущей заметке надо кое-что добавить: доверие к себе не распространяется сразу на все аспекты жизни, как я сегодня выяснил.

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

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

Видимо познание закончится только после смерти.
👍4🐳2🔥1
Хоба, сейчас попробуем, что мы там производим
👍18🔥11👏2😁1
#лабораторный_журнал

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

В целом советы такие: делайте Continious Integration, делайте Test Driven Development, гоняйте тесты автоматически в CI, делайте Continious Delivery (деплой в CI), пишите документацию, нарисуйте уже схему архитектуры.

И не делайте всякой херни:
* Не пишите тесты, которые ничего не проверяют.
* Не тестируйте на продакшн бд. Обычно в этом повинны фронтендеры.
* Не делайте прямых зависимостей сервисов от инфраструктуры. Захардкоженные connection string это зло. Нужно что-то из БД соседнего сервиса? Не лезь в БД, спроси API. Нужна какая-то нетривиальная обработка? Положи задачу в очередь сообщений.
Читаешь такие рекомендации и думаешь: неужели кто-то так делает? Потом вспоминаешь: да, все это делают, повсеместно. Страшно жить.

Так же узнал для себя много нового. Оказывается Git Flow это уже не модно, а модно Trunk Based Development. Выглядит как безумная ересь, но может я чего-то не понимаю. Так же есть нечто под названием Hexagonal Architecture, тут мне пока нечего сказать.

Если бы мне нужно было выделить две главные компоненты качества софта, я бы выбрал такие:
* Минимум связности (в смысле coupling)
* Тесты

Ассесмент с этим взглядом совпадает.
👍144🔥1🤔1
Из нового узнал про Mutant Testing.

Главная проблема с тестами всегда в том, что ты не знаешь, насколько твои тесты отлавливают проблемы. В пределе у тебя может быть 100% coverage тестами, которые ничего не проверяют.

Идея mutant testing: меняем код немного (например, там где в коде if True, ставим if False) и проверяем, провалились тесты или нет.

Вот инструмент для Python
https://mutatest.readthedocs.io/en/latest/

1. Находит тесты (подхватил pytest сразу)
2. Строит AST кода покрытого тестами
3. Случайно меняет AST в нескольких местах
4. Проверяет, упали ли тесты, затрагивающие места изменений.

Запустил, сразу обнаружилось пару мест, которые тесты не проверяют. Клевая штука.
👍15🔥4👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Впервые увидел океан. Край континента! Ожидал, что это будет как сходить на море, но оказалось, что океан это стихия совсем другого масштаба.
🔥40🐳29
https://www.bloomberg.com/opinion/articles/2022-10-12/defi-discovers-new-market-manipulations

Так так, DeFi позволяет манипулировать ценами торгуя самим с собой с разных счетов. При этом такое почти невозможно провернуть с кожаными человеками из-за наличия у них т.н. common sense.
🤔3👍1
#лабораторный_журнал

Наблюдаю все плюсы и минусы работы в офисе. Мне очень помогает собраться. Всем синьорам явно не мешает, работают как машины. Джуны же точат лясы едва ли не больше, чем работают. Пока не понимаю: офис это net bad или net good. Пока что вывод, что офис это net good для middle+, net bad для джунов.

Настроение стать тираном и микроменеджить.
😁11👎3👍1