[ЗАСТАВКА] В этой видеолекции мы с вами поговорим об одной из основных проблем в машинном обучении — это проблема переобучения, и в связи с этим о методологии решения практических задач машинного обучения. Ну начнем с примера конкретной задачи, которой я когда-то занимался сам. Это задача из области медицинского прогнозирования: предсказание отдаленного результата хирургического лечения атеросклероза. На прошлой видеолекции мы немножко поговорили в начале о медицинских задачах. Эта задача совершенно типичная. Здесь были разнотипные признаки, данные с пропусками, причем признаки делились на 2 большие группы: это данные о гемодинамике, то есть скорости кровотоков в артериях, венах, и данные об иммунологии. И задача состояла в том, чтобы предсказать, будут ли осложнения у пациента после хирургического лечения атеросклероза, когда человеку кусок вены заменяют шунтом. Это очень важно для хирургов, чтобы вовремя обнаружить какие-то возможные в будущем осложнения, правильнее подготовить пациента. То есть это задача важная. И вот когда мы приступили к этой задаче и стали строить предсказательные модели, мы как раз столкнулись с эффектом переобучения. С этим эффектом приходится сталкиваться практически в каждой прикладной задаче. И вот пример, который показан на слайде. Точечки — это отдельные предсказательные модели, отдельные алгоритмы. А по осям отложены: по горизонтали — частота ошибок на обучении, по вертикали — частота ошибок на контроле. И пунктирная линия — это биссектриса, которая проходит под углом 45 градусов, и она нам показывает это геометрическое место точек, где частота ошибок на контроле и обучении совпадает. И видно, что все это множество точек оно имеет систематический сдвиг вверх, то есть в среднем частота ошибок на контроле больше. Но если посмотреть на отдельные точки, то, конечно же, обидно по обучающей выборке найти алгоритм с частотой ошибок, скажем, 4 %, а потом на новых данных окажется, что на самом деле все-таки модель менее точная, и там 8 % ошибок. Как избежать этого эффекта? Как научиться оценивать этот эффект? Как строить модели такие, которые бы имели какие-то гарантии что, скажем, переобучение оно есть всегда, но что оно по величине своей будет не больше там, скажем, чем 2 %? То есть бороться с этим эффектом надо, и вот для этого надо понимать. Следующий пример уже из области «регрессия», и пример искусственный, но он дает как раз вот то понимание, из-за чего может происходить переобучение предсказательных моделей. Давайте возьмем конкретную функцию y(x), функцию от одной переменной. Функция, которая имеет вид вот такой шапочкообразный, или колокол. Возьмем эту функцию на отрезке [−2, 2], и в качестве признаковых описаний объектов будем использовать векторы степеней икса: вот, нулевой степени — 1, да, x в первой степени, x в квадрате, и так далее, x в n-ной степени. То есть у нас получится линейная модель, если мы ее будем использовать, линейная модель регрессии — это получится модель полиномиальной регрессии, то есть линейная комбинация вот таких признаков есть не что иное, как полином степени n. Совершенно стандартный подход к решению этой задачи — метод наименьших квадратов. Мы понимаем, что на нашем языке машинного обучения это использование квадратичных функций потерь и линейной модели с вот такими вот признаками. Дальше эксперимент организуется следующим образом: мы возьмем обучающую выборку и возьмем контрольную. Обучающая выборка — это просто узлы равномерной сетки на том самом отрезке от −2 до 2, а контрольная выборка — это точечки ровно посередине между двумя соседними обучающими точками. И зададимся вопросом: что происходит с функционалом качества на обучающей выборке и на контрольной при увеличении степени полинома? Ну вот оказывается, что если нарисовать их как 2 зависимости среднеквадратичной ошибки от степени полинома, то ошибка на обучении монотонно убывает. Чем больше степень полинома, тем больше коэффициентов степеней свободы, тем точнее можно модель подогнать под имеющиеся точки. Но в какой-то момент степень полинома нам начинает мешать, и качество восстановления зависимости на контрольной выборке оно, начиная со степени примерно 21, начинает только ухудшаться. Вопрос: почему и что происходит с самой функцией при этом, которая должна аппроксимировать нашу зависимость? Ну давайте посмотрим на функцию. Красным изображена та зависимость, которую мы аппроксимируем, а синяя — это то, чем мы ее аппроксимируем. Это полином, в данном случае степени 38. И вот видно, что на концах отрезка полином плохо очень описывает эту функцию. Он очень точно проходит через точки обучающей выборки, но между этими точками он начинает улетать в плюс минус бесконечность практически. Чем выше степень полинома, тем выше будет эта раскачка. Этот эффект связан с тем, что при увеличении числа степеней свободы, при увеличения числа параметров модели у нас начинает происходить подстройка под конкретные точки выборки, и модель уже ловит какие-то несоответствия между используемой моделью и той функцией, которую мы пытаемся представить. Такая модель может очень быть неустойчивой по отношению к шумам, к погрешностям измерений, и она уже не восстанавливает закон природы, значит, нужно как-то ограничивать сложность модели. Вот для того чтобы измерять такие эффекты, принято использовать функционалы, которые непосредственно измеряют качество построенной модели на тех данных, на которых эта модель не обучалась. Самый простой способ — поделить выборку между обучением и контролем. xl — это обучение, xk — это контроль. Значит, исходно у нас было (l + k) точек, и мы их как-то разбили на 2 части. На одной обучаемся, на второй проверяемся. Но беда в том, что этот функционал (эмпирический риск на тестовых данных) существенно зависит от разбиения. Можно так неудачно выбрать разбиение, что оценка будет субъективной, смещенной. Чтобы этого не происходило, делают много разбиений. Простейший способ это устроить — это каждый раз выделять по одному контрольному объекту, а на всей оставшейся выборке проводить обучение. Минус этого способа в том, что нам обучение придется проводить столько раз, сколько было объектов обучающей выборки, это может быть просто долго. Третий способ — это всевозможные методы кросс-проверки, или кросс-валидации, когда мы каким-то образом устраиваем много N разбиений выборки на обучение и контроль и каждый раз на одной части обучаемся, на другой проверяем результат и усредняем по всевозможным разбиениям. Этот способ уже менее зависим от того, какие именно разбиения будут выбраны. Можно выбирать случайные разбиения. Давайте немножечко поговорим вообще об экспериментах в машинном обучении. Я их поделил на 2 большие группы: эксперименты на реальных данных и эксперименты на модельных или синтетических данных. Эксперименты на реальных данных тоже делятся на 2 группы. Первый и очень распространенный на практике тип экспериментов — это когда есть конкретная прикладная задача, есть конкретная цель, например, научиться автоматизировать принятие решений и минимизировать число ошибок. То есть заказчик задает критерий, и вы должны очень хорошо понимать эту задачу, понимать природу данных. И вот как раз конкурсы по решению таких задач и проводятся на www.kaggle.com, там можно увидеть много примеров таких задач. Есть немножечко другой тип экспериментов, когда цель другая. Цель — протестировать метод в разнообразных условиях, приближенных к реальным. В таком случае из готовых репозиториев берут большое число задач. Вот есть, например, репозиторий Университета Irvine, где уже более 300 задач. Взять какой-то набор задач, и в таком случае исследователь особо не разбирается в том, откуда пришли данные. Уже верим, что данные подготовлены достаточно хорошо. Кто-то придумал хорошие признаки. И гоняем большое число методов на этом большом числе задач. Обычно строится матрица, задача на методы, и в каждой ячейке этой матрицы как раз вот те самые оценки кросс-валидации (или leave-one-out) и показываются. И эти оценки нам нужны для того, чтобы понять: а какие методы больше переобучаются, на каких задачах? И, конечно, мы Мы хотим свой метод, который мы разрабатываем, чтобы он был более универсальным, чтобы на большем числе задач он работал хорошо и опережал по качеству другие методы. То есть это тип экспериментов, который скорее нужен для исследователей, которые занимаются разработкой новых методов, а не решением каких-то конкретных задач. Методология экспериментов на синтетических данных тоже выделяет два типа задач. Вообще, такие эксперименты также используются для тестирования новых методов обучения, но уже в искусственной ситуации — в ситуациях, когда мы можем точно сами задать ту самую истинную зависимость, которую мы восстанавливаем. Ну, первый тип экспериментов — это просто такие отладочные эксперименты: понять, как работает метод; выверить его границы применимости. Обычно они проводятся на искусственных данных (часто двумерных), для того чтобы построить график; посмотреть, как искомая зависимость выглядит; как мы ее аппроксимируем. И здесь важны способы визуализации. Как выявить границы применимости методов с помощью таких экспериментов? Ну, поскольку мы вольны выбирать истинную зависимость y(x), мы можем устроить целую линейку задач от очень простой до очень сложной и посмотреть: а где же происходит ухудшение качества, где уже задача для нашего метода становится слишком сложной? Другой тип экспериментов, он все-таки уходит немножечко вот от этой чисто искусственной ситуации, и это эксперименты на полумодельных данных, где мы матрицу объекты-признаки берем из реальной какой-то задачи, а искомую зависимость мы придумываем сами как функцию от признаков. То есть получается, что объекты у нас настоящие, а та зависимость, которую мы пытаемся восстановить, она искусственная. Мы ее знаем точно, какая она истинная. Мы можем накинуть на нее какой-то стохастический шум. Мы можем добавить шум к признакам, добавить ненужные признаки, лишние например, чтобы посмотреть, насколько хорошо метод от них избавляется. И вот такие вот эксперименты, они нужны в основном для того, чтобы протестировать тот или иной метод на предмет его помехоустойчивости. Переходя к тому, как решаются задачи в реальных приложениях: в науке, в бизнесе, в производстве, можно вспомнить про межотраслевые стандарты. И в частности, лет 15 назад был разработан межотраслевой стандарт CRISP-DM для решения задач интеллектуального анализа данных, который ну так слегка формализовал ту схему решения прикладных задач на реальных данных, которую, в общем-то, конечно, уже десятки лет назад сообщество выработало. Он предполагает решение задачи в 5 основных шагов, причем в цикле они могут замыкаться и повторяться многократно. Вы сначала должны понять, откуда задача пришла, понять ту предметную область или сферу бизнеса. Дальше вы должны понять, как собирались данные: если ли там шумы, пропуски, выбросы; все ли признаки полезны; как вычислить полезные признаки по имеющейся сырой информации, сложно структурированной. Это третий этап — подготовка данных. Потом четвертый этап моделирования — это, собственно, построение предсказательной модели. И это то, чем в основном мы с вами и будем заниматься. Мы будем редко и немного говорить о подготовке данных, редко и немного будем говорить об оценивании полученных моделей. А в основном нас будет интересовать моделирование, и машинное обучение в основном об этом. И наконец, последний шаг в этой схеме — это внедрение модели в какие-то производственные процессы, когда она уже будет работать без участия человека или при периодическом контроле, но уже это — то самое применение, ради которого вот это вот машинное обучение все и использовалось. Вот эта вот схема, она относится уже к инженерной деятельности, а мы с вами будем больше говорить о моделировании и о методах машинного обучения, ну, которые являются, конечно, центральной частью в этой схеме. Но надо не забывать, что в реальных прикладных задачах есть еще и те блоки (это понимание задач и данных и внедрения), которых мы будем... ну практически не будем касаться. Резюмируем: предмет машинного обучения охватывает этапы построения предсказательных моделей; сведения обучения этих моделей к задачам оптимизации; решения этих задач оптимизации и, конечно же, оценивания качества моделей в первую очередь на предмет переобучения. Этими вопросами мы будем заниматься в следующих лекциях. [БЕЗ_ЗВУКА]