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

Вы не одиноки, если это кажется неправдоподобным, что наша система образования только сейчас выясняет это. Это старая пословица, но почему-то в ней не учитывалась теория прикладного образования. Не верите мне? Тогда поверьте Джанет Меткалф, профессору психологии из Колумбийского университета, которая опубликовала Учимся на ошибках в 2017 году (всего три года назад!).

В этой основополагающей статье д-р Меткалф указывает на множество доказательств, демонстрирующих, как американские учителя последовательно игнорируют ошибки и вместо этого обучают студентов методам (читай: формулам), чтобы находить правильный ответ. По не столь удивительному повороту событий выясняется, что обучение методу работает намного хуже, чем обучение на ошибках. Это подтверждается стратегиями, применяемыми японскими учителями (которые преподают с помощью анализа ошибок), и результатами международных экзаменов, сравнивающих эти страны. Если бы только между этими двумя дисциплинами произошло какое-то взаимное опыление! Для нас, специалистов по данным, очевидно, что учиться на ошибках - лучший способ усвоить концепцию. В своей статье д-р Меткалф демонстрирует, как лучше учиться на ошибках, и заходит так далеко, что дает количественную оценку условий, при которых обучение оптимизируется.

Потеря, которую вы выбираете, чтобы свести к минимуму, меняет то, чему учится ваша машина.

Именно эту заключительную часть - нюанс оптимизации обучения - я хочу обсудить в контексте науки о данных. Можем ли мы учиться у образования так же, как образование должно было делать у науки о данных?

Учителя: Студенты :: Специалисты по анализу данных: алгоритмы машинного обучения

Вы помните те аналогии из стандартизированных экзаменов? A относится к B так же, как C относится к? Что ж, вот вам одно: учителя относятся к ученикам, как специалисты по анализу данных - к алгоритмам машинного обучения. Вкратце, я учитель, и эта аналогия не предназначена для того, чтобы унизить работу учителя (это тяжелая штука!).

Аналогия идеально подходит для нашего контекста, особенно если мы (значительно) упростим роль учителя. Учтите, что цель учителя - помочь ученику научиться делать правильные прогнозы. Фактически, прогнозы настолько хороши, что мы называем их «ответами». Учитель использует набор стратегий, чтобы помочь ученику учиться как можно быстрее. Одна из таких стратегий может указывать на ошибки. Затем ученик принимает эти ошибки и (надеюсь) анализирует их, чтобы понять, почему их прогнозы были неверными. Затем они обновляют свою ментальную модель концепции и пробуют снова. Для людей этот процесс эффективен, но не быстр. Студенты изучают новую концепцию всего на нескольких примерах, но для интеграции информации требуется некоторое время.

Специалист по анализу данных делает то же самое. Наша цель - помочь нашим алгоритмам машинного обучения делать правильные прогнозы. Если их прогнозы достаточно хороши, то алгоритмы переходят в «дикую природу». Как и учителя, специалисты по анализу данных указывают на ошибки алгоритма, после чего алгоритм анализирует ошибки и обновляет свою цифровую модель. Для компьютеров это быстрый, но неэффективный процесс. Алгоритмы могут быстро обновлять свои модели, но для изменения модели требуется множество примеров.

Эффективное обучение

Почему студенты, а следовательно, и люди, учатся эффективно? Я предполагаю, что мы анализируем ошибки очень тонко, что позволяет нам понять, почему прогноз был неверным. Это приводит к оптимальному обновлению нашей ментальной модели, что позволяет нам учиться на гораздо меньшем количестве ошибок. У этого есть дополнительное преимущество, которое мы можем оптимизировать для получения правильного ответа в определенных условиях. Позволь мне объяснить:

Представьте, что вы ранний человек, который занимается добычей пищи. Вы только что видели, как ваш друг Ху сорвал ягоду, съел ее и умер (трагическая история, извините). К счастью для вас, это момент обучения! Вы идете исследовать ягоду и замечаете, что она фиолетовая с желтыми пятнами. Два дня спустя вы снова собираете пищу и находите ягоды фиолетового цвета с желто-зелеными пятнами. Ты ешь это? Скорее всего нет! Цена ошибки очень высока, поэтому, даже если эта ягода не совсем соответствует рисунку, она не стоит риска.

Правильный ответ в этом условии - «ешьте то, что нас не убивает». Таким образом, ягода могла быть неправильно названа ядовитой (назовем это ложноположительным), но, по крайней мере, вы не умерли. Можно сказать, что вы оптимизируете отзыв за счет точности.

Подумайте об этом выборе слов. Вы (ранняя человеческая версия вас) оптимизируете для того, чтобы вспомнить. Это подозрительно похоже на то, что делают алгоритмы машинного обучения. Фактически, это именно то, что намеревается делать ML. Он оптимизирует систему за счет минимизации потерь. Потеря, которую вы (специалист по данным) выбираете, чтобы минимизировать, меняет то, что изучает ваша машина.

Выберите функцию потери

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

Как правило, функция потерь должна быть гладкой, а в идеале - выпуклой. Если это не гладко, то вы не можете рассчитать градиент для обновления параметров модели. Если он не является выпуклым, то вы не гарантированно достигнете глобального минимума, а иногда и вовсе не добьетесь какой-либо оптимизации. Функция потерь также не может быть «односторонней» - например, измерять только точность или отзывчивость. «Односторонняя» функция потерь подтолкнет модель к поведению «все или ничего», чтобы минимизировать потери. И последнее предостережение: функция потерь должна иметь вид:

Где y - это базовый истинный вектор, а ŷ - вероятностный прогноз.

Эти ограничения оставляют вам меньше возможностей, но ни в коем случае не лишены возможности выбора. Если метрика, которую вы хотите улучшить, - это, например, рабочая характеристика приемника (ROC), то вам следует потренироваться на ее интеграл. Вам следует тщательно подумать о метрике, которую вы хотите улучшить, и, когда это возможно, написать функцию потерь для оптимизации для этой метрики.

Учимся у РПЦ

Кстати, как узнать рабочие характеристики приемника? К счастью для нас, в 2003 году команда придумала, как это сделать! Вы можете прочитать их публикацию по ссылке здесь. Эта потеря не реализована изначально в Keras, но, к счастью для вас, легко реализовать свою собственную функцию потерь. Следующий код представляет собой (очень) слегка измененную версию ныне несуществующей библиотеки TFLearn.

Чтобы обучить auROC, инициализируйте эту функцию в отдельной ячейке. Затем укажите эту функцию при компиляции модели:

model.compile(optimizer = ‘adam’, loss = auROC(), metrics = …)