DZ Online Tech: ABBYY. Как не запутаться в нейронных сетях?
Друзья, с момента основания проекта прошло уже 20 лет и мы рады сообщать вам, что сайт, наконец, переехали на новую платформу.
Какое-то время продолжим трудится на общее благо по адресу
На новой платформе мы уделили особое внимание удобству поиска материалов.
Особенно рекомендуем познакомиться с работой рубрикатора.
Спасибо, ждём вас на N-N-N.ru
Мы (DZ Systems) уже второй год снимаем серию передач о цифровой трансформации. Обычно это передачи «про бизнес», в основном ориентированные на топ-менеджеров и призванные помочь разобраться в бизнес-ценности того, что называется цифровая трансформация. Но в этом году снимаем так же и вторую «линейку» передач — DZ Online Tech, теперь уже ориентированную на технологические аспекты той же темы. Если коротко — о том, что находится «под капотом». Ниже — расшифровка очередной такой передачи, в которой мы с Иваном Ямщиковым (Яндекс, ABBYY, да и вообще профессионал высокого класса) говорим о применении нейронных сетей в современном мире.
Если интересно, можно посмотреть и саму передачу.
А для тех, кто любит читать — расшифровка ниже:
Здравствуйте. Наш сегодняшний гость – Иван Ямщиков из компании ABBYY, который расскажет нам как устроен современный искусственный интеллект. По отношению к AI условно есть две позиции: люди, которые говорят: «Мы не хотим ничего понимать про суть происходящего в системе. У нас есть статистические методы, которые сами вынут модель из внешней жизни. Эта модель будет правильной, она будет чувствовать все семантические тонкости». И есть люди, которые говорят: «Нет, так нельзя. Мы же понимаем, что происходит. Мы это понимание должны вложить в систему искусственного интеллекта, и тогда она будет ценнее, лучше и качественнее». Эта битва имеет внутри себя какие-то критерии?
Давай я объясню на менее философском языке. Есть люди, которые говорят: «Нам нужны более сильные, более производительные алгоритмы и бОльшие объёмы данных. Мы возьмём более производительный алгоритм, и он на бОльшем объёме даст нам бОльшее качество целевой метрики, неважно какой». Я не знаю людей, которые говорят, что им не нужны данные или алгоритмы. Поэтому у второй группы людей, на мой взгляд, подход следующий: «Помимо всего этого нам бы неплохо ещё человеческой разметки в том или ином виде, какое-то экспертное знание, добавить поверх». В Google есть такая шутка, которую часто цитируют: чем меньше лингвистов работают над продуктом, тем лучше будет финальное качество. Эта шутка, наверное, оправдана практикой массовых B2C-сервисов. Но когда мы говорим про B2B в контексте узких продуктовых решений, в контексте очень чётко поставленной задачи и хорошо определённого поля, то экспертное знание начинает играть довольно важную роль. Мы сочетаем внутри ABBYY и онтологические модели, которые лингвисты строят, и подходы чисто машинного обучения.
Хочу привести пример: мы делали проект для Мосводоканала. Там стояла такая задача: у Мосводоканала есть сложная сеть, она как-то работает и как-то себя ведёт. И хочется что- то про неё понимать, желательно предсказывать аварии, чувствовать, когда что-то не так происходит.
Вы делали систему мониторинга.
Да, мы делали некую систему анализа поведения, которая должна была сказать: «В этом углу что-то не так». Мы реально не можем сказать, это авария или просто флуктуация поведения, потому что они физически неотличимы…
Я делал примерно такую же систему для мониторинга трафика.
Очень похожая тематика. В ходе проекта мы боролись с инженерами, которые говорили: «Слушайте, вы занимаетесь фигнёй. Надо измерить все трубы, их диаметры внешние и внутренние, потом внести информацию о гладкости стенок. И потом посчитать гидродинамическую модель, и она будет всё показывать». А мы говорили: «Не надо. Дайте нам данные с датчиков, мы загоним их в стат-модель, и она, не зная ничего про физику, будет всё равно работать, потому что вынет реальное поведение». Это прямо предельный случай того, о чём мы говорим. С одной стороны, это предельное знание физики работы явления, которое мы упаковываем семантически напрямую, а вторая сторона – это предельное непонимание. Мы не то чтобы не понимали, как работает гидродинамика – мы даже не хотели этого понимать.
Заносчивость очень свойственна людям, которые хорошо знают статистику. Как говорил Марк Твен: «Бывает три вида лжи – ложь, беспардонная ложь и статистика».
Мы в итоге их победили по одной очень простой причине: собрать информацию обо всех этих трубах невозможно. Но, с другой стороны, какая-то глубина знания предметной области не может не помогать.
Люди, которые являются проводниками этого знания, считают, что оно верное, потому что это их область экспертизы. Но при этом на самом деле мы понимаем про естественный язык, с точки зрения компьютер-science, намного меньше, чем хотелось бы, потому что многие термины и категории определены не математически, а интуитивно. Это приводит к тому, что у тех людей, которые полностью заходят со стороны компьютерных наук, есть понятное недоверие к людям, которые заходят со стороны лингвистики и наоборот. В ABBYY это решается тем, что и те, и другие работают над продуктом, отвечают за разные части, и у тебя есть возможность замерить, сколько качества тебе добавляет вот это и вот это. Это способ тестов и экспериментов.
Это тоже большая беда. Мы все знаем, что есть проблема локальной оптимизации.
Конечно. Это переобучение. Но как раз очень часто вещи, связанные с общими лингвистическими подходами, позволяют бороться с переобучением. Потому что лингвисты часто пытаются создать некоторое общее правило, а дальше есть великая и прекрасная история про исключения. Любой, кто читал книжку Розенталя про русский язык в школе, недоумевает: боже мой, чем занимаются филологи? Они называют правилами то, что на самом деле является…
Набором исключений.
Но в сущности, это ровно та самая история про ошибку на тесте. Если ты посмотришь на это с точки зрения машинного обучения, очень большое количество лингвистических правил покрывают довольно большое количество примеров и оставляют некоторую ошибку на тестовых данных. Если ты возьмёшь эти правила и применишь к данным, которые твоя модель никогда не видела, модель в этом месте ошибётся. Но многие лингвистические эвристики позволяют защититься от переобучения.
Я тебя правильно услышал, что если мы возьмём книжку по русскому языку и загоним её в модель, то, экстраполируя эти правила, модель обязательно ошибётся?
Конечно. Именно так. Любые жесткие правила всегда будут приводить к ошибкам, потому что, к сожалению или к счастью, искусственный интеллект намного гибче, чем какой-то набор простых правил.
**Это связано ещё и с тем, что, когда мы говорим про формализацию правил естественного языка, мы в этом месте неизбежно занимаемся неразрешимой задачей. Глубина этого процесса бесконечна. **
Это философский вопрос. На машинном уровне глубина кажется не бесконечной, но есть интересная статья, по-моему, 2015 года. Краткий экскурс: есть такой раздел математики, который называется теория информации. В частности, он используется в теории кодирования. В России его делал Колмогоров и сотоварищи, в США – Шеннон. В первую очередь, его придумали в контексте криптографии. В теории информации есть такое понятие, как «общая информация». Если совсем на пальцах говорить: представь себе, как у тебя коррелируют значения того или иного слова в тексте в зависимости от расстояния между ними. Представь себе такую метрику. Если у меня здесь сказано «Петя», потом n-слов, а потом слово «съел». На самом деле слова «съел» и «Петя» коррелируют, несмотря на то, что слово «съел» может быть довольно далеко от «Пети». Если статистически построить модель этих корреляций, оказывается, что как функция от расстояния эта общая информация в текстах убывает довольно медленно – не полиномиально, а медленнее. Грубо говоря, в текстах на естественном языке есть корреляция между словами, далеко стоящими друг от друга. Примерно то же наблюдается в «текстах» ДНК: наши нуклеотиды тоже коррелируют на сравнительно большом расстоянии. В частности, такого рода системы пытается описывать теория сложности и т. д. Вся история про эффект бабочки – она про это, что у тебя маленькое отклонение в одном месте может привести к каким-то значимым изменениям далеко. Естественный язык описывается такого рода зависимостями. А сейчас, допустим, LSTM (Long Short-Term Memory Network) считается самой продвинутой, с точки зрения памяти, нейронной сетью, которая используется для анализа языка как раз для того, чтобы эти далеко стоящие друг от друга корреляции ловить. Вот у неё, зараза, память убывает быстрее, чем нужно. Это большая тема для исследований. В частности, мы в Max Planck Institute пытаемся этим заниматься. Есть интересный результат из теории графов, который говорит, что если у тебя в сети есть циклы, то у неё должно быть больше памяти. Мы знаем, что у нас в мозгу есть какие- то характерные частоты, и в мозгу есть циклы. По ним бегает сигнал, нейроны стимулируют друг друга по кругу с заданной частотой. В искусственных нейронных сетях мы пока это воспроизвести не можем.
Почему не можем? Добавьте циклы! Досыпьте, пожалуйста, циклов из мешка.
А я тебе расскажу. Как мы учим нейронные сети? При помощи обратного распространения ошибки. Обратное распространение ошибки – это когда у тебя есть прямой проход нейронной сети и обратный.
Как только есть циклы, сразу начинаются проблемы с зацикливанием этой самой ошибки?
Да! Что делать? Как сделать back propagation? Друзья, сделайте back propagation на цикле, и вы сделаете мощный прорыв в области развития искусственного интеллекта. Я всем говорю: надо этим заниматься, это очень круто. Это реально сложная задача.
А если эти люди, которые занимаются мозгом, разберутся, как это устроено в мозге, это можно будет положить? Казалось бы, на сегодня антропоморфность того, что мы делаем, очень низкая.
Давай так: что общего между ImageNet от Google и моллюском? Оказывается, более или менее всё. Изначально моллюска разобрали и увидели, что его зрительные поля устроены так, как современные свёрточные сети, если угодно. Когда-то в 50-е Розенблатт и товарищи его разобрали, и придумали перцептрон, во многом глядя на живые и очень простые штуки. Они думали, что мы сейчас поймём, как работают примитивные организмы, а потом начнём строить сложные.
Почему у них это не получалось? В те времена считалось, что перцептрон не жив. Мощности не хватало?
Там много проблем оказалось. Давай так: было несколько AI-зим, то есть люди каждый раз придумывают какой-то новый прорыв в области искусственного интеллекта, и думают: «Всё, завтра Джарвис будет моим лучшим другом, и будет общаться со мной лучше, чем мой психоаналитик». А потом что-то случается, как у того же Джарвиса. Я очень люблю эту шутку из фильма «Железный человек», где сначала всё идёт хорошо, а потом произносишь какую- нибудь клюкву. Так Джарвис говорит главному герою, когда тот его спрашивает, отладил ли он все системы.
Как это выглядит практически? Где находятся ограничения, если взять прикладную сторону?
Во-первых, сейчас даже самые мощные штуки, которые мы собираем искусственно, сильно меньше, чем наш мозг просто по порядку величины. А второй момент связан с тем, что мы не понимаем, почему они работают. Это отдельная большая область исследований.
Казалось бы, уже начинают рассказывать.
Сначала выяснили, что работает, потом стали разбираться, как оно работает. Есть отдельное направление про то, как визуализировать работу нейросети. Есть отдельный математический формализм, называется Information Decomposition, который пытается описать, как происходит декомпозиция информации на разные потоки внутри сети, чтобы понять, что на каких слоях происходит. С изображениями это начинает получаться и получается последние несколько лет. С текстами всё сложнее. Почему мы не понимаем, как она работает? Потому что у нас нет математического хорошего результата, который бы всё нам объяснял. У нас нет доказанной теоремы, которая бы говорила, что это работает. Потому что, допустим, на уровне свёрточной нейронной сети: у тебя есть картинка, на ней нарисована собачка. В этой картинке есть столько-то пикселей, у каждого пикселя есть столько-то значений. Если ты комбинаторно попытаешься посчитать количество вариантов сочетания пикселей, которые всё равно складываются в собачку – ты устанешь. У тебя по идее есть пространство довольно большой размерности и очень много вариантов решения. При этом если ты начинаешь обучать свёрточную нейронную сеть с количеством параметров сильно меньше, чем количество потенциальных изображений собачки, ты обучаешь её сравнительно простым образом. Она тебе на выходе говорит, собачка это или не собачка, а ты говоришь ей, да или нет. Внезапно через некоторое время оказывается, что она может тебе давать очень хорошее качество на картинках собачек, которые она не видела.
Степень обобщения неожиданно высока?
Да, это неожиданная степень обобщения. Все уже смирились с тем, что это работает, все применяют это везде, но строго обоснованного математического результата, который бы объяснял, почему такая степень обобщения возможна, нет. И тут есть несколько гипотез, одна из которых мне кажется наиболее интересной. Дело не в том, что у тебя происходит в каждом нейроне, а в том, как ты эти нейроны соединяешь. Сама структура сети, по-видимому, тебе позволяет добиваться определённого обобщения на определённом уровне. Это интересная гипотеза, потому что если она верна, то это хорошо связывается с нейрофизиологией, и тогда можно брать и пробовать что-то другое из нейрофизиологии. Есть какие-то другие предположения, но это вопрос: люди и сейчас пишут килограммы статей в месяц про то, как это работает.
Есть такое ощущение, что язык Python – язык ИИ. Это случайность или нет? Почему именно Python, ведь Basic’ов много.
Потому что довольно большую часть работы Data scientist’а сейчас составляет прототипирование. На Python удобно прототипировать, он создавался как язык для прототипирования, а не как язык для индустриальных решений. У нас в ABBYY есть люди, которые прототипируют на Python, и есть люди, которые пишут на C++ финальные модельки, которые имплементируются. Комьюнити Python’а эту волну активно использует и тут есть положительная обратная связь. Появляется спрос, т. е. data science все больше делается на Python’е, соответственно комьюнити начинает насыщаться людьми, которые пытаются развивать сам язык. Все это связано.
Когда мы говорим про прототипирование, то оно предполагает прогон большого количества тестов, экспериментов. Здесь возникает проблема с вычислительными ресурсами.
Сами вычислительные ресурсы стали дешевле, появились облачные решения, которые сделали их доступными. Грубо говоря, студент с выходом в интернет может ненадолго за разумные деньги получить довольно мощный сервер, для того, чтобы на нем что-то прогнать и какую-то модель получить, и прикрутить ИИ, например, к кофеварке. Сошлось много факторов, которые драйвят друг друга. За счет интернета понизился порог вхождения в программирование и в технологии в целом. Появилось много сравнительно дешевого железа, также оно ушло в облако. Можно купить время, а не железо. Появилось много живых данных. Например, в 80-е у людей, занимающихся data science, была фундаментальная проблема: где взять данные? А сейчас для кучи прикладных задач понятно, откуда их брать. Ключевые элементы для машинного обучения: алгоритм, данные и железо, на котором этот алгоритм работает. Все эти три параметра стали более доступными. При этом алгоритм стал доступнее, в том смысле, что появились коробочные решения хорошего качества. Они имплементируются на языке с интуитивно понятным простым синтаксисом, невысоким уровнем входа и кучей образовательных ресурсов.
Ребята из Microsoft рассказывали историю, как небольшая группа взяла нейронную сеть и бизнес-модель маленькой несложной компании, которая развозила хлеб. И из палок и веревок получилось построить модель, которая оптимизировала этот бизнес и дала +10% к эффективности. Такие картины скорее исключение или правило?
Это скорее правило. По-моему, у Келли (известный футуролог) есть хорошая лекция про будущее AI, в которой он говорит, что через 20 лет к нам будут относиться так же, как мы относимся к тем, кто был пионерами интернета. Мы сейчас говорим: «Как вам легко было в 90– е годы сделать интернет-бизнес». И через 20 лет так же будут относиться к нам, говоря: «Как вам было легко делать бизнес с AI. Взял что угодно, прибавил к нему AI и стал лидером в этой категории». По крайней мере, это мнение Келли, и я его разделяю.
Мы с тобой пережили некоторое количество происходящего в индустрии, и видели эту картину, когда то, что сейчас коммодити, когда-то было state of art. На основе своего опыта, можем ли мы людям, которые сейчас входят в технологию ИИ, посоветовать куда и как им надо двигаться?
У меня есть два совета, которые мне кажутся разумными. Во-первых, не делайте в углу один. Найдите пару-тройку единомышленников, работайте друг с другом и показывайте наружу то, что вы делаете в рамках более широкого сообщества. А во-вторых, меньше думайте про конкретные модели, которые вы будете использовать, потому что они будут меняться, становиться лучше. И если вы сейчас не на том уровне, чтобы их самому руками улучшать, вам надо меньше знать про то, как именно эта модель работает и почему она лучше. Вам надо больше думать о задаче, которую вы решаете.
- Источник(и):
- Войдите на сайт для отправки комментариев