Популярная пресса полна статей об «алгоритмах», «алгоритмической справедливости» и «алгоритмах, которые различают (или не различают)». Как компьютерный ученый (и тот, кто изучает алгоритмы, в первую очередь), я нахожу все это внимание к моей области скорее отрадным, а не пугающим.
Что еще более приятно, так это то, что популярное объяснение алгоритма следует тому определению, которое мы используем с тех пор, как ... ну, навсегда.
Алгоритм - это набор шагов (инструкций), каждый из которых прост и хорошо определен и останавливается после конечного числа этих шагов.
Если нам нужно менее устрашающее определение алгоритма, мы обратимся к кухне:
Алгоритм похож на рецепт. Он принимает «входные данные» (ингредиенты), выполняет набор простых и (надеюсь) четко определенных шагов, а затем завершается после получения «результата» (блюда).
Я снова и снова использовал эту аналогию с кулинарией, объясняя, что такое алгоритм: членам моей семьи, не имеющим технических знаний, людям, которым интересно, чем я занимаюсь, а также студентам, которые приходят и спрашивают меня об алгоритмах.
И это работает! Он фиксирует то, что важно (четко определенные инструкции), и игнорирует несущественные детали (какой язык, какой компьютер, Mac или Windows и т. Д.). Это также успешная аналогия, поскольку она пронизана популярным пониманием алгоритмов и кода.
Единственная проблема: это совершенно неправильно, по крайней мере, когда вы пытаетесь понять сбивающую с толку вселенную алгоритмов, которые в совокупности определяют машинное обучение, или глубокое обучение, или Большой ИИ: все алгоритмы, о которых сегодня постоянно говорят в новостях.
Чтобы понять, почему наша общая концепция алгоритма не работает для машинного обучения, мы должны взглянуть на реальный рецепт.
Я (или, по крайней мере, мои предки) родом с юга Индии, и если вы когда-нибудь ели индийскую кухню, вы встретите самбар, основной продукт южно-индийской кухни, который, по сути, является пряный суп из чечевицы.
Вот рецепт самбара по рецепту моей матери.
Ингредиенты:
- Горох колотый (1/2 стакана)
- Тамаринд (кусок 0,5 дюйма)
- Куркума (1 ч. Л.)
- Самбар масала (специя) (1 чайная ложка)
- Нарезанные овощи (на ваш выбор) (0,5 стакана)
- Приготовьте горох, овощи, тамаринд, соль и масалу.
- Готовьте под давлением горох и куркуму (и другие ингредиенты отдельно)
- Вынуть тамаринд и выжать из него сок.
- Варите ингредиенты вместе
- Немного нагрейте масла, добавьте в масло 1/4 чайной ложки горчицы и тмина, а затем полейте самбар, когда он потрескивает.
У него есть набор входов и выход. Каждая инструкция (относительно) четко определена, и программист предупреждений даже обнаружит условное (если это то сделает это).
Что еще более важно, по этому рецепту я могу готовить самбар снова и снова. Если меня спросят, как я это сделал, я объясню процедуру. И если это будет странно на вкус, я могу просмотреть ингредиенты и определить, почему.
Алгоритм обучения - это игра в рулетку на 50-мерном колесе, которая попадает в определенное место (рецепт), полностью основанное на том, как его обучали, какие примеры он видел и сколько времени потребовалось для поиска.
Но теперь давайте представим, что я потерял рецепт самбара, он мне срочно нужен для вечеринки, и я не могу связаться с мамой (разница во времени с Индией ужасная). Или, может быть, я просто хочу выучить свой рецепт самбара.
Я смутно помню, какие ингредиенты были задействованы. На смятом листе бумаги, лежащем на полу моей кухни, нацарапаны следующие ингредиенты:
- тамаринд
- ‹Illegible› масала
- куркума
- горох колотый
- картошка ? или это помидор? или моринга?
Я знаю, что их нужно комбинировать в какой-то форме, но как? Как ученый, я решаю провести эксперимент. Я решаю несколько разных способов сделать то, что я считаю самбаром, из ингредиентов и моих смутных воспоминаний о том, как их сочетать и в каком количестве. Я делаю несколько небольших партий (нано-самбар!), каждая из которых тщательно аннотируется процедурой, которую я использовал, и представляю их своим друзьям, когда они приходят.
Вой ужаса! Громкие звуки рвоты! время от времени неохотный комплимент! К концу вечера я довольно хорошо понимаю, какие рецепты работают, а какие нет. Некоторые из моих друзей услужливо даже принесли мне образцы своего самбара.
Я пробую это снова (у меня есть очень терпеливые друзья, и все они жаждут самбара).
И снова.
И снова.
В конце концов у меня есть довольно приличный рецепт самбара. По какой-то причине мне приходится трижды крутить, держа горошек и воду, прежде чем поставить его на плиту, а соль нужно вылить пластиковой ложкой, но вкус отличный, так что кого это волнует!
Но вот в чем загвоздка. Я хочу, чтобы вы представили трех моих двойников: одного в Токио, одного в Орхусе и одного в Рио. Я хочу, чтобы вы представили, как они трое пытаются научиться готовить самбар точно так же, в своем собственном кругу друзей. Вы действительно думаете, что у нас троих будет один и тот же рецепт? До завихрения?
Думаю, нет.
Вот как работает алгоритм обучения. Это не рецепт. Это процедура построения рецепта. Это игра в рулетку на 50-мерном колесе, которая попадает в определенное место (рецепт), полностью основанное на том, как его тренировали, какие примеры он видел и сколько времени потребовалось на поиск. В каждом случае мяч останавливается на приемлемом ответе, но эти ответы сильно различаются, и они часто имеют мало смысла для человека, выполняющего их.
Да, мы могли бы просто посмотреть на код, но то, что мы видим, - это таинственная алхимия, в которой каждый отдельный шаг может быть понятен, но любое объяснение того, почему код делает то, что он делает, требует понимания того, как он развивался и что опыты , которые он имел на своем пути. И даже тогда вам будет сложно объяснить, почему алгоритм сделал то, что он сделал. Если не верите, попробуйте как-нибудь взглянуть на нейронную сеть.
Я провожу дни в размышлениях и разговорах об алгоритмической справедливости и о том, когда алгоритмы могут различать. В большинстве случаев я получаю такую реакцию: «Но алгоритмы - это всего лишь код! они делают только то, что вы им говорите ». Это говорит мне о фундаментальном несоответствии между тем, как люди думают об обучающих алгоритмах, и тем, как они на самом деле работают, и размышления об этом несоответствии - вот что побудило меня написать это.
То, что я сказал прямо в интервью, кажется тем более правдивым, чем больше я думаю об этом.
Мы пытаемся разработать алгоритмы, имитирующие то, что могут делать люди. В процессе работы мы разрабатываем алгоритмы, которые имеют те же слепые зоны, уникальный опыт и непостижимое поведение, что и мы. Мы не можем просто «посмотреть на код» больше, чем мы можем разгадать наш собственный «код».