Архив недели @tEarth4
Понедельник
Всем привет! Меня зовут Денис. Живу в Хельсинки, работаю датасаентистом в Unity. Делаю так чтобы ты, игрок в мобильные игры, получал самую лучшую в мире рекламу и нажимал по ней как можно чаще! 🤗
До этого работал в Oura, занимался детектом первых симптомов ковида по данным умного кольца. Образование у меня не профильное, но тоже интересное - я электроэнергетик в области возобновляемых источников энергии.
Твиттер я виду первый раз, пока не разобрался как работает эта платформа. Сильно не пинайте. Я буду стараться!
На неделю у меня запланировано несколько смысловых центров, однако план оглашен не будет, хочу чтобы вы жили предвкушением годноты. Через все посты будет проходить единая красная нить: "Я! Я! Я!". Плюс несколько постов по мелочи.
Пользуясь возможностью хочу пригласить поучаствовать в summerofcode.withgoogle.com/about/. Это хорошая возможность прокачать кодинг, получить строчку в CV и немного денег. Вообщем регистрируйтесь, вбивайте промокод tEarth, вам дадут репу с юнит тестами и без багов.
Очень хорошая серия постов на хабре по теме - habr.com/ru/post/149789.
Начнем издалека, о том как я полюбил цифры.
Друзья научили меня играть в покер в 14 лет. Денег у нас не было, мы играли на щелбаны. Чтобы реже получать по лбу, я стал искать гайды по покеру. Наткнулся на покер стратеджи, получил 50$ на паспорт мамы.
Я тратил все свое свободное время на игру. Я приходил домой после школы и играл по 6-12 столов 3-6 часов подряд. Чтобы играть лучше и выигрывать я анализировал свои раздачи, смотрел видео, читал джипси тим.
К слову, когда я перекатывался в дс я делал ровно так же: я фултайм гонял курсы на курсере и мл соревнования. На выходных пробовал силы в хакатонах.
С переменным успехом я заработал первые 10к. Купил комп помощнее и второй монитор. Присоединился к паре сообществ по покеру. Мы созванивались по скайпу чтобы поговорить о раздачах, новых приемах. Мы учились друг у друга. Комьюнити единомышленников помогает расти.
Проф игра в покер во многом похожа на датасаенс. Также нужно принимать решения основываясь на информации что есть, но в покере за это отвечаешь своими деньгами. К фидбэку прислушиваешься быстрее.
Раньше можно было пользоваться статистикой раздач, сейчас во многих румах такую возможность убрали чтобы у рекреационных игроков было больше шансов. Пока ты сидишь и играешь история раздач сохраняется в базу.
Когда нужно принять решение - смотришь на табличку (худ) или. открываешь попап. Цифры скажут что за человек перед тобой. Худ не просто облегчал игру, он по сути и был игрой в покер.
Я играл 6 макс нл, затем перешел на зум покер в фултилте (каждая раздача играется на новом столе, не нужно ждать). Потом бамхантил 1-1 в нескольких румах. Затем перешел в омаху. К 18 годам у меня было 50к$ на счету. Колосальные для меня деньги. Но потом случилась черная пятница
Черная пятница - 15 апреля 2011, лень когда ФБР арестовал домены 4 крупнейших покер румов. Зайти в клиент было нельзя, вывести деньги тоже. Ситуация для игроков из СНГ разрешилась довольно быстро, но покер поменялся навсегда.
Из-за оттока слабых игроков ватерлиния скила поднялась, поднялся и рейк ("налог" для рума).
Я понял что уже не бью поле, банкрол постепенно таял. Было два пути: начать больше работать над своей игрой, нанять тренера и смириться с просевшей прибылью или бросить покер и сконцентрироваться на учебе.
Я прикинул что по мат ожиданию мне выгоднее учится: ожидаемый заработок больше, дисперсия результатов меньше. Я поступил в Московский Энергетический.
Моя жизнь это череда случайностей. Оглядываясь назад в прошлое можно восстановить логическую цепочку, но с уверенностью предсказать что будет дальше сложно.
То как я научился программировать - одна из таких случайностей, еще один stepping stone который привел меня в текущее положение.
Когда я учился на третьем курсе один из аспирантов МЭИ предложил провести несколько дополнительных лекций по матлабу. Он считал что полученные знания помогут в написании дипломов. Работы получаться более качественные, и ребятам будет легче найти работу.
Лекции проводились по вечерам, всего их было 6 или 7. Не было четкой программы, скорее просто ознакомление с богатым функционалом софта. Одна из вкладок матлаба содержала в себе популярные МЛ алгоритмы, которые можно было применить на своей датке.
Там же был реализован функционал грид серча по разным модельками. Оптимальную модель можно было сохранить и потом использовать для новой даты. Такой первый зародыш автомл.
Я понял что чтобы это ни было, я хочу этим заниматься. Нашел курсы Энрю Нг на курсере, стал проходить. Потом вступил в одс. Потом МЛ Буткамп № 4, я его решал используя матлабовский автомл :)
Я загорелся соревнованиями, изучаю R, потом питон, лезу на кагл, дривен дата, переезжаю на учебу в Финляндию, кагл, хакатоны по выходным, пишу диплом, VTT, Oura, ковид и бессонные летние ночи, Unity и вот я тут.
Если бы тогда Саша Викулов не провел те занятия по матлабу, то то все сложилось бы совершенно по-другому. Я благодарен ему за его время и усилия. Эта благодарность мотивирует меня помогать другим людям.
Моя работа состоит в увеличении конверсии рекламы. Каждый день мы в компании тратим на это уйму человеко- и гпу-часов. Имеет ли это смысл? Стоит ли тратить такой мозговой ресурс чтобы увеличить вероятность клика на пару десятых процента?
От людей старшего поколения я слышал, что мол раньше светлые умы обсчитывали полет на Луну на листочке, а сейчас двигают рекламный блоки туда-сюда чтобы продать тоету кресту подороже.
Вот было бы неплохо взять всех АИ бездельников и переместить их в полезные отрасли: создавать лекарство от рака графовыми сетками, искать темную материю эм элем, пилить RL для роботов-десантников на Марс.
Такое мышление - это пережиток плановой экономики. И тогда, и сейчас это работать не будет. Ноу дискас.
По существу разница между добавлением собачьих ушек на лицах подростков и поисками лекарства от рака в глобальной перспективе не критична.
Впрочем, моя мотивация на работе состоит в том чтобы фейсбуку меньше досталось.
Вторник
Я бы хотел писать о чем думаю, но тогда у меня быстро заберут дс аккаунт (((
Мне нравится как Пелевин предсказал тренды текущего АИ/ДС в двух своих произведениях: дип фейки в "Generation П" и адверсериал атаки в "Зенитные кодексы Аль-Эфесби". Ну и конечно же "Числа". Потому что какой ДС без магии чисел?
ДСы говорят что не верят в счастливые числа, и в то же время предпочитают претрейн сетки, а не обучать с нуля... Если это не вера в заряженные числа, то что же?
Нейронки на работе я пишу на tf, по своим проектам - на торче. У тф есть красивая обертка - керас. Именно она привлекает много новичков. Однако если ты пилишь что-то сложнее классификации ирисов, то кривая сложности взмывает до небес моментально. Сейчас поговорим про тф.
Тф 1 с его сессиями и графами был создан не для людей. Мои коллеги говорят что писать на тф1 - это ходить по минному полю из граблей с завязанными глазами. Дебагинг сеток отсутствовал как класс. Я пробовал научиться писать на тф 1 в уроках от Ng.
В его курсе по ДЛ нужно было заполнить ячейки чтобы выполнить задание. Это я когда увидел with tf.Session() as ses: bla bla bla.
Я пытался понять тф1, но порог вхождения был слишком высок.
Переход на тф2 сделал фреймворк похожим на нормальный, но только похожим. Главное отличие от торча - то как собирается вычислительный граф. В торче граф динамичен, его можно менять на лету. В тф граф статичен - один раз создали и баста.
В тф можно включить eager execution, что сделает граф динамичным, но вы моментально просядите по скорости.
Как разница в типе графа влияет на обучение нейронок? Это ускоряет сложные, жирные пайплайы, но часто связывает руки. Аккумуляция градиентов, обучение разных кусков модели с разным лр, постепенный фриз/анфриз модели - в торче все это реализовать довольно легко.
В тензорфлю - сложно или невозможно.
К примеру акум градиментов в можно сделать только через кастом трейн луп; На стаковерфлоу один человек предложил устанавливать лр=0 в момент аккумуляции и лр≠0 когда нужен апдейт. that's not how you do grad acum
Обучение разных кусов модели с разным лр - ок, можно сделать через кастом трейн луп в классе модели, но такая возможность появилась только в tf2.2.
Вообще все можно переписать на кастом трейн луп как в голом торче, но очень не хочется переписывать большой кусок пайплайна чтобы проверить одну идею.
Фриз/анфриз - это вообще забей. Все с весами должны сопровождаться компайлингом. Нет компайла - все работает как до первого компайла. Это особенно кек когда ты сделал модель, зафризил все слои, закомпайлил и анфризнул пару слоев. model.summary() выдаст что есть trainable веса.
В реальности веса модели апдейтится не будут. Верно и обратное.
Обычный подход с апдейтом модели на лету через колбек не работет. Компайлить модель в колбеке нельзя. Хочешь постепенно анфризить? Стопь трейнинг через колбек, анфризь, компайль, перезапускай.
Отступив с одной грабли ты моментально наступаешь на другую: как учитывается номер эпохи при этих плясках? Не поедет ли у меня лр шедулеры?
Иногда нужно прокинуть константы в атрибутах модуля. Тф их просто удалит. Потому что это не тф вариаблы. Пикли или делай отдельный класс с атрибутом модуля.
Хотя самый большой кек это то как тф делает шафл. Чтобы шафить датасет, нужно заполнить шафл бафер, в котором хранятся не индексы объектов в памяти, а сами объекты. То есть чтобы 100% шафлить датасет, вам нужно создать его копию в памяти.
Текущий шафлинг в тф не шафлит нормально, если шафл бафер ≠ 100%. Я пробовал разные подходы, все давали 50%+ ранговую корреляцию между индексами исходного датасета и индексами датасета после шафла. В идеале это число должно быть 0%.
Когда в следующий раз будешь недоволен своими лернинг курвами, или тебе будет плохо от того что эксперимент не удался, просто вспомни что кто-то пишет нейронки на тф.
@dsunderhood Лучше писать то что думаешь 5 дней, как прошлый, чем 7 дней писать то о чем не хочется!
лучше сгореть за 5 дней, чем тлеть 7 дней twitter.com/SiliconBangalo…
Мне нравится проекты без доки. Зачем читать доку, которую никто не апдейтит, и в которой тебя нарочно или намерено наебут, если можно посмотреть код и узнать как он работает самому?
Девелоперы любят играть в дженгу наоборот. Правила просты: ты докидываешь новые фичи в код базу, код постепенно протухает. Текущий пайплайн в один момент наебнется или работать с ним станет просто невыносимо. Проигрывает тот, чьи фичи были смержены последними.
Чтобы такого не было за кодом нужно следить. Код нужно рефакторить постепенно, эволюционно. Следуйте правилу бойскаута: оставьте код базу в лучшем состоянии, чем она была до вашего прихода.
Чтобы такого не было за кодом нужно следить. Код нужно рефакторить постепенно, эволюционно. Следуйте правилу бойскаута: оставьте код базу в лучшем состоянии, чем она была до вашего прихода.
Если код база уже не очень, то без революции не обойтись. А революции не бывают бескровны.
Долгое время я писал код только в джупитер ноутбуках. Я был "press button and see what will happen" программист. Сейчас пишу в основном в py скриптах. Джупитер использую если нужно построить графики, сделать анализ или просто поиграться ("press button...").
Для джупитера я использую вот такой темплейт. Он помогает вспомнить зачем я что-то делал и шерить результаты в команде так намного проще. Рекомендую.
Среда
Уехать из РФ в Финляндию я захотел в 14 лет, когда впервые побывал в этой замечательной стране. В последствии, когда я путешествовал по Европе, я понял что не ошибся.
В 18 я поступил в МЭИ, на третьем курсе узнал что есть программа двух дипломов МЭИ-LUT: один год мастера учишься в России, один - в LUT, универ возле границы Финляндия-Россия.
Я начал готовится к поступлению. Нужно было сдать английский, показать хорошие оценки и написать мотивационное письмо.
Я сдавал TOEFL. Экзамен состоит из 4 частей: reading, listening, speaking и writing.
С первыми двумя особых проблем не было. Еще когда я играл в покер мне повезло познакомиться с людьми, которые читали литературу на англ, смотрели TED и курсеру и фильмы в оригинале. Я просто перенял их хорошие привычки.
В начале читать и воспринимать речь на слух было тяжело, но потом привык.
C speaking и writing все было сложнее. Я поковырялся в интернете, посмотрел видео на ютубе от людей кто уже сдал экзамен чтобы понять что меня ждет. Примерно прикинул свою стратегию подготовки.
Идейно все было просто: каждый день я брал новую тему writing из базы TOEFL и писал по ней сочинение + 15 минут разговаривал по теме speaking. Раз в неделю я решал новый вариант экзамена. Все очень просто.
Если вы хотите чему то научится, или развить в себе новую привычку - просто делайте это каждый день. Не нужно фанатизма, не нужно переступать через себя. consistency > intensity. 15 минут в день через год дают 90 часов практики.
Я начал готовиться за год до экзамена, суммарно вышло часов 120 на подготовку.
С оценками проблем не было, моего среднего балла вполне хватало. Мотивационное письмо тоже не составило труда: тогда мне еще реально хотелось толкать солнечную энергетику в гору.
Настоящие проблемы начались когда нужно было получить одобрение от кафедры и от института. Я попал в жернова бюрократии. Нужно было собрать тысячу бумажек, поговорить со всеми преподавателями следующего года.
Был второй вариант, вариант без боли: взять академ, отучиться в Финляндии, вернуться в РФ доучиться год мастера меня не устраивал. С моего института так сделали все кроме меня.
Вообщем было тяжело, но я справился. Бумаги собраны, печати проставлены.
Я выбрал общагу где буду жить. Смотрел чтобы на фотки обязательно были березы.
Мне позвонили из администрации общежитий и сказали что там где я хочу все места были заняты. Я сказал что мне нужны березки, они ответили "Oh, ok, I see". И потом дали вместо березок самый крутой домик: он был новый и совсем близко к универу. Я думаю что тогда я угадал пароль :)
Потом, когда я уже был в Финляндии, мой универ все равно подгадил: меня хотели кикнуть на академ удаленно, без моего ведома и участия :)
Для тех кто хочет участвовать в соревнованиях на кагле, но не хочет покупать для этого тачку: Google Colab Pro дает доступ возможность гонять 4 ноутбука с P100 одновременно всего за 10 баксов в месяц. Это самое выгодное предложение облачных вычислений что есть на рынке.
Единственный минус - писать надо в ноутбуках. Но и он решается, если поставить VS Code на Google Colab. См как здесь: youtu.be/7kTbM3D02jU
В МЛ очень важна хорошая код база: разделение кода на логические блоки, использование конфигов, логгинг метрик и артефактов, версиционирование даты, версиционирование моделей, ведение журнала экспериментов. Почему? Почему не перекидывание ноутбуков через стенку?
Ваше финальное решение - это пайплайн. Пайплайн это набор элементов, у каждого элемента есть свои гиперпараметры. Какую дату использовать для трейна? Как выбрать сэмпл для трейна? Как препроцесить дату? Какую модель брать? Какие параметры модели выбрать?
Организация пайплайна, при которой вероятность ошибки меньше, оптимизация параметров и добавление нового функционала легче - правильная. Организация журнала наблюдений, которая дает хороше понимания прошлых экспериментов и достаточный prior при проведении новых - правильная.
Как этому научится? Практика! Не стесняйтесь смотреть в код открытых проектов: sklearn, pytorch lighting/catalyst, kedro. Любое репо с 1к звезд подойдет. Кроме. fastai. Подумайте почему код написан так, а не иначе.
Возьмите любое новое соревнование на кагле, скачайте Cookiecutter Data Science репо, продумайте какие блоки необходимы для решения: загрузка даты, датасет, процессер, модель, постпроцессер.
Продумайте как эти блоки будут меняться по ходу ваших итераций. Подумайте что нужно сделать чтобы трейн, предикт, оптимизация параметров запускалась одной командой (sh do_smth.sh). Пробуйте, ошибайтесь, думайте почему вы ошиблись и как это исправить.
Регулярно задавайте себе вопрос: если бы я писал проект с начала, то я написал бы его так же? Если ответ нет, то почему? Если да, то поздравляю! Вы прошли дата саенс.
Меня кстати забанили на кагле. Я создал "Х5 Private Sharing Club" группу на кагле, добавил туда чела, который больше всех бомбил с приват шеринга, а сам вышел. Получилось он в клубе один остался, кек. Заскринил, кинул в ОДС, через пару часов прилетел бан.
Саппорт нехотя отписался что это харасмент и мне не место на кагле. Потом кстати правила переписали, включив "мелкий харасмент" в список причин для бана.
Потом конечно было неловко:
- Я вижу из CV что вы любите соревнования по мл, какой у вас ник на кагле?
- А меня там забанили за харасмент, дело в том что ...
- Пожалуй, мы вам перезвоним.
Но нет худа без добра. Мне после бана Валера позвонил и говорит:
- Денис, пойдешь к нам в Х5 на Хэд оф Приколы?
- Валера, это топовая должность или есть кто-то выше?
- Выше head-a только hat.
Я понял что у них уже все неплохо с приколами и сказал что подумаю. Отдел так и не открыли.
Ладно, такого не было, я это придумал. В реальности меня ни на одном собеседовании не спрашивали ни про соревнования, ни про кагл. Вот настолько он всем интересен в индустрии в Европе.
И сейчас, если кому интересно, я совсем не токсичный.
Это раньше, когда я был студентом, у меня было много сил и свободного времени. А теперь я прихожу с работы... вернее сказать переключаюсь между ноутбуками, и у меня просто нет когнитивных ресурсов чтобы кого то тонко подъебывать в интернете. А открыто оскорблять - пошло.
Я начинаю сомневаться в том, что в тф можно шафлить датку без дикого оверхеда по памяти.
Я писал свой мастер диплом по теме предикта выработки электроэнергии солнечными панелями и последующей оптимизации работы батареи. Я договорился что мой диплом в РФ будет основан на переводе Финского диплома, но с числами из нашей местности.
Перед защитой в РФ, мой научрук рассказал мне историю. Один из студентов защищал работу по теме "Метод оптимизации выработки ГЭС методом градиентного спуска". На защите все внимательно слушали его работу. Потом председатель комиссии встал и сказал:
- Молодой человек, я работал на ГЭС 30 лет! Я могу спуститься к генератору, в турбинный зал, к отметке рабочего колеса... А куда вы спускаетесь в своей работе я так и не понял!
Тогда я подумал что это байка, но на защите мне задавали примерно такие же вопросы.
Я ставлю картины на бэк в зуме. На прошлой неделе у меня стояла "Над вечным покоем" Левитана, на этой - "Озеро. Русь".
Четверг
Для одной задачи на работе понадобилось найти корни квадратного уравнения. А говорят в дс не нужна математика!
@dsunderhood Надеюсь, ты решил задачу через байесовскую оптимизацию, соымещенную с TPE?
Да я до сих пор ебусь с этой задачей... непонятно как эти инпуты в сетку вставить и лосс задать 🤔 twitter.com/stalkermustang…
Мой блог на медиуме - medium.com/@tearth. Я начал его вести после того как встретился в офлайне с @viglovikov. Он и предложил. В течение года я писал о том как участвовал в соревнованиях и чему научился.
Потом из-за блога я получил работу в кольце: хэд оф дс решал похожую проблему, нашел меня в линкедине и пригласил на интервью. Мы подружились.
Потом я подался спикером на АИ конфу. Из всех спикеров, я был самым джуниором. Но были залайканные посты в блоге, мое выступление одобрили. На конференции я познакомился с моим будущим коллегой в юнити.
Вообще, я сейчас задумался, @viglovikov сделал много вещей, которые позитивно повлияли на мою жизнь. За это я ему благодарен.
Как вы понимаете, это был байт на ретвит.
Вести блог это полезная активность:
- Мысли "утрясаются" когда пишешь пост. Блог помогает освежить и систематизировать накопленные знания.
- Люди любят качественный контент. Чтобы его произвести нужно копать вглубь. Блог мотивирует это делать регулярно.
- Мало кто об этом задумывается, но своими постами вы помогаете людям. Отдавать всегда приятно.
Плюс дополнительные бонусы, они не должны быть самоцелью при блоггинге:
- Деньги: со своего блога я получаю 40-50$ в мес. $/час от блога очень мал, лучше вложить силы в самообразование, которое на длинной дистанции принесет больше. Впрочем, одно другому не мешает.
- Приглашения на работу: у меня было три приглашения на собеседование из-за блога за три года.
- Слава... Well, просто нужен был третий пункт.
@dsunderhood @viglovikov Что нужно, чтобы заставить себя вести блог, когда все вокруг умнее тебя, а ты только и способен - писать банальности для джунов?
Хорошая идея для контента - делать обзоры статей. Открываешь понравившуюся статью, читаешь, ходишь по ссылкам, укладываешь идеи из нескольких статей в одну историю - готово! Пример - towardsdatascience.com/breakthroughs-… = обзор статьи + мысли автора. Очень хороший пост. twitter.com/kpower_andrey/…
Еще пример: towardsdatascience.com/whats-wrong-wi…
Тут автор взял куски из clean code/coder и переписал под дс: towardsdatascience.com/clean-machine-…
Все что выше - хорошие, проработанные посты.
Пятница
Почему про некоторые функции tf я узнаю из блог поста рандомного чела на медиуме, а не из оф документации?
Здоровье как свежий воздух: ты его не замечаешь, пока не испортишь. Тред про гаджеты и здоровье.
Мой день начинается с пробуждения. Меня будет умный будильник. Он равномерно повышает яркость за пол часа до времени пробуждения. Таким образом я как бы просыпаюсь сам. Если света в рожу недостаточно, то подключается звуковой сигнал - пение птиц.
Зимой в Финляндии это маст хэв если вы плохо просыпаетесь.
После того как проснулся я медитирую. Я делаю это дважды: утром и сразу после работы. Сижу по 20 минут, трекаю meditation timer. Советую это делать всем!
Я не люблю плотно завтракать. Свой день я начинаю с свежего смузи. Я кладу в блендер свежие фрукты или размороженные ягоды, добавляю йогурт и перемешиваю. Получается очень вкусно и полезно. Блендер я купил за 25 евро - одно из самых выгодных приобретений в моей жизни.
После того как я позавтракал я пью кофе. Раньше я пил три чашки/два двойных эспрессо в день, но сейчас перехожу на одно двойное + два зеленых чая в день. Не пью ничего после 16 часов. Сон стал лучше.
Кофе полураспадается за 4-7 часов. Это значит что двойное эспрессо в 16 часов - это тоже самое что одинарное в 22. Больше про кофе и здоровый сон можно почитать тут, книжка и гайд - огонь! notion.so/25336436042c4c…
Я работаю за столом у которого можно регулировать высоту подъема. Такие столы очень популярны в Финляндии. Где-то 30% времени я работаю стоя.
Я работаю по pomodoro - 25 минут работы, 5 минут отдыха. Во время отдыха я делаю небольшую зарядку, хожу по квартире, смотрю в окошко или готовлю себе кофе/чай. Использую apps.apple.com/us/app/be-focu…
После работы я гребу на water rower-е. В бак налита вода. Когда гребешь она приятно журчит. Это меня успокаивает. Проплываю за день 2км (это мало, но я только недавно начал).
Иногда участвую в гонках с другими людьми. Заканчиваю в топ10 на 500 метрах. В топе похожу задроты с полу-пустым баком. Надеюсь и я там скоро буду!
Пожалуй это все. Я долго файнтюнил свой день, и до сих пор это делаю. Надеюсь мои привычки помогут и вам!
Хочется пописывать про мои любимые сорта смузи и про то какое тф говно в твитер иногда, но не хочется развивать аккаунт с нуля. Может быть мне приватизировать народный твитер? Какие подводные?
Суббота
Почему стоит идти в DS сейчас? Уходить от создания базовых приложений/сервисов/сайтов в сторону NLP, ML и др. И начать развиваться в DS. В чем прелести и перспектива работать в этой сфере, в отличии от рядовой работы программиста на java(например)? @dsunderhood
>В чем прелести? Не знаю. Мне просто доставляет удовольствие ставить эксперименты, получать фидбэк, обновлять свое понимание системы и двигаться дальше. twitter.com/bakurkinkirill…
>В чем перспектива? МЛ уже внедрен в нашу жизнь, и со временем его станет еще больше. МЛ приносит деньги (не всем), а что приносит деньги - того и будет больше.
>Стоит ли перекатываться в дс? Я бы посоветовал рядовому программисту хотя бы чу-чуть развеять туман войны над дс. Понять базовые принципы зачем дс/мл нужен, что он делает и как работает. К сожалению, я не встречал нормальных курсов или обзоров по теме. Мб в комментариях помогут.
Если хочется углубиться, пройдите курс по мл и попросите лида ставить вас в проекты с дата саентистами, тк хотите научиться. Начинать свой путь в дс с курс + кагл или хакатон сразу - не для всех. Имхо многие забили на дс после кагл мясорубки.
Хорошие курсы, лекции есть на ютубе
Classic ML - coursera.org/specialization…
CV - cs231n.stanford.edu/syllabus.html
NLP - web.stanford.edu/class/cs224n/
Если понравится - то идите конечно!
Я все еще ковыряю тф датасет шафл. Сейчас буду делиться наблюдениями. Пока. что все как в меме "погружаюсь".
Текущий сетап это: tfrecords → батч → процесинг → кеш → шафл → репит, интерлив → сеть.
Тф датасет по сути это генератор. Во время трейна происходит проход по батчам, полученные батчи пропускаются через сеть. Сеть считает предикт, потом лосс, потом апдейтит веса и запрашивает новый батч.
Если мы хотим шафлить датасет, то в начале обучения первые n (размер шафл бафера) батчей заполняют шафл бафер. Во время обучения из шафл бафера рандомно выбирается батч который идет в модель. Батч из датасета идет на его место в бафер.
Проблема такого бафера в том, что
а) При небольшом размере шафл бафера шафлинг отсутствует. При шафл бафере = 10% ранг корреляция между позицией батча в исходном датасете и зашафленном составляет 90+%.
б) Отсутствует шафл примеров между батчами.
Это не критические проблемы, но они могут немного ухудшить скор. Когда ты выдавливаешь из модели максимум, такие просадки недопустимы.
Я ±решил проблему (а) путем прохода через датасет на первой эпохе. В шафл бафер помещается каждый 1/n батч, где n - размер бафера. Во время обучения сеть с вероятностью p выбирает пример их шафл бафера, 1-p - из датасета.
Визуально получается чуть лучше чем бафер в тф. На картинке распределение сэмплов в батче i, ось x - индекс сэмпла, y - каунт сэмпла в батче. Видно что новый бафер берет больше примеров из более "далеких" батчей. По скору тоже чуть выше. Но это не решает проблему (б).
Решить проблему (б) можно путем сплита большого батча в несколько маленьких. По хорошему эти батчи надо отдельно кешить. Для этого нужно писать кастом кешинг, тк стандартный кешинг кешит все в один файл и мы вернемся к старому корыту.
Кастом кешинг возможен только через пиклинг датасетов/батчей в датасете или серилизацию в tfrecords. Первый оч медленный. Второй оч сложный и тоже медленый: нужно перегонять примеры в байтовую строку на лету.
Такая перегонка возможно только для 1d тензоров, на матрицы ругается. Так что матрицы нужно сплитить в 1д тензоры, а потом контачить их обратно в матрицы. tensorflow.org/tutorials/load…
Охх, непросто, ой непросто!
Воскресенье
На этом все. Если хотите пообщаться - пишите в лд linkedin.com/in/denis-vorot…
Обнял.