-
Notifications
You must be signed in to change notification settings - Fork 32
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
Вводная лекция по ML #117
Conversation
Замержи мастера сюда пожалуйста, чтобы id гугл метрик подтянулся. Просто у нас по умолчанию отображается всегда последняя ветка. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Очень много терминов. Но думаю можно попробовать решить это заполнением глоссария. В целом круто! Мне понравилось, но у меня смещенное мнение, так как я все это уже знал. Нужен взгляд со стороны.
а случайно не «пазл», с одной «з» |
Есть.
Да, спасибо, пофиксил. |
Спасибо! Да, терминов многовато. И в том-то и дело, что я их не настолько строго использую, чтоб взять и однозначное определение вынести в глоссарий. Попробовать можно все равно. |
не все картинки отображаются в jb |
Спасибо! По мне, лекция кажется готовой. Попробую еще привлечь к ревью кого-то, кто первый раз слышит про ML, если такие еще остались. |
Мне лекция видится хорошим обзорным материалом для новичков в объеме, достаточном для того, чтобы привести наглядные и понятные примеры, но при этом не рассеять внимание. Пара предложений:
|
@Yorko предполагаешь дальше ещё что-то делать в этом pr, или можем лить в master? если готов, то тыкай зы |
qmlcourseRU/book/mlblock/ml_l1.md
Outdated
- задача рекомендации контента и градиентный бустинг | ||
- автоматическая оценка читаемости научной статьи и BERT | ||
- детекция COVID-19 на рентгенограммах и YOLO |
There was a problem hiding this 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
|
||
|
||
```{note} | ||
В этой лекции мы почти не будем говорить о математике. И изложенный взгляд на машинное обучение как ремесло, вполне вероятно, вызовет критику со стороны специалистов в области статистики, эконометрики и теории машинного/статического обучения. Мы осознаем эти риски и тем не менее рассказываем о машинном обучении именно как о ремесле. Акцент в курс делается на квантовые вычисления и квантовое машинное обучение, и в этой лекции мы опишем задачи "классического" машинного обучения на том уровне, чтоб просто было понятно, как это переносится на квантово-классические вариационные схемы и прочие алгоритмы, о которых пойдет речь далее в курсе. При этом строгость изложения материала тоже может немного пострадать. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
в предыдущем абзаце также начало с «В этой лекции»
There was a problem hiding this 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
Однако, для очень многих явления вокруг нет хорошего теоретического объяснения или достаточных экспертных знаний. У нас нет "формулы", которая описала бы, как поставленный лайк к посту в соцсети, возврат кредита, клик по рекомендации товара или локализация заразы в конкретной части легких зависят от прочих факторов. В таких случаях мы можем приблизить такую неизвестную нам формулу с помощью машинного обучения. | ||
|
||
|
||
В идеале с помощью машинного обучения мы хотели бы предсказывать какое-то событие, явление или процесс так, чтоб от этого была польза: прибыль компании/клиентов, если речь о бизнес-проекте, или новые знания, если это исследовательский проект. При этом напрямую это сделать вряд ли получится, и надо определить целевой признак, которая, как мы считаем, будет связана с целевым событием/явлением. Звучит абстрактно, и дать строгое определение таких событий, явлений или процессов вряд ли получится. Поэтому сразу перейдем к примерам. |
There was a problem hiding this 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
|
||
Допустим, научному журналу хочется автоматически оценивать читаемость текста, чтобы знать, какие статьи можно сразу подавать на ревью, а какие лучше предварительно направить в сервис 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) по этой теме. |
There was a problem hiding this 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
|
||
**Пример 2. Автоматическая оценка читаемости научной статьи** | ||
|
||
Описанную задачу, опять же с оговорками про возможность альтернативного подхода без всякого машинного обучения, скорее всего хочется решать с помощью языковых моделей, основанных на трансформерах. В частности, в этой задаче имеет смысл использовать SciBERT, предобученный как раз на научных текстах. |
There was a problem hiding this 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
|
||
Заметим, что дизайн функции потерь под задачу, как и придумывание признаков – порой интересный творческий процесс, а итоговая функции потерь, используемая для обучения модели может быть сложной, состоящей из нескольких более простых функций потерь. | ||
|
||
Для примера, в задаче переноса стиля (style transfer), в классическом варианте задаются два изображения – "контентное" и "стилевое" – и генерируется третье изображение, которое похоже на в целом на "контентное" изображение, но по стилю – на "стилевое." При этом функция потерь складывается из двух других: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Для примера, в задаче переноса стиля (style transfer), в классическом варианте задаются два изображения – "контентное" и "стилевое" – и генерируется третье изображение, которое похоже на в целом на "контентное" изображение, но по стилю – на "стилевое." При этом функция потерь складывается из двух других: | |
Для примера, в задаче переноса стиля (style transfer), в классическом варианте задаются два изображения – "контентное" и "стилевое" – и генерируется третье изображение, которое похоже в целом на "контентное" изображение, но по стилю – на "стилевое". При этом функция потерь складывается из двух других: |
qmlcourseRU/book/mlblock/ml_l1.md
Outdated
Пример решения задачи 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, и описание того, что маленькая модель должна уметь (предсказывать замаскированные токены по контексту, строить представления токенов подобно тому, как это делают большие модели, предсказывать правильный порядок токенов в предложении)– это и есть составление сложной функции потерь. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RuBERT, LaBSE, USE, и T5, и описание того
«и»..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Функция потерь может включать и много составляющих, больше двух, если мы хотим чтоб модель выучила разные аспекты задачи. К примеру, в [этой статье на Хабре](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, и описание того, что маленькая модель должна уметь (предсказывать замаскированные токены по контексту, строить представления токенов подобно тому, как это делают большие модели, предсказывать правильный порядок токенов в предложении) – это и есть составление сложной функции потерь. |
qmlcourseRU/book/mlblock/ml_l1.md
Outdated
- явное решение (closed-form solution), в котором просто применится формула для получения оптимальных параметров модели. Тут _Решателем_ будет фреймворк, вычисляющий эту явно выписанную формулу, т.е. скорее всего производящий матричные умножения – например, `NumPy`. | ||
- оптимизация параметров модели градиентными методами оптимизации. Тут _Решателем_ будет алгоритм оптимизации и его конкретная реализация, например, в `PyTorch` | ||
|
||
Самый известный пример первого варианта – это явное решение задачи наименьших квадратов. Существует прямо конкретная формула, включающая в себя перемножение матриц и векторов и взятие обратной матрицы, и дающая оптимальный (по минимизации среднеквадратичной ошибки) вектор весов линейной модели при наличии, конечно, обучающей выборки. Получилась, что эта лекция вводная, без математических выкладок, поэтому не будем здесь приводить формулы без контекста, детали можно найти в любом классическом учебнике по статистике или машинному обучению или вкратце [в этой статье](https://habr.com/ru/company/ods/blog/322076/) на Хабре в разделе "Линейная регрессия". |
There was a problem hiding this 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
|
||
Ко второму из рассмотренных вариантов _Решателя_ можно также отнести и автоматическое дифференцирование. Чтобы оптимизировать параметры модели градиентными методами, нужно знать собственно градиенты функции потерь – вектора частных производных функции потерь по параметрам. Попросту говоря, это ответ на вопрос, какие параметры модели стоит изменять и как это скажется на функции потерь, которую мы хотим минимизировать. | ||
|
||
Иногда такие градиенты функции потерь можно найти аналитически, например, в случае линейной или логистической регрессии. Но как правило, в случае более сложных моделей с большим числом параметров аналитическое выражение для градиенты функции потерь выглядит слишком громоздко, а градиент лучше вычислять численно. Это задача методов автоматического дифференцирования. В частности, возможно, величайший алгоритм машинного обучения всех времен - алгоритм обратного распространения ошибки (backpropagation) – не что иное как численный метод нахождения производных функции потерь по параметрам модели. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Иногда такие градиенты функции потерь можно найти аналитически, например, в случае линейной или логистической регрессии. Но как правило, в случае более сложных моделей с большим числом параметров аналитическое выражение для градиенты функции потерь выглядит слишком громоздко, а градиент лучше вычислять численно. Это задача методов автоматического дифференцирования. В частности, возможно, величайший алгоритм машинного обучения всех времен - алгоритм обратного распространения ошибки (backpropagation) – не что иное как численный метод нахождения производных функции потерь по параметрам модели. | |
Иногда такие градиенты функции потерь можно найти аналитически, например, в случае линейной или логистической регрессии. Но как правило, в случае более сложных моделей с большим числом параметров аналитическое выражение для градиента функции потерь выглядит слишком громоздко, лучше вычислять его численно. Это задача методов автоматического дифференцирования. В частности, возможно, величайший алгоритм машинного обучения всех времен - алгоритм обратного распространения ошибки (backpropagation) – не что иное как численный метод нахождения производных функции потерь по параметрам модели. |
@vtrokhymenko спасибо! За выходные внесу фиксы – твои и @nsmarkova – и можно будет мержить. |
@nsmarkova @vtrokhymenko спасибо еще раз за правки - внес пояснения к моделям, лоссам, поправил мелкие косяки. |
Лекция еще не готова, но готова для ревью и сбора промежуточной обратной связи.
Описываю базовые компоненты ML-задач – целевой признак, модель, данные, функция потерь, решатель, схема валидации и метрика качества. Параллельно описываю три задачи (таблички, NLP, CV) и показываю, как "паззлы складываются" в общую картину. Математики при этом нет. И я вижу некоторую проблему в том, что такие понятия как "целевой признак", "метрика качества", "решатель" используются в статье вольно, без четких определений. Но зато это позволяет описывать вещи достаточно абстрактно.
Еще будут картинки, местами оставил заглушки, в частности не трогал еще толком пример с CV.
Но ради фидбека уже открыл PR, давайте обсудим.