Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Вводная лекция по ML #117

Merged
merged 17 commits into from
Aug 9, 2021
Merged

Вводная лекция по ML #117

merged 17 commits into from
Aug 9, 2021

Conversation

Yorko
Copy link
Collaborator

@Yorko Yorko commented Jul 30, 2021

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

Описываю базовые компоненты ML-задач – целевой признак, модель, данные, функция потерь, решатель, схема валидации и метрика качества. Параллельно описываю три задачи (таблички, NLP, CV) и показываю, как "паззлы складываются" в общую картину. Математики при этом нет. И я вижу некоторую проблему в том, что такие понятия как "целевой признак", "метрика качества", "решатель" используются в статье вольно, без четких определений. Но зато это позволяет описывать вещи достаточно абстрактно.

Еще будут картинки, местами оставил заглушки, в частности не трогал еще толком пример с CV.

Но ради фидбека уже открыл PR, давайте обсудим.

@Yorko Yorko added the enhancement New feature or request label Jul 30, 2021
@Yorko Yorko self-assigned this Jul 30, 2021
@SemyonSinchenko
Copy link
Collaborator

Замержи мастера сюда пожалуйста, чтобы id гугл метрик подтянулся. Просто у нас по умолчанию отображается всегда последняя ветка.

Copy link
Collaborator

@SemyonSinchenko SemyonSinchenko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

qmlcourseRU/book/mlblock/ml_l1.md Outdated Show resolved Hide resolved
qmlcourseRU/book/mlblock/ml_l1.md Outdated Show resolved Hide resolved
qmlcourseRU/book/mlblock/ml_l1.md Outdated Show resolved Hide resolved
qmlcourseRU/book/mlblock/ml_l1.md Outdated Show resolved Hide resolved
qmlcourseRU/book/mlblock/ml_l1.md Outdated Show resolved Hide resolved
qmlcourseRU/book/mlblock/ml_l1.md Outdated Show resolved Hide resolved
@vvssttkk vvssttkk linked an issue Jul 30, 2021 that may be closed by this pull request
@vvssttkk
Copy link
Member

vvssttkk commented Jul 30, 2021

а случайно не «пазл», с одной «з»
https://ru.wiktionary.org/wiki/пазл

@Yorko
Copy link
Collaborator Author

Yorko commented Jul 30, 2021

Замержи мастера сюда пожалуйста, чтобы id гугл метрик подтянулся. Просто у нас по умолчанию отображается всегда последняя ветка.

Есть.

а случайно не «пазл», с одной «з» https://ru.wiktionary.org/wiki/пазл

Да, спасибо, пофиксил.

@Yorko
Copy link
Collaborator Author

Yorko commented Jul 30, 2021

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

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

@Yorko Yorko changed the title [WIP] Вводная лекция по ML Вводная лекция по ML Aug 3, 2021
@vvssttkk
Copy link
Member

vvssttkk commented Aug 3, 2021

не все картинки отображаются в jb

@Yorko
Copy link
Collaborator Author

Yorko commented Aug 3, 2021

Спасибо!

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

@nsmarkova
Copy link
Collaborator

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

  • При объявлении моделей или метрик я бы кратко поясняла, что это за модель/метрика и что она делает — буквально в одном предложении.
  • Некоторые моменты я бы немного разжевала, но это уже вопрос вычитки — предложу свой вариант, когда лекция будет готова.

@Yorko Yorko added the lecture label Aug 3, 2021
@vvssttkk
Copy link
Member

vvssttkk commented Aug 5, 2021

@Yorko предполагаешь дальше ещё что-то делать в этом pr, или можем лить в master? если готов, то тыкай merge pr

зы
хотя ты не все вроде изменения увидел

Comment on lines 25 to 27
- задача рекомендации контента и градиентный бустинг
- автоматическая оценка читаемости научной статьи и BERT
- детекция COVID-19 на рентгенограммах и YOLO
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

дальше ещё не читал, но мб предоставить ссылки на архитектуры хоть или их обзор?



```{note}
В этой лекции мы почти не будем говорить о математике. И изложенный взгляд на машинное обучение как ремесло, вполне вероятно, вызовет критику со стороны специалистов в области статистики, эконометрики и теории машинного/статического обучения. Мы осознаем эти риски и тем не менее рассказываем о машинном обучении именно как о ремесле. Акцент в курс делается на квантовые вычисления и квантовое машинное обучение, и в этой лекции мы опишем задачи "классического" машинного обучения на том уровне, чтоб просто было понятно, как это переносится на квантово-классические вариационные схемы и прочие алгоритмы, о которых пойдет речь далее в курсе. При этом строгость изложения материала тоже может немного пострадать.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

в предыдущем абзаце также начало с «В этой лекции»

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

на квантовые вычисления и квантовое машинное обучение, и в этой лекции мы опишем

слух режет дважды «и»

qmlcourseRU/book/mlblock/ml_l1.md Outdated Show resolved Hide resolved
Однако, для очень многих явления вокруг нет хорошего теоретического объяснения или достаточных экспертных знаний. У нас нет "формулы", которая описала бы, как поставленный лайк к посту в соцсети, возврат кредита, клик по рекомендации товара или локализация заразы в конкретной части легких зависят от прочих факторов. В таких случаях мы можем приблизить такую неизвестную нам формулу с помощью машинного обучения.


В идеале с помощью машинного обучения мы хотели бы предсказывать какое-то событие, явление или процесс так, чтоб от этого была польза: прибыль компании/клиентов, если речь о бизнес-проекте, или новые знания, если это исследовательский проект. При этом напрямую это сделать вряд ли получится, и надо определить целевой признак, которая, как мы считаем, будет связана с целевым событием/явлением. Звучит абстрактно, и дать строгое определение таких событий, явлений или процессов вряд ли получится. Поэтому сразу перейдем к примерам.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

точно «которая»?


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

В идеале мы бы хотели предсказывать, "хорошо" ли написана статья или "плохо". Но это очень сложно определить формально, и потому есть много метрик читаемости текста, таких как [Automated readability index](https://en.wikipedia.org/wiki/Automated_readability_index) или [Flesch reading ease](https://en.wikipedia.org/wiki/Flesch%E2%80%93Kincaid_readability_tests#Flesch_reading_ease), которые являются эвристиками и "приближают" то что мы имеем в виду под хорошо или плохо написанным текстом. Кстати, на момент написания это лекции на платформе Kagglе проходит [соревнование](https://www.kaggle.com/c/commonlitreadabilityprize/overview) по этой теме.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

то что мы имеем в виду под хорошо или плохо написанным текстом

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


**Пример 2. Автоматическая оценка читаемости научной статьи**

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

желательно также накинуть пару ссылок


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

Для примера, в задаче переноса стиля (style transfer), в классическом варианте задаются два изображения – "контентное" и "стилевое" – и генерируется третье изображение, которое похоже на в целом на "контентное" изображение, но по стилю – на "стилевое." При этом функция потерь складывается из двух других:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Для примера, в задаче переноса стиля (style transfer), в классическом варианте задаются два изображения – "контентное" и "стилевое" – и генерируется третье изображение, которое похоже на в целом на "контентное" изображение, но по стилю – на "стилевое." При этом функция потерь складывается из двух других:
Для примера, в задаче переноса стиля (style transfer), в классическом варианте задаются два изображения – "контентное" и "стилевое" – и генерируется третье изображение, которое похоже в целом на "контентное" изображение, но по стилю – на "стилевое". При этом функция потерь складывается из двух других:

Пример решения задачи Neural Style Transfer из [задания 3](https://cs231n.github.io/assignments2020/assignment3/) стэнфордского курса cs231n.
```

Функция потерь может включать и много составляющих, больше двух, если мы хотим чтоб модель выучила разные аспекты задачи. К примеру, в [этой статье на Хабре](https://habr.com/ru/post/562064/) (уровень - продвинутый NLP) Давид Дале описывает дистилляцию нескольких больших NLP моделей для получения маленькой версии русскоязычной модели BERT. Маленький BERT по сути "учится" у больших моделей RuBERT, LaBSE, USE, и T5, и описание того, что маленькая модель должна уметь (предсказывать замаскированные токены по контексту, строить представления токенов подобно тому, как это делают большие модели, предсказывать правильный порядок токенов в предложении)– это и есть составление сложной функции потерь.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RuBERT, LaBSE, USE, и T5, и описание того

«и»..

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Функция потерь может включать и много составляющих, больше двух, если мы хотим чтоб модель выучила разные аспекты задачи. К примеру, в [этой статье на Хабре](https://habr.com/ru/post/562064/) (уровень - продвинутый NLP) Давид Дале описывает дистилляцию нескольких больших NLP моделей для получения маленькой версии русскоязычной модели BERT. Маленький BERT по сути "учится" у больших моделей RuBERT, LaBSE, USE, и T5, и описание того, что маленькая модель должна уметь (предсказывать замаскированные токены по контексту, строить представления токенов подобно тому, как это делают большие модели, предсказывать правильный порядок токенов в предложении)– это и есть составление сложной функции потерь.
Функция потерь может включать и много составляющих, больше двух, если мы хотим чтоб модель выучила разные аспекты задачи. К примеру, в [этой статье на Хабре](https://habr.com/ru/post/562064/) (уровень - продвинутый NLP) Давид Дале описывает дистилляцию нескольких больших NLP моделей для получения маленькой версии русскоязычной модели BERT. Маленький BERT по сути "учится" у больших моделей RuBERT, LaBSE, USE, и T5, и описание того, что маленькая модель должна уметь (предсказывать замаскированные токены по контексту, строить представления токенов подобно тому, как это делают большие модели, предсказывать правильный порядок токенов в предложении) – это и есть составление сложной функции потерь.

- явное решение (closed-form solution), в котором просто применится формула для получения оптимальных параметров модели. Тут _Решателем_ будет фреймворк, вычисляющий эту явно выписанную формулу, т.е. скорее всего производящий матричные умножения – например, `NumPy`.
- оптимизация параметров модели градиентными методами оптимизации. Тут _Решателем_ будет алгоритм оптимизации и его конкретная реализация, например, в `PyTorch`

Самый известный пример первого варианта – это явное решение задачи наименьших квадратов. Существует прямо конкретная формула, включающая в себя перемножение матриц и векторов и взятие обратной матрицы, и дающая оптимальный (по минимизации среднеквадратичной ошибки) вектор весов линейной модели при наличии, конечно, обучающей выборки. Получилась, что эта лекция вводная, без математических выкладок, поэтому не будем здесь приводить формулы без контекста, детали можно найти в любом классическом учебнике по статистике или машинному обучению или вкратце [в этой статье](https://habr.com/ru/company/ods/blog/322076/) на Хабре в разделе "Линейная регрессия".
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • опять повтор «и»
  • и не нужно ли «Получилась, что эта лекция вводная [..]» с нового абзаца?


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

Иногда такие градиенты функции потерь можно найти аналитически, например, в случае линейной или логистической регрессии. Но как правило, в случае более сложных моделей с большим числом параметров аналитическое выражение для градиенты функции потерь выглядит слишком громоздко, а градиент лучше вычислять численно. Это задача методов автоматического дифференцирования. В частности, возможно, величайший алгоритм машинного обучения всех времен - алгоритм обратного распространения ошибки (backpropagation) – не что иное как численный метод нахождения производных функции потерь по параметрам модели.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Иногда такие градиенты функции потерь можно найти аналитически, например, в случае линейной или логистической регрессии. Но как правило, в случае более сложных моделей с большим числом параметров аналитическое выражение для градиенты функции потерь выглядит слишком громоздко, а градиент лучше вычислять численно. Это задача методов автоматического дифференцирования. В частности, возможно, величайший алгоритм машинного обучения всех времен - алгоритм обратного распространения ошибки (backpropagation) – не что иное как численный метод нахождения производных функции потерь по параметрам модели.
Иногда такие градиенты функции потерь можно найти аналитически, например, в случае линейной или логистической регрессии. Но как правило, в случае более сложных моделей с большим числом параметров аналитическое выражение для градиента функции потерь выглядит слишком громоздко, лучше вычислять его численно. Это задача методов автоматического дифференцирования. В частности, возможно, величайший алгоритм машинного обучения всех времен - алгоритм обратного распространения ошибки (backpropagation) – не что иное как численный метод нахождения производных функции потерь по параметрам модели.

@vvssttkk vvssttkk self-requested a review August 5, 2021 15:22
@Yorko
Copy link
Collaborator Author

Yorko commented Aug 5, 2021

@vtrokhymenko спасибо! За выходные внесу фиксы – твои и @nsmarkova – и можно будет мержить.

@Yorko
Copy link
Collaborator Author

Yorko commented Aug 9, 2021

@nsmarkova @vtrokhymenko спасибо еще раз за правки - внес пояснения к моделям, лоссам, поправил мелкие косяки.

@Yorko Yorko merged commit 039271a into master Aug 9, 2021
@vvssttkk vvssttkk deleted the yorko-ml-intro branch August 9, 2021 12:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request lecture
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Лекция про основы ML [срок: 31.07.21]
4 participants