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

Что еще более приятно, так это то, что популярное объяснение алгоритма следует тому определению, которое мы используем с тех пор, как ... ну, навсегда.

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

Если нам нужно менее устрашающее определение алгоритма, мы обратимся к кухне:

Алгоритм похож на рецепт. Он принимает «входные данные» (ингредиенты), выполняет набор простых и (надеюсь) четко определенных шагов, а затем завершается после получения «результата» (блюда).

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

И это работает! Он фиксирует то, что важно (четко определенные инструкции), и игнорирует несущественные детали (какой язык, какой компьютер, Mac или Windows и т. Д.). Это также успешная аналогия, поскольку она пронизана популярным пониманием алгоритмов и кода.

Единственная проблема: это совершенно неправильно, по крайней мере, когда вы пытаетесь понять сбивающую с толку вселенную алгоритмов, которые в совокупности определяют машинное обучение, или глубокое обучение, или Большой ИИ: все алгоритмы, о которых сегодня постоянно говорят в новостях.

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

Я (или, по крайней мере, мои предки) родом с юга Индии, и если вы когда-нибудь ели индийскую кухню, вы встретите самбар, основной продукт южно-индийской кухни, который, по сути, является пряный суп из чечевицы.

Вот рецепт самбара по рецепту моей матери.

Ингредиенты:

  • Горох колотый (1/2 стакана)
  • Тамаринд (кусок 0,5 дюйма)
  • Куркума (1 ч. Л.)
  • Самбар масала (специя) (1 чайная ложка)
  • Нарезанные овощи (на ваш выбор) (0,5 стакана)
  1. Приготовьте горох, овощи, тамаринд, соль и масалу.
  2. Готовьте под давлением горох и куркуму (и другие ингредиенты отдельно)
  3. Вынуть тамаринд и выжать из него сок.
  4. Варите ингредиенты вместе
  5. Немного нагрейте масла, добавьте в масло 1/4 чайной ложки горчицы и тмина, а затем полейте самбар, когда он потрескивает.

У него есть набор входов и выход. Каждая инструкция (относительно) четко определена, и программист предупреждений даже обнаружит условное (если это то сделает это).

Что еще более важно, по этому рецепту я могу готовить самбар снова и снова. Если меня спросят, как я это сделал, я объясню процедуру. И если это будет странно на вкус, я могу просмотреть ингредиенты и определить, почему.

Алгоритм обучения - это игра в рулетку на 50-мерном колесе, которая попадает в определенное место (рецепт), полностью основанное на том, как его обучали, какие примеры он видел и сколько времени потребовалось для поиска.

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

Я смутно помню, какие ингредиенты были задействованы. На смятом листе бумаги, лежащем на полу моей кухни, нацарапаны следующие ингредиенты:

  • тамаринд
  • ‹Illegible› масала
  • куркума
  • горох колотый
  • картошка ? или это помидор? или моринга?

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

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

Я пробую это снова (у меня есть очень терпеливые друзья, и все они жаждут самбара).

И снова.

И снова.

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

Но вот в чем загвоздка. Я хочу, чтобы вы представили трех моих двойников: одного в Токио, одного в Орхусе и одного в Рио. Я хочу, чтобы вы представили, как они трое пытаются научиться готовить самбар точно так же, в своем собственном кругу друзей. Вы действительно думаете, что у нас троих будет один и тот же рецепт? До завихрения?

Думаю, нет.

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

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

Я провожу дни в размышлениях и разговорах об алгоритмической справедливости и о том, когда алгоритмы могут различать. В большинстве случаев я получаю такую ​​реакцию: «Но алгоритмы - это всего лишь код! они делают только то, что вы им говорите ». Это говорит мне о фундаментальном несоответствии между тем, как люди думают об обучающих алгоритмах, и тем, как они на самом деле работают, и размышления об этом несоответствии - вот что побудило меня написать это.

То, что я сказал прямо в интервью, кажется тем более правдивым, чем больше я думаю об этом.

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