Эвристика и почему устарели старые алгоритмы
Машинное обучение стало частью жизни и без него уже ничего не будет работать. И это не какие-то технологии по типу летающих машин, которые однажды появятся. Нет, машинное обучение происходит с вами каждый день, и либо вы — объект этого обучения, либо поставляете данные для него. Второй важный пункт: не существует «волшебных коробочек». Нет такого, что вы что-то забрасываете в ИИ, и вам возвращается какое-то чудо. Самое важное, что существует — качественные данные, на которых происходит обучение, а это долго и дорого. Когда вы слышите, что классные ребята сделали приложение, то весь их секрет — в данных. Все архитектуры и алгоритмы открыты и ни для кого не являются тайной. И последнее — машинное обучение двигается силами открытого сообщества. Любая компания, которая заявляет о собственном превосходстве и ничем его не доказывает, кроме презентаций — это «шляпа», поэтому мы за открытый код так же, как Google, их друзья и другие разработчики всего открытого и хорошего.
ИИ — большая отрасль, а машинное обучение — часть ИИ. В нем есть такие алгоритмы как нейросети, и есть глубокое обучение — конкретный тип нейросетей, которыми мы занимаемся. Прежде, чем говорить о важном и интересном, нужно понять, почему мы решили перейти на машинное обучение, и почему старые алгоритмы больше не работают. Это самый частый вопрос, который мы получаем как дата-сайентисты после любой презентации.
Для определения рака на первой стадии более точно, чем это делает врач, как раз и нужны алгоритмы. Ранее нефть текла примерно так, как будто мы вставили соломинку в землю, и она сразу полилась, но такого больше не будет, так как все природные ресурсы становится добывать все сложнее и сложнее. Различные сферы изменяются, понятные и простые вещи уже случаются гораздо реже. Все наши предыдущие знания основаны на эвристике. Эвристический алгоритм — алгоритм решения задачи, правильность которого для всех возможных случаев не доказана, но при которой известно, что он дает достаточно хорошее решение в большинстве случаев. Но в действительности можно доказать, что эвристический алгоритм неверен. К примеру, мы знаем, что человек чем-то болел, у него есть семейная предрасположенность. А значит, новообразование, которое мы видим на экране, скорее всего, является онкологией, и дальше мы его отправляем на различные обследования. Если же этих факторов нет, то мы ничего делать не будем, в этом и есть эвристика.
Большинство программ, используемые в геологии, медицине и других отраслях, построенны на эвристике и сегодня пытаются максимально переключиться на машинное обучение. Это очень тяжело, так как для машинного обучения нужны данные. К примеру, один известный сайт отлично использует Data Science. У них есть раздел «Популярное», он отбирается по количеству просмотров, есть раздел «Лучшее», он отбирается по количеству лайков, но есть раздел «Горячее». Помогите мне определить эвристику, которая формирует этот раздел. Какое видео вы бы назвали «горячим»? По скорости набора просмотров? Идея хорошая, но это не так. По хештегам? Тоже нет. Существует серия просмотров видео. Человек приходит на такой ресурс, как PornHub, посмотреть интересное кино, смотрит одно-другое, но в определенный момент уходит с сайта, потому что сделал то, за чем пришел, посмотрел кино и вот эти видео, которые были последними в серии просмотров и попадали в категорию «Горячее». Однако, как мы прочитали ранее, эвристика работает не всегда, потому что это может быть неправильным знанием. Она может работать в большинстве случаев, давать какую-то точность и снижать неопределенность, которая сильно присутствует в нашем мире. Эвристика работает, но от нее нам следует максимально уходить. И сейчас мы разберем варианты того, как можно уйти от этих привычных знаний.
«Самое важное, что стоит запомнить, нейросеть — не волшебная коробка»
Лишь в 2009 году начало очень сильно расти число публикаций о нейросетях в научном сообществе, хотя первая публикация о них была сделана еще в 1959 году. 50 лет ничего не происходило по причине отсутствия возможности проводить вычисления. Для того чтобы натренировать нейросеть и обучить ее чему-то, необходимо очень много вычислительных мощностей и сильное железо. До этого не было графических ускорителей GPU, которые есть сейчас, и ничего нельзя было посчитать. Сегодня каждый день появляется порядка 50 публикаций. Самое важное, что стоит запомнить, нейросеть — не волшебная коробка. Существует конкретный тип данных и постановка математической задачи. Все сложные задачи декомпозируются на что-то простое. Рассмотрим это на примере. У нас есть нейросеть, определяющая рукописный текст. Изображение разбивается на пиксели, и это входящие данные. Скрытые слои нейросети — некоторая функция, которой мы никакой эвристики не задаем. Она сама учится выводить математическую последовательность и относит входные данные к какому-либо классу.
Если вы научили сетку на собаках, а показываете кексы, то получится дикая каша. Как и в предыдущем примере, в случае применения ИИ, мы предоставляем породы собак и ответы. Подаем картинку и говорим: «Отнеси эту картинку к породам собак». Для того, чтобы это работало, нужно использовать порядка миллиона картинок, тогда сеть хорошо распознает их. Данных должно быть очень много и те, которые вы потом в это приложение собираетесь подавать. Следующая задача — детекция. Есть некое изображение и нужно обвести объект, принадлежащий определенному классу. Подобный алгоритм по детекции используют и пытаются передать его в бета-тестирование организации по поиску пропавших людей. Алгоритмом детекции фильтруются снимки, на которых ничего незадетектировано. Снимок считается неинтересным, и их для просмотра глазами людям уже не показывают. А снимки с высокой вероятностью нахождения человека — показывают. Еще одна задача — сегментация, которая бывает одно- и многоклассовой. Классы — разные объекты. К примеру, здание, человек или дерево. Есть задача генерации. Они смотрят на изображение и те самые скрытые слои нейросети превращают из набора данных что-то определенное. Например, мы говорим: «Сгенерируй лица людей». Сетка сама обучалась, поэтому начала понимать, что у человека круглая голова, есть нос и так далее. И теперь этой сетке можно дать задание сгенерировать, например, мужчину 50 лет, и она все поймет. Но существуют еще видео, которые по сути представляют собой множество изображений. В этом случае применяется аналогичная методика. Если мы можем сгенерировать изображение, то можем заставить его двигаться так, как это делает определенный человек. К примеру, есть человек на YouTube, предположительно, русский, его ник — Ctrl+Shift face. Он делает deep fake видео на звезд. Он берет лица одних звезд и метчит их на других звезд. Это очень тяжело вычислить визуально, если вы не знаете, что должно происходить.
Нейронная сеть может генерировать подписи к изображениям. В этом случае сетка просто научилась подписывать то, что есть на изображении. Но если бы ее обучали на Instagram, то она бы научилась делать такой же контент, и это было бы еще интереснее. Также есть тексты, с которыми сетки тоже работают и делают это лучше людей. Тексты для сеток — бессмысленное месиво, они не имеют для них никакого значения. Это у вас есть какая-то эмоциональная привязка, мораль которую пытался передать автор, все ведь писали сочинения о том, что пытался сказать писатель. Сетка не знает, что он пытался сказать, а текст для нее — векторы. Над ними и производятся разные математические операции. Например, король минус человек плюс женщина равно королева — вполне логично. Однако мы учимся на исторических текстах, и поэтому получается неловкость, когда доктор минус мужчина плюс женщина равно медсестра. При таком исходе нет врача-женщины.
Где-то полгода назад ребята написали, что сделали нейронную сеть по генерации текста. Все, что нужно — задать тему, буквально 5–7 слов, и сеть напишет сочинение-размышление на эту тему. Все работает прекрасно, однако ее очень легко обмануть. Авторы не выложили код в открытый доступ и не показали, на чем они обучали сетку, а обосновали это тем, что не хотят делиться технологией с миром, потому что мир к этому не готов, то есть это будет использовано во вред. И действительно это может быть неким оружием для медиа, если бы эта штука писала новости, мы бы к примеру читали, что Путин умер буквально каждый день, какими-то разными способами она бы придумывала это. Таким образом, фейки в СМИ были бы постоянно. Распознавание речи имеет тут все то же самое, есть звук, нам нужно оцифровать его, а полученный сигнал — всегда какое-то значение и уже он конвертируется это в текст. К примеру, то что вы делаете с Алисой и Сири — именно так и работает. Точно так же есть и генерация речи, когда вы пишете в Google Translate текст, он его переводит, а затем формирует из этих букв звуковую волну и ее воспроизводит.
Есть смысл тратить деньги на обучение детей киберспорту
Обучение с подкреплением и самый простой его пример — игра в «Тетрис». Оно работает в трех терминах. Есть агент — то, на что вы воздействуете. В «Тетрисе» — это палка. Среда — то, что есть вокруг, и награда, когда ты проигрываешь, то теряешь награду или, наоборот, набираешь очки и получаешь ее. Сетка начинает изобретать действия, которые приведут ее к победе и максимизируют выгоду. Таким образом, путем проб и ошибок она учится, это очень долго и дорого. Пример с «Марио» еще более сложен, так как тут и среда сложнее. Сначала сетка просто бежит и не собирает монетки, мы говорим: «Плохо сыграл, давай лучше», и сетка пытается это оптимизировать. Точно также обучение с подкреплением — игра Go. В мае 2014 года люди говорили, что потребуется не менее 10 лет, чтобы компьютер выиграл в Go у человека. Уже в следующем году нейросеть обыграла чемпиона Европы. В марте 2016 года нейросеть AlphaGo обыгрывает 18-кратного чемпиона мира. Все были в шоке, но дело в том, что в 2017 году следующая версия AlphaGo, которая вообще никак не учитывала весь человеческий опыт, играла со своей предыдущей версией и выиграла у нее со счетом 100:0. Она делала абсолютно непредсказуемые шаги, никак не описываемые людьми и непопадающими ни в какую логику.
Обучение роботов движению и взаимодействию в среде работает на основе обучения с подкреплением. Когда вы робота заводите в комнату и говорите: «Выйди из комнаты», он сначала будет тыкаться и учиться. Но дело в том, что роботы очень дорого стоят, поэтому если ваш алгоритм ошибается и разбивает многомиллионный дрон — это очень обидно. А потренироваться в «Доте» на людях — сам бог велел. Отсюда делаем вывод, что есть смысл тратить деньги на обучение сетей киберспорту.
Нужно всем рассказывать, что и как вы делаете, потому что смелые заявления в интернете о том, как очередная группа написала очередное чудо приложение, которое все распознало — это все неправда. Есть лидеры рынка, они разрабатывают инструменты и выкладывают их в открытый доступ, чтобы все люди могли контрибьютить в это, писать код и предлагать изменения, двигая отрасль. Это Google, Facebook и Uber. Есть «хорошие парни», примером таких может быть «Яндекс». У них есть некоторая часть кода, которую они выкладывают и дают людям попользоваться, чтобы быть среди лидеров на столько, на сколько это получается. Но так же есть и «опасные парни», с которыми никогда не нужно связываться. Мы сейчас не говорим о примерах конкретных компаний, просто так совпало, что есть компании, которые не разрабатывают собственных алгоритмов, а пользуются всем тем, что написали «хорошие парни» и «отличные парни», пытаясь изобрести из этого франкенштейна и продать вам его очень дорого. Может они исправятся, но пока у них нет инструментов и статей за их авторством, и пока они не продемонстрировали, то этого чуда не будет. Мы же стараемся быть посередине, поэтому на GitHub есть наш код. Так что если решили стать дата-сайентистом широкого формата, то заходите и пользуйтесь.
Сетка, которая переживает опыт Ивана Петровича
Как используют Data Science в компании «Газпром нефть» — например, в геологической разведке. Есть некая земля, туда приходят люди, раскладывают заряды, взрывают и записывают сигнал. Эти колебания, когда проходят через землю — либо хорошие, либо плохие. Наша задача — выделить полезную составляющую сигнала в области распространения поверхности волны. Сейсмики делают это вручную в своих программах. Так что мы берем сейсмиков и просим их отфильтровать и показать, как это делать правильно. У нас есть входной сигнал — волна, цифры, есть модель и исправленный сигнал, который нужно воспроизвести. Однако первая архитектура нейросети удаляет в некоторых местах сигнал. Запретить ей нельзя, по крайней мере эвристиками. Мы помним, что нельзя вмешиваться в ее мир, нужно дать ей какое-то дополнительное знание и заставить ее работать по-другому. Поэтому была сделана другая архитектура нейронной сети. Здесь мы точно также очищаем сигнал, но добавляем один блок, который заставляет сетку удалять шум только там, где это делал сейсмик. Это называется сетка с вниманием. После того, как вы добавляете блок внимания к сетке, все работает намного лучше без потерь.
Сетка работает гораздо быстрее, и опыт жизни Ивана Петровича переживает по 500 раз на день, становясь умнее. Легкий пример сегментации: есть фотография керна — это то, что попало в скважину при бурении. Специалисту нужно разобрать, какие пласты там находятся. Для этого фотографируют керн. Ему необходимо выполнить разметку, и он вручную сидит и разбирается. После того, как мы обучаем сетку, она легко предсказывает все блоки в керне, в то время как человек тратит на это недели. Сетка за час отработала и выдала данные о всей скважине. И чем больше мы ее учим, тем лучше она работает. И когда нам задают вопросы по типу, как же сетка может справиться с опытом Ивана Петровича, который с 1964 года этого керна столько видел и так далее, мы отвечает: Иван Петрович делал ровно то же самое, что делала сетка: брал керн, брал учебник, садился и пытался на основе опыта других понять закономерности. И с ней точно нельзя соревноваться.
Возвращаясь к вопросу чудо-систем, которые делают все. Мы делаем маленькие этапы, берем керн, размещаем слои и фильтруем волны.
Мы могли бы просто дать сырые данные сетке и сказать, покажи где нефть, и она бы это сделала. Но люди до сих пор не верят в технологию, у них есть сложности с пониманием. Для этого приходится делать маленькие части только для человека, чтобы эксперт мог посмотреть и сказать, что действительно понимает, что и откуда взялось. Если вам кажется, что какие-то элементы и приложения еще не существуют, то это только потому, что люди к ним не готовы, либо в них не вложились деньгами. Например, у нас есть сырой сейсмический куб. Мы добавляем модель очистки шума, затем данные разметки пластов и другую информацию, и тем самым восстанавливаем интервалы, где специалист пропустил нефть.
Все читают новости, где пишут, что воровство с ваших карт или собака во дворе все детектируется с точностью 98%. На что нужно обращать внимание в любых смелых заявлениях? Первое — если говорят про точность 90%. Исходя из медицинского опыта, если взять 10 человек, и один из них будет болен раком легких, а будет сказано, что все 10 человек здоровы, то это предсказание с точностью 90%. Ошибка в одном из 10 случаев, все честно. Но только это так не работает, ведь речь шла о другом — о детекции больных людей. Таргет был на больных людях, и то, что всех назвали здоровыми, совершенно ни к чему не приводит. Когда вы читаете новости о том, что появилась система с подобной точностью, скорее всего, это не так. Если нет статьи, которая это подтверждает, открытого кода или описания, как они это сделали. Повторить так просто после описания невозможно, вам нужны данные, на которых они обучались. Для оценки моделей Data Science точность вообще не используется. Есть блок метрик, который используется для задач фрагментации и классификации, у каждой из них — своя четкая постановка. Нужно внимательно относиться к тому, что льется из интернета к вам в уши.
Следующее спорное заявление, что сетка работает лучше, чем человек. Всегда найдется достаточно глупый человек. Если взять меня, к примеру, и попросить распознать нефть, то я скажу: «Вот тут, где-то», и мне скажут, что у меня не получилось, значит наша система работает лучше. Сравнение должно быть с главными людьми в отрасли, с целыми группами экспертов. Поэтому «Лучше, чем человек» — средней степени правдивости заявление.
Не существует ситуации, когда вы вбрасываете пустые данные в чудесную модель и получаете что-то хорошее. Зачем нужны датасеты? В случае с геологической разведкой, происходит передача сырых данных, таких как сейсмика, картинка земли. Это передается эксперту для оценки, и он выдает ответ. Но так как мы двигаемся все дальше и быстрее, то технологически можем проводить гораздо больше исследований на одной территории, а эксперты у нас так быстро не растут. Когда приходит много данных, эксперт уже не справляется, и мы затыкаемся этим человеком или группой людей. Если убрать от него рутину, я не говорю о том, чтобы заменить человека, на данном этапе он нужен нам, как минимум, чтобы просматривать результаты сетки. Если где-то в цепи «Данные — Модель — Результат» есть шляпа, то и на выходе будет шляпа. Все это, конечно, дорого и долго, но классно.
Сложная модель умеет обобщать, конечно, после определенного предела ей понадобится много данных, но гарантировано этот предел достижим. Например, сеть, которая распознает рак. Мы попросили множество специалистов предоставить снимки, где есть подозрения на онкологию, для обучения сетки. Но что получилось? Первый врач считает, что в данной области есть рак, второй — что там два рака, а третий считает, что их три. Сделать из этого нейросеть невозможно, потому что если научить сетку на этом, она будет предсказывать что рак везде. Такую разметку подавать в сеть нельзя, нужно дать экспертам определенные правила, по которым они будут выполнять задание. Решение все этой проблемы — отбор экспертов и валидация итоговой отметки. Нельзя взять все данные и засунуть в сетку, и ждать чуда, они могут вообще никак не пересекаться. К примеру, в рамках одного месторождения нефти данные могут не совпадать и над этим тоже нужно работать. Простые модели тоже не справляются, есть насос и есть его датчик, мы берем простую модель, и все работает. Но появляется один изношенный насос, которого не было в выборке при обучении, и простая модель с ним уже не справляется, так как данных не было, а обобщать она не умеет.
Ошибки и заблуждения, связанные с датасетами
С нейронными сетями возникают фейки и проблемы, которые имплементируются в нашу жизнь. К примеру, проблемы с датасетом. Есть китайская система распознавания нарушений, и одной женщине выписали штраф за переход в неположенном месте. Только дело в том, что фотография женщины была на рекламе, расположенной на автобусе, который переезжал через пешеходный переход. Лицо женщины на рекламе попало на камеру. Сетка детектировала женщину и выписала ей штраф, который пришел ей домой, и она очень удивилась. Для таких задач нужны определенные датасеты для обучения. Есть датасеты объектов в контексте. Например, женщины на автобусе, но они относятся к разным классам, а автобус — просто бэкграунд. В таком формате таких ошибок не будет. Это был просто неправильный датасет на обучение. Еще один пример — классный Luna16. Было соревнование по определению рака легких среди нейросетей. Американское сообщество выпустило для нее датасет, сделав тысячу снимков. Они давали снимки пациентов для разметки трем разным экспертам и выделили только те раковые области, на которых эксперты сошлись, а остальные отбросили. В другой конторе ChestXRay14 решили, что тоже можно сделать круто и выпустили новость, что собрали 200 тыс. рентгенов с заболеваниями. Но выясняется, что больных там только 20%. А ведь действительно важными для нас являются только эти 20%, а среди этих пациентов еще очень много других заболеваний и разных их подтипов. В итоге выясняется, что данных на одно заболевание порядка тысячи, и так как это не 3D-объем, то там нет полной информации и ничего с этим сделать нельзя. Многие погорели на том, что написали кучу статей о том, как они все распознали, а потом какой-то мужчина сел, заморочился и разобрал датасет и сказал, что там нет никакого предмета научной новизны.
То, с чем вы сталкиваетесь каждый день — сети предлагают вам купить разные товары. Вы в интернете что-то поискали, и вам нужно теперь порекомендовать что-нибудь, ведь бизнес должен как-то двигаться. Если вы что-то купили или поискали, то вам будут предлагать это очень долго, потому что сеть не знает, когда остановиться. Вы не сообщаете ей, что уже купили нужный диван и они вам больше не нужны. Теперь диван будет вас преследовать, куда бы вы ни пошли. Поэтому это еще один пункт, где сети валятся, они либо не знают, что предлагать, когда нет никакой информации, либо не знают, когда нужно остановиться. Есть проблемы с реализацией. IBM в течение долгих лет выпускала новости о том, как они сделали великолепную систему рекомендаций врачам, которая будет замечательно подсказывать и делать жизнь лучше, но по факту ничего не произошло. Они скупили много стартапов, пытались их объединить, закрыть код и сохранить коммерческую тайну. Они двигались в сторону пиара, а не разработки, и в итоге провалились во всем. Поэтому всегда бойтесь смелых заявлений. И то, о чем мы говорили сегодня, как люди гадят в интернете. Один из ресерч-проектов, который был реализован — бот для общения в «Твиттере». Его обучили на текстах соцсети и запустили, чтобы он общался с пользователями. В итоге бот смотрел на весь троллинг и ненависть и начал под это мимикрировать. И последнее, на чем валится любая система, — это реальность. Мы помним с вами про селф-драйвинг, который обучается на знаках, объектах и людях. Но дело в том, что во Флоренции, к примеру, есть художник, он даже поддерживается правительством города и клеит веселые стикеры на знаки, чтобы разнообразить будничную жизнь людей. И таких знаков в обучающей выборке селф-драйвинга, скорее всего, не будет. Поэтому если выпустить машину в такой мир, то она, скорее всего, кого-то собьет. Что нужно сделать, чтобы все было круто? Пишем все прямыми руками и очень сильно ботаем математику, а не рассказываем новости и все, что есть в открытом доступе.