Немного о машинном обучении

6 ноября 2013, 21:15
Умения современных компьютеров оказались бы полной неожиданностью для людей, живших 50 лет назад. В тогдашней фантастике простые роботы работали слугами, а самые сложные, уникальные, занимались высшей математикой. Роботы представлялись человекоподобными, и такие способности, как умение сохранять равновесие, ориентироваться в окружающем мире, понимать обращенную к ним речь, считались само собой разумеющимися. Но попытки построить подобные системы показали, что на самом деле эти навыки очень сложны, и как их повторить, не совсем понятно. Сейчас высшей математикой способен заниматься телефон в вашем кармане (например, с помощью одного из этих приложений), а вот слуг что-то не видно. Вы ежедневно пользуетесь услугами Великого Всемирного Информатория, что в старой фантастике разрешалось лишь лицам со спецдоступом (ох уж этот XX век), но в ресторане вас по-прежнему обслуживает человек.

Школьное образование, к сожалению, не успевает за развитием нашей отрасли, и потому создает в головах большей части людей не очень корректную картину. У них возникает популярное заблуждение, согласно которому компьютеры не способны чему-либо учиться и делают только то, на что запрограммированы — тупо, но быстро и старательно. На самом деле это давно не так. Создавать программы, способные анализировать данные, обобщать их, делать выводы и учиться таким образом чему-то новому для себя, мы умеем уже десятки лет, и с каждым годом всё лучше и лучше. Этому посвящена обширная дисциплина: машинное обучение, и она давно не является каким-то тайным знанием, доступным лишь избранным. Соответствующие методы и теории уже разработаны до такой степени, что им можно обучать, например, талантливых студентов. При Яндексе уже несколько лет работает целое учебное заведение — Школа анализа данных, — большая часть курсов которого посвящена именно таким методам. В начале октября этого года Яндекс провёл конференцию, на которую приехали ведущие исследователи в этой области из многих стран мира.

Не стоит думать, что машинное обучение — что-то экзотическое, используемое только в детекторах Большого адронного коллайдера (хотя, честно говоря, там оно тоже используется). Вовсе нет.

Каждый раз, задавая запрос в Яндексе, вы пользуетесь плодами машинного обучения. Вы, наверное, замечали, что количество найденного почти по любому запросу огромно: сотни тысяч, часто — миллионы результатов. Большая часть из них неинтересные, бесполезные, лишь случайно упоминают слова запроса или вообще являются спамом. Для ответа на ваш запрос нужно мгновенно отобрать из всех найденных результатов десятку лучших. Написать программу, которая делает это с приемлемым качеством, не под силу никакому программисту-человеку. Десять результатов по вашему запросу отобраны при помощи формул, полученных в ходе машинного обучения. С помощью созданной у нас технологии Матрикснет Яндекс обучает на кластере FML сотни таких формул в год.

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

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

Методы машинного обучения, исторически изобретённые первыми, были попытками скопировать природу: так называемые «нейронные сети» имитировали работу нейронов коры головного мозга (сейчас мы знаем, что имитировали неверно, но это не мешало им добиваться определенных успехов), появившиеся чуть позже «генетические алгоритмы» — эволюцию по Дарвину и менделевскую генетику. Эти попытки были чем-то похожи на самолёт с чертежей Леонардо да Винчи, машущий перепончатыми крыльями. Как современные самолёты не похожи на летучих мышей, так и методы машинного обучения, применяемые в XXI веке, чаще не являются бионическими.

Математическая основа современного машинного обучения, заложенная, в том числе, нашими соотечественниками Владимиром Вапником и Алексеем Червоненкисом, довольно сложна, но можно попытаться описать «на пальцах» то, как работают алгоритмы, использующие эту математику. Например, мы хотим научить компьютер определять, изображён ли на фотографии человек. Для этого мы берём очень много фотографий и вручную раскладываем на две стопки: в одну фотографии людей, в другую всё остальное — пейзажи, натюрморты, автомобили, животные, абстракции. Компьютер, получивший эти две стопки, сравнивает фотографии и выявляет характерные признаки изображения человека.

На первом шаге алгоритм берёт самый простой признак, выдающий результат, хоть как-то похожий на нужный. В данном случае он начинает считать, что человек — это всё, что похоже на вертикальный тёмный прямоугольник пропорцией примерно 4:1. Этот «метод», при всём его шокирующем идиотизме, неплохо отличает людей от кошек, автомобилей, домов и деревьев, еды в инстаграме и многих других объектов. На втором шаге алгоритм смотрит на ошибки первого шага: например, Джа-Джа Бинкс и платяной шкаф моей бабушки ошибочно сочтены людьми, а Обеликс и Саша Грей ошибочно сочтены объектами, непохожими на людей. Снова выбирается самый простой признак, но на этот раз такой, который обращает повышенное внимание на ошибки первого и, по возможности, исправляет их. У совокупности двух признаков ошибок будет уже меньше, и Обеликса он распознает правильно. Но ошибки всё ещё будут. Можно приступать к третьему шагу. Чем больше проходит шагов, тем больше признаков можно учесть, и через несколько сотен шагов полученный «определитель человека», обращающий внимание только на яркость прямоугольных областей, уже хорошо справляется с работой.

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

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

Другой докладчик конференции, Ян Лекан, рассказывал о технике, известной под названием «свёрточные нейронные сети» (convolutional neural networks). Технику эту он изобрел давным-давно, примерно четверть века назад, и неуклонно совершенствует с тех пор; учёные вообще живут в вечности, и им в ней хорошо. Свёрточные нейронные сети интересны своей близостью к природе (даже если зрительная кора млекопитающих устроена по-другому, она вполне могла бы быть и такой), огромной скоростью распознавания образов, но главное в них, конечно, те замечательные результаты, которых можно добиться с их помощью. Ян Лекан прямо с кафедры показывал мгновенное распознавание компьютером разных предметов: наводил на них по очереди камеру ноутбука, и тот уверенно опознавал пульт управления, микрофон, дисплей, докладчика и прочие предметы. Потом прямо на лету, за пару секунд и пару кадров, обучил его отличать себя от случайного человека из зала. Если продолжать сравнение бионических методов с летательными аппаратами да Винчи, получается, что орнитоптеры отлично летают и успешно конкурируют с самолётами.

Демонстрировался на конференции и короткий документальный фильм о том, как мобильный робот, похожий на Валли из одноименного мультфильма, но конструируемый по заказу американских военных, при помощи одной картинки с камеры (без участия человека) уверенно чувствует себя в настоящем лесу, объезжая на скорости деревья и прочие препятствия, а также солдат людей. Непонятно, почему это всё до сих пор не засекретили и совершенно спокойно рассказывают в России со всеми подробностями. Видимо, дело в том, что на дворе уже не ХХ век.

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

Андрей Плахов, руководитель службы функциональности поиска
31 комментарий
Подписаться на комментарии к посту
Слинько Игорь
7 ноября 2013, 15:26

пожалуй, пересмотрю курсы ШАДа по машинному обучению )

Тоже вариант)

Что-то весь этот текст вызывает ассоциацию со старым советским анекдотом:

- Дети, в Советском Союзе все живут счастливо, у всех достаточно продуктов, все могут позволить себе хорошую квартиру, в магазинах огромный выбор доступных товаров!... Вовочка, а что ты плачешь?
- Марьиванна, хочу в Советский Союз!

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



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

Upd: Гугль, кстати, "реализовавший" аналогичную функцию намного раньше, ведёт себя ещё хуже - выдаёт кучу "похожих картинок", ни одна из которых не является искомой. Так что технологии пока не работают. Ни там, ни тут.
А, вы об этом. Это, к сожалению, уже не вопрос научных методов, машинного обучения и тп высоких материй, это вопрос денег на железо. Все картинки из всего интернета нужно скачать, куда-то сложить и обработать; по понятным причинам это дольше и дороже, чем тексты, и для этого нужно очень много компьютеров. Поэтому поиск по содержимому картинок пока что в своей полноте уступает поиску "обычному". Ничего, заработаем ещё, расширимся, всё будет хорошо. :)
Ну будем надеяться ;)
Алексей Т.
8 ноября 2013, 01:23

Вам просто неудачный пример подсунули. Я 15 лет уже мечтаю, когда же наконец операционная система научится делать за меня рутиные операции и запоминать мои действия.

 

Открывать это окно именно в этой части экрана, сохранять файл тут, а не там, при открытии пути в проводнике подавать подсказки "вы уже открывали начало пути, "c:\program~\Mi...", хотите открыть полный путь "c:\Program Files (x86)\Microsoft Visual Studio 8\VSTA\Bin\1033\", пытаться анализировать мои действия....

 

Крупные корпорации, например MS, тормозят развитие, желая облегчить жизнь пользователям в последнюю очередь после первостепенной - собственной наживы и маркетинговых фенечек в виде плиток

Не помню, что насчет 15 лет назад, а в 2011 я об этом тоже мечтал.

Вот только с "крупные корпорации... тормозят развитие" я совсем не согласен. Огромная часть современного мира создана в Bell Labs (транзистор, фотоэлементы, Unix, C, C++). А Bell Labs - самое что ни на есть исчадие корпорации из корпораций, гигантской "естественной" монополии со сверхприбылями и с подковерным госрегулированием поверх. А также (в меньшей степени) создано оно всё в IBM (no comments), Xerox (мышка+окошки), и в том же Microsoft (я не о Windows сейчас). Это если только о компьютерах.
Куранов Александр
7 ноября 2013, 22:40
В чём разница между человеком и ЭВМ? Человек осознаёт себя как личность, а машина — нет. Если написать алгоритм, который позволит ЭВМ идентифицировать себя как самостоятельное и независимое (тема рефлексии в философии), тогда возникает резонный вопрос: как будут развиваться отношения между человеком и ЭВМ (носителем искусственного интеллекта)?
Харисов Ильвир
7 ноября 2013, 23:21
Конфликты, думаю, будут неизбежными..
"Конфликты" - неправильное слово. Сразу представляется какой-то "Терминатор" и прочие комиксы. Вот между саранчей и людьми были конфликты?
Харисов Ильвир
8 ноября 2013, 11:44
Вопрос в том, кого вы видите в роли саранчи в нашем случай?
Машин, естественно. Люди воевали последние несколько тысяч лет, а охотились вообще всегда, в том числе на существ гораздо сильнее себя. Мы знаем гораздо больше компьютеров, мы старше, хитрее и злее. В конце концов, мы уже перебили несколько других разумных видов (родственничков, конечно, но неважно).

В ближайшие 50 лет бояться нужно будет тех военных роботов, которые выполняют приказы, а не тех, которые "вышли из-под контроля".
Харисов Ильвир
8 ноября 2013, 12:22
В том то и дело.. мы будем создавать машин по образу и подобию своему, мы дадим им знания накопленные человечеством в течении всего своего существование.. так же мы обучем их войне, но в отличии от нас, они будут на много устойчивее, они не будут знать страха, голода, холода и прочего.. человек же по большему счету слаб.. и если же человек когда-нибудь придумает ИИ, то это будет началом его конца.

> мы будем создавать машин по образу и подобию своему

Не будем. Зачем? Самолёт не вьет гнёзд и не несёт яйца, а искусственному интеллекту совершенно не интересны будут власть или размножение.

> мы обучем их войне

Вот этого надо бояться. Не выхода роботов из-под контроля людей. А этого самого контроля. Беспилотников, собственно, стоит бояться даже сейчас, хотя это пока всего лишь радиоуправляемая игрушка. Когда они станут автономными и научатся самостоятельно исполнять приказы вида "найди и убей Бин Ладена" -- вот это будет действительно страшно.

Харисов Ильвир
8 ноября 2013, 13:02
> Самолёт не вьет гнёзд и не несёт яйца

Первые самолеты создавались по образу птиц, то, как они летали и легли в основу самолетов.. наивно полагать, что при создании ИИ, мы возьмем образ дельфина например.

> искусственному интеллекту совершенно не интересны будут власть

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

> C чего вы взяли?

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

Харисов Ильвир
8 ноября 2013, 14:56
С этим я согласен с вами.. но не в чем нельзя быть уверенным.. создание ИИ лишь вопрос времени.
> Если написать алгоритм, который позволит ЭВМ идентифицировать
> себя как самостоятельное и независимое

Самосознание человеческого типа к этому не сводится. Вообще, до сих пор этот феномен до конца не понятен, ясно только, что повторить его в железе - задача чудовищно сложная, абсолютно непрактичная и предельно аморальная.
Я бы, кстати, больше боялся не "выхода машин из-под контроля", а роботов и полуроботов, намеренно созданных для уничтожения людей. Не обязательно даже "разумных", ни в каком смысле этого слова: убийство дело нехитрое. В ближайшие десятилетия это гораздо более серьезная угроза.
количество найденного почти по любому запросу огромно: сотни тысяч, часто — миллионы результатов. Большая часть из них неинтересные, бесполезные, лишь случайно упоминают слова запроса или вообще являются спамом
А вы не пробовали подсчитать, насколько ваши закрома вообще забиты спамом? (который вы так долго учитывали в ранжировании, и будете учитывать дальше, будете продолжать публикации про специфичный учёт платных ссылок)

Уже давно пора пойти дальше и посмотреть, к каким тенденциям приводит существование ранжирующих систем, которые не умеют искать ответы.

Как вам новостюга: РуЦентр (nic.ru) запускает SEO...? Что-нибудь дежурное по этому поводу ваши спецы скажут? (угадайте, почему их опять никто не будет слушать)
паук розовый птицеед
тарантулы · фото

 

А вы не пробовали подсчитать, насколько ваши закрома вообще забиты спамом?

Пробовали :)

 

Уже давно пора пойти дальше и посмотреть, к каким тенденциям приводит существование ранжирующих систем, которые не умеют искать ответы

1) Почему вы считаете, что не умеют?

2) Люди, на самом деле, ищут в интернете не только и не столько ответы. Вот подряд несколько поисков с dzen.yandex.ru: "большой член", "кисель по изотову отзывы", "спектр", "дом 2 скрытая камера в ванной" (OMG), "Вторая мировая война - день за днём 16 серия", "в контакте", "ооо невтигаз", "семь дней", "тотал больше 1,5 что значит". Я бы не назвал ничего из этого "поиском ответа". Это вообще не вопросы даже.

Алексей Т.
8 ноября 2013, 23:54

1. на то есть веские причины.

2. не надо приводить запросы детей и юных парней, приведите в пример мои запросы за последние 2 года, и проанализируйте выданные ответы. Во многих случаях переход на Google решал поставленную задачу эффективнее.

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

Алексей Т.
10 ноября 2013, 03:15

Не хотите - не надо.

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

Почему вы делаете упор на быстроту ответа, когда на многие запросы я готов ждать более 1 секунды, вплоть до нескольких минут?

Почему памятка по правилам использования языка запросов запрятана так глубоко?

Почему нет нормального конструктора запроса, где я бы мог в табличной форме указать в каждой строке условия?

Во многих случаях мне не требуется за меня домысливать, что я хотел-таки доехать из Питера до Москвы, а хотел найти все страницы в www, содержащие все лексемы запроса, с возможностью отключения "моих предпочтений", потому что подсовывание одних и тех же посещённых ресурсов меня иногда не устраивает.

> Не считайте других людей убогими и тупыми

Извините, если вам так показалось. Я не считаю. Просто для содержательного разговора собеседникам нужен какой-то общий язык, какая-то база, иначе приходится писать тексты огромного размера. Устно ещё как-то можно объяснять, особенно с предварительной подготовкой, на лекциях или конференциях каких-нибудь. А письменно я не могу, у меня семья и дети :)

> Почему вы делаете упор на быстроту ответа, когда на многие запросы я готов ждать более 1 секунды, вплоть до нескольких минут?

Потому что качество ответа не изменится принципиально от того, что мы будем отвечать гораздо дольше. Если удовлетворяющий вас результат не найден, причина тому, как правило, не в "спешке", а в том, что нужного документа нет в базе (например, ещё не успели обойти). Или он (возможно, ошибочно) признан спамом. Или поиску неизвестен какой-то синоним (например, он не знает, что "руторка" - это то же, что "rutor.org"). Какие-то подобные причины.

> Почему памятка по правилам использования языка запросов запрятана так глубоко?

Она находится на странице "расширенный поиск", рядом с первым же полем. Куда вы бы предложили её положить?

> Почему нет нормального конструктора запроса, где я бы мог в табличной форме указать в каждой строке условия?

Эту идею я не понял. В чем отличие от http://yandex.ru/search/advanced? Каких-то критериев не хватает? Или что?

> найти все страницы в www, содержащие все лексемы запроса

Такая возможность есть, см. http://help.yandex.ru/search/query-language/crib-sheet.xml

> с возможностью отключения "моих предпочтений"

И такая есть: http://yandex.ru/search/customize (раздел "Персональный поиск")

 

Надеюсь, это вам в чем-то поможет.

Алексей Т.
12 ноября 2013, 19:28

Спасибо, когда найдётся свободное время, опробую и отпишусь

Максим Рябухин
14 ноября 2013, 20:00

полезная информация

vorobjew.misha2010
4 марта 2014, 18:11
В 50-60 годах, когда учась в ВУЗах, нас обучали компьютерной грамоте. Для практики нам показывали громадные устройства  с мигающими лампочками и объясняли,что эта машина может творить чудеса. Теперь маленький чемоданчик может заменить сотни таких устройств. Самое неожиданное, как я считаю, может получься , что через в ближайшем будущем, человеком будут управлять машины.
> В ближайшем будущем, человеком будут управлять машины.
Можно ли считать, что будильник мной управляет? А чуть более продвинутый будильник, с рекомендацией фильмов?