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

Тогда я сразу понимаю, как это звучит странно. Если вы зададите инженеру, сидящему у меня на столе, вопрос типа «Почему этот результат поиска загружается 10 секунд?», Вы ожидаете ответа. Так почему же вы не можете спросить, почему нейронная сеть поставила эту штуку на первое место? Чтобы спасти ситуацию, я извиняюсь: «Я ничего не могу рассказать об этом конкретном примере, но у меня есть некоторый ответ, если вы спросите меня о миллионе результатов поиска».

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

Чтобы понять, откуда происходит этот парадокс, нам нужно начать с небольшого мысленного эксперимента.

Предположим, я дам вам две монеты. Одна - честная монета с равной вероятностью 1/2 для головы или хвоста. Другой слегка нагружен в сторону головы, его вероятность получить голову составляет 501/1000, тогда как для хвоста - 499/1000.

Как отличить эти две монеты?

Если вы подбросите каждую монету один раз и получите одну голову, а другую - хвостом, сделаете ли вы вывод, что загруженная монета упала головой? Конечно, нет. Потому что есть (499/1000) * (1/2) = 499/2000 шанс выпадения правильной монеты в голове и загруженной монеты в хвост. Это очень близко к шансу приземления загруженной монеты и хвоста для правильной приземления монеты, (501/1000) * (1/2) = 501/2000. Так что одного переворота для решения явно недостаточно. Как насчет 10, 100,…?

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

Формально, если p - это шанс выпадения орла, то шанс того, что выпадет больше орлов, чем решек за 2N броска, определяется следующим образом:

Если это кажется сложным, не обращайте на это внимания. Вместо этого посмотрите на график ниже, на котором показана функция загруженных и справедливых монет. По мере того, как мы продолжаем увеличивать количество флипов по оси x, мы видим, что вероятность получить больше орлов, чем решек для справедливой монеты, сходится к 0,5. Для честной монеты шанс получить больше орлов, чем решек, равен шансу получить больше решек, чем орлов.

Для загруженной монеты шанс получить больше орлов, чем решек, приближается к 1,0.

Обратите внимание на парадокс! По одному подбрасыванию монеты мы практически ничего не можем сказать о двух монетах. После 2 миллионов подбрасываний мы можем с уверенностью сказать, какая монета загружена. Мы больше ничего не знаем о внутренней работе двух монет в обеих ситуациях. Единственной новой информацией, которую мы получили, было то, как две монеты ведут себя за 2 миллиона подбрасываний в совокупности.

Итак, какое отношение все это имеет к нейронным сетям и поисковому ранжированию? Построение нейронных сетей для оптимизации поискового ранжирования похоже на создание загруженной монеты.

Чтобы построить нейронную сеть, мы смотрим на миллионы результатов поиска и связанные с ними результаты. Например, результаты поиска, на которые нажимали пользователи, элементы из результатов поиска, которые они купили, и т. Д. Затем мы переходим и жонглируем числами внутри нейронной сети так, чтобы результаты поиска «загружались» для достижения желаемого результата, как элементы с более высоким шансы получить более высокий рейтинг.

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

Поэтому спрашивать, что нейронная сеть делает для конкретного результата поиска, все равно что спрашивать, как загруженная монета работает для одного подбрасывания. Ответ в обоих случаях: понятия не имею. Но это не значит, что мы ничего не знаем. Учитывая миллионы испытаний, мы можем с уверенностью отличить загруженную монету от честной, а лучшие результаты поиска - от более низких. Инженеры по машинному обучению работают над получением этих результатов поиска, которые будут лучше, чем предыдущие, на крошечную долю, обычно в диапазоне от 0,5% до 1%. Хотя они, безусловно, могут таким образом улучшить результаты поиска, они не могут ответить, что происходит в конкретном результате поиска.

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

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

Примечание для опытных читателей

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

1) Полностью объяснимо: это линейные модели, подобные логистической регрессии.

2) Частично объяснимо: модели типа ГБДТ.

3) Необъяснимое: модели с достаточной нелинейностью, такие как нейронные сети.

Чтобы понять различия, рассмотрите модель как функцию ее входных данных, записанную как f (x0, x1, x2, ..). Теперь предположим, что мы заинтересованы в обнаружении влияния определенных входных данных, скажем, x2, на выходные данные модели.

Это влияние может быть представлено как дифференциал f (x0, x1, x2, ..) на x2, записанный как d (f (x0, x1, x2, ..) / d (x2).

В случае линейных моделей, таких как логистическая регрессия, этот дифференциал сводится к константе. Ergo, полная объяснимость.

Для нейронных сетей этот дифференциал является еще одной нелинейной функцией по входам, которую можно представить как g (x0, x1, x2,…). Теперь нет простого способа интерпретировать эту произвольную нелинейную функцию. А значит, объяснимости нет.

Но как насчет ГБДТ? Если мы вернемся к статье, в которой было введено понятие графиков частичной зависимости для деревьев решений, вы заметите, что построение графиков частичной зависимости сопровождается оговоркой, в которой говорится, что графики действительны, предполагая независимость от переменные. На практике для GBDT нелинейные взаимодействия между переменными оказываются достаточно мягкими во многих случаях, чтобы люди находили ценность в принятии этого предположения и находили ценность в построении графиков частичной зависимости. Но там, где существует сильное взаимодействие, предположения просто неверны, и сюжеты теряют смысл. Для нейронных сетей сложная нелинейность оказывается скорее правилом, чем исключением, что в большинстве случаев делает недопустимыми предположения о независимости переменных.

См. также:

Как работают нейронные сети?

binom.pmf () используется для создания графика