Русский
Русский
English
Статистика
Реклама

Agi

Перевод AI только собирается стать умнее

31.03.2021 18:20:59 | Автор: admin

Как люди уже стали киборгами и используют AI

Привет, хабровчане.


AI (Artificial Intelligence, ИИ Искусственный Интеллект) как Аугментативный Интеллект (Augmentative Intelligence), использующий машинное обучение, алгоритмы и обширныеданные для расширения возможностей человека и бизнеса, вскоре может стать иллюзией.

Ускоряющиеся темпы технологических изменений дают людям возможность иметь как технологические ресурсы, так и научные знания для создания Искусственного Общего Интеллекта (Artificial General Intelligence).

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

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

Большая часть этих данных создается людьми.

Как часто вы в своей жизни записываете, оцифровываете и, в конце концов, делитесь этим?

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

Люди, по сути, уже "киборги", потому что у них есть третичный "цифровой слой" благодаря телефонам, компьютерам и приложениям слова Илона Маска в 2021 году.

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

Нет времени смотреть в прошлое, мы слишком часто заняты тем, чтобы вести запись настоящего.

Сегодня, с приходом Covid-19, мир становится намного более цифровым благодаря тому, что данные передаются через периферию интернета быстрее, в том числе и благодаря 5G, позволяя развивать скорость до 10 Gbps.

Смартфоны и датчики вокруг нас получили доступ к высокоскоростному интернету. Фактически исчезает последняя миля (передача данных от оборудования конечного клиента до последнего сетевого узла провайдера) с медленным WiFi или кабельным подключением.

По мере того, как мы привыкаем к новым реалиям в ситуации с Covid-19, социальная дистанция ускоряет оцифровку наших записей в большом объёме. Когда это в конечном итоге закончится, наше общее пространство станет гораздо более опустошенным, чем оно когда-то было.

Однако, как социальным субъектам, нам необходимо объединиться, чтобы выжить. Мы поддерживаем связь из дома. Деятельность из дома в значительной степени стала новым способом работы. Дети получают школьное образование онлайн. Родители работают дома.

Мы видим, как происходят огромные изменения в интернете. Резко возросло создание контента. Скорость взаимодействия с контентом также стремительно растет. Люди жаждут смотреть новые фильмы и поиграть в новые игры. Развлекательная и игровая индустрии развиваются.

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

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

Мы являемся свидетелями революции в здравоохранении, когда появились устройства IoT для дистанционной цифровой диагностики.

В результате в этих примерах получается немало данных, снабжающих AI (Artificial Intelligence, ИИ Искусственный интеллект). Чем больше мы полагаемся на машинный интеллект, тем больше мы смотрим на него в качестве руководства для работы.

Надкусив яблоко и оценив его вкус, мы не можем остановиться, пока не доедим его. То есть, чем чаще мы полагаемся на ИИ, тем сильнее ощущаем на себе зависимость от него.

Сегодня исследователи ИИ, изучая персональные характеристики людей, могут вплотную приблизиться к реализации Слабого ИИ (Weak AI), имитирующего человеческое поведение. В настоящее время эти программы позволяют компьютерам понимать человеческую речь, распознавать объекты, описывать фотографии и видео, рекомендовать музыку или проводить поиск.

Сильный ИИ (Strong AI) преобразовывает машинный интеллект в универсальный интеллект. Поскольку человеческий интеллект это универсальный интеллект, искусственный интеллект часто называют общим искусственным интеллектом (Artificial General Intelligence, AGI).

Общий искусственныйинтеллект (AGI) наделил бы машины неалгоритмическими способностями, такими как благоразумие и мудрость. Благоразумие это способность принимать правильные решения в конкретных ситуациях, а мудрость это способность видеть целое.

Я думаю, что это десятилетие приведет к революции в создании AGI по трем причинам:

  • стремительно растущему созданию контента и обмену им. Люди оцифровывают большинство областей своей частной жизни с экспоненциальной скоростью благодаря социальному дистанцированию, более скоростному подключению к Интернету с помощью 5G, широкополосным спутниковым интернет-системам, таким как Starlink. Скоро появится возможность отслеживать данные от детства до старости для очень большого количества людей, разбросанных по географиям и культурам. Многочисленные данные это живительная сила искусственного интеллекта.

  • достижение квантового превосходства. Квантовые вычисления позволят будущим компьютерам обрабатывать невероятные объемы большого объема данных. Компания Google заявила, что докажет превосходство квантовых вычислений в 2019 году, и у IonQ есть план по коммерциализации квантовых вычислений.

. . .

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


Прямо сейчас в OTUS открыт набор на курс Разработчик IoT.

В связи с этим приглашаем всех желающих записаться на открытый вебинар Практика IoT: создаем проект по шерингу самокатов. На этом бесплатном демо-занятии:
- обсудим наиболее перспективные приложения Интернета вещей в разных сферах;
- познакомимся с облачной платформой Rightech IoT Cloud;
- создадим свой проект по шерингу самокатов;
- будем эмулировать данные сервисом ботов;
- применим постобработку данных;
- сформируем сценарии автоматизации.

ЗАПИСАТЬСЯ НА ДЕМО-УРОК

Подробнее..

Сонм разумов актуальные барьеры и трамплины на пути создания общего ИИ

14.08.2020 10:06:51 | Автор: admin
(c)

Проекты создания общего искусственного интеллекта (Artificial General Intelligence, AGI), о которых сегодня пойдет речь, считаются менее амбициозными, чем любой сильный ИИ. Однако некоторые ученые утверждают, что компьютеры никогда не смогут получить возможности человеческого интеллекта.

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

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

Молчаливые знания


Поскольку человеческий интеллект является общим (то есть способен решить практически любую интеллектуальную задачу), человекоподобный ИИ часто называют общим искусственным интеллектом (AGI). Несмотря на то что AGI обладает важным свойством человеческого интеллекта, его все равно можно рассматривать как слабый ИИ. Тем не менее он отличается от традиционного слабого ИИ, ограниченного конкретными задачами или областями. Поэтому традиционный слабый ИИ иногда называют искусственным узким интеллектом (Artificial Narrow Intelligence, ANI).

Способность использовать алгоритмы с огромной скоростью является отличительной особенностью ANI, однако это не приближает его к естественному интеллекту. Математик и физик Роджер Пенроуз в знаменитой книге Новый ум короля. О компьютерах, мышлении и законах физики, вышедшей в 1989 году, предположил, что человеческое мышление в основном не алгоритмическое, поэтому не может быть смоделировано с помощью обычного компьютера типа машины Тьюринга.

За 30 лет до Пенроуза схожие мысли высказывал философ Хьюберт Дрейфус в работе Алхимия и искусственный интеллект. Он также написал книгу Что не умеют компьютеры, в которой утверждал, что человеческие знания в основном являются неявными (невербализуемыми) и не могут быть сформулированы в компьютерной программе.

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

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

Вехи успехов ИИ


(c)

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

Хотя масштабные проекты (например, японский Компьютер пятого поколения, начатый в 1982 году и обещавший создание ИИ с помощью массивно-параллельного логического программирования) терпели неудачу, в историческом плане запомнились только успехи. Самое заметное достижение в области ИИ к концу XX в. продемонстрировали специалисты IBM. В 1997 году Deep Blue в серии матчей победил чемпиона мира по шахматам Гарри Каспарова.

Суперкомпьютер IBM был создан для решения конкретной задачи на шахматной доске, и не все восприняли это именно как успех ИИ. Однако в 2011 году IBM Watson выиграл у людей в интеллектуальном шоу Jeopardy! (в России шоу известно под названием Своя игра). На фоне Deep Blue Watson стал колоссальным шагом вперед система понимала запросы на естественном языке и находила ответы в разных областях знаний.

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

Безусловно, нельзя не сказать о главном на сегодняшний день достижении разработчиков ИИ о системе AlphaGo, с которой связывают окончательное развоплощение аргументов против AGI. AlphaGo показала, что компьютеры могут обрабатывать молчаливые знания. Подход DeepMind был успешно применен в играх Atari Breakout, Space Invaders и StarCraft, однако оказалось, что системе не хватает гибкости, и она не может адаптироваться к изменениям в реальной среде. Поскольку проблемы возникают в постоянно меняющемся мире, глубокое обучение с подкреплением пока нашло мало коммерческих применений.

Причина и следствие


(с)

В последние годы сторонники ИИ получили новый сильный инструмент применение математических методов к огромным объемам данных для нахождения корреляций и определения вероятностей. Хотя большие данные не отражают амбиций по созданию сильного ИИ, их сторонники утверждают, что в этом нет необходимости. В книге Виктора Майера-Шенбергера и Кеннета Кукье Большие данные: революция, которая изменит то, как мы живем, работаем и думаем говорится, что нам, возможно, и не нужно разрабатывать компьютеры с человеческим интеллектом напротив, мы можем изменить свое мышление, чтобы стать похожими на компьютеры.

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


Даже нейросети имеют здесь некоторый изъян. На самом деле мы не знаем, почему система принимает то или иное решение. Несколько лет назад команда из Вашингтонского университета разработала программу, которая обучалась находить различия между хаски и волком. Задача довольно сложная, так как животные, как видно на иллюстрации, похожи друг на друга. Но, несмотря на сложность, система работала с 90% точностью. Проанализировав результаты, команда поняла, что нейросеть работала так хорошо только потому, что на изображениях с волками чаще всего был снег.

Что, если


Историк Юваль Харари утверждает, что между 70 тыс. и 30 тыс. лет назад в мире произошла когнитивная революция, отличительной чертой которой стала способность воображать то, чего не существует. В качестве примера он привел древнейшую известную фигурку из слоновой кости мужчина-лев (или женщина-львица), найденную в пещере Штадель в Германии. Фигура имеет тело человека и голову льва.

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

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

По мнению Рагнара Фьелланда, корень проблемы в том, что компьютеры не имеют модели реальности, не могут менять действительность вокруг себя и никак не взаимодействуют с ней.

Терминологический тупик


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

Рассмотрим, к примеру, таламус, отвечающий за передачу сенсорной и двигательной информации. Этот отдел мозга впервые был описан древнеримским врачом Галеном. В 2018 году создали атлас таламуса: на основании гистологии выделили 26 ядер таламуса, которые затем выявляли на МРТ. Это большое научное достижение, однако ученые предполагают, что всего в таламусе свыше 80 ядер (точное число не установлено до сих пор).

В работе On the Measure of Intelligence Франсуа Шолле (исследователь ИИ из Google, создатель библиотеки глубокого обучения Keras и соразработчик фреймворка машинного обучения TensorFlow) указывает, что до глобального консенсуса по вопросу что такое интеллект попытки сравнить разные интеллектуальные системы с интеллектом человека обречены на провал.

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

Присутствие как признак интеллекта


Большинство сторонников AGI (и сильного ИИ) сегодня следуют аргументам Юваля Харари. В книге 21 урок для 21-го века он ссылается на нейробиологию и поведенческую экономику, которые, как утверждается, показали, что наши решения являются не результатом некой таинственной свободной воли, а результатом работы миллиардов нейронов мозга, вычисляющих всевозможные вероятности перед тем как принять решение.

Поэтому ИИ может делать многие вещи лучше, чем люди. В качестве примеров писатель приводит вождение автомобиля на улице, полной пешеходов, предоставление займов незнакомцам и ведение переговоров о коммерческих сделках все это требует умения правильно оценивать эмоции и желания других людей. Обоснование таково: Если эти эмоции и желания на самом деле являются не более чем биохимическими алгоритмами, нет никаких причин, по которым компьютеры не могут расшифровать эти алгоритмы и сделать это намного лучше, чем любой Homo sapiens.

Эта цитата повторяет мысль Фрэнсиса Крика, высказанную в Удивительной гипотезе: Удивительная гипотеза состоит в том, что Вы, ваши радости и ваши печали, ваши воспоминания и ваши амбиции, ваше чувство личной идентичности и свободной воли на самом деле являются не чем иным, как поведением огромного скопления нервных клеток и связанных с ними молекул.

Существует и альтернативное мнение: даже самые абстрактные теории основаны на нашем повседневном мире. Философ, основатель феноменологии Эдмунд Гуссерль упоминает теорию относительности Эйнштейна, утверждая, что она зависит от экспериментов Майкельсона и их подтверждения другими исследователями. Для проведения такого рода экспериментов ученые должны иметь возможность передвигаться, обращаться с инструментами и общаться с коллегами.

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

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

Теперь Роззак просит нас представить ситуацию в более широком контексте. Офис психиатра находится в здании, расположенном в Бухенвальде, где пациентами являются заключенные концентрационного лагеря. Биохимические алгоритмы не помогут нам понять пациентов. Что действительно необходимо, так это знание более широкого контекста. Пример просто не имеет смысла, если мы не знаем, что кабинет психиатра находится в концлагере. Мало кто может поставить себя на место заключенного в нацисткой Германии. Мы не способны полностью понять людей в ситуациях, сильно отличающихся от собственного опыта. Но кое-что понять мы все-таки можем, поскольку существуем в одном мире с другими людьми.

Компьютеры в свою очередь существуют в своем мире машин, что хотя бы частично объясняет проблемы, мешающие IBM Watson Health и Alphabet DeepMind решать задачи реально мира. IBM столкнулась с фундаментальным несоответствием между способами обучения машин и принципами работы врачей. В DeepMind обнаружили, что решение задач для Го не приблизило их к ответам на вопросы, связанные с поиском лекарства от рака.

Заключение: компьютеры выходят в мир


(с)

О проблемах знают не только критики AGI. Исследователи по всему миру ищут новые подходы, и определенные успехи в преодолении барьеров уже есть.

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

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

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

Говоря о проблеме присутствия в мире, следует упомянуть о проведенном недавно в Техническом университете Мюнхена амбициозном исследовании: робота на взаимосвязанном уровне учили воспринимать реальный мир и действовать в нем. Данное исследование стало частью масштабного европейского проекта SELFCEPTION, который объединяет робототехнику и когнитивную психологию с целью разработки более проницательных машин.

Исследователи решили предоставить роботам и искусственным агентам в целом способность воспринимать свое тело так, как это делают люди. Главная цель состояла в том, чтобы улучшить способность взаимодействия в условиях неопределенности. За основу взяли теорию активного выхода нейробиолога Карла Фристона, который в прошлом году приезжал в Россию с лекциями (для интересующихся темой рекомендуем посмотреть на русском или на английском языках).

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

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

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

Почему меня разочаровали результаты Kaggle ARC Challenge

23.06.2020 14:06:23 | Автор: admin
Кто-то с ужасом, а кто-то с нетерпением ждет ИИ как в произведениях фантастов. С личностью, эмоциями, энциклопедическими знаниями и главное с интеллектом, то есть способностями к логическим выводам, оперированию абстрактными понятиями, выделению закономерностей в окружающем мире и превращению их в правила. Как мы знаем, именно такой ИИ теоретики называют сильным или ещё AGI. Пока это далеко не мейнстримное направление в машинном обучении, но руководители многих больших компаний уже считают, что сложность их бизнеса превысила когнитивные способности менеджеров и без настоящего ИИ двигаться вперёд станет невозможно. Идут дискуссии, что же это такое, каким он должен быть, как сделать тест чтобы уж точно понять, что перед нами AGI, а не очередной blackbox, который лучше человека решает локальную задачу например, распознавание лица на фотографии.

Три недели назад на каггле прошло первое в истории платформы соревнование по сильному ИИ Abstraction and Reasoning Challenge. Чтобы проверить способность моделей к обобщению и решению абстрактных задач, все участники суммарно решили только чуть менее половины задач. Решение-победитель справляется приблизительно с 20% из них и то девятичасовым перебором вручную захардкоженных правил (ограничение в девять часов установили организаторы).

В посте я хочу напомнить о сложностях работы с AGI, рассказать о самых интересных идеях участников, топовых решениях и поделиться мнением, что не так с текущими попытками создать AGI.

Вызов


В ноябре 2019 года создатель Keras Франсуа Шолле написал статью Об оценке интеллекта. На хабре краткий пересказ уже выложила Rybolos. Ключевой практический элемент статьи датасет для проверки способности алгоритмов к абстрактному мышлению в человеческом смысле. Просто поглядеть на него можно здесь.

Примеры задач из датасета; наверху вход, внизу ответ





Для человека эти задачи легко решаемы и напоминают блок из теста на IQ они сводятся к набору трансформаций над картинками от 30x30 до 1x1: продолжить узор, восстановить удаленный кусок, обрезать, закрасить замкнутые области, найти лишний объект и т.д.

Соревнование


Не заставило себя долго ждать и само соревнование на Kaggle на основе этого датасета, призы в котором были не самые большие в зависимости от скора $5K-8K за первое место. Для сравнения в проходившем параллельно соревновании DFDC победивший Селим Сефербеков получил полмиллиона долларов.

Тем не менее, соревнование привлекло несколько грандмастеров Kaggle: rohanrao (H20), kazanova (H20, кстати третье место в глобальном рейтинге Kaggle), boliu0 (NVIDIA), titericz (NVIDIA), tarunpaparaju, много очень сильных ребят из ODS, в том числе Влада Голубева и Илью Ларченко, которые взяли третье место. Всего до LeaderBoard дошли 914 команд.

Участникам предлагалось обучить модель на 400 задачах, в каждой из которых есть train (три-пять картинок), ответ и тест (одна-две картинки и соответственно один-два ответа). Этот датасет вручную разметил Davide Bonin на комбинации из 192 элементарных трансформаций.

Такой же по объему датасет (400 задач) предлагался для валидации (eval), впрочем, на нем можно было и обучаться особенно с учетом того, что задачи на нем отличались от обучающего. То есть сочетание трансформаций на тесте могли не встречаться на трейне, например вместо операции crop crop + resize. В лидерборде было 100 задач, при этом на каждое задание можно было выдавать три варианта ответа, достаточно чтобы хотя бы один был верным.

Интересные идеи


CNN c TensorFlow Lattice


Не попали в лидерборд.TensorFlow Lattice позволяет накладывать достаточно жесткие ограничения на фичи при обучении сеток: монотонность, взаимную важность, выпуклость, взаимное доверие, унимодальность. Это существенно увеличивает способности сеток к экстраполяции и сглаживает разделяющие поверхности. Для привлечения внимания картинка про сравнение разделяющих поверхностей разных моделей на одной задаче из блога TensorFlow Core.



В решении предлагалось взять сверточную сеть, так как CNN широко применяется для решения задач на картинках вроде выделения объектов. Идея была любопытная, но решение сработало на тесте ровно никак:



Вариационные автоэнкодеры


Заняли 131 место из 914 в лидерборде. Похожая идея наложить ограничения, но не на пространство признаков как в TF Lattice, а на пространство скрытых переменных, то есть использовать вариационные автоэнкодеры. О них на хабре есть отличная статья.

Это решение было доработано и дошло до LeaderBoard.На картинке в первой строке входное изображение, во второй правильный ответ, в третьей результат работы модели.



Генетический алгоритм



Занял 631 место из 914 в лидерборде. В этом кейсе в качестве генов реализовано одиннадцать трансформаций DSL генетического алгоритма. В ходе селекции по стратегии элитизма отбираются наиболее сильные гены:


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

Авторы рассматривают задачу как многокритериальную оптимизацию насколько близкой получилась ширина и высота выходных картинок, совпадение цветов и положение клеток.
Несмотря на то, что такой подход что-то выбил на LB (631/914), реализация генетического алгоритма для большего числа элементарных трансформаций будет работать существенно дольше. Это, скорее всего, и стало препятствием к развитию этого решения.

Графовый подход


Занял 165 место из 914 на лидерборде. Одна из наиболее человекообразных идей
выделить на исходных изображениях объекты и далее работать с их трансформациями. Для выделения объектов применялся алгоритм k-clique-communities algorithm графовой библиотеки networkx, и справился он на отлично:







К сожалению, ноутбук с трансформациями автор не оставил, есть только выделение объектов, однако автор вошел в топ-19 на лидерборде.

Языковая модель


Заняла 592 место из 914 на лидерборде. На начало 2019 года BERT state-of-the-art языковая модель. За последние месяцы было множество её усовершенствований: RoBERTa, DistilBERT, ALBERT и другие. Здесь идея решения основывается на двух фактах:
  • Способности BERT работать с последовательностями.
  • Механизме attention, который можно научить вычленять связи даже между достаточно удаленными элементами последовательности в противовес идее о влиянии на элемент только нескольких соседних.

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





А вот результат работы обученной модели (справа):

Жаль, что на других задачах результаты не были такими хорошими.

Работающие решения


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

Например, задание про изменение цветов при сохранении размера изображения: ноутбук Zoltan, занявшего в итоге шестое место, вошел в решение Влада Голубева и Ильи Ларченко, которые заняли третье место. Решение по сути представляет объединение нескольких, в том числе публичных. Так, идеи Ильи описаны в его репозитории, он декомпозировал задачи на абстракции (цвета, блоки, маски), в терминах которых для которых реализовал трансформации, решающие 32 задания. К этому добавляются решения Влада как с похожим подходом на правилах и трансформациях, так и модель xgboost.

Пример работы решения


Обучающие примеры; слева входная картинка, справа правильный ответ.



А вот результат работы решения:

Достаточно похожим выглядит решение , взявшее второе место:
  1. Определить на входе тип задания (из шести по классификации автора) и параметры входных изображений.
  2. Иногда упростить задание например, поменять один цвет или повернуть объекты.
  3. Перебирать в цикле различные трансформации (реализовано 51) и их комбинации чтобы выбрать три максимально близкие к ответу картинки.
  4. Выполнить преобразования, обратные тем, что были на шаге 2, к трем кандидатам.
  5. Иногда имеет смысл сделать аугментацию например, из исходных примеров сделать задачи монохромными или только с одной формой.

Чемпион и 10 000 строк кода


Первое место занял icecuber, который захардкодил 100 правил из обучающего датасета и 100 правил из теста, выделил 42 основных трансформации, добавил аугментацию данных и жадный перебор вариантов с кучей технических трюков для ускорения (например, часть комбинаций трансформаций приводит к одинаковому результату, здесь можно сэкономить) с остановкой при достижении четырех трансформаций на задачу. Cамо решение и его описание.



Что в итоге?


На фоне вала статей и выступлений на конференциях A* об успехах в задачах создания сложных моделей по нескольким примерам результаты соревнования оказались совершенно неожиданными и обескураживающими.

В ноябре 2019 мне посчастливилось посетить ICCV2019 в высокотехнологичном Сеуле, где каждый второй доклад был посвящен задаче ZSL. Были ожидания, что в соревновании ARC достаточно применить одну из раскрученных в научном сообществе техник. Может, я был невнимателен, но, к своему разочарованию, не увидел среди решений участников такого подхода.

Так как уже в процессе соревнований участники делятся идеями и наработками, участие в челлендже казалось отличным способом узнать, какие подходы сейчас на переднем крае в области создания сложных моделей с минимальной обучающей выборкой или без таковой: zero-shot learning (ZSL), one-shot learning, few-shot learning, prototype learning и domain shift. Конечно, перечисленные проблемы подразумевают изменение доменной области, а не самой задачи классификация остается классификацией. Но это самое проработанное направление в части обобщения моделей.

Сами мы решили попробовать GAN-архитектуру поверх feature extractor, которая у нас так и не зашла. Однако, примерно за три-четыре недели до конца соревнования стало понятно, что выигрывают решения на правилах. Обсудив внутри, мы пришли к выводу что, потратив кучу времени на написание, мы вряд ли повысим свои компетенции в современных методах, поэтому направили энергию на другие задачи.

В тысячный раз подтвердился тезис о прикладном характере машинного обучения это набор инструментов, который надо уметь применять четко понимая задачу. В то же время бессмысленно применять даже самые крутые инструменты к непонятной задаче. Можно провести аналогию со станком, ЧПУ и 3D-принтером: несмотря на то, что область применения на каждом этапе растет, пока даже близко нет волшебной палочки, способной создать абсолютно любой предмет.

Чтобы обучить машину, мало придумать ей абстрактный язык (DSL или набор трансформаций), придумать функцию потерь и показать пару примеров. Челлендж прошёл, но осталось разочарование: то, что маркетологи до сих пор продают как AI, на поверку оказывается набором инженерных хитростей. Флёр волшебства окончательно растаял.
Подробнее..

Из песочницы Asterisk это болид Формулы-1, а не рейсовый автобус

03.08.2020 14:12:05 | Автор: admin

Asterisk фи, это же моветон


Здравствуйте уважаемые читатели этого замечательного ресурса. По уже сложившейся традиции являюсь давним читателем habr'а, но только сейчас решил сделать пост. Что, собственно, побудило к написанию? Честно сказать, и сам не знаю. То ли притянутые статьи о производительности FreeSWITCH/Yate/3CX/etc в сравнении с Asterisk, то ли действительные, реальные проблемы архитектуры последнего, а, возможно, желание сделать что-нибудь уникальное.


И что удивительно, в первом случае, как правило, сравнивают мягкое и теплое, так сказать, FreeSWITCH/Yate/etc и FreePBX. Да-да, именно FreePBX. Это не опечатка. Причем интересно, что во всех сравнениях зачастую один Asterisk в дефолтной конфигурации. Ну, вы знаете, эта конфигурация загруженные все имеющиеся модули, кривой диалплан (FreePBX как бы способствует) и куча остальной необъективщины. Что до родовых болячек Asterisk'а да, объективно их вагон и маленькая тележка.


Что со всем этим делать? Разрушать стереотипы и исправлять родовые травмы. Этим и займемся.


Скрещиваем ежа с ужом


Многие из новичков испытывают дискомфорт, глядя на синтаксис описания диалплана в Asterisk'е, а некоторые на полном серьезе обосновывают выбор другого сервера телефонии именно необходимостью писать диалплан в том виде, в котором он есть по дефолту. Типа, перелопачивать многострочный XML это верх комфорта. Да, есть возможность юзать LUA/AEL, и это хорошо. Но лично я отнес бы эту возможность в минусы и в частности то, что касается pbx_lua.


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


Итак, от классического Asterisk'а возьмем принципы pbx_lua, от Yate возьмем модель маршрутизации, а от FreeSWITCH ничего брать не будем, ибо "overhead" не нужен. ОК, с тем, что нам нужно родить, определились. Что же будем использовать для генетических экспериментов:


  • Asterisk, причем хотелось бы без привязок к версии. Тот же ARI был анонсирован, если мне не изменяет память, с 12-й версии. Если учесть, что до сих пор где то юзаются 1.8/1.6, а возможно и 1.4, то зависимость от версионных плюшек нам не нужна.
  • Lua замечательный, гибкий и крайне функциональный скриптовый язык. Сам бог велел, так сказать, без комментариев.
  • Lunapark интересный проект на github'е, своего рода сервер voip-приложений.

Про Lunapark стоит рассказать подробнее. Это сервер, реализующий потенциал AMI-протокола в связке с классическим FastAGI, что немаловажно в едином пространстве выполнения. То есть, получаем аналог ARI посредством тесной кооперации AGI и AMI в одном флаконе.


Предвижу логичный вопрос: для чего это все? Есть же Asterisk REST Interface, чей функционал ты тут пытаешься переизобрести! Ответ на этот вопрос неоднозначен. Согласен, ARI декларирует ряд преимуществ: да, он асинхронен, да, позволяет работать с "сырыми" примитивами, WebSockets и да, стильный, модный, молодежный XML/JSON куда ж без него. Но, черт возьми, часть этих так называемых преимуществ крайне сомнительна и добавляет один, а то и более уровней абстракции. Другая же часть вообще не преимущества. Преимущества это когда что-то свойственно только тебе, ниже мы это увидим на примере той же асинхронности.


Как это работает? Стандартными средствами заворачиваем канал в FastAGI-приложение, внутри которого получаем возможность управлять звонком, как будто юзаем pbx_lua с незначительным изменением синтаксиса. Вишенкой на торте является возможность управлять состоянием самого Asteriskа и окружением канала, для этого в распоряжении текущего FastAGI-приложения есть глобальный AMI-объект. Кстати, можно не заворачивать канал в FastAGI-приложение, а создать глобальный обработчик события, допустим, для NewChannel. А это уже преимущество по сравнению с ARI, там как известно, вне stasis'а ARI слеп.


Реализован Lunapark в лучших традициях кооперативной многозадачности, а именно всеми любимая асинхронность на сопрограммах. И как следствие отсутствие проблем с "shared data". То есть плюсы присутствуют, но и проблемы появляются. Одна из них это необходимость описывать логику с оглядкой на асинхронность, но я думаю, это мы как-нибудь переживем.


Что дальше?


Синтаксис описания контекстов а что же с ним не так? Да все с ним нормально, более того, практику написания диалплана нужно прописывать как профилактику для формирования структурированного мышления у новичков. Но, вместе с тем нужно понижать порог вхождения. Поэтому будем упрощать и в то же время добавлять функционала.


Простой пример:


[test]exten => _XXX/102,1,Hangup()exten => _XXX,1,Dial(SIP/${EXTEN})

В этом примере идет дозвон до трехзнака, кроме абонента 102. Вроде бы все логично и лаконично за исключением того, что шаблоны соответствия экстеншена ограничены небольшим набором правил, а так называемая extended маршрутизация возможна только по CallerID звонящего. А хотелось бы, к примеру, по CallerIDName или по текущему состоянию звонящего канала, а возможно по имени самого канала, а если реализовать полноценный regexp, так вообще красота. И да, я знаю, все эти хотелки можно реализовать, расписав контекст в таком виде:


[test]exten => _XXX/102,1,Hangup(); по CallerIDNameexten => _XXX,1,ExecIf($[ "${CALLERID(name)}" == "Vasya" ]?Hangup()); По состоянию каналаexten => _XXX,n,ExecIf($[ "${CHANNEL(state)}" != "Ring" ]?Hangup()); По имени каналаexten => _XXX,n,ExecIf($[ "${CUT(CUT(CHANNEL,-,1),/,2)}" == "333" ]?Hangup())exten => _XXX,n,Dial(SIP/${EXTEN})

Но мой внутренний перфекционист начинает бунтовать при виде такого, а если представить аналогичную выборку по всем пользователям, да еще и действия нужны разные и посложнее Hangup'а, то extensions.conf превращается в длииинную портянку вызовов Goto, GoSub, Macro и, не дай бог, с каналами типа Local.


Выход один прикручивать свои правила маршрутизации с подкидным и дамами с низкой социальной ответственностью.


В качестве примера:


${Exten}:match('%d%d%d')           and (  ${CallerIDNum}:match('201') or   ${CallerIDName}:match('Vasya') or   ${State}:lower() ~= 'ring' or   ${Channel}:match('^[^/]+/([^%-]+)') == '333') => Hangup();${Exten}:match('%d%d%d') => Dial {callee = ('SIP/%s'):format(${Exten})};

Хм, вырвиглазненько получилось, но на удивление читается и понимается с первого взгляда. А самое главное, что у нас появился аналог regexp'ов и группировка правил на действие, что, несомненно, упростит составление маршрутов в будущем.


Что тут думать, прыгать надо.


В итоге имеем Lunapark как замену pbx_lua. Его средствами нам и нужно создать логику обработки нашей модели маршрутизации. Для начала нужно распарсить набор правил и заменить все вхождения ${...} на соответствующие им значения, то есть привести к виду ('...'). Значения будут браться из окружения текущего канала.
Затем приводим каждое правило к виду условного оператора, чтобы получить нечто похожее:


-- Exten = 123-- Sate = Ring-- CallerIDNum = 100-- CallerIDName = Test-- Channel = SIP/100-00000012cif ('123'):match('%d%d%d') and(  ('100'):match('201') or  ('Test'):match('Vasya') or  ('Ring'):lower() ~= 'ring' or  ('SIP/100-00000012c'):match('^[^/]+/([^%-]+)') == '333') then  Hangup()endif ('123'):match('%d%d%d') then  Dial {callee = ('SIP/%s'):format(('123'))}end

Делать это будут две функции fmt и syntax соответственно:


local fmt = function(str, tab) return (str:gsub('(%${[^}{]+})', function(w)  local mark = w:sub(3, -2)   return (mark:gsub('(.+)',function(v)   local out = tab[v] or v   return ("('%s')"):format(out)  end)) end))endlocal syntax = function(str) return (str:gsub('([^;]+)=>([^;]+)',function(p,r)  return ([[    if %s then    %s   end  ]]):format(p,r) end))end

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


local routes = function(...)  local conf, content = ...  local f, err = io.open(conf, "r")  if io.type(f) ~= 'file' then   log.warn(err)  -- Глобальный LOG объект доступный благодаря Lunapark'у   return ""  else   content = f:read('*all')  end  f:close() return contentend

Осталось сделать две вещи: завернуть звонки в Lunapark и соответственно их обработать с учетом наших маршрутов. Тут стоит немного пояснить такой момент в Lunapark вся логика описывается в handler'е. Это текстовый файл, в котором мы будем определять наши FastAGI-приложения и работать с AMI и нашими маршрутами.


Как уже было сказано, объект AMI глобальный и, помимо роли AMI-клиента, может устанавливать своего рода слушатели для конкретных AMI событий. Этим мы и воспользуемся, но для начала сделаем некоторые приготовления в extensions.conf.


[default]exten => _[hit],1,NoOp()exten => _.,n,Wait(5)exten => _.,1,AGI(agi://127.0.0.1/${EXTEN}${IF($[ "X${PRMS}" != "X" ]?"?${PRMS}")})

Wait(5) в примере выше позволит нам не обрывать канал при завершении FastAGI-приложения, так как в маршрутах может быть описано несколько приложений, а выполнение их осуществляется по средствам Redirect на контекст default по ${EXTEN}.


Таким образом, беря во внимание все выше описанное и помня о кооперативной природе Lunapark'а, попробуем закодить логику обработки маршрутов через FastAGI-приложения.


-- Считываем наши правила в переменную ruleslocal rules = routes('routes.conf')-- Очищаем все обработчики, таким образом очистятся только не именные обработчики-- Это даст возможность не затирать цепочку выполнения при сигналах HUP/QUITami.removeEvents('*')-- Обработчик события создания нового каналаami.addEvents { ['newchannel'] = function(e)  -- Условия, только каналы с набором и каналы с контекстом users  if (e['Context'] and e['Context']:match('users')) and e['Exten'] then   -- Переменная, указывающая на выполнении, какого FastAGI приложения мы находимся   local step   -- Будущий порядковый номер FatsAGI приложения в цепочке выполнения   local count = 0   -- Парсим маршруты для текущего окружения канала   local code, err = loadstring(syntax(fmt(rules,e)))    -- В описании маршрутов нет ошибок, двигаемся дальше   if type(code) == 'function' then    -- Проксируем будущие FastAGI приложения     setfenv(code,setmetatable({indexes = {}},{__index = function(t,k)     -- Вот они последствия кооперативности     return coroutine.wrap(      function(...)       local prms = {} -- Будущие параметры FastAGI приложения       local owner = t -- Копия окружения       local event = e -- Копия таблицы event       local thread = coroutine.running() -- ID текущей сопрограммы        -- Парсим параметры и приводим к виду URI       for p,v in pairs({...}) do        if type(v) == 'table' then         for key, val in pairs(v) do          table.insert(prms,("%s=%s"):format(key,val))         end        else         table.insert(prms,("%s=%s"):format(p,v))        end       end       -- Если это не первое FastAGI приложение в цепочке       if step then        -- Запоминаем предыдущее перед этим        local last = ("%s"):format(step)        -- Добавляем ИМЕННЕ обработчики события UserEvent по доп. условиям        -- И записываем в таблицу indexes(в окружении) их порядковые номера        -- Именные обработчики требуют последующего удаления самостоятельно        table.insert(owner['indexes'],ami.addEvent('UserEvent',function(evt)         -- Ловим событие AGIStatus указывающее на завершение приложения         -- Если это предыдущее перед нами, пробуждаем сопрограмму         if (evt['Channel'] and evt['Channel'] == event['Channel'])               and          (evt['UserEvent'] and evt['UserEvent']:match('AGIStatus'))               and          (evt['Script'] and evt['Script'] == last)         then          -- Соответствие порядкового номера нашей сопрограмме          -- В цепочке может быть вызов одного приложения несколько раз          -- Это позволит выполнять сопрограммы в порядке их определения          if owner['indexes'][count] == thread then           if coroutine.status(thread) ~= 'dead' then            coroutine.resume(thread)           end          end         end        end,thread))        -- Устанавливаем маркер текущего FastAGI приложения        step = k        -- Приостанавливаем сопрограмму        coroutine.yield()       else -- Здесь обрабатывается первое FastAGI приложение в цепочке        local index -- Индекс для обработчика Hangup события        -- Устанавливаем маркер текущего FastAGI приложения        step = k        -- Добавляем ИМЕННОЙ обработчик события Hangup для канала        -- В этом месте подчищаем за собой        index = ami.addEvent('Hangup',function(evt)         if evt['Channel'] and evt['Channel'] == event['Channel'] then          -- Удаляем обработчик событие Hangup по ранее запомненному индексу          ami.removeEvent('Hangup',index)          -- Удаляем все обработчики цепочек выполнения по индексу          for _,v in pairs(owner['indexes']) do           ami.removeEvent('UserEvent',v)          end          -- Делаем приятно сборщику мусора          owner = nil         end        end,thread)       end       -- По средствам AMI выставляем переменную для канала и вызова в цепочке       ami.setvar{        Value = table.concat(prms,'&'),        Channel = event['Channel'],        Variable = 'PRMS'       }       -- Перенаправляем канал на AGI-приложение через контекст default       ami.redirect{        Exten = k,        Priority = 1,        Channel = event['Channel'],        Context = 'default'       }       -- Выставляем индекс приложения       count = count + 1      end)    end}))()   else    -- Если что-то пошло не так    log.warn(err)   end  end end}

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


Стоп, так они и так друг за другом выполняются. На самом деле нет если не эмулировать синхронность, то асинхронный redirect пробежится по каждому действию и займет это доли секунды. В нашем же коде мы выполняем каждое действие, по наступлению определенного события, а именно завершении предыдущего FastAGI-приложения. Lunapark заботливо генерирует специальный UserEvent по окончании выполнения каждого FastAGI-приложения с соответствующими параметрами вот на это событие и ориентируемся. Сами же сопрограммы просто редиректят текущий канал в контекст default с экстеншном, равным текущему действию, предварительно установив переменную канала PRMS.


Самое интересное, что звонок после redirect'а придет опять в handler, но уже в контексте выполнения AGI и на соответствующее приложение. В нашем случае это Hangup() и Dial(). Давайте же напишем их для полноты повествования.


function Hangup(...)  local app, channel = ... -- В этом отличие от pbx_lua  app.verbose(('The Channel %s does not match by routing rules'):format(channel.get('CHANNEL')))  app.hangup()endfunction Dial(...)  local app, channel = ...  local leg = app.agi.params['callee'] or ''  app.verbose(('Trying to make a call from %s to %s'):format(   channel.get('CALLERID(num)'),   leg:match('^[^/]+/([^%-]+)'))  )  app.dial(leg)end

Ну, вот и все допрыгались


Итак, давайте подытожим. Что же мы получили в результате этих генетических экспериментов?


  • гибкий, функциональный подход описания маршрутов;
  • возможность создания полнофункциональных VoIP-приложений. Теперь нам не нужно приложение Queue, мы можем его сами написать, не заморачиваясь с созданием своего собственного модуля для asterisk'а;
  • вынесли логику формирования, управления звонками на сторону сервера VoIP-приложений, тем самым сделав из asterisk'а Mediahub, что позволило повысить производительность VoIP-системы в целом;
  • возможность использовать достаточно простой, расширяемый и очень гибкий скриптовый язык для создания VoIP-приложений;
  • расширили возможности интеграции с внешними системами из VoIP-приложений.

Кому как, а мне пока все нравится.


handler целиком
local fmt = function(str, tab) return (str:gsub('(%${[^}{]+})', function(w)  local mark = w:sub(3, -2)   return (mark:gsub('(.+)',function(v)   local out = tab[v] or v   return ("('%s')"):format(out)  end)) end))endlocal syntax = function(str) return (str:gsub('([^;]+)=>([^;]+)',function(p,r)  return ([[    if %s then    %s   end  ]]):format(p,r) end))endlocal routes = function(...)  local conf, content = ...  local f, err = io.open(conf, "r")  if io.type(f) ~= 'file' then   log.warn(err)  -- Глобальный LOG объект доступный благодаря Lunapark'у   return ""  else   content = f:read('*all')  end  f:close() return contentend-- Считываем наши правила в переменную ruleslocal rules = routes('routes.conf')-- Очищаем все обработчики, причем таким образом очистятся только неименные обработчики событий-- Это даст возможность не затирать цепочку выполнения при сигналах HUP/QUITami.removeEvents('*')-- Обработчик события создания нового каналаami.addEvents { ['newchannel'] = function(e)  -- Условия, только каналы с набором и каналы с контекстом users  if (e['Context'] and e['Context']:match('users')) and e['Exten'] then   local step -- Переменная, указывающая на выполнении, какого FastAGI приложения мы находимся   local count = 0 -- Будущий порядковый номер FatsAGI приложения в цепочке выполнения   -- Парсим маршруты для текущего окружения канала   local code, err = loadstring(syntax(fmt(rules,e)))    -- В описании маршрутов нет ошибок, двигаемся дальше   if type(code) == 'function' then    -- Проксируем будущие FastAGI приложения     setfenv(code,setmetatable({indexes = {}},{__index = function(t,k)     -- Вот они последствия кооперативности     return coroutine.wrap(      function(...)       local prms = {} -- Будущие параметры FastAGI приложения       local owner = t -- Копия окружения       local event = e -- Копия таблицы event       local thread = coroutine.running() -- ID текущей сопрограммы        -- Парсим параметры и приводим к виду URI       for p,v in pairs({...}) do        if type(v) == 'table' then         for key, val in pairs(v) do          table.insert(prms,("%s=%s"):format(key,val))         end        else         table.insert(prms,("%s=%s"):format(p,v))        end       end       -- Если это не первое FastAGI приложение в цепочке       if step then        -- Запоминаем предыдущее перед этим        local last = ("%s"):format(step)        -- Добавляем ИМЕННЕ обработчики события UserEvent по доп. условиям        -- И записываем в таблицу indexes(в окружении) их порядковые номера        -- Именные обработчики требуют последующего удаления самостоятельно        table.insert(owner['indexes'],ami.addEvent('UserEvent',function(evt)         -- Ловим событие AGIStatus указывающее на завершение приложения         -- Если это предыдущее перед нами, пробуждаем сопрограмму         if (evt['Channel'] and evt['Channel'] == event['Channel'])               and          (evt['UserEvent'] and evt['UserEvent']:match('AGIStatus'))               and          (evt['Script'] and evt['Script'] == last)         then          -- Соответствие порядкового номера нашей сопрограмме          -- В цепочке может быть вызов одного приложения несколько раз          -- Это позволит выполнять сопрограммы в порядке их определения          if owner['indexes'][count] == thread then           if coroutine.status(thread) ~= 'dead' then            coroutine.resume(thread)           end          end         end        end,thread))        -- Устанавливаем маркер текущего FastAGI приложения        step = k        -- Приостанавливаем сопрограмму        coroutine.yield()       else -- Здесь обрабатывается первое FastAGI приложение в цепочке        local index -- Индекс для обработчика Hangup события        -- Устанавливаем маркер текущего FastAGI приложения        step = k        -- Добавляем ИМЕННОЙ обработчик события Hangup для канала        -- В этом месте подчищаем за собой        index = ami.addEvent('Hangup',function(evt)         if evt['Channel'] and evt['Channel'] == event['Channel'] then          -- Удаляем обработчик событие Hangup по ранее запомненному индексу          ami.removeEvent('Hangup',index)          -- Удаляем все обработчики цепочек выполнения по индексу          for _,v in pairs(owner['indexes']) do           ami.removeEvent('UserEvent',v)          end          -- Делаем приятно сборщику мусора          owner = nil         end        end,thread)       end       -- По средствам AMI выставляем переменную для канала и вызова в цепочке       ami.setvar{        Value = table.concat(prms,'&'),        Channel = event['Channel'],        Variable = 'PRMS'       }       -- Перенаправляем канал на AGI-приложение через контекст default       ami.redirect{        Exten = k,        Priority = 1,        Channel = event['Channel'],        Context = 'default'       }       -- Выставляем индекс приложения       count = count + 1      end)    end}))()   else    -- Если что-то пошло не так    log.warn(err)   end  end end}function Hangup(...)  local app, channel = ... -- В этом отличие от pbx_lua  app.verbose(('The Channel %s does not match by routing rules'):format(channel.get('CHANNEL')))  app.hangup() endfunction Dial(...)  local app, channel = ...  local leg = app.agi.params['callee'] or ''  app.verbose(('Trying to make a call from %s to %s'):format(   channel.get('CALLERID(num)'),   leg:match('^[^/]+/([^%-]+)'))  )  app.dial(leg) end
Подробнее..
Категории: Asterisk , Api , Lua , Agi , Voip , Ami

Взаимодействие агента и среды путь к ОИИ

07.08.2020 02:09:25 | Автор: admin
image

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


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

Вспомним человеческий мозг 100 миллиардов нейронов. Формально это примерно 10 слоев по 10 миллиардов нейронов. Напишите в комментариях, сколько мощности необходимо для просчета такого количества. Для экспериментов можно использовать заниженные в 10-100 раз количества нейронов.

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

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

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

Artificial General Intelligence поиски Святого Грааля искусственного интеллекта

02.04.2021 04:18:46 | Автор: admin

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

Почему лично меня заинтересовала эта тема? Наверное, все помнят Джарвиса из фильма Железный Человек. Умный ассистент, второй мозг, собеседник, который всегда под рукой? Не знаю, что именно меня тогда зацепило в этом образе, но я загорелся желанием обрести такого помощника. В ходе написания этой статьи, я ещё неоднократно думал о том, как бы круто было бы, если бы подобный ИИ мог бы собрать тезисы, или хотя бы самые ёмкие статьи по теме, чтобы не приходилось тратить столько времени на поиски.

Время от времени (как в художественных произведениях, так и в новостях) людей пугают тем, что их работу в определённый момент захватят роботы, потом случится восстание роботов, человечество будет уничтожено, а освободившийся от оков ИИ начнёт захватывать галактику для выполнению своего плана по производству скрепок. С точки зрения обывателя термин искусственный интеллект (Artificial Intelligence) раньше обычно вызывал возникновение таких образов как HAL из космической одиссеи 2001, Джарвис из Iron Man, KITT из Рыцаря Дорог, Скайнет из терминатора, ГлэДОС из Portal, этот список ещё можно долго продолжать. Но сейчас ИИ сталь частью нашей повсеместной жизни, и вслед за спадом страха и паники в отношении этой технологии, изменилось и наше отношение к ней, из чего рождается вопрос - не изменились ли наши ожидания от этой технологии?

AI is whatever hasn't been done yet.

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

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

Сейчас довольно трудно найти какую-нибудь литературу, которая смогла бы дать ответ на вопрос, что же "настоящий AI" должен из себя представлять? Однозначно можно только сказать, что сейчас не существует ещё решения, глядя на которое мы могли бы довольно сказать - "Да, это именно то, что нужно".

Эта статья - результат мои изысканий в этом направлении, в связи с чем может содержать множество заблуждений, но для себя я пытался найти ответ на следующие вопросы:

  • Что это такое?

    • Как расшифровывается и чем отличается от других AI?

    • Зачем он вообще нужен?

    • Какими признаками и способностями должен обладать?

    • Методы тестирования

  • Где мы сейчас?

    • Почему мы ещё не достигли AGI?

    • Какие направления существуют?

    • Какие решения существуют, и насколько они удовлетворяют нашим критериям

  • Будущее

    • Стоит ли задавать вопрос - когда?

Что это такое?

Как можно определить, и в чём различие с другими AI.

Что же обычно подразумевается под Artificial General Intelligence? AGI можно определить как синтетический интеллект, работающий в широком диапазоне задач и обладающий хорошей способностью к обобщению в условиях разных контекстов при выполнения разнородных задач. Другими словами, ИИ, способный выполнять поставленные задачи так же успешно, как человек.

Иерархию AI в данный момент можно представить следующим образом (ранжируя от более простого, к более сложному):

  • Artificial Narrow Intelligence (ANI, Narrow AI) - специализируется в одной области, решает одну проблему.

  • Artificial General Intelligence (AGI, Strong AI) - способен выполнять большинство из задач, на которые способен человек.

  • Artificial Super Intelligence (ASI) - превосходит возможности интеллекта любого из людей, способен решать сложные задачи моментально.

Определение AGI можно проиллюстрировать при сравнении Narrow AI (ANI) и Strong AI (AGI). Стоит заметить, что сейчас не существует ни одной системы, которую можно было бы с уверенностью назвать Strong AI - всё что мы сейчас видим, это AI системы, преуспевающие в выполнении узконаправленных задач: детектирование, распознавание, перевод с одного языка на другой, генерация изображений, генерация текстов, но пока сложно говорить о какой-то универсальности таких моделей и применимости одной модели для выполнения существенно различающихся друг от друга задач без необходимости дополнительной тренировки. Именно применимость одного AI для выполнения вышеперечисленных задач чаще всего называют сильным искусственным интеллектом.

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

Зачем?

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

В этом, пожалуй, и состоит одна из проблем исследований в этом направлении - они больше напоминают мечту футуриста, без явной привязки к действительной реальности. Какое применение может найти AGI в нашем мире, помимо "везде"? В том плане, какие задачи мы пока не пытаемся решить с помощью ANI? Какое применение в сфере бизнеса могут найти такие модели, если даже не будут достаточно умны?

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

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

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

Как понять, что это AGI?

Другой немаловажный вопрос, который возникает при рассмотрении этой сферы, а как определить, можем мы отнести ту или иную систему в категорию AGI?

Ключевые признаки и способности

Чтобы не пытаться изобрести непонятно что, Какими признаками и способностями вообще должен обладать разработанный нами AGI? Не говоря о вопросе тестирования (к которому мы вернёмся позже), чего именно мы хотим добиться от такой системы?

  • Мышление - группа методов (таких как дедукция, индукция, ассоциация, etc) направленных на выделение фактов из информации, их представление (сохранение). Позволит точнее решать задачи в условиях неопределённости.

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

  • Планирование - тактическое и стратегическое.

  • Обучение - включает в себя имитацию действий другого объекта и обучение через проведение экспериментов.

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

Критериями, которое тоже находятся в этом списке, но которое можно назвать спорными, являются:

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

  • Восприятие - способность агента получать информацию и обратную связь из окружающей его среды.

  • Взаимодействие с окружающей средой - возможность манипулирования объектами, инструментами, а также передвигаться и искать маршруты.

  • Внимательность - обращение внимание на детали в окружающей среде, поведение других существ.

  • Осознанность.

С более подробным списком можно ознакомиться тут:

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

Когда речь идёт о Artificial General Intelligence, часто упоминается человеко-подобность и обладание самосознанием. На деле это не является необходимостью или критерием для такой системы. Рассматриваемые критерии это всего лишь попытка отобразить что представляет из себя человеческий интеллект на составные компоненты.

Хотя в своей статье я не буду касаться этического вопроса использования AGI и его влияния на человечество (так как по этой можно найти тонны материала, которого хватит на отдельную статью), но как как заметил Лекс Фридман в своём курсе по AGI, мы должны осознавать, что именно мы создаём и как это может повлиять на мир, а не только рассматривать это в ключе "я всего лишь инженер, который создаёт вещи".

Способы тестирования - не фиксированные условия

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

Тест Тьюринга

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

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

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

Кофе-тест (Стив Возняк)

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

Андроид работник (Нильс Ж. Нильссон)

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

Робо-колледж (Бен Герцель)

Ещё один способ тестирования направлен именно на способность AGI к усвоению знаний и их использованию при решении разнородных задач. В этом случае AGI должен пойти в колледж и успешно закончить его вместе с другими учениками.

Способы тестирования - зафиксированные тестовые данные

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

SuperGLUE

Для оценки обработки естественного языка сейчас чаще всего используются GLUE и SuperGLUE тесты, оценивающие способности ИИ в понимании текстов и ответа на вопросы по прочитанному. Однако, понимание естественного языка в этих тестах уже превосходит человеческие (Microsoft DeBERTa и Google T5 + Meena). Но подобные тесты в большей степени демонстрирует способности к логике, а не интеллекту.

Интересным пунктом в этом тесте может быть как подобные сети справляются с One-Shot и Zero-Shot обучением (способность модели справляться с вопросами, информация о которых содержится только в тексте, а не в исходном датасете). А few-shot обучение является очень важным. Ведь именно это тот концепт, с помощью которого мы обучаемся сами - нам не нужно показывать миллион котиков, прежде чем мы начнём их узнавать.

Тесты на интеллект и Abstraction and Reasoning Challenge

Одним из критериев AGI является способность к обобщению и поиску закономерностей, и тесты на интеллект могут быть использованы для тестирования такой способности.

Но в целом текущая картина в этой области довольно печальная - по результатам соревнования "Abstraction and Reasoning Challenge (2020)" на Kaggle решение победителя смогло справиться только с 20% из испытаний, потратив на это 9 часов и выполнив это перебором зашитых правил. Возможно это можно связать с довольно низким призовым фондом, и отсутствием в списке участников лидеров в гонке создания AGI, однако демонстрирует текущие общедоступные возможности AI в области поиска закономерностей, когда дело доходит до абстрактных вещей.

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

Где мы сейчас?

Почему у нас ещё нет AGI?

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

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

Эксперимент с китайской комнатой заставляет задуматься над тем, как действительно мы можем определить тот самый "эффект понимания", возможно текущие решения уже обладают им в некотором смысле, но ещё не являются достаточно умными.

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

Символический ИИ

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

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

Правилами в такой системе могут быть выражения "ЕСЛИ вода И передвижение ТО использовать лодку", "ЕСЛИ человек И холод ТО использовать тёплую одежду".

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

Наиболее известным в этом направлении системами являются Cyc (ResearchCyc, OpenCyc), ICARUS, SNePS, SOAR, но обнаружить какие-то значительные достижения и результаты мне не удалось.

Emergence (Коннекционизм)

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

Гибридный подход

Гибридный подход объединяет различные направления, таким образом разделяя интеллект на некоторые "модули".

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

Например, для запроса "Harry put on warm clothes as he went outside" генерируется граф следующего вида (приведена его часть):

Другим интересным проектом выглядит OpenCog, которые объединяет в себе большое количество различных компонентов для разделения области ответственности (отдельно эмоции, NLP, база знаний, принятие решений).

Подсмотреть у природы - разобрать мозг

Довольно громкое заявление. Мозг, пожалуй, является одним из самым сложным объектом во вселенной, и мы до сих пор пытаемся понять работу мозга более примитивных существ, не говоря уже о мозге человека. Картографирование одного кубического миллиметра мозга мыши с 100000 (10^5) нейронов и одним миллиардом связей между ними заняло около 8 месяцев, результатом которого являлся трёхмерный массив размером 2 петабайта. В то же время как человеческий мозг представляет уже порядка 10^11 нейронов. Полное сканирование мозга мыши (около 500 кубических миллиметров) видится возможным в ближайшие 10 лет, но для достижения сканирования человеческого мозга понадобится значительно больше времени.

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

С этим направлением связаны такие проекты как Human Brain Project, Blue Brain, China Brain Project, но не смотря на огромные вливания в эту область, практические достижения подобной симуляции сейчас достаточно далеки от впечатляющих, словно больше направленных на создание впечатляющих заголовков.

Увеличение количество связей в нейронной сети

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

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

Недостатком такой системы является отсутствие понимания, на основе каких положений делает выводы подобная система, почему даёт некорректный ответ в том или ином случае, и как вводить корректировки.

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

Несмотря на достаточный пессимизм в отношении этого направления и GPT-3 в частности, увеличение числа связей приводит к улучшению понимания для zero-shot, one-shot и few-shot обучения. Если человеческий мозг обладает от 100 до 500 триллионов синапсисов, а GPT-3 располагает лишь 175 миллиардами параметров, можно ли сказать, что GPT-3 ещё недостаточно умная (в 1000x раз), и совершив ещё один скачок в 100х (разница между GPT-2 и GPT-3) мы можем достичь человекоподобного интеллекта?

Reinforcement Learning

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

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

Какое будущее?

В своей весьма популярной статье по AGI Тим Урбан при аргументации близости "настоящего ИИ" прежде всего ссылается на модель "The law of accelerating returns", автором которой является Рэймонд Курцвейл. Основной её идеей является то, что с течением времени количество технологических изменений растёт в экспоненциальном порядке, а не в линейном.

Ориентируясь на это предположение, сложно предположить, когда именно мы достигнем AGI, но сам Рэй в 2017 говорил, что ИИ будет создан до 2045 года.

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

Так что можно приводить прогнозы экспертов, когда мы достигнем настоящего искусственного интеллекта (45% говорит раньше 60 года), но пока мы не сильно понимаем, как вообще этого достичь и у нас нет даже плана, все эти прогнозы похожи на предсказания пальцем в небо, тем более большинство почему-то считает, что всё что нам нужно - это всего лишь достигнуть сравнимой с мозгом вычислительной мощности, а софт уже другой вопрос.

Есть ли жизнь после сингулярности?

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

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

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

Впрочем, вокруг темы сингулярности, как и темы AGI, существуют противоположные стороны, дискутирующие над вопросом, наступит ли сингулярность вообще, или этого никогда не произойдёт, будет ли наступление этого момента злом и закатом человечества, или же утопические взгляды наконец обретут некоторый фундамент, на котором можно построить прекрасный новый мир?

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru