Forwarded from Плюшевый Питон
Как мотивировать себя? Три ошибки
#soft_skills
Меня просили написать о мотивации. Это вообще одна из самых важных тем. Откуда брать силы на изучение новых технологий и саморазвитие? Что помогает, а что мешает нашей мотивации? Как поддерживать себя, когда хочется сдаться и всё бросить?
TLDR:
1. Мотивация - не причина, а следствие
2. Фокус на процессе (приложении усилий), а не на результате
3. Подбадривание себя, а не самокритика
Есть несколько ошибок, которые легко допустить. Первая из них - думать, что мотивация является причиной, а не следствием. Тот, кто так думает, откладывает своё развитие на потом, "когда будет подходящее настроение". Этот момент может и не наступить. Мотивация - результат осознанных усилий с чётким пониманием цели. Преодолеть себя, победить сиюминутную лень, сделать что-то полезное для своего развития - и тогда получить в награду мотивацию. В это, может быть, трудно поверить, но если понаблюдаете за собой, то увидите, что самая сильная и "долгоиграющая" мотивация бывает не перед началом работы, когда ещё ничего не сделано, а после того, как сделали несколько шагов к цели, получили хотя бы какие-то результаты.
Но при этом зацикливаться на результате тоже неправильно, это вторая ошибка. Выучить Питон, поменять карьеру, взяться за трудный проект - звучит страшно и даже невозможно, но если идти к цели постепенно и думать только о непосредственном следующем шаге, то всё обычно получается. Мы движемся вперёд тогда, когда делаем следующий шаг, а не тогда, когда уже дошли. Мне очень сильно помогает измерять свой прогресс не достижениями, а количеством вложенного времени. Парадоксально? Но что зависит от меня напрямую - приложить усилия или получить результат? Только первое. А потраченное время - это хорошая метрика для оценки приложенных усилий. Результат же почти всегда зависит не только от меня, но и от других участников процесса, от обстоятельств, от сложности задачи и так далее.
С этим связана третья ошибка - ругать себя за неудачи. Порой мы для себя бываем самыми жестокими и беспощадными критиками. Это здорово замедляет развитие. Ругать себя - значит лишать себя воли и мотивации. Кстати, доказано экспериментально. Негатива в жизни и так хватает, лучше поддерживать и подбадривать себя, хвалить себя (да, даже так) за прилагаемые усилия и время, вложенное в саморазвитие. Это правда эффективно, как бы наивно ни звучало. Помогает получать положительные эмоции в процессе работы над собой и над трудными задачами. Для хорошей мотивации нужны положительные подкрепления, так устроен мозг. Ежедневные маленькие победы над собой, своей ленью, страхами, заблуждениями приводят к тому, что высокая мотивация превращается в полезную привычку.
#soft_skills
Меня просили написать о мотивации. Это вообще одна из самых важных тем. Откуда брать силы на изучение новых технологий и саморазвитие? Что помогает, а что мешает нашей мотивации? Как поддерживать себя, когда хочется сдаться и всё бросить?
TLDR:
1. Мотивация - не причина, а следствие
2. Фокус на процессе (приложении усилий), а не на результате
3. Подбадривание себя, а не самокритика
Есть несколько ошибок, которые легко допустить. Первая из них - думать, что мотивация является причиной, а не следствием. Тот, кто так думает, откладывает своё развитие на потом, "когда будет подходящее настроение". Этот момент может и не наступить. Мотивация - результат осознанных усилий с чётким пониманием цели. Преодолеть себя, победить сиюминутную лень, сделать что-то полезное для своего развития - и тогда получить в награду мотивацию. В это, может быть, трудно поверить, но если понаблюдаете за собой, то увидите, что самая сильная и "долгоиграющая" мотивация бывает не перед началом работы, когда ещё ничего не сделано, а после того, как сделали несколько шагов к цели, получили хотя бы какие-то результаты.
Но при этом зацикливаться на результате тоже неправильно, это вторая ошибка. Выучить Питон, поменять карьеру, взяться за трудный проект - звучит страшно и даже невозможно, но если идти к цели постепенно и думать только о непосредственном следующем шаге, то всё обычно получается. Мы движемся вперёд тогда, когда делаем следующий шаг, а не тогда, когда уже дошли. Мне очень сильно помогает измерять свой прогресс не достижениями, а количеством вложенного времени. Парадоксально? Но что зависит от меня напрямую - приложить усилия или получить результат? Только первое. А потраченное время - это хорошая метрика для оценки приложенных усилий. Результат же почти всегда зависит не только от меня, но и от других участников процесса, от обстоятельств, от сложности задачи и так далее.
С этим связана третья ошибка - ругать себя за неудачи. Порой мы для себя бываем самыми жестокими и беспощадными критиками. Это здорово замедляет развитие. Ругать себя - значит лишать себя воли и мотивации. Кстати, доказано экспериментально. Негатива в жизни и так хватает, лучше поддерживать и подбадривать себя, хвалить себя (да, даже так) за прилагаемые усилия и время, вложенное в саморазвитие. Это правда эффективно, как бы наивно ни звучало. Помогает получать положительные эмоции в процессе работы над собой и над трудными задачами. Для хорошей мотивации нужны положительные подкрепления, так устроен мозг. Ежедневные маленькие победы над собой, своей ленью, страхами, заблуждениями приводят к тому, что высокая мотивация превращается в полезную привычку.
Forwarded from Aspiring Data Science
#sklearn #ml #timeseries #cv #retrainfrequency
О недостатке sklearn-овской реализации TimeSeriesSplit. Важной частью работы дата сайентиста является обучение моделек на данных, имеющих временное измерение. В них нельзя применить простое Kfold разбиение на группы, т.к. обучение "на будущем" в реальном использовании невозможно, а в кросс-валидацию внесёт оптимистичное смещение (bias, data leak). Поэтому почти всегда с такими данными используется вариация TimeSeriesSplit, в базовой версии имеющей сигнатуру (n_splits=5, *, max_train_size=None, test_size=None, gap=0). Минимальный размер трейна тут всегда равен размеру теста (что логично), максимальный может регулироваться параметром. gap позволяет делать разрывы между фолдами, чтобы нивелировать влияние корреляции между концом трейна и началом теста (и совсем избежать пресловутого смещения). В целом мощная функция, правда, есть недочёт. На больших данных каждый fit идёт очень долго и стоит дорого, а predict быстр и дёшев. А предсказания мы делаем всего лишь на текущий test, хотя могли бы делать на все оставшиеся данные. Для чего последнее могло бы понадобиться? А чтобы посмотреть, как долго держится предсказательная сила модели, и сделать вывод о требуемой частоте переобучения. Например, пройти по такому "длинному предикту" скользящим окном в неделю, месяц, полгода, и в рамках окна уже считать нужные метрики (точность, полноту, RMSE, к примеру). Этого можно добиться, субклассировав TimeSeriesSplit и расширяя её test_index, либо написав свою cross_validate и вызывая метод split() самостоятельно.
О недостатке sklearn-овской реализации TimeSeriesSplit. Важной частью работы дата сайентиста является обучение моделек на данных, имеющих временное измерение. В них нельзя применить простое Kfold разбиение на группы, т.к. обучение "на будущем" в реальном использовании невозможно, а в кросс-валидацию внесёт оптимистичное смещение (bias, data leak). Поэтому почти всегда с такими данными используется вариация TimeSeriesSplit, в базовой версии имеющей сигнатуру (n_splits=5, *, max_train_size=None, test_size=None, gap=0). Минимальный размер трейна тут всегда равен размеру теста (что логично), максимальный может регулироваться параметром. gap позволяет делать разрывы между фолдами, чтобы нивелировать влияние корреляции между концом трейна и началом теста (и совсем избежать пресловутого смещения). В целом мощная функция, правда, есть недочёт. На больших данных каждый fit идёт очень долго и стоит дорого, а predict быстр и дёшев. А предсказания мы делаем всего лишь на текущий test, хотя могли бы делать на все оставшиеся данные. Для чего последнее могло бы понадобиться? А чтобы посмотреть, как долго держится предсказательная сила модели, и сделать вывод о требуемой частоте переобучения. Например, пройти по такому "длинному предикту" скользящим окном в неделю, месяц, полгода, и в рамках окна уже считать нужные метрики (точность, полноту, RMSE, к примеру). Этого можно добиться, субклассировав TimeSeriesSplit и расширяя её test_index, либо написав свою cross_validate и вызывая метод split() самостоятельно.
Forwarded from Сиолошная
RL + NLP = ❤️
Статейка "Describe, Explain, Plan and Select: Interactive Planning with Large Language Models Enables Open-World Multi-Task Agents" рассказывает о том, как прикрепить большие языковые модели (LLM) к обучению агентов в сложных средах.
Картинка вкратце описывает суть происходящего:
1) LLM генерирует план, который должен быть выполнен, чтобы добиться награды
2) Selector выбирает, что нужно сделать сейчас, передает это в агента на исполнение
3) Агент сообщает LLMке в текстовом виде, каких успехов он добился, а чего сделать не смог (прям как я маме😂 )
4) формируется новый план, и пункты 1-3 повторяются итеративно
И всё это происходит в виде диалога с чатботом!
Ну и всё это канечно же бустит перформанс: Our experiments mark the milestone of the first multi-task agent that can robustly accomplish 70+ Minecraft tasks and nearly doubles the overall performances
Жду, когда больше техник из NLP для работы с LLM (вроде этого) придут в другие области.
Код будет тут, но пока его нет.
Статейка "Describe, Explain, Plan and Select: Interactive Planning with Large Language Models Enables Open-World Multi-Task Agents" рассказывает о том, как прикрепить большие языковые модели (LLM) к обучению агентов в сложных средах.
Картинка вкратце описывает суть происходящего:
1) LLM генерирует план, который должен быть выполнен, чтобы добиться награды
2) Selector выбирает, что нужно сделать сейчас, передает это в агента на исполнение
3) Агент сообщает LLMке в текстовом виде, каких успехов он добился, а чего сделать не смог (прям как я маме
4) формируется новый план, и пункты 1-3 повторяются итеративно
И всё это происходит в виде диалога с чатботом!
Ну и всё это канечно же бустит перформанс: Our experiments mark the milestone of the first multi-task agent that can robustly accomplish 70+ Minecraft tasks and nearly doubles the overall performances
Жду, когда больше техник из NLP для работы с LLM (вроде этого) придут в другие области.
Код будет тут, но пока его нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from BOGDAN
примерно об этом вся книга Deep Work + рекомендую подкаст её автора
в частности, Моя текущая система планирования за 20 минут: https://youtu.be/dOQpZlZuySE
в частности, Моя текущая система планирования за 20 минут: https://youtu.be/dOQpZlZuySE
YouTube
Core Idea: Time Management
Download my FREE Deep Life Guide HERE: https://bit.ly/3QBIcug
Cal Newport first defines what a good time management system means. Then he describes in detail the three principles that are essential for any effective time management system. Cal describes…
Cal Newport first defines what a good time management system means. Then he describes in detail the three principles that are essential for any effective time management system. Cal describes…
Forwarded from BOGDAN
YouTube
Focus Toolkit: Tools to Improve Your Focus & Concentration
In this episode, I provide a list of behavioral, nutritional, and supplement-based tools you can use to improve your ability to get into a focused state to do mental or physical work. I explain science-supported strategies for transitioning into focus, maintaining…
Forwarded from Dima
Посмотри что-нибудь на edx.org про computer science, там бесплатно от гарварда
/стенфорда/крутых_чуваков курсы. У меня глянь симулятор сборки компа sukharev.io/textbook (тоже бесплатно, там блокается проход после 2 урока, если понравится, напишешь мне — я проведу кастомер интервью с тобой, чтобы сделать симулятор кайфовее и открою весь доступ)) я так собираю фидбек
/стенфорда/крутых_чуваков курсы. У меня глянь симулятор сборки компа sukharev.io/textbook (тоже бесплатно, там блокается проход после 2 урока, если понравится, напишешь мне — я проведу кастомер интервью с тобой, чтобы сделать симулятор кайфовее и открою весь доступ)) я так собираю фидбек
Forwarded from Cracking code interview and USA life
Алоха. Все продолжаем готовиться к интервью. В этот раз мок интервью по систем дизайну.
В первой части поговорили о Twitter Timelime.
Также параллельно стараемся улучшить английский, проводя такие сессии.
https://www.youtube.com/watch?v=mjEh_c2nqZU
В первой части поговорили о Twitter Timelime.
Также параллельно стараемся улучшить английский, проводя такие сессии.
https://www.youtube.com/watch?v=mjEh_c2nqZU
Forwarded from New Yorko Times (Yury Kashnitsky)
Книга Machine Learning Simplified
#books #ml #collaboration #opensource
Порекомендую бесплатную книгу “Machine Learning Simplified” https://themlsbook.com Андрея Вульфа (Andrew Wolf). Андрей был Head of Data в Rarible, сейчас ушел на фриланс в web3, параллельно пилит трейдинг-алгоритмы для крипты в надежде открыть свой собственный фонд.
Если б я писал книгу по ML (что весьма разумно после разработки целого курса по ML), она была бы похожа на эту. Хороший баланс теории и практики, примеры сопровождаются кодом, из интересного - читая книгу, можно выделить часть и прокомментировать, таким образом, книга превращается в форум. На Goodreads можно найти мою рецензию https://www.goodreads.com/book/show/60297347-machine-learning-simplified.
Будет неплохим дополнением к https://mlcourse.ai, некоторые темы освещены лучше да и написаны на хорошем английском. А практику лучше из mlcourse.ai брать.
Я немного поработал с Андреем, оформил код, сопровождающий книгу, в виде Jupyter Book – https://code.themlsbook.com (кстати, для тех, кто хочет опубликовать свою книгу с кодом, look no further – Jupyter Book https://jupyterbook.org это то что надо).
Неплохо было бы добавить в книгу примеров кода и упражнений. Если хотите поучаствовать – пишите Андрею на [email protected]. Андрей утверждает, что “в долгу не останется”, будем считать, это значит, что подзаработать таким образом тоже можно.
Требования (копирую из объявления Андрея в ODS):
- знание английского
- понимание того, как работают алгоритмы: decision trees, svm, naive bayes, ensembles (bagging/boosting/stacking)
- понимание основ мл: hyperparameter tuning, evaluation techniques etc
- опыт в преподавании или хотя бы понимание того, как объяснять алгоритмы простым языком (включая математику) is a big plus
#books #ml #collaboration #opensource
Порекомендую бесплатную книгу “Machine Learning Simplified” https://themlsbook.com Андрея Вульфа (Andrew Wolf). Андрей был Head of Data в Rarible, сейчас ушел на фриланс в web3, параллельно пилит трейдинг-алгоритмы для крипты в надежде открыть свой собственный фонд.
Если б я писал книгу по ML (что весьма разумно после разработки целого курса по ML), она была бы похожа на эту. Хороший баланс теории и практики, примеры сопровождаются кодом, из интересного - читая книгу, можно выделить часть и прокомментировать, таким образом, книга превращается в форум. На Goodreads можно найти мою рецензию https://www.goodreads.com/book/show/60297347-machine-learning-simplified.
Будет неплохим дополнением к https://mlcourse.ai, некоторые темы освещены лучше да и написаны на хорошем английском. А практику лучше из mlcourse.ai брать.
Я немного поработал с Андреем, оформил код, сопровождающий книгу, в виде Jupyter Book – https://code.themlsbook.com (кстати, для тех, кто хочет опубликовать свою книгу с кодом, look no further – Jupyter Book https://jupyterbook.org это то что надо).
Неплохо было бы добавить в книгу примеров кода и упражнений. Если хотите поучаствовать – пишите Андрею на [email protected]. Андрей утверждает, что “в долгу не останется”, будем считать, это значит, что подзаработать таким образом тоже можно.
Требования (копирую из объявления Андрея в ODS):
- знание английского
- понимание того, как работают алгоритмы: decision trees, svm, naive bayes, ensembles (bagging/boosting/stacking)
- понимание основ мл: hyperparameter tuning, evaluation techniques etc
- опыт в преподавании или хотя бы понимание того, как объяснять алгоритмы простым языком (включая математику) is a big plus
Forwarded from Artificial stupidity
#statistics
Прекращайте использовать метод локтя в k-means.
Так называется недавно вышедшая статья от автора из университета Дортмунда. Немного кликбейтный заголовок, но статья весьма интересная.
Итак, как выглядит метод локтя?
1. Строим много кластеризаций k-means с разным количеством k;
2. Для каждого отдельного k считаем сумму квадратов внутрикластерных расстояний до центра кластера (within-cluster sum of squares, WCSS). Для sklearn это будет атрибут
3. "На глаз" выбираем такое k, где у нас происходит "перегиб" (отсюда и метод локтя) и WCSS перестает существенно уменьшаться. Это и будет итоговым числом кластеров k.
У такого метода есть один некоторые минусы, например, выбор k "на глаз". Потому в разных работах предлагались методы автоматизации метода локтя.
Как можно улучшить метод?
1. Jump method. Давайте искать максимум
2. L-method. Возьмем две линейных функции (перед перегибом и после). Выберем лучшую кусочно-линейную аппроксимацию.
3. Kneedle algorithm. Возьмем полиномиальную кривую (сплайн), нормализуем от 0 до 1. Сравним с диагональю. Берем последний максимум перед задаваемым threshold.
4. Улучшение шага 3. Давайте искать максимум для
5. В библиотеке pyclustering используется метод ElbowLen, которые считается
6. AutoElbow. Вычисляем ((x_k - 1)**2 + (y_k - 1)**2) / (x_k ** 2 * y_k **2) на нормализованном на [0,1] графике.
Все эти методы не лишены минусов. В статье приводятся примеры для разных наборов данных. Общий вывод - на достаточно разделимых кластерах и небольшом k все работает более или менее неплохо. Но если мы отходим немного от тепличных условий, все становится весьма плохо.
Мы можем отойти от эвристик над методом локтя и прочих геометрических манипуляций в сторону вариационных методов (предполагается, что они более теоретически обоснованы). В статье по ним проходятся весьма поверхностно, так что некоторые из них я не совсем понял ¯\_(ツ)_/¯
1. Variance Ratio Criterion (VRC). Считаем
2. Метод Mariott. Рассматривается детерминант ковариационной матрицы |W|.
3. KL-index. Давайте рассмотрим
4. Метод Pham. Считаем
Учитывая задачу кластеризации, можно придумать и критерии, основанные на расстояниях.
1. DUNN index.
2. David-Bouldin index.
3. Silhouette score.
Но это не все. Мы еще можем использовать теоретические подходы, основанные на теории информации.
1. Bayesian information criterion (BIC).
2. Akaike Information Criterion (AIC).
Ну и, напоследок, еще можно использовать симуляционный критерий.
1. В данном случае, мы считаем
А какой итоговый вывод?
Не использовать метод локтя. Предпочитаемыми методами авторы считают VRC (реализация sklearn), Bayesian Information Criterion (BIC) (материал с реализацией) или симуляционный критерий (GAP-статистику, материал с реализацией).
Прекращайте использовать метод локтя в k-means.
Так называется недавно вышедшая статья от автора из университета Дортмунда. Немного кликбейтный заголовок, но статья весьма интересная.
Итак, как выглядит метод локтя?
1. Строим много кластеризаций k-means с разным количеством k;
2. Для каждого отдельного k считаем сумму квадратов внутрикластерных расстояний до центра кластера (within-cluster sum of squares, WCSS). Для sklearn это будет атрибут
inertia_.3. "На глаз" выбираем такое k, где у нас происходит "перегиб" (отсюда и метод локтя) и WCSS перестает существенно уменьшаться. Это и будет итоговым числом кластеров k.
У такого метода есть один некоторые минусы, например, выбор k "на глаз". Потому в разных работах предлагались методы автоматизации метода локтя.
Как можно улучшить метод?
1. Jump method. Давайте искать максимум
SSE_k ** -Y - SSE_k ** -Y, где степень Y может варьироваться, но авторы предлагают брать Y=1/2 * dimensionality (то есть половина от размерности пространства признаков). 2. L-method. Возьмем две линейных функции (перед перегибом и после). Выберем лучшую кусочно-линейную аппроксимацию.
3. Kneedle algorithm. Возьмем полиномиальную кривую (сплайн), нормализуем от 0 до 1. Сравним с диагональю. Берем последний максимум перед задаваемым threshold.
4. Улучшение шага 3. Давайте искать максимум для
SSE_k-1 - SSE_k / (SSE_k - SSE_k+1) - 1. 5. В библиотеке pyclustering используется метод ElbowLen, которые считается
(x_k*(y_0 - y_1) + (x_1 - x_0)*y_k + (x_0*y_1 - x_1*y_0)) / (sqrt((x_1 - x_0)**2 + (y_1 - y_0)**2)), где x0, x1, y0, y1 - минимумы и максимумы графика.6. AutoElbow. Вычисляем ((x_k - 1)**2 + (y_k - 1)**2) / (x_k ** 2 * y_k **2) на нормализованном на [0,1] графике.
Все эти методы не лишены минусов. В статье приводятся примеры для разных наборов данных. Общий вывод - на достаточно разделимых кластерах и небольшом k все работает более или менее неплохо. Но если мы отходим немного от тепличных условий, все становится весьма плохо.
Мы можем отойти от эвристик над методом локтя и прочих геометрических манипуляций в сторону вариационных методов (предполагается, что они более теоретически обоснованы). В статье по ним проходятся весьма поверхностно, так что некоторые из них я не совсем понял ¯\_(ツ)_/¯
1. Variance Ratio Criterion (VRC). Считаем
((SSE_1 - SSE_k) / (k - 1)) / (SSE_k / (n-k)). Авторы рассматривают это, как некий аналог F-статистики.2. Метод Mariott. Рассматривается детерминант ковариационной матрицы |W|.
3. KL-index. Давайте рассмотрим
DIFF_k = (k - 1)**(2/p)*SSE_k-1 - k**(2/p)*SSE_k. Потом ищем максимум KL(k) = |DIFF_k / DIFF_k+1|.4. Метод Pham. Считаем
SSE_k / (alpha_k * SSE_k-1), где alpha_2 = 1 - 3/(4*d) и alpha_k = 5/6 * alpha_k-1 + 1/6 (что моделирует ожидаемое изменение равномерного распределения). Учитывая задачу кластеризации, можно придумать и критерии, основанные на расстояниях.
1. DUNN index.
2. David-Bouldin index.
3. Silhouette score.
Но это не все. Мы еще можем использовать теоретические подходы, основанные на теории информации.
1. Bayesian information criterion (BIC).
2. Akaike Information Criterion (AIC).
Ну и, напоследок, еще можно использовать симуляционный критерий.
1. В данном случае, мы считаем
GAP_k = E[log(SSE'_k)] - log(SSE_k). И выбираем наименьший k, где GAP_k >= GAP_k-1 - std_k+1. Где SSE'_k - базовый SSE, а std_k+1 - среднеквадратичное отклонение оценок. А какой итоговый вывод?
Не использовать метод локтя. Предпочитаемыми методами авторы считают VRC (реализация sklearn), Bayesian Information Criterion (BIC) (материал с реализацией) или симуляционный критерий (GAP-статистику, материал с реализацией).
Forwarded from Техножрица 👩💻👩🏫👩🔧
Ладно, не буду больше откладывать и напишу про свою линию исследований про TDA в NLP.
Все началось с моей старой, совсем неказистой статьи https://www.mathnet.ru/php/archive.phtml?wshow=paper&jrnid=ista&paperid=225 (годов 2018-2019), которую я написала в аспирантуре с небольшой помощью друга (соавтора) и научника. По всей видимости, эти два человека - единственные, кто прочитал ее целиком (рецензирование в журнале Интеллектуальные системы, мягко говоря, хромает), поэтому я не уверена ни в том, что там нет ошибок, ни в том, что это не велосипед.
Теоретическая часть статьи (сейчас будет скриммер в виде мат.терминов) заключалась в том, что я определила персистентные гомологии (условно) "на Марковских цепях" через прокси-конструкцию - неориентированный граф, вершины которого совпадают с состояниями Марковской цепи, а вес ребра между двумя состояниями соответствует сумме вероятностей перехода из первого во второе и из второго в первое. На таком графе уже можно ввести фильтрацию и через нее пробросить определение персистентности, порадовав читателей рядом лемм и теорем и бесконечными (в буквальном смысле) коммутативными диаграммами.
Практическая часть статьи заключалась в том, что я показала, как с помощью этих гомологий отличать осмысленные тексты от текстов с перемешанными словами. А именно, я обучила 50 Марковских цепей на текстах, написанных людьми и 50 - на текстах с теми же наборами слов, но перемешанными. Затем по каждой Марковской цепи посчитала размерности своих групп гомологий (самых-самых простых, которые соответствуют количеству компонент связности прокси-графа на разных порогах) и получила 100 векторов с признаками. Затем на 90 примерах обучила лог.регрессию, и она "очень хорошо" предсказала по оставшимся 10 примерам, построены ли они по текстам, написанным человеком, либо по текстам с перемешанными словами.
Это "очень хорошо" в статье было расписано словами "с точностью от 96% до 100%", которые я, спустя пять лет, уже совсем не понимаю. Как на множестве из 10 примеров в принципе могла быть достигнута точность, не кратная 10%? Может быть, это усреднение по нескольким запускам? Но откуда тогда взялись 100%? Это точность на трейне? Никто уже не ответит на эти вопросы. Как бы то ни было, мой метод побеждал Bag of Words, который по определению не мог отличить текст с перемешанными словами от связного текста, что в тот момент принесло мне достаточно удовлетворения для того, чтобы опубликоваться.
В общем, в то время у меня было слабое представление о том, как надо ставить и описывать эксперименты для статей по машинному обучению, поэтому практическая часть получилась такой невнятной. Не повторяйте моих ошибок и всегда описывайте результаты в статьях как можно более точно и внятно, чтобы потом сами не забыть, что они означают. А лучше всего найдите хорошего научного руководителя, который будет целенаправленно учить вас писать хорошие статьи.
Тем не менее, какой бы ни была спорной эта статья, она стала одним из моих первых шагов к публикациям в области машинного обучения (раз речь про ML, я не учитываю свои изыски в элементарной математике и в чистой алгебраической топологии). Так сказатб, эта статья стала той самой непонятной прыгающей фигней из начала видео про Boston Dynamics, которая выглядела как техноересь, но потом дала начало чему-то большему.
#объяснения_статей
Все началось с моей старой, совсем неказистой статьи https://www.mathnet.ru/php/archive.phtml?wshow=paper&jrnid=ista&paperid=225 (годов 2018-2019), которую я написала в аспирантуре с небольшой помощью друга (соавтора) и научника. По всей видимости, эти два человека - единственные, кто прочитал ее целиком (рецензирование в журнале Интеллектуальные системы, мягко говоря, хромает), поэтому я не уверена ни в том, что там нет ошибок, ни в том, что это не велосипед.
Теоретическая часть статьи (сейчас будет скриммер в виде мат.терминов) заключалась в том, что я определила персистентные гомологии (условно) "на Марковских цепях" через прокси-конструкцию - неориентированный граф, вершины которого совпадают с состояниями Марковской цепи, а вес ребра между двумя состояниями соответствует сумме вероятностей перехода из первого во второе и из второго в первое. На таком графе уже можно ввести фильтрацию и через нее пробросить определение персистентности, порадовав читателей рядом лемм и теорем и бесконечными (в буквальном смысле) коммутативными диаграммами.
Практическая часть статьи заключалась в том, что я показала, как с помощью этих гомологий отличать осмысленные тексты от текстов с перемешанными словами. А именно, я обучила 50 Марковских цепей на текстах, написанных людьми и 50 - на текстах с теми же наборами слов, но перемешанными. Затем по каждой Марковской цепи посчитала размерности своих групп гомологий (самых-самых простых, которые соответствуют количеству компонент связности прокси-графа на разных порогах) и получила 100 векторов с признаками. Затем на 90 примерах обучила лог.регрессию, и она "очень хорошо" предсказала по оставшимся 10 примерам, построены ли они по текстам, написанным человеком, либо по текстам с перемешанными словами.
Это "очень хорошо" в статье было расписано словами "с точностью от 96% до 100%", которые я, спустя пять лет, уже совсем не понимаю. Как на множестве из 10 примеров в принципе могла быть достигнута точность, не кратная 10%? Может быть, это усреднение по нескольким запускам? Но откуда тогда взялись 100%? Это точность на трейне? Никто уже не ответит на эти вопросы. Как бы то ни было, мой метод побеждал Bag of Words, который по определению не мог отличить текст с перемешанными словами от связного текста, что в тот момент принесло мне достаточно удовлетворения для того, чтобы опубликоваться.
В общем, в то время у меня было слабое представление о том, как надо ставить и описывать эксперименты для статей по машинному обучению, поэтому практическая часть получилась такой невнятной. Не повторяйте моих ошибок и всегда описывайте результаты в статьях как можно более точно и внятно, чтобы потом сами не забыть, что они означают. А лучше всего найдите хорошего научного руководителя, который будет целенаправленно учить вас писать хорошие статьи.
Тем не менее, какой бы ни была спорной эта статья, она стала одним из моих первых шагов к публикациям в области машинного обучения (раз речь про ML, я не учитываю свои изыски в элементарной математике и в чистой алгебраической топологии). Так сказатб, эта статья стала той самой непонятной прыгающей фигней из начала видео про Boston Dynamics, которая выглядела как техноересь, но потом дала начало чему-то большему.
#объяснения_статей
Forwarded from Маверик печатает …
Продуктивизация ML решений часть 4️⃣
Когда садился писать серию этих заметок, думал что уложусь в 4 части. Но вчера дописывал блок про наблюдаемость сервиса и понял что нужна ещё одна часть. Она будет про деплой сервиса: немного про docker, чуть чуть про docker-compose и про health checks внутри Kubernetes.
Сегодня же, готова предпоследняя часть этой серии заметок. В ней рассказал с помощью каких технологий можно достигнуть хорошего уровня наблюдаемости ML решения. Как можно удобно реализовывать логи, как собирать метрики и что такое спаны в трейсинге.
Эта заметка получилась самой длинной из имеющихся. Но в ней куча кода, которая позволит превратить любой сервис в чудо с точки зрения поддержки, сопровождения и наблюдения.
Логическим развитием было бы накатить Grafana для построения дэшбордов с метриками. Логи собирать отдельно в БД и потом анализировать. Ну и можно что нибудь с трейсами придумать для полноты картины.
Кароче говоря, заметка здоровая, наверное не самая простая, но точно одна из самых полезных !
Энжой✌️ 💫
Ссылка на заметку: https://mvrck.space/posts/ml-best-practices-p4-observability/
P.S.: Make ML services observable again✊ 🎉
#blogpost
Когда садился писать серию этих заметок, думал что уложусь в 4 части. Но вчера дописывал блок про наблюдаемость сервиса и понял что нужна ещё одна часть. Она будет про деплой сервиса: немного про docker, чуть чуть про docker-compose и про health checks внутри Kubernetes.
Сегодня же, готова предпоследняя часть этой серии заметок. В ней рассказал с помощью каких технологий можно достигнуть хорошего уровня наблюдаемости ML решения. Как можно удобно реализовывать логи, как собирать метрики и что такое спаны в трейсинге.
Эта заметка получилась самой длинной из имеющихся. Но в ней куча кода, которая позволит превратить любой сервис в чудо с точки зрения поддержки, сопровождения и наблюдения.
Логическим развитием было бы накатить Grafana для построения дэшбордов с метриками. Логи собирать отдельно в БД и потом анализировать. Ну и можно что нибудь с трейсами придумать для полноты картины.
Кароче говоря, заметка здоровая, наверное не самая простая, но точно одна из самых полезных !
Энжой
Ссылка на заметку: https://mvrck.space/posts/ml-best-practices-p4-observability/
P.S.: Make ML services observable again
#blogpost
Please open Telegram to view this post
VIEW IN TELEGRAM