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

Искусственный интеллект

Сравнение мозга с нейронной сетью

20.06.2020 18:10:45 | Автор: admin


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


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

Граница знаний


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

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

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

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

Мозг это должно быть просто


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

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

Так что же свидетельствует в пользу простоты работы мозга? Здесь я приведу совершенно парадоксальный пример. Если взять виноградную улитку и подвести электроды к одному нейроны её крупного ганглия, согласно всем требованиям, которые применяются к подобным экспериментам, то мы сможем получить график активности отдельного нейрона, и попытаемся проанализировать его, то получим очень сложный характер его активности. Даже если учтём характер инвазивности нашего эксперимента, то что наши электроды приносят улитки серьёзные повреждения и ограничение её жизнедеятельности, то характер активности нейрона всё равно выглядит очень сложным. Мы увидим и спонтанную активность, и изменение в количестве и частоте спайков с течением времени. Многие учёные бьются над объяснением этого сложного поведения нейрона на протяжении уже долгого времени, ища какую-либо закономерность в этом.

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

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



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

image

Если мы проанализируем нервную систему кольчатого червя c.elegans, животного, чей коннектом из 301 нейрона полностью составлен, то увидим, что не только отдельные нейроны важны в правильной работе его нервной системы, но и имеют значения даже отдельные синапсы. То есть мы можем присвоить отдельному нейрону кольчатого червя 100% эффективности. Если рассматривать с этой точки зрения нервную систему человека, то сложно присвоить нейронам значимое значение эффективности которые можно вынести ломиком из черепной коробки, при этом сохранив жизнедеятельность человека и даже его социальную интеграцию, ну почти сохранив.*

*отсылка к очень известному случаю Финеаса Гейджа


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

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

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

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

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

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

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



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



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

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

В рамках проекта Human Brain Project (HBP) была создана модель небольшого фрагмента коры мозга мыши, её создатели учли очень многое. 3D модели нейронов были воссозданы по реальным нейронам, использовался один из вариантов моделей Ходжкина-Хаксли, учитывались различные типы нейронов и нейромедиаторов, и нет сомнений в том, что модель действительно соответствует биологическому аналогу. На это потрачено множество ресурсов и времени, но так и не дало значимых результатов по причине того, что в столь малом размере из-за парадокса эффективности нейрона невозможно было увидеть значимых процессов. Поэтому путь подробного повторения биологии является очень и очень трудоёмким. Залог успеха это возможность понимания того как работает нервная ткань и нейроны в более широком масштабе.
Давайте рассмотрим то как мозг обрабатывает информацию на частном примере, на обработке зрительной информации. Мы составим схему нейронной сети выполняющей эту задачу.



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

Охарактеризуем зону зрительной коры V1 как первый слой, в котором происходит обработка информации. Зона V1 также имеет обратные связи с таламусом. Подобные обратные связи имеются и между всеми последующими слоями. Эти связи формируют циклические передачи возбуждения между слоями называемыми реверберациями.

После зоны V1 информация передаётся в следующую зону V2, все последующие зоны будут иметь меньшие площади. В зависимости от того, что наблюдает мозг, был это объект, символ, лицо человека, место или что-то другое информация из V2 может передаваться в различные области V3, V4, V5. То есть уже на этой зрительной области V2 происходит серьёзная категоризация зрительных образов. И примерно уже на третьем или четвёртом слое можно будет выделить нейроны-детекторы определённых образов. К примеру, мы сможем выделить нейрон-детектор буквы А, цифры 3 или лица Дженнифер Энистон. По активации этих нейронов-детекторов мы сможем судить об том, что в данный момент наблюдает мозг. Достаточно простая архитектура нейронной сети, если сравнить её с архитектурой компьютерных нейронных сетей специализированных на распознавании визуальных образов, свёрточных нейронных сетей.


AlexNet

Есть схожие моменты, это иерархия свёрточных слоёв, каждый последующий слой будет иметь всё меньшее количество параметров. Но у слоёв данного типа компьютерных сетей нет рекуррентных связей, конечно, их наличие не является критерием для успешного распознавания образов, так как природа ревербераций в живом мозге до конца не изучена. Есть гипотеза, что реверберации связаны с явлением моментальной памяти, той памяти, которая позволяет нам, к примеру, не сбиться при наборе номера телефона или его произношением. Реверберирующая активность как бы задерживается, обозначая участки, по которым проходит эта активность, тем самым создается контекст обрабатываемой информации.
Человек может распознать сложные образы за доли секунд, скорость распространения потенциала действия по мембране от 1 до 120 м/с, синаптическая задержка в химических синапсах составляет 0,2-0,5мс, что говорит о том, что за время распознавания может задействоваться цепочка не более чем ста нейронов.

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

Формальный нейрон


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



Формальный нейрон Маккалока-Питса можно представить как некую функцию с множеством аргументов и одним ответом. Аргументы-входы преумножаются с соответствующими коэффициентами, называемыми весами (W1, W2, Wn), затем эти значения складываются и полученная сумма проходит через активационную функцию, результат которой и является результатом вычислений нейрона. Главное это правильно подобрать веса, то есть обучить нейронную сеть. Эта модель нейрона может показаться простой и очевидной, но в ней сильный акцент на дендритных синапсах.

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



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



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

Оливер Сакс о галлюцинациях


Подвижные нейроны



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

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

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

Hebb, D. O. The organization of behavior: a neuropsychological theory. New York (2002) (Оригинальное издание 1949) (спасибо)

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

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

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

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

Анализ и Синтез


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

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

Синтез это механизм объединения, обобщения различных признаков в один образ или действие.



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

Анализ это механизм выделения, ранжирования (предания рангов, значимости) каждого признака из ограниченного набора признаков.



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

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

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

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

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

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

Вместо заключения


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



Сейчас я поставил себе задачу создать алгоритм нейронной сети, которая сможет различать рукописные цифры из стандартного набора MNIST, причём при обучении должно использоваться не более 1000 примеров и предъявлений. Результат я буду считать удовлетворительным при хотя бы 5% ошибке. Я уверен это возможно, потому что наш мозг делает нечто подобное. Напоминаю, что MNIST содержит 6000 примеров обучения, которые для настройки нейронной сети могут предъявлять по несколько десятков раз.

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

Архитектура мозга. Концепция каналов

28.06.2020 00:17:28 | Автор: admin


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


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


Введение


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


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


Как же устроена эта модель? В простейшем случае, видимо, модель может хранить два типа информации:


  • Что вид сигнала (пища, половой партнер, опасность и т.д.);
  • Где направление на источник сигнала (что-то вроде компаса).

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


Карточки


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


  • Уникальный номер;
  • Название карточки;
  • Формула зависимости от других карточек;
  • Набор нумерованных клеток, которые можно пометить фишками.

Примерный внешний вид карточки:



Рассмотрим простой пример заполнения карточек:



Интерпретировать это можно следующим образом. Данный набор карточек является моделью объектов окружающей среды. Модель "знает" о существовании уток и лягушек. Текущая ситуация в модели фиксируется путем расстановки фишек в нумерованных клетках. Номер клетки называется каналом. Количество каналов определяет максимальное число объектов внешнего мира, которые отслеживаются в любой момент времени. На данной картинке в канале 1 отслеживается объект "утка", а в канале 2 "лягушка". Причиной установки фишки на карточке может быть либо сигнал извне (например, с рецепторов), либо состояние других карточек. Зависимости карточек друг от друга определяются с помощью простых булевых формул. В каждом канале применяется одна и та же формула. Система работает по тактам. Состояние зависимых карточек в момент времени t образуется применением формул к состоянию системы в момент времени t-1.


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


Код:
class dotdict(dict):    __getattr__ = dict.get    def __setattr__(self, name, value):        self[name] = valueclass Machine:    """    Состояние машины хранится в словаре tick.    На каждом такте вычисляется новое состояние в словаре tock.    Затем tick и tock меняются местами и машина оказывается в новом состоянии.    """    def __init__(self, cells):        self.cells = cells        self.tick = dotdict()        self.tock = dotdict()        for key in cells:            self.tick[key] = 0b0000            self.tock[key] = 0b0000    def step(self):        """ один такт машины """        for name, func in self.cells.items():            if func is None:                # функции нет, значит сигнал меняется только извне                self.tock[name] = self.tick[name]            else:                # вычисление функции карточки от предыдущего состояния машины                self.tock[name] = func(self.tick)        # установка нового состояния        self.tick, self.tock = self.tock, self.tick        self.show()    def show(self, comment = None):        """ вывод состояния карточек """        if comment is not None:            print(f'Пояснение: {comment}')        for key in cells:            print(key, f'{self.tick[key]:04b}')        print('------------------------------------------------')# набор карточекcells = {    "C1": None,                         # это летает    "C2": None,                         # это плавает    "C3": None,                         # это крякает    "C4": None,                         # это квакает    "C5": lambda s: s.C1 & s.C2 & s.C3, # это утка    "C6": lambda s: s.C2 & s.C4,        # это лягушка}# создание машиныm = Machine(cells)# установка сигналов извнеm.tick.C1 = 0b0001m.tick.C2 = 0b0011m.tick.C3 = 0b0001m.tick.C4 = 0b0010m.show("Получены сигналы с рецепторов") # вывод состояния# выполнение одного такта с выводом состоянияm.step()

Вывод:
Пояснение: Получены сигналы с рецепторовC1 0001C2 0011C3 0001C4 0010C5 0000C6 0000------------------------------------------------C1 0001C2 0011C3 0001C4 0010C5 0001C6 0010------------------------------------------------

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


Динамическое изменение объекта можно рассмотреть на следующем примере:



Код:
# набор карточекcells = {    "C1": None,                                 # это машет крыльями    "C2": lambda s: s.C1 & s.C3 | ~s.C1 & s.C2, # крылья вверху    "C3": lambda s: s.C1 & s.C2 | ~s.C1 & s.C3, # крылья внизу}m = Machine(cells)m.tick.C1 = 0b0001 # рецепторы зарегистрировали, что объект в первом канале машет крыльямиm.tick.C2 = 0b0001 # рецепторы зарегистрировали, что у объекта в первом канале крылья внизуm.show("Получены сигналы C1 и C2 с рецепторов")m.step()m.step()m.step()m.step()m.tick.C1 = 0b0000 # рецепторы зарегистрировали, что объект в первом канале не машет крыльямиm.show("Пропал сигнал C1 с рецепторов")m.step()m.step()

Вывод:
Пояснение: Получены сигналы C1 и C2 с рецепторовC1 0001C2 0001C3 0000------------------------------------------------C1 0001C2 0000C3 0001------------------------------------------------C1 0001C2 0001C3 0000------------------------------------------------C1 0001C2 0000C3 0001------------------------------------------------C1 0001C2 0001C3 0000------------------------------------------------Пояснение: Пропал сигнал C1 с рецепторовC1 0000C2 0001C3 0000------------------------------------------------C1 0000C2 0001C3 0000------------------------------------------------C1 0000C2 0001C3 0000------------------------------------------------

На этом примере видно, как фишка "прыгает" в первом канале между карточками C2 и C3 до тех пор, пока активна карточка C1.


Еще один пример динамики:



Код:
# набор карточекcells = {    # это двигается влево    "C1": None,    # это двигается вправо    "C2": None,    # координата x == 1    "C3": lambda s: s.C2 & s.C4 | s.C3 & ~s.C1 & ~s.C2,    # координата x == 2    "C4": lambda s: s.C1 & s.C3 | s.C2 & s.C5 | s.C4 & ~s.C1 & ~s.C2,    # координата x == 3    "C5": lambda s: s.C1 & s.C4 | s.C2 & s.C6 | s.C5 & ~s.C1 & ~s.C2,    # координата x == 4    "C6": lambda s: s.C1 & s.C5 | s.C6 & ~s.C1 & ~s.C2,}# создание машиныm = Machine(cells)# установка сигналов извнеm.tick.C1 = 0b0001 # объект в первом канале начал двигаться вправоm.tick.C3 = 0b0001 # объект в первом канале находится на координате x == 1m.show("Получены сигналы C1 и C3 с рецепторов") # вывод состоянияm.step()m.step()m.step()m.tick.C1 = 0b0000 # объект в первом канале больше не двигается вправоm.tick.C2 = 0b0001 # объект в первом канале начал двигаться влевоm.show("Пропал сигнал C1 и получен сигнал C2 с рецепторов") # вывод состоянияm.step()m.step()m.step()

Вывод:
Пояснение: Получены сигналы C1 и C3 с рецепторовC1 0001C2 0000C3 0001C4 0000C5 0000C6 0000------------------------------------------------C1 0001C2 0000C3 0000C4 0001C5 0000C6 0000------------------------------------------------C1 0001C2 0000C3 0000C4 0000C5 0001C6 0000------------------------------------------------C1 0001C2 0000C3 0000C4 0000C5 0000C6 0001------------------------------------------------Пояснение: Пропал сигнал C1 и получен сигнал C2 с рецепторовC1 0000C2 0001C3 0000C4 0000C5 0000C6 0001------------------------------------------------C1 0000C2 0001C3 0000C4 0000C5 0001C6 0000------------------------------------------------C1 0000C2 0001C3 0000C4 0001C5 0000C6 0000------------------------------------------------C1 0000C2 0001C3 0001C4 0000C5 0000C6 0000------------------------------------------------

По этому примеру можно понять, как может происходить предсказание изменений, происходящих с объектом. Судьба объекта буквально проигрывается в модели в реальном времени. Этот процесс может происходить и с опережением реальных событий. Точность моделирования зависит только от количества карточек. Кроме того, на карточках вполне может быть организовано кодирование. Например, используя n карточек для фиксации координаты с точностью до метра, и m карточек для фиксации координаты внутри текущего метра с точностью до сантиметра. Вместо n*m карточек, используется всего n+m.


Специалист по искусственному интеллекту может заметить, что это похоже на обычного логического агента. Действительно, подобные агенты описаны, к примеру, в книге [1]. Более того, способ вычислений не привносит ничего нового по сравнению с моделью МакКаллока-Питтса. Если заменить карточки на нейроны, а формулы на пороговые функции, то получится исторически первая модель нейронной сети, которая при использовании задержек на нейронах по сути тоже работает аналогично по тактам. Отличия несущественны. На оригинальность претендует только концепция каналов.


Известно, что подобные логические сети с задержками эквивалентны конечным автоматам. Обычно конечные автоматы определяют перечислением всех его состояний. Логическая сеть отличается только тем, что ее состояние определяется совокупностью состояний всех элементов. Автомат, имеющий 256 состояний, описывается сетью из 8 элементов. Я не буду углубляться в детали. Интересующиеся могут почитать об этом в книге [2].


Можно считать, что определенный набор карточек это многоканальный конечный автомат.


Стоит добавить, что еще это похоже на разновидность FPGA. Из реальных архитектур, созданных человеком, это, возможно, самая близкая.


Что же означает одна карточка? Что угодно. Это может быть сигнал от конкретного рецептора, или абстрактная категория типа "человек", или какое-то событие, или свойство. В любом случае, это некоторая характеристика объекта. Она может быть как статической, так и динамической. Процесс переключения карточек может отражать изменение объекта во времени и пространстве. На карточках могут быть построены вычислительные процедуры для распознавания сигналов или для управления конечностями. Благодаря каналам система может моделировать несколько объектов или процессов одновременно. С помощью карточек могут быть смоделированы карты окружающего пространства, на которых одновременно отслеживается положение и перемещение нескольких объектов. Поиск кратчайшего пути между узлами такой карты может быть выполнен параллельным обходом в ширину, как описано, например, в книге [3].


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


На понятии объекта стоит остановиться отдельно. Это ключевой и самый странный элемент гипотезы. Я предполагаю, что в мозге нет никакой модели среды. Есть только одна модель универсального объекта, который может быть чем угодно. Одна и та же модель используется для моделирования любого элемента окружающей среды. Лягушка, утка, карандаш, человек, небо, математика, четверг все эти объекты отслеживаются в рамках одной модели. Все знания мозга об объектах (элементах, срезах) окружающей среды сосредоточены в карточках и связях между ними. Каналы позволяют на одной и той же модели отслеживать несколько объектов. В одном канале моделируется один объект. Грубо говоря, окружающая реальность для существа в каждый момент времени полностью определена состоянием карточек во всех каналах. Богатое и сложное восприятие это иллюзия, которую формирует быстрое переключение каналов и процессы, происходящие в этих каналах. Кроме того, речь пока не идет об осознанном восприятии.


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


Каналы


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


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


Реакция существа на резкий звук справа может быть такой:


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

Ожидание сигнала может означать две вещи. Во-первых, в канале уже есть некоторая информация об объекте. Как уже говорилось выше, в простейшем случае это ответы на вопросы "Что?" и "Где?". Если в данный момент отслеживается объект, который уже отнесен к карточке "справа", то можно считать, что он "ожидает" пришедший справа сигнал. Во-вторых, можно допустить, что на каждый объект выделяется не один, а два канала. В одном из них содержится только реально зарегистрированная информация, а в другом ожидаемая. Это очень просто. Допустим, есть две карточки "это лягушка" и "это квакает". Карточки зависят друг от друга. Если система по каким-то признакам, кроме кваканья, зарегистрировала лягушку, то в результате установки фишки на карточке "это лягушка" будет спровоцирована установка фишки в карточке "это квакает", но только в канале ожидания для этого объекта. Когда лягушка реально квакнет, канал ожидания даст механизму внимания всю необходимую информацию. Парные каналы приведены только для примера. Возможно, реальный механизм работает в рамках одного канала.


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


Далее нужно разобраться, что происходит с каналом, который очищается для отслеживания нового объекта. Тут возможно два варианта. Либо информация об объекте бесследно теряется. Либо сбрасывается куда-то во временную память. Существование временной памяти можно предположить просто потому, что мы способны помнить события, произошедшие, скажем, час назад, несмотря на постоянное переключение внимания. Другой аргумент в пользу временной памяти это способность запоминать что-то в постоянной памяти. Процесс формирования новых связей мгновенным быть не может, а удержание каналов в этом процессе быстро лишит существо возможности что-либо воспринимать. Следовательно, информацию из канала нужно куда-то скинуть и хранить, пока нужные связи не сформируются. Мне кажется, что так оно и должно быть, но есть одна трудность. Дело в том, что емкость канала огромна. В мозге просто нет места для "слепков" каналов. Кроме того, возникает вопрос адресации. Во временной памяти нужно как-то ссылаться на запоминаемые карточки. Это требует уже довольно сложных способов кодирования адресов. У меня пока нет идей, как это может быть устроено. Но касательно объема слепка есть некоторые соображения.


Взаимодействие разных видов памяти схематично можно представить так:



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


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


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


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


Заключение


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


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


Каналы нужны для:


  • Регистрации и представления объектов в реальном времени.
  • Учета и предсказания изменений объектов.
  • Учета более одного объекта в коротких промежутках времени.
  • Учета отношений между объектами и их сравнения.
  • Переключения внимания с одного объекта на другой.
  • Формирования слепка информации для сохранения в постоянной памяти (посредством временной).
  • Исполнения процедур распознавания образов и построения движений.
  • Параллельного учета и обработки отдельных срезов входящей информации.
  • Построения карт окружающего пространства.
  • Хранения сознания.

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


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


Литература


1. Рассел С., Норвиг П. Искусственный интеллект. Современный подход.
2. Марвин Минский Вычисления и автоматы.
3. Каляев А.В., Чернухин Ю.В., Носков В.Н., Каляев И.А. Однородные управляющие структуры адаптивных роботов.
4. Джон фон Нейман Вычислительная машина и мозг.

Подробнее..

Фокус для ИИ

01.07.2020 08:11:29 | Автор: admin
Внимание пожалуй, самая важная составляющая разумной деятельности.

В нашем мозгу порядка 100 триллионов синапсов и десятки миллиардов нейронов. Обмен информацией происходит, по оценкам нейрофизиологов, примерно с частотой 200 Гц в активном режиме.

Считаем: $inline$200 * 100 * 10^{12} = 2 * 10^{16}$inline$ бит. Учитывая, что нейрон это не одна арифметическая операция, а своего рода микропроцессор, то получаем, что у нас петафлопсный суперкомпьютер на борту. А есть мнение, что и эксафлопсный.

Какой бы он ни был мощный ресурсы ограничены. Более того
Большую часть времени наш суперкомпьютер занят расчетами социального взаимодействия.
Речь, слух, зрение, касания, ощущения, эмоции, эмпатия
Ох! Какая пошла!, Ой! Он косо на меня посмотрел!, Каким ты был таким ты и остался.
Это ни плохо, ни хорошо. Этонормально!
Есть, конечно, отклонения, но в основном это так.

Для того, чтобы успешно решить некую задачу или проблему, надо сфокусироваться на ней. Поставить четкие цели. Перестать отвлекаться, прокрастинировать.
Или просто ее (проблему) игнорировать и заниматься ничем.
Нашему мозгу, по сути, все равно: смотреть фильмы, играть в игры или проектировать космический корабль.



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

Выбор цели


Цель оправдываЮт средства. Обратное утверждение скорее ложное.
Есть амбиции это здорово! Вы умеете мечтать отлично! А вот у соседа...
Но невозможно на велосипеде слетать на Луну. Пешком не дойти до Америки. На яблоне бананы не растут.
Собираясь в далекий путь, проведите ревизию в гараже. Может у вас там автомобиля нет. Может самого гаража. В итоге далекий путь будет получасовым походом в магазин.
Цель или целевой вектор легко описывается математически. Это список параметров и их значений (конкретных или диапазон).
Например: высота-100мм, ширина-50мм, вес-0.5кг, скорость-3м/с, количество ног-от 3 до 4шт.
Размер списка так же может варьироваться.

Выбор целевого вектора, конечно, зависит от имеющихся и планируемых в будущем ресурсов. Цель Построить крышу за 10 дней не имеет большого смысла если нет стен, а только фундамент. А если есть пожалуйста.
Включать параметр Оптимальное время кормления кота в целевой вектор, если его у вас нет (кота) бессмысленно, ровно как и Количество воды для полива помидоров, если нет дачи.
Сделать робота с размерами 50х50х50мм невозможно, если в качестве мозга у вас имеется только Raspberry Pi.

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


Установка порога целевой функции, которая выражает некую сумму свертку многомерного целевого вектора.

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

Поток


Замечали, когда вы погружаетесь в рабочий процесс, то вам не очень нравится, когда отвлекают?
Это происходит, потому что все мощности заняты, и процесс социального взаимодействия понижается в приоритете. Конечно, можно переключиться, но на это надо некоторое время. Плюс, ко всему прочему, теряется пресловутый Поток, которого так трудно достичь.
Мыслители, ученые, программисты вообще любят уединение таким образом, отсекается ненужная информация.
Потоком в информационной системе будет процесс вычислений.
Без сбоев электричества, остановок, пауз алгоритма и без обрывов связи.
В противном случае можно оборвать процесс в момент близкий с нахождением решения. Результаты покажут, что решения нет, вероятно, модель ошибочна и будет потеряно драгоценное время.

Поиск решения


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

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

image

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

Мы можем даже сделать такой трюк выполнить расчет по 10% выделенного времени на 10 разных вычислительных архитектурах и увидеть, с высокой долей вероятности, лучшую систему для данной задачи.
Почему? Потому что одна архитектура может не дотянуться до цели и близко.
Это провал, Карл!

Точность. Наверное правильно говорить об ошибке попадания в цель. Если у нас целевой вектор выражен в четких числовых параметрах, то так же мы можем оценить и результат.
$inline$Ошибка = Цель - Результат$inline$

Точность, в процентах, можно определить как: $inline$Точность=100*(Цель-Ошибка)/Цель$inline$. Это как вариант.

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


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

Обратная сторона фокуса локальный оптимум. Обычно мы разбиваем задачу и решаем ее по частям. Это методика. Она работает. Но, добиваясь нужных нам параметров отдельного модуля, мы не сможем добиться оптимальных параметров системы в целом.
Яркий пример: отделы предприятия. У них у всех разные и достаточно противоречивые цели. И если директор не будет грамотно их регулировать, то получим результат как в басне Лебедь, Щука и Рак.


Баланс. Все вышеперечисленные концепции надо грамотно сбалансировать. Все хорошо в меру.
Выставляются приоритеты целей, которые постоянно меняются. Это нормально.
Хочешь жить умей вертеться!

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

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

Мотивация


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



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

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

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

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

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

Перевод Использование методов анализа графов для поиска аномалий

07.07.2020 10:10:24 | Автор: admin
Несмотря на то, что описание данных с помощью графов практикуется еще с позапрошлого столетия, использование их в решении повседневных задач по анализу данных лишь набирает обороты. Хотя основное внимание уделяется, как водится, графовым эмбеддингам и сверточным сетям, маленькие шаги предпринимаются и в алгоритмах по поиску аномалий или антифроде. Основная обзорная статья, на которую ссылается большинство специалистов в своих в докладах и публикациях, Graph based anomaly detection and description: a survey от авторов Leman Akoglu, Hanghang Tong, Danai Koutra (Akoglu, 2015). Мы в CleverDATA решили рассказать Хабру об этом практически единственном материале по теме и предлагаем вашему вниманию его саммари.

Первый граф Российского царства Борис Петрович Шереметев. Аномалий не обнаружено.

Во вступлении авторы отвечают на вопрос: В чем же преимущества поиска аномалий с использованием теории графов?:

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

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

Таким образом, перспективность использования теории графов для поиска аномалий обоснована. Перейдем к описанию самих методов.

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


Поиск аномалий в графах без свойств, приписанных вершинам и/или ребрам


Для простых графов выделяют три направления структурных подходов: поиск аномалий на основе признаков узлов, диад узлов, триад, эгонетов (egonet), на основе сообществ и на основе метрик близости (proximity): pagerank, personalized pagerank, simrank. При этом предлагается для решения задачи поиска аномалий на графе использовать обычные алгоритмы (например, Isolation Forest, или если есть разметка, то стандартные классификаторы), но на основе графовых признаков.

Пример Эгонета

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

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

Также авторы описывают и другие подходы:

  • кластеризация узлов на основании сходства их ближайшего окружения; предлагается реорганизация матрицы смежности для получения более плотных и менее плотных блоков (Chakrabarti 2004; Rissanen, 1999);
  • матричная факторизация; предлагается аналог Non-negative matrix factorization (NMF) (Tong and Lin 2011).

Поиск аномалий в графах с узлами и/или ребрами, обладающими свойствами


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

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

Также перечисляются и другие возможности: SAX (Symbolic Aggregate approXimation) (Lin et al., 2003), MDL-binning (Minimum description length) (Kontkanen and Myllymki, 2007) и дискретизация по минимуму энтропии (Fayyad and Irani, 1993). Авторы этой статьи (Eberlie and Holder, 2007) иначе подходят к определению аномалии в графовых данных, считая аномальными те подграфы, которые похожи по отношению к условно нормальному графу в определенных пределах. Такой подход авторы обосновывают тем, что самые успешные мошенники будут стараться максимально подражать реальности. Они также предлагают учитывать стоимость модификации показателя и формулируют показатели аномальности с учетом этой стоимости (чем меньше стоимость, тем более аномальным является показатель).

Поиск аномалий для графов с атрибутированными узлами рассматривается и в основанный на поиске сообществ парадигме. Предлагается подразделять графы на сообщества. Далее, в рамках каждого сообщества, искать аномалии по атрибутам. Например, курильщик в команде по бейcболу. Курильщик не является аномалией для общества в целом, но в своем сообществе является. Другой подход (Mller, 2013) основывается на выборе пользователем (аналитиком) набора узлов, для которых далее определяется подпространство показателей, схожих для них. А аномалиями в таком подходе являются узлы, которые структурно принадлежат к кластеру этих узлов, но в выбранном подпространстве показателей находятся далеко от них.

Отдельно рассматриваются методы semi-supervised, в предположении, что какая-то часть узлов размечена как нормальные и аномальные, а остальные узлы можно классифицировать, используя соответствующие методики, а в самом простом случае им можно присваивать метки соседних с ними узлов. Перечисляются основные подходы: iterative classification algorithm, gibbs sampling (подробнее про эти подходы пишут здесь), loopy belief propagation, weighted-vote relational network classifier.

Поиск аномалий в динамическом графе


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

  1. выделяется некоторое сжатие или интегральная характеристика каждого статического графа;
  2. вычисляется расстояние последовательно идущих графов;
  3. аномальными принимаются те графы, для которых расстояние выше порога.

В качестве мер расстояния предлагаются:

  • maximum common subgraph (MCS) distance;
  • error correcting graph matching distance, то есть расстояние, измеряющее, сколько шагов нужно сделать, чтобы из одного графа сделать другой;
  • graph edit distance (GED), то же, что и предыдущее, но возможны лишь топологические изменения;
  • расстояния между матрицами смежности (например, Хэмминга);
  • различные расстояния на основе весов ребер;
  • расстояния между спектральным представлением графов (распределениями собственных векторов);
  • описывается также и более экзотическая мера: эвклидово расстояние между перроновскими собственными векторами графа.

В статье от Bunke et al. (2006) авторы предлагают считать расстояние не только между последовательно идущими графами, но вообще между всеми графами в последовательности, и потом применять многомерное шкалирование, переводя графы в двумерное пространство. Далее выбросы ищутся в этом двумерном пространстве.

Описан также следующий способ работы с динамическими графами (Box and Jenkins, 1990): графу ставится в соответствие некое число (расчетный показатель) и далее применяются стандартные методы поиска аномалий во временных рядах. Например, расхождения с моделью ARIMA.

В статье Akoglu and Faloutsos (2010) авторы осуществляют следующую последовательность операций:

  1. выделяют для каждого узла графа для каждого момента времени F-признаков;
  2. для каждого признака с временным окном W считают корреляционные матрицы между узлами;
  3. выделяют собственные векторы и далее рассматривают лишь первый собственный вектор;
  4. параллельно выделяют типичное поведение собственных векторов корреляционной матрицы (для этого делается еще одно SVD-разложение над матрицей изменения всех собственных векторов корреляционной матрицы во времени);
  5. сравнивают (через косинусное произведение) с реальным поведением этого вектора, получая таким образом показатель аномальности рассматриваемого временного окна.

Матричное разложение используется также и в статье Rossi (2013):

  1. аналогично предыдущему подходу выделяется по F-признаков на узел на каждый временной промежуток;
  2. для каждого временного промежутка производится NMF-разложение, при котором каждому узлу ставится в соответствие роль;
  3. далее мониторится изменение ролей каждого узла.

Матричное разложение для интерпретации результатов


Отдельно хочется отметить приведенные авторами методы аппроксимации матриц альтернативные по отношению к давно известным SVD, PCA, NMF: CUR (Drineas et al., 2006), CMD (Sun et al. 2007b) и Colibri (Tong et al. 2008). Основным преимуществом этих методов является интерпретируемость, поскольку в отличии от SVD, переводящего точки в другое пространство, эти методы оставляют пространство нетронутым, лишь сэмплируя точки из него. Наиболее простым из них является CUR, у которого авторы отмечают два недостатка: в нем точки выбираются из матрицы с повторением. В CMD удается убрать этот недостаток, однако как и в CUR, этому методу присуща линейная избыточность, которую удается избежать авторам алгоритма Colibri. Хотя методы были изобретены именно для решения задач поиска аномалий в графах методами матричной аппроксимации, их использование может быть перспективным и для других задач.

В задачах, обсуждаемых в этом обзоре, эти подходы применяются по следующему принципу: производится аппроксимация и оценивается, насколько различные столбцы/строки отличаются у аппроксимированной матрицы от изначальной. Также авторы отмечают метод NrMF (Tong and Lin 2011), модификация NMF, в котором ограничение на неотрицательность накладывается на матрицу остатков R, поскольку именно в ней сосредоточена основная информация по отличию апроксимации от изначальной матрицы, а отрицательные значения в таком случае было бы сложно интерпретировать. Тем не менее, до конца не ясно, почему нельзя аналогичным образом использовать SVD для декомпозиции, последующей реконструкции и последующим расчетом отличия от изначальной матрицы.


Определение узлов, связывающих аномальные


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

  1. Определение связного подграфа (connection subgraph) (Faloutsos et al., 2004). Проблему предлагается решать в терминах электротехники, присваивая одному узлу положительный потенциал, а другим узлам нулевой, и смотреть, как будет течь ток между ними, если присвоить ребрам некое сопротивление.
  2. Center-Piece Subgraphs (CePS) (Tong and Faloutsos, 2006). В отличие от предыдущего метода предпринимается попытка выделить лишь k-узлов из всех аномальных, поскольку совершенно не обязательно все узлы заданы. При этом k необходимо задавать.
  3. Dot2Dot (Akoglu et al., 2013b; Chau et al., 2012). В этом подходе авторы решают задачу группировки выбранных узлов и уже далее выделяют узлы, их связывающие.

Примеры поиска аномалий в различных сферах


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

Телекоммуникации. Целью являются люди, пользующиеся услугами бесплатно. Cortes et al. (2002) искали подграфы, тесно связанные с ключевым узлом по параметрам числа и продолжительности звонков. Наблюдения, которые авторы обнаружили: фродовые аккаунты оказались связаны, то есть нарушители или сами звонили друг другу, или звонили на одни и те же телефоны. Второе наблюдение нарушителей можно обнаружить по схожести их подграфов, определенных предложенным образом.

Онлайн-аукцион. Нарушители создают себе фейковые аккаунты и накручивают им рейтинги. Их не получается отследить по обычным агрегатным показателям, но возможно увидеть по графу. Аккаунты нарушителей более связаны с фейковыми аккаунтами, чем с хорошими аккаунтами. Фейки связаны примерно в равной степени с аккаунтами нарушителей и с хорошими. Последние в основном связаны с подобными себе аккаунтами. Pandit et al. (2007) решают эту задачу через приведение к реляционным марковским сетям (relational markov networks) и далее классифицируют узлы через Loopy Belief Propagation (метки класса итеративно распространяются по графу).

Транзакции. McGlohon et al. (2009) решают эту задачу через реляционную (relational) классификацию в предположении, что нарушители будут близко расположены друг к другу. То есть аналогично подходу из предыдущего примера.

Брокеры, которые жульничают с ценными бумагами. Здесь Neville et al. (2005) анализируют мультимодальный граф, выделяя подграфы, включающие человека под подозрением, его коллег, фирмы, с которыми он связан и т. п. Они рассчитывают агрегированные атрибуты и приписывают их центральному узлу. Далее используют реляционные вероятностные деревья (relational probability trees (Neville et al. 2003)) для реляционной классификации.

Поиск фейковых постов на форумах, дающих заведомо ложную информацию. Авторы описывают несколько подходов, с использованием признакового описания, анализа текста и графовых методов. Графовые методы, использованные Wang et al. (2011a), применялись для ситуации, когда в задаче присутствуют обзоры какого-то товара. В предложенном ими алгоритме предлагалось присваивать рецензентам показатели степени доверия им, их обзорам достоверности и товарам показатели надежности. Все эти показатели взаимосвязаны. Так, насколько можно доверять рецензенту, зависит от того, насколько у него достоверные обзоры. Надежность товаров зависит от степени доверия рецензентам, которые его описывают, а достоверность обзоров зависит от надежности товара, по которым они пишутся, и от доверия их авторам. Предлагаемый алгоритм сначала их случайно инициализирует, а затем итеративно улучшает оценку.

Трейдинг. Мошенники сначала совершают большое число транзакций друг с другом по какому-то типу акций, увеличивая их привлекательность, а затем, когда акции повышаются в цене, распродают их другим трейдерам. Оба этих последовательных инцидента можно отследить по графовым данным. В первом случае будет выделяться подграф, где нет никаких внешних транзакций (именуется черная дыра), а через временной промежуток этот же подграф преобразуется к подграфу, в котором сильно преобладают транзакции из подграфа в другую часть графа (именуется вулкан). Авторы ссылаются на работу Li et al. (2010).

Веб-ресурсы. Одним из первых подходов для борьбы с плохими веб-сайтами предлагалось распространение показателей надежности и ненадежности ресурсов. Если есть ссылка с одной страницы на другую, то для последней это увеличивает ее статус надежной. Если страница указывает на другую страницу, для которой известно, что она спам, то это снижает надежность изначальной страницы. Упоминается алгоритм TrustRank (Gyngyi et al., 2004) модификация PageRank для борьбы с веб-спамом. Для него требуется, чтобы изначально эксперты разметили часть сайтов, как надежные. Эти показатели далее распространяются по графу, постепенно затухая. Anti-TrustRank (Krishnan and Raj, 2006) следует этому же принципу, но с распространением показателей ненадежности от размеченных заведомо ненадежных сайтов. У обоих методов есть недостаток, что надежность делится по числу дочерних узлов. Benczr et al. (2005) предлагают совершенно иной подход: анализировать PageRank узла и соседних с ним. Распределение PageRank таких подграфов должно подчиняться некому степенному закону. Для тех же узлов, для которых распределение PageRank их соседей выбивается из этого закона, присваивается штраф. В работе (Castillo et al., 2007) предлагается сначала обучать классификатор на известных надежных и ненадежных страницах, а затем размывать результат скоринга остальных веб-сайтов по графу.

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

Атаки в компьютерных сетях. Sun et al. (2008) успешно применяют для решения этой задачи матричное разложение (CMD). Ding et al. (2012) используют подход основанный на поиске сообществ, выделяя в качестве подозрительных узлы-мосты между сообществами.

Заключение


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

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

Если вас интересует тема, то, чтобы получить больше информации, обязательно нужно идти в слак ODS (OpenDataScience), в каналы #network_analysis и #class_cs224w, смотреть курс Стэнфорда cs224w.

Еще недавно был прочитан курс по Knowledge Graphs. Ну и, конечно, нужно прочитать саму статью Graph based anomaly detection and description: a survey от авторов Leman Akoglu, Hanghang Tong, Danai Koutra (Akoglu, 2015), о которой идет речь в этом посте. Я перевел ее не всю, а только те фрагменты, которые счел важными, и понял в какой-то степени. Большинство авторов ссылаются именно на эту статью, потому что больше обзоров такого уровня и широты по теме нет. По крайней мере, я не нашел таких.

Список литературы

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

Интуиция в машине

25.06.2020 20:11:16 | Автор: admin
На самом деле всё просто.

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

Как же добавить компьютеру Интуицию?

image

Кто нибудь задумывался откуда взялся этот список?
Заметьте это уже много лет как работает и экономит человечеству 600 000 человеко-часов в день (это только Яндекс).
Но это подсказки. Последовательность слов.
А что такое слово? Фраза? Предложение?

Это образ


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

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

Улыбнулись? Ощутили? Теперь понятно? Интуиция (память) подсказала, что будет дальше? Перед глазами увидели картинки?

Да не из детства. Природу!
Образы могут быть очень абстрактны. На уровне ощущений.
Вот чувствую, что надо так, но объяснить не могу почему

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

Соображать значит сопоставлять образы


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

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

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

Кодер


1 лес
2 полянка
3 холмик
4 ямка

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

Закодировать одним числом можно и сложный многомерный вектор:
{температура: 20, влажность: 60, ветер: 14, давление: 120/60}
{после дождика, четверг} {после града, вторник}
{грязный, бесстрашный, танк}
{тепло, светло, мухи не кусают}
{я, на солнышке, лежу, ушами шевелю}.

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

Алгоритм


Допустим мы услышали:
мама мыла раму 100 раз
мама мыла милу мылом 20 раз
мама мыла калькулятор 5 раз
мама мыла магазин 1 раз.
Суммарно 100 + 20 + 5 + 1 = 126 фраз.

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

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

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

Ближе к делу


Какие могут быть паттерны?
Бизнес-процесс: прием товара, проверка комплектации, ввод накладной в 1С, перенос на склад.
Механика: болт, шайба, гровер, гайка.
Вождение авто: сцепление, передача, газ.
Время суток: утро, день, вечер, ночь.
Время года: зима, весна, лето, осень.
Продажи: удочка, комплект блесен, палатка, джип.

Как вы видите всё предсказуемо, когда видишь все много раз. После лета зима не начнется. Маловероятно.
Одного распознавания и предсказания мало.
Важно то, что мы можем сделать с данной информацией.
И сможем ли.

Всё очень просто


Поэтому сложно понять и простить применить.
Моя интуиция подсказывает мне возмущенные возгласы вроде:
Да ну! Даже все серверы на планете не заменят один человеческий мозг!
Чушь! У машины не может быть интуиции!

Развею ваши страхи и сомнения:
Интуиция не есть Озарение.
Подробнее..

Последняя битва за Сингулярность

04.07.2020 18:11:54 | Автор: admin

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

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

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

Поле битвы человек


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

Органы чувств


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

Самый широкий канал получения информации зрение. Считается, что с помощью глаз мы получаем около 80% всей информации. По приблизительным оценкам, разрешение сетчатки каждого глаза составляет примерно 120-140 мегапикселей, частота восприятия около 25 кадров в секунду. С точки зрения современных технологий, это чрезвычайно высокие показатели (можно оценить видеопоток как порядка 6 гигапикселей в секунду). Вы не найдете видеокамер с таким разрешением в продаже если подобные камеры и существуют, то в единичных экземплярах, стоят огромных денег и применяются исключительно в научно-исследовательских задачах.

Слух обеспечивает нам около 16% всей информации. Человеческое ухо способно воспринимать сигналы с частотами от 16 до 20000 Гц и в достаточно большом диапазоне амплитуд от 0 до порога болевого ощущения 120..140дБ. Также, звуковые импульсы, сменяющие друг друга с частотой более 16 Гц мы воспринимаем как непрерывный звук. Однако в отличие от зрения, слух почти одномерен, поэтому объем информации, поступающей в мозг от органов слуха, несколько меньше чем от органов зрения.

Мозг


Мозг состоит из порядка 100 миллиардов нейронов. Для сравнения, в последних процессорах порядка 2 миллиардов транзисторов, и транзистор гораздо более простая структура чем нейрон. Однако скорость передачи нервных импульсов между нейронами невелика: от 0.5 до 120 метров в секунду. В среднем, через один синапс проходит 10 импульсов в секунду, т.е. частота работы порядка 10Гц. Это чрезвычайно мало в сравнении с гигагерцовыми частотами современных процессоров.

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

Объем памяти нашего мозга по оценкам ученых составляет порядка 1 петабайт информации (например, поисковая система Google обрабатывает ежедневно около 24 петабайт данных).

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

Каналы ввода-вывода


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

Начнем со зрения


Средняя скорость чтения человека от 200 до 250 слов в минуту (для английского языка), 128-180 слов в минуту (для русского), в зависимости от языка (данные для не-иероглифических языков).
В символах средней считается скорость 1500 символов в минуту. Если условно принять один символ за один байт (в научной и технической литературе, которая нас в основном интересует, разных символов обычно больше чем в художественной, но все-же в неиероглифических языках мы примерно вмещаемся в байт) то получим канал 200 бит/сек. Это медленнее чем самые первые модемы!

Технологии скорочтения не на много увеличивают эту скорость. Например, президент США Джон Кеннеди мог читать со скоростью примерно 1200 слов в минуту, что соответствует примерно 800 бит/сек.

Скорость восприятия человеческой речи


Согласно исследованиям, оптимальный темп речи для чтения аудиокниг на английском языке соответствует 150160 словам в минуту. Для личной беседы 190 слов в минуту. Как видно, скорость примерно соответствует скорости чтения, так что использование аудиоканала никаких особых преимуществ не добавляет.

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

Скорость вывода информации


Еще хуже обстоят дела с каналом вывода абстрактной информации из мозга во внешний мир. Наиболее распространенный способ в современном мире печать на клавиатуре компьютера. Средняя скорость набора составляет 200 знаков в минуту, что соответствует всего лишь 27 бит/сек! Возможно, здесь немного бы помогли программы распознавания речи ведь скорость речи в среднем соответствует скорости восприятия речи, что больше скорости набора.

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

Абстрактное мышление


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

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

Объем памяти мозга огромен, но в краткосрочной памяти человека может одновременно содержаться лишь около семи объектов.

Почему так происходит? Биологически человек все еще животное. Человеческий мозг по прежнему предназначен для обеспечения выживания особи и вида, преимущественно в дикой саванне. Человеческий мозг изначально не предназначен для чтения, набора текста, работы со сложными абстракциями. Наше зрение способно очень быстро обрабатывать огромные массивы природной визуальной информации но это нужно для того чтобы быстро замечать хищников, притаившихся в джунглях, и другие опасности, а также чтобы находить разнообразную еду; но скорость нашего чтения медленнее чем самые первые модемы, выпускавшиеся в 80-х годах 20-го века! А скорость выдачи информации и того меньше.

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

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

Несовершенство биологической природы человека


Биологическая природа человека тоже накладывает свой отпечаток.

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

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

Поле битвы Цивилизация


Огромный объем знаний


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

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

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

Информационная революция


Одна из важнейших составляющих научно-технической революции компьютерная революция, привнесла в наши жизни компьютеры и глобальную сеть интернет. Без преувеличения, Интернет это прорыв такого же масштаба, как возникновение письменности когда-то. Считается, что человечество накопило 2 трлн гигабайт данных, а годовой объем интернет-трафика составляет порядка 3 зеттабайт. Доступ к Сети имеет 4,54 миллиарда пользователей, каждый из которых в среднем проводит в сети порядка 7 часов в день. Это фантастические цифры, однако что мы имеем в реальности?

Человекоориентированная информация


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

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

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

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

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

Между человеком и компьютером по прежнему огромная пропасть.

Лавина сложности


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

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

Одна молекула ДНК в среднем состоит из 100 миллиардов атомов. А биологическая клетка содержит в среднем около 100 триллионов атомов. Длина всех молекул ДНК двойного набора хромосом в одной клетке человека равна примерно 2м. Количество вариантов конформаций одной единственной молекулы типичного белка может быть больше, чем количество атомов во Вселенной (источник: Introduction to General, Organic and Biochemistry).

Некоторые примеры сложности


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

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

В 2005 году сотрудникам Лос-Аламосской национальной лаборатории удалось создать динамическую модель работы рибосомы, синтезирующей молекулу белка. Для этого потребовалось 768 микропроцессоров, работавших в течение 260 дней. За это время удалось снять 20 миллионов кадров, отражающих лишь 2 наносекунды из жизни рибосомы.
(источник)

В 2011 году китайские ученые создали симуляцию вируса H1N1 на атомарном уровне. Система на базе GPU Mole-8.5, в котором установлено свыше 2200 графических процессоров NVIDIA Tesla, способна симулировать 770 пикосекунд в день с шагом времени интегрирования в 1 фемтосекунду для 300 миллионов атомов или радикалов.
(источник)

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

Например, в 2013 году для симуляции 1 секунды работы 1% человеческого мозга (1,73 млрд нервных клеток и 10,4 трлн синапсов) потребовалось 40 минут на кластере из 82 944 процессоров 10-петафлопсного K computer.
(источник)

А в проекте моделировании мозга habr.com/ru/news/t/429200 в 2018 году современный суперкомпьютер, состоящий из миллиона ядер ARM9, способных обрабатывать 200 триллионов операций в секунду, может моделировать в реальном времени лишь один процент от общего количества нейронов (1 млрд, а не 100 млрд).

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

В завершение


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

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

Перевод В сообществе машинного обучения есть проблема токсичности

06.07.2020 20:09:26 | Автор: admin
Токсичность везде.

Во-первых, нарушен процесс независимой экспертизы (peer review). Четверть работ с конференции NeurIPS выкладывается на arXiv. В DeepMind есть исследователи, которые публично преследуют рецензентов, критикующих их представление ICLR. Кроме того, статьи известных институтов с arXiv принимаются на ведущих конференциях, даже если рецензенты решают отклонить работу. И наоборот, некоторые статьи с большинством положительных отзывов отклоняются (не хочу называть никаких имён, просто взгляните на страницу openreview ICRL этого года).

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

В-третьих, существует проблема поклонения. Каждая статья, имеющая отношение к Стэнфорду или DeepMind, превозносится как прорыв. Например, у BERT цитирований в семь раз больше, чем у ULMfit. Принадлежность к Google придаёт статье очень много доверия и известности. На каждой конференции ICML перед каждым плакатом DeepMind стоит толпа людей, независимо от содержания работы. Та же история с Zoom-встречами на виртуальной конференции ICLR 2020. Более того, NeurIPS 2020 собрала в два раза больше заявок, чем ICML, хотя обе конференции высшего уровня. Почему? Почему слово нейронный так превозносится? Далее, Бенгио, Хинтон и ЛеКун [лауреаты премии Тьюринга 2018 года за исследования в области ИИ прим. пер] действительно являются пионерами глубокого обучения, но называть их крёстными отцами ИИ безумие. Это уже становится культом.

В-четвёртых, Ян ЛеКун довольно мягко высказался о темах предвзятости и справедливости. Однако в ответ получил совершенно неадекватную токсичность и отрицательную реакцию. Избавиться от ЛеКуна и заткнуть человеку рот это не решение.

В-пятых, у машинного обучения и информатики в целом огромная проблема неравенства (diversity). На нашем факультете CS только 30% студентов и 15% профессоров женщины. Уход в отпуск по уходу за ребёнком во время аспирантуры или докторантуры обычно означает конец академической карьеры. Однако этим неравенством часто злоупотребляют как предлогом, чтобы оградить некоторых людей от любой формы критики. Сведение каждого негативного комментария в научной дискуссии к расе и полу создаёт токсичную среду. Люди боятся участвовать в дискуссиях, чтобы их не назвали расистами или сексистами, что, в свою очередь, усиливает проблему неравенства.

В-шестых, мораль и этика устанавливаются произвольно. В любой дискуссии доминирует внутренняя политика США. В этот самый момент тысячи уйгуров попадают в концентрационные лагеря, основанные на алгоритмах компьютерного зрения, изобретённых этим сообществом, и никому, кажется, вообще нет дела до этого. Добавление раздела Более широкое воздействие в конце каждой работы не решит эту проблему. Поднимаются кучи дерьма, когда какой-то исследователь не упомянут в статье. Между тем африканский континент с населением в 1 миллиард человек практически исключён из любого значимого обсуждения ML (кроме нескольких семинаров Indaba).

В-седьмых, распространена ментальность типа публикуйся или умри. Если ты не публикуешь 5+ статей в год на конференциях NeurIPS/ICML, ты неудачник. Исследовательские группы стали настолько большими, что научный руководитель даже не помнит имён всех аспирантов. Некоторые подают на NeurIPS более 50 работ в год. Единственной целью написания статьи стало добавление ещё одной статьи NeurIPS в резюме. Качество вторично; основной целью стало прохождение стадии предварительного просмотра.

Наконец, дискуссии стали неуважительными. Лауреат приза Гельмгольца от Международного общества нейронных сетей Юрген Шмидхубер обзывает вором члена Лондонского королевского общества Джеффри Хинтона, Эфиопско-американский и содиректор группы Ethical Artificial Intelligence Team в Google Тимнит Гебру обзывает белым супрематистом крёстного отца ИИ Яна ЛеКуна, Профессор Калтеха и директор исследований ИИ в Nvidia Анима Анандкумар обзывает сексистом исполнительного директора Geometric Intelligence и автора книг Гари Маркуса. Все подвергаются нападкам, но ничего не улучшается.

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

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

Почему меня разочаровали результаты 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, на поверку оказывается набором инженерных хитростей. Флёр волшебства окончательно растаял.
Подробнее..

Короткий путь к Искусственному интеллекту?

07.07.2020 06:22:58 | Автор: admin
Давайте признаемся: мы как-то буксуем. Разработки в сфере ИИ, при всех значительных затратах, не дают ожидаемого выхлопа. Конечно, кое-чего получается, но дело идет медленно. Медленнее, чем хотелось бы. Может, задача не решается потому, что решается не та задача?

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



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

Наш мозг. Представьте его себе. Два кило (по максимуму) податливого розовато-серого вещества. Сто миллиардов (тоже возьмем по максимуму) нейронов, каждый из которых готов отрастить до десяти тысяч динамических связей синапсов, которые могут то появляться, то исчезать. Плюс несколько типов сигналов между ними, да еще и глия сюрприз подкинула тоже что-то проводит, помогает и способствует. (Для справки: нейроглия или просто глия совокупность вспомогательных клеток нервной ткани. Составляет около 40% объёма ЦНС. Количество глиальных клеток в среднем в 10-50 раз больше, чем нейронов). Дендриты недавно удивили оказывается, они выполняют куда больше функций, чем считалось ранее (1). Мозг очень сложная штука. Если не верите спросите у Константина Анохина. Он подтвердит.

Человек все делает с помощью мозга. Собственно, мы это и есть он. Отсюда совершенно неудивительным является представление человека о том, что мозг = интеллект и еще более неудивительна идея скопировать устройство мозга и вуаля! получить искомое. Но мозг это не интеллект. Мозг это носитель. Железо. А Интеллект это алгоритм, софт. Попытки повторить софт через копирование железа это провальная идея. Это культ карго (2). Вы же знаете, что такое культ карго?

Аборигены островов Меланезии (увидев во время WWII, как самолеты привозят оружие, продовольствие, медикаменты и многое другое), соорудили из соломы копии самолетов и будку диспетчера, но никак не помогли себе в получении товаров, потому что не имели никакого представления о том, что скрывается за внешним видом самолетов. Так и мы, разобрав до винтиков калькулятор, не найдем внутри ни одной цифры. И, тем более, никакого намека на какие-либо операции с числами.

Пару лет назад Андрей Константинов в одном из номеров журнала Кот Шрёдингера (12 за 2017 г.), в своей колонке Где у робота душа, написал: Со времён Лейбница мы так и не нашли в мозге ничего, кроме частей, толкающих одна другую. Конечно не нашли! И не найдем. По компьютерному железу мы пытаемся восстановить программу, а это невозможно. В качестве подтверждающего аргумента приведу длинную цитату (3):

нейробиологи, вооружившись методами, обычно применяемыми для изучения живых нейроструктур, попытались использовать эти методы, чтобы понять, как функционирует простейшая микропроцессорная система. Мозгом стал MOS 6502 один из популярнейших микропроцессоров всех времён и народов: 8-битный чип, использованный во множестве ранних персональных компьютеров и игровых приставок, в том числе Apple, Commodore, Atari. Естественно, что мы знаем об этом чипе всё ведь он создан человеком! Но исследователи сделали вид, что не знают ничего и попытались понять его работу, изучая теми же методами, которыми изучают живой мозг.

Химически была удалена крышка, под оптическим микроскопом изучена схема с точностью до отдельного транзистора, создана цифровая модель (тут я немного упрощаю, но суть верна), причём модель настолько точная, что на ней оказалось возможно запускать старые игры (Space Invaders, Donkey Kong, Pitfall). А дальше чип (точнее, его модель) был подвергнут тысячам измерений одновременно: во время исполнения игр измерены напряжения на каждом проводке и определено состояние каждого транзистора. Это породило поток данных в полтора гигабайта в секунду который уже и анализировался. Строились графики всплесков от отдельных транзисторов, выявлялись ритмы, отыскивались элементы схемы, отключение которых делало её неработоспособной, находились взаимные зависимости элементов и блоков и т. п.

Насколько сложной была эта система по сравнению с живыми? Процессор 6502, конечно, и рядом не стоит с головным мозгом даже мыши. Но он приближается по сложности к червю Caenorhabditis elegans ломовой лошадке биологов: этот червь изучен вдоль и поперёк и уже предпринимаются попытки смоделировать его полностью в цифровом виде () Таким образом, задача анализа системы на чипе 6502 не является чрезмерным упрощением. И результаты имеют право быть экстраполированы на системы in vivo.

Вот только исследователи потерпели поражение! Нет, какие-то результаты, конечно, получены были. Анализируя чип, удалось выделить функциональные блоки, набросать схему их вероятных взаимосвязей, получить некоторые интересные подсказки насчёт того, как, вероятно, работает микропроцессор в целом. Однако понимания в том смысле, в каком его требует нейробиология (в данном случае: быть способным исправить любую поломку), достигнуто не было".

В какой-то момент появились исследователи, которые стали говорить примерно то же самое что надо изучать алгоритмы, что нужно понять, какую функцию выполняет интеллект. К примеру, Демис Хассабис (DeepMind), готовясь к выступлению на Singularity-саммите в Сан-Франциско (2010 г.), сказал следующее: В отличие от других выступлений на саммите по теме AGI, мой доклад будет другим, так как я интересуюсь системным уровнем нейронауки алгоритмами мозга а не деталями, как они реализуются мозговой тканью в виде спайков нейронов и синапсов или специфической нейрохимией и т. д. Я интересуюсь, какими алгоритмами мозг пользуется для решения проблем, и которые нам нужно найти, чтобы добраться до AGI.

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

Просмотрим на ситуацию иначе. Что такое задача вообще? Это затруднительная ситуация, с которой сталкивается, и которую пытается разрешить человек. Как показали в середине прошлого века американские математики Герберт Саймон и Аллен Ньюэлл, любая задача в общем виде может быть описана как переход из состояния Система с проблемой в состояние Система без проблемы. Они разработали компьютерную программу, назвав её General Problem Solver (Универсальный решатель задач), но дальше решения задач специфического вида они не продвинулись, поэтому универсальность именно их алгоритма осталась под вопросом. Но формула Система с проблемой --> Система без проблемы оказалась абсолютно верна!



Преобразование Системы это процесс ее перевода из исходного состояния с проблемой в желаемое состояние без проблемы (4). В процессе преобразования, (т. е. решения задачи) проблемная система становится беспроблемной (ну или менее проблемной), улучшается, избавляется от своих недостатков и выживает, т. е. продолжает использоваться. Ой, погодите, что это мы сейчас сказали? Избавление от недостатков? Выживание? Хм Что-то знакомое. Где-то мы это Ах, ну да. Эволюция! Чем меньше недостатков тем больше шансы выжить!

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

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

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

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

Кто-то мне сейчас наверняка возразит: задачи, которые решает человек, связаны с миллионами самых разных систем природными, общественными, производственными, техническими Материальными и абстрактными, находящимися на разных уровнях иерархии. И развиваются-де они каждая по-своему, а дарвиновская эволюция это про живую природу. Зайчики, цветочки, рыбки, птички Но исследования показывают, что законы эволюции универсальны. Доказательства долго искать не надо они все перед глазами. Имеющие их да увидят. Что ни возьми от спички до Боинга, от танка до контрабаса везде (5) мы видим наследственность, изменчивость и отбор! А все многообразие эволюционных изменений (кажущаяся сложность которых связана с тем, что все системы очень разные по своей природе и находятся на разных уровнях иерархии) можно выразить единственным циклом. Вы же помните, да? Система с проблемой --> Система без проблемы.

Что такое Система с проблемой? Это Система (материальная и абстрактная, социальная, производственная и техническая, научная и любая объект, идея, гипотеза всё, что угодно), в которой обнаружены какие-то недостатки, влияющие (внимание!) на наше желание и возможность её использования. Система недостаточно хороша. Система недостаточно эффективна. У неё низкое соотношение польза / затраты. Мы хотим, можем и готовы от нее отказаться, и часто отказываемся. Но нам нужна другая (выполняющая нужную нам полезную функцию), но уже без проблем более эффективная, без недостатков (или с меньшим их количеством). Ну, вы видели эту картинку выше Конечно, одной стрелочки между двумя крайними состояниями (исходным и желаемым) нам мало. Нам нужен тот самый оператор, преобразователь, верно? Попробуем его найти? Вы же согласитесь, что в случае успеха мы получим описание (хотя бы, для начала и упрощенное) так нужного нам универсального алгоритма?



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

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

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

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

Что у нас получается в итоге: Эволюция системы (представленная в виде Универсальной Схемы) это путь её улучшения, избавления от недостатков. Иными словами, это алгоритм решения задачи. А решение задачи это именно то, чем занимается интеллект. Упрощаем и получаем: Универсальная Схема = описание функции интеллекта.

Конструктивная критика приветствуется. :)



1. Дендриты важнее для мозга, чем ранее считалось chrdk.ru/news/dendrity-vazhnee-chem-schitalos
2. ru.wikipedia.org/wiki/Карго_культ
3. Е. Золотов. Пойми меня! Как неживое помогает разбираться в живом www.computerra.ru/161756/6502
4. Chapter 6. Problem Solving. Artificial Intelligence. A Knowledge-Based Approach by Morris W.Firebaugh University of Wisconsin Parkside PWS-Kent Publishing Company Boston 1988, p. 172.
5. Дарвиновская эволюция в мире техносферы. Мир вещей, создаваемый человеком, развивается по тем же законам, что и живая природа. www.ng.ru/science/2017-01-11/14_6899_evolution.html
Подробнее..

Схема против нейросети

28.06.2020 14:08:19 | Автор: admin
Мы снова недооцениваем сложность задач.

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

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

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

Ключевое здесь постоянно.
Миллиарды десятков нейронов и триллионы синапсов постоянно перестраивают свой потенциал и связи под текущую Задачу. Накапливают опыт. Формируют Личность.
А мы разделили этот процесс минимум на две части: обучение и исполнение, и жалуемся, что как-то много ошибок и в том и другом.

Постоянно, а не обучили CNN и используем ее в статике для классификации.
Еще и соревнования устраиваем на лучшую архитектуру нейросети. Но лучшая она лишь для определенного набора данных и постоянно эволюционирует.
Автопилот Тесла увидел частично заляпанный знак и всё авария. Сразу шумиха в прессе: Не работает DeepLearning!, Роботы зло.
Или вот еще интереснее сюжет про рекламу Burger King и Tesla.

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

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

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

Как бы и не надо.

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

Если задана формула, машина считает её со скоростью недостижимой человеку. Яркий пример: траектории полетов космических кораблей. А ведь начиналось все с таких приборов, но даже они превосходили в итоге людей в скорости расчетов.
Нет нужды заставлять C/G/TPU имитировать биологические нейроны.

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

Когда то, вдохновившись работами Boston Dynamics я экспериментировал с робототехникой.
Жаль, что у меня не было таких мощностей как сейчас, но это привело к очень интересным идеям.
Долго не получалось обучить что-то адекватное на стандарной полносвязной сети и сигмоиде. Решил попробовать функцию, более подходящую механике модели, основываясь на простой идее:
Вращение шарниров конечностей робота это тригонометрия.

Функция cos в качестве активационной и ограничение значений входов и выходов [-1;1] повысила качество управления и скорость обучения в разы, снизила размер сети.

Да cos не самая быстрая функция она вычисляется по таблице или разложением в ряд Тейлора, но она уже есть. Тем более если делать подобные функции как ядро ASIC, то будем иметь примерно 10-тикратный прирост в скорости вычислений.
Её не надо искать, вычислять, тратить время на обучение ИНС уже всё давно сделано с помощью наших нейросеток.
Есть множество функций еще более ресурсоемких, чем тригонометрия. Алгоритм тот же:
Берем функцию из базы соединяем с нужными блоками входы и выходы.

Эти функции могут быть очень высокого порядка. Вроде тех, что используются в программировании. А их параметры ID объектов класса Товар, Марка, Цвет, Адрес и так далее.
Другими словами передаем спайк (код объекта, ID) в нужное место, а не вектор из рациональных чисел, который обозначает непонятно что.

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

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

В итоге Data Scientist программируют схемы архитектуры нейросетей. Где-то интуитивно, где-то на основании литературно-технического опыта или после отбора AutoML.
Танцы с бубном по другому не получается. Потому что DeepLearning красиво работает на учебных датасетах реальность ставит всё на место.

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

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

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

Победители соревнований Dialogue Evaluation о задачах, языковых моделях, ML и о себе

06.07.2020 16:22:04 | Автор: admin
Недавно завершился Диалог 2020, международная научная конференция по компьютерной лингвистике и интеллектуальным технологиям. Традиционно одно из ключевых событий конференции это Dialogue Evaluation, соревнования между разработчиками автоматических систем лингвистического анализа текстов. Мы уже рассказывали на Хабре о задачах, которые участники состязаний решали в прошлом году, например, о генерации заголовков и поиске пропущенных слов в тексте. Сегодня мы поговорили с победителями двух дорожек Dialogue Evaluation этого года Владиславом Корзуном и Даниилом Анастасьевым о том, почему они решили участвовать в технологических соревнованиях, какие задачи и какими способами решали, чем ребята интересуются, где учились и чем планируют заниматься в будущем. Добро пожаловать под кат!

Владислав Корзун, победитель дорожки Dialogue Evaluation RuREBus-2020



Чем ты занимаешься?


Я разработчик в NLP Advanced Research Group в ABBYY. В данный момент мы решаем задачу one shot learning для извлечения сущностей. Т. е. имея небольшую обучающую выборку (5-10 документов), надо научиться извлекать специфические сущности из похожих документов. Для этого мы собираемся использовать выходы обученной на стандартных типах сущностей (Персоны, Локации, Организации) NER-модели в качестве признаков для решения этой задачи. Также мы планируем использовать специальную языковую модель, которая обучалась на документах, схожих по тематике с нашей задачей.

Какие задачи ты решал на Dialogue Evaluation?


На Диалоге я участвовал в соревновании RuREBus, посвященном извлечению сущностей и отношений из специфических документов корпуса Минэкономразвития. Данный корпус сильно отличался от корпусов, используемых, например, в соревновании Conll. Во-первых, сами типы сущностей были не стандартные (Персоны, Локации, Организации), среди них были даже неименованные и субстантивы действий. Во-вторых, сами тексты представляли собой не наборы выверенных предложений, а реальные документы, из-за чего в них попадались различные списки, заголовки и даже таблицы. В итоге основные трудности возникали именно с обработкой данных, а не с решением задачи, т.к. по сути это классические задачи Named Entity Recognition и Relation Extraction.

В самом соревновании было 3 дорожки: NER, RE с заданными сущностями и end-to-end RE. Я пытался решить первые две. В первой задаче я использовал классические подходы. Сперва я попробовал в качестве модели использовать рекуррентную сеть, а в качестве признаков словные эмбеддинги fasttext, шаблоны капитализации, символьные эмбеддинги и POS-тэги[1]. Затем я уже использовал различные предобученные BERT-ы [2], которые довольно сильно превзошли предыдущий мой подход. Однако этого не хватило, чтобы занять первое место в этой дорожке.


А вот во второй дорожке мне это удалось. Для решения задачи извлечения отношений я свел её к задаче классификации отношений, схожей с SemEval 2010 Task 8. В данной задаче для каждого предложения дана одна пара сущностей, для которой нужно классифицировать отношение. А в дорожке в каждом предложении может быть сколько угодно сущностей, однако она просто сводится к предыдущей путем сэмплирования предложения для каждой пары сущностей. Также при обучении я брал отрицательные примеры случайно для каждого предложения в размере, не большем удвоенного числа положительных, чтобы сократить обучающую выборку.

В качестве подходов к решению задачи классификации отношений я использовал две модели, основанные на BERT-e. В первой я просто конкатенировал выходы BERT с NER-эмбеддингами и затем усреднял признаки по каждому токену с помощью Self-attention[3]. В качестве второй модели была взята одна из лучших для решения SemEval 2010 Task 8 R-BERT[4]. Суть данного подхода в следующем: вставить специальные токены до и после каждой сущности, усреднить выходы BERT для токенов каждой сущности, объединить полученные вектора с выходом, соответствующим CLS-токену и классифицировать полученный вектор признаков. В итоге данная модель заняла первое место в дорожке. Результаты соревнования доступны здесь.


[4] Wu, S., He, Y. (2019, November). Enriching pre-trained language model with entity information for relation classification. In Proceedings of the 28th ACM International Conference on Information and Knowledge Management (pp. 2361-2364).

Что показалось тебе наиболее сложным в этих задачах?


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

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

Ты раньше участвовал в Диалоге и дорожках?


В прошлом году выступал со своим магистерским дипломом на студенческой сессии.

А почему в этом году решил участвовать в соревнованиях?


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

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

А в других соревнованиях ты участвовал?


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

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

Какие самые интересные задачи ты решал на соревнованиях либо на работе?


Скоро будет соревнование по генерации жестов GENEA, и я собираюсь туда пойти. Мне кажется, это будет интересно. Это воркшоп на ACM International Conference on Intelligent Virtual Agents. В данном соревновании предлагается генерировать жесты для 3D-модели человека на основе голоса. Я выступал в этом году на Диалоге с похожей темой, делал небольшой обзор подходов для задачи автоматической генерации мимики и жестов по голосу. Нужно набираться опыта, ведь мне еще диссертацию защищать по схожей теме. Я хочу попробовать создать читающего виртуального агента, с мимикой, жестами, и конечно, голосом. Текущие подходы синтеза речи позволяют генерировать довольно реалистичную речь по тексту, а подходы генерации жестов жесты по голосу. Так почему бы не объединить эти подходы.

Кстати, где ты сейчас учишься?


Я учусь в аспирантуре кафедры компьютерной лингвистики ABBYY в МФТИ. Через два года буду защищать диссертацию.

Какие знания и навыки, полученные в вузе, тебе помогают сейчас?


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

Даниил Анастасьев, победитель дорожки Dialogue Evaluation GramEval-2020



Чем ты занимаешься?


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

Расскажи про задачу, которую ты решал в этом году на одном из треков Dialogue Evaluation.


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

image

Модель училась на нормальном русском языке, но, как видите, она работает и на таком языке, который был в задаче.

А похоже ли это на то, чем ты занимаешься на работе?


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

Участвовал ли ты в Dialogue Evaluation до этого?


Участвовал в дорожке MorphoRuEval-2017 на 5 курсе и тоже тогда занял 1 место. Тогда нужно было определить только морфологию и леммы, без синтаксических отношений.

Реально ли применять твою модель для других задач уже сейчас?


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

А для чего ты участвуешь в Dialogue Evaluation и других подобных соревнованиях?


Хакатоны и такие соревнования напрямую не связаны с моей деятельностью, но это все равно полезный опыт. Например, когда я участвовал в хакатоне AI Journey в прошлом году, я научился каким-то вещам, которые потом использовал в работе. Задача была научиться проходить ЕГЭ по русскому языку, то есть решать тесты и писать сочинение. Понятно, что это всё слабо связано с работой. А вот умение быстро придумать и обучить модель, которая решает какую-то задачу очень даже полезно. Мы тогда с командой, кстати, заняли первое место.

Расскажи, какое образование ты получил и чем занимался после университета?


Окончил бакалавриат и магистратуру кафедры компьютерной лингвистики ABBYY в МФТИ, выпустился в 2018 году. Также учился в Школе анализа данных (ШАД). Когда пришло время выбирать базовую кафедру на 2 курсе, у нас большая часть группы пошла на кафедры ABBYY компьютерной лингвистики или распознавания изображений и обработки текста. В бакалавриате нас хорошо учили программировать были очень полезные курсы. Я с 4 курса работал в ABBYY на протяжении 2,5 лет. Сначала в группе морфологии, затем занимался задачами, связанными с языковыми моделями для улучшения распознавания текста в ABBYY FineReader. Я писал код, обучал модели, сейчас я занимаюсь тем же, но для совсем другого продукта.

А как проводишь свободное время?


Люблю читать книги. В завиcимости от времени года стараюсь бегать или ходить на лыжах. Увлекаюсь фотографией во время путешествий.

Есть ли у тебя планы или цели на ближайшие, допустим, 5 лет?


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

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


Лучше всего практиковаться, пробовать и участвовать в соревнованиях. Совсем начинающие могут пройти один из множества курсов: например, от ШАДа, DeepPavlov или даже мой собственный, который я когда-то провел в ABBYY.


Кстати, мы продолжаем набор в магистратуру на кафедры ABBYY в МФТИ: распознавания изображений и обработки текста (РИОТ) и компьютерной лингвистики (КЛ). До 15 июля включительно присылайте на brains@abbyy.com мотивационное письмо с указанием кафедры, на которую хотели бы поступить, и резюме с указанием среднего балла GPA по 5- или 10-балльной шкале.

Подробности о магистратуре можно посмотреть на видео, а о кафедрах ABBYY прочитать здесь.
Подробнее..

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

06.07.2020 18:16:50 | Автор: admin


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

Image GPT

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



Face depixelizer

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


DeepFaceDrawing

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



PIFuHD

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



RepNet

Многие вещи, которые нас окружают, состоят из циклов разной периодичности. Часто для того, чтобы понять суть явления, нужно проанализировать информацию о его повторяющихся проявлениях. С учетом возможностей видеосъемки зафиксировать повторения уже давно не сложно, проблема заключалась в их подсчете. Способ покадрового сравнения плотности пикселей в кадре часто не подходил из-за тряски камеры, или загораживания объектами, а также резкой разницей в масштабе и форме при приближении и отдалении. Теперь эту проблему решает модель, разработанная Google. Она определяет повторяющиеся действия на видео, в том числе и те, которые не использовались при обучении. В результате модель возвращает данные о периодичности повторяющихся действий, распознанных на видео. Колаб уже доступен.



SPICE model

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

Детектор социального дистанцирования

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



Распознавание типовых документов

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

Как создать масштабируемый пайплайн разработки и деплоя алгоритмов машинного обучения для бесконтактного ритейла

Израильский стартап Trigo делится опытом применения машинного обучения и компьютерного зрения для take-and-go ритейла. Компания является поставщиком системы, которая позволяет магазинам работать без кассы. Авторы рассказывают какие задачи перед ними стояли и объясняют, почему выбрали PyTorch в качестве фреймворка для машинного обучения, а Allegro AI Trains для инфраструктуры и как им удалось наладили процесс разработки.

На этом все, спасибо за внимание!
Подробнее..

Перевод Охотники, щелкуны и Элли как устроен игровой искусственный интеллект в The Last of Us

20.06.2020 12:14:32 | Автор: admin
Вчера состоялся релиз сиквела The Last of Us игры, уже семь лет являющейся одним из наиболее узнаваемых эксклюзивов PlayStation. Это кинематографическая история о человеческих жизнях в бесчеловечной реальности мира, разрушенного современной чумой. В то время, когда игроки берут на себя управление циничным и озлобленным главным героем Джоэлом, искусственный интеллект разыгрывает других персонажей, будь то союзник, враг или зараженный.

На фоне выхода второй части игры рассказываем о том, почему игрокам так понравился оригинал. В этой переводной статье поговорим о философии дизайна The Last of Us, касающейся всех аспектов искусственного интеллекта.



Предупреждение: речь в статье идет только об оригинальной игре 2013 года.


Об игре


The Last of Us игра от третьего лица в жанре action-adventure с фокусом на механиках стелса и динамической системе укрытий. В мире постапокалиптической Америки игроки вынуждены противостоять двум типам противников: охотникам людям, контролирующим и патрулирующим отдельные территории по всей стране, и зараженным существам, в которых превращаются люди, заболевшие грибковой чумой.
Когда мы только начинали создавать прототипы ИИ в случае, когда врагом является человек, первый вопрос, которым мы задались, был следующий: как заставить игрока поверить в реальность своих противников, чтобы ему не хотелось их убивать? Ответ на этот вопрос и стал основой дизайна вражеского ИИ. Для ответа на него потребовалось нечто большее, чем просто нанять лучших актеров озвучки, лучших 3D-художников и аниматоров, хотя все это тоже было немаловажным. Прежде всего нам требовалось решить проблему самого искусственного интеллекта. Потому что, если мы не сможем заставить игрока поверить, будто эти отряды выживших мыслят и взаимодействуют, как настоящие люди, никакие передовые мокапы не удержат игрока в потоке.

Трэвис Макинтош, Вражеский ИИ в The Last of Us, Game AI Pro, том 2, глава 34, 2015

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

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


Архитектура ИИ


Начнем с объяснения основ архитектуры искусственного интеллекта различных персонажей в игре и того, почему Naughty Dog построили ее именно таким образом.

ИИ в The Last of Us строится на использовании конечных автоматов (КА) давно устоявшегося подхода к созданию искусственного интеллекта. Популяризовала его Half-Life еще в 1998 году. Его суть состоит в том, что персонаж может иметь несколько сменяющих друг друга состояний: к примеру, он будет атаковать цель либо искать ее местоположение до тех пор, пока не произойдет событие-триггер, которое переведет его из одного состояния в другое.


Простой КА с двумя состояниями

ИИ в The Last of Us построен на идее поведений и навыков. Навыки это то, что персонаж может сделать. Например, охотник может начать выяснять, что за шорохи он слышит или что за движение видит, спрятаться за укрытием или обойти игрока. В случае зараженных этот список будет иной: например, в него будут входить хаотическое блуждание по карте и преследование противника. В любом из вариантов используются более мелкие специфические действия, такие как перемещение по локациям, взаимодействие с объектами в мире или реагирование на них. Здесь и вступает в силу поведение.

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

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



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

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

Марк Ботта, ИИ зараженных в The Last of Us, Game AI Pro, том 2, глава 33, 2015

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

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




Охотники


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

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

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

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

Изначально в The Last of Us они были такими же, как в другой серии игр Naughty Dog Uncharted. Но со своей функцией они справлялись плохо: игрока слишком быстро замечали как на близком, так и на дальнем расстоянии. Они не соответствовали темпу игры, а потому были видоизменены и имели уже не конусообразную форму. Теперь поле зрения NPC стало напоминать контур замочной скважины, тем самым обеспечивая более широкое периферическое зрение и более узкий обзор на расстоянии.


Поле зрения NPC в Uncharted


Поле зрения NPC в The Last of Us

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

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



У охотников есть множество навыков. Как мы видим, большинство из них строится вокруг боя: ближнего, дальнего, при прямом наступлении или подходе с фланга. Большинство последовательностей боевых действий в The Last of Us начинается с того, что игрок, пребывавший в невидимом режиме, оказывается обнаружен. Поэтому сейчас мы сосредоточимся на двух навыках, наиболее критических в режиме стелса: на расследовании и поиске.

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

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

Давайте рассмотрим, как эти системы запускают в работу режимы поиска и расследования.

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

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

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

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


Часть территории не видно, но ее можно проверить

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

Прежде всего, врагам может понадобиться укрытие. Как они узнают, где лучше спрятаться? В данном случае снова используется система очков укрытий, но уже с другими критериями. Нам уже не нужны открытые посты, теперь нам нужна защита для юнита. Игра выполняет подсчет 20 ближайших точек для укрытия на карте в пределах радиуса NPC, а затем запускает 4 рейкаста на каждый фрагмент укрытия, чтобы оценить, сможет ли игрок убить врага в перестрелке с этой позиции. Если система решает, что место безопасно, оно оценивается по степени удобства достижения и тому, не нужно ли ИИ при этом перемещаться перед игроком. Укрытия ранжируются по этим критериям, после чего персонаж выбирает пост, набравший наибольшее количество очков. При этом стоит учитывать, что наиболее предпочтительная позиция в данный момент может потерять свою актуальность уже спустя 5 секунд, стоит лишь игроку переместиться в другую точку, и тогда последующие расчеты других наилучших мест могут повлиять на темп битвы.


Выбор наилучшего укрытия с учетом позиции игрока

Теперь, когда подходящее укрытие выбрано, как охотникам лучше скоординировать свою атаку?

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

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

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



Зараженные


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

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

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

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

Давайте посмотрим на то, как работает звук в игре.

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


Радиус распространения звука

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

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



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

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



Учитывая, что противостояние зараженным во многом основано на скрытности, как щелкун и бегун будут искать игрока, если услышат что-то подозрительное?

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

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

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

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

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

image

Элли


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

Одна из первых демонстраций игры в январе 2013 года показывала то, как игроки покидают карантинную зону Бостона. Тэсс и Элли под предводительством Джоэла пробирались сквозь небоскреб, переполненный бегунами и щелкунами. В этом демо персонажи-компаньоны должны были держаться поодаль от места чистки от зараженных, но в то время их ИИ был еще сырым и не соответствовал задуманному Naughty Dog.

Итак, давайте поговорим о приоритетах ИИ в случае с Элли:

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

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

Чтобы Элли могла следовать за Джоэлом, игра создает область вокруг игрока, которой также стараются придерживаться Тэсс, Билл, Генри и Сэм хотя обычно они держатся на большем расстоянии от Джоэла, нежели Элли. Как только эта область выстроена, игра отправляет рейкасты параллельно навигационной сетке в целью поиска подходящих позиций для размещения компаньонов. Как и в случае системы очков укрытий, каждая позиция оценивается по таким параметрам, как расстояние до врагов и союзников, угол относительно позиции игрока, не блокирует ли геометрия взгляд на Джоэла или движение вперед. Решить эту проблему правильно невероятно трудно и все же, пусть система неидеальна, гораздо чаще ей удается разместить персонажа правильно, чем не удается.


Определение допустимых позиций для Элли на основе положения Джоэла в случае, когда они прячутся за укрытием

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

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

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


Режим следования в укрытии


Режим защиты в укрытии

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

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

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

И остается еще один немаловажный приоритет.

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

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

Заключение


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

Android и 3D камера. Распознавание лиц с защитой от Fraud

25.06.2020 18:18:39 | Автор: admin
Привет! Меня зовут Владимир Шальков, я Android-разработчик в Surf.

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



Системы распознавания лиц сейчас становятся всё более и более востребованными: количество устройств с функцией разблокировки по лицу растёт, так же как и количество инструментов для разработчиков.

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

Недавно, класс FingerprintManager, который использовался для разблокировки приложений по отпечатку пальцев, задепрекейтили на API 28 и выше, и разработчикам предлагается использовать BiometricPrompt. Это класс, содержит логику, связанную с биометрией, в том числе по идентификации лиц. Однако использовать его в каждом смартфоне не получится, потому что согласно информации от Google, устройство должно иметь высокий рейтинг безопасности.

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

Требования


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

Основной целью мы ставили обеспечение максимального уровня безопасности: необходимо было минимизировать возможность обхода системы распознавания лиц, например, с помощью фотографии, которую поднесли к видоискателю. Для этого решили использовать 3D-камеру Intel RealSense (модель D435i), которая имеет встроенный ToF датчик, благодаря ему можно получить все необходимые данные для построения карты глубины.

image

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

Ещё одно не менее важное ограничение работа в оффлайн режиме. Из-за этого мы не могли применять облачные сервисы для распознавания лиц. Кроме этого писать алгоритмы распознавания лиц с нуля неразумно, с учётом ограничения времени и трудозатрат. Возникает вопрос: зачем изобретать велосипед, если уже есть готовые решения? Исходя из всего выше сказанного, решили использовать библиотеку Face SDK от 3DiVi.

Получение изображения с камеры Intel RealSense


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

Чтобы начать работать с камерой Intel RealSense в Android-проекте, необходимо добавить зависимость RealSense SDK for Android OS: она является оберткой над официальной C++ библиотекой. В официальных семплах можно найти как произвести инициализацию и отобразить картинку с камер, на этом останавливаться не будем, там всё достаточно просто. Перейдём сразу к коду получения изображений:

private val pipeline = Pipeline()private val streamingHandler = Handler()private var streamRunnable: Runnable = object : Runnable {    override fun run() {        try {            FrameReleaser().use { fr ->                val frames = pipeline.waitForFrames(1000).releaseWith(fr)                val orgFrameSet = frames.releaseWith(fr)                val processedFrameSet = frames.applyFilter(align).releaseWith(fr)                val orgFrame: Frame = orgFrameSet.first(StreamType.COLOR, StreamFormat.RGB8).releaseWith(fr)                // Получаем фрейм цветного изображения                val videoFrame: VideoFrame = orgFrame.`as`(Extension.VIDEO_FRAME)                val processedDepth: Frame = processedFrameSet.first(StreamType.DEPTH, StreamFormat.Z16).releaseWith(fr)                // Получаем фрейм глубины изображения                val depthFrame: DepthFrame = processedDepth.`as`(Extension.DEPTH_FRAME)                upload(orgFrame) // Выводим на экран цветное изображение            }            streamingHandler.post(this)        } catch (e: Exception) {            Logger.d("Streaming, error: " + e.message)        }    }}streamingHandler.post(streamRunnable) // Запуск

С помощью FrameReleaser() мы получаем отдельные кадры с видеопотока, которые имеют тип Frame. К фреймам можно применять различные фильтры через applyFilter().

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

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

Преобразование фреймов в изображение


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

Формат изображений:

  • Цветное, с расширением .bmp, получаемое из VideoFrame
  • С картой глубины, имеющее расширение .tiff и получаемое из DepthFrame

Чтобы осуществить преобразования нам понадобится библиотека компьютерного зрения с открытым исходным кодом OpenCV. Вся работа заключается в формировании объекта Mat и конвертировании его в нужный формат:

fun videoFrameToMat(videoFrame: VideoFrame): Mat {    val colorMat = Mat(videoFrame.height, videoFrame.width, CvType.CV_8UC3)    val returnBuff = ByteArray(videoFrame.dataSize)    videoFrame.getData(returnBuff)    colorMat.put(0, 0, returnBuff)    val colorMatNew = Mat()    Imgproc.cvtColor(colorMat, colorMatNew, Imgproc.COLOR_RGB2BGR)    return colorMatNew}

Для сохранения цветного изображения необходимо сформировать матрицу с типом CvType.CV_8UC3, после конвертировать в BRG, чтобы цвета имели нормальный оттенок.
Используя метод Imgcodecs.imwrite, сохранить на устройстве:

fun VideoFrame.saveToFile(path: String): Boolean {    val colorMat = videoFrameToMat(this)    return Imgcodecs.imwrite(path + COLOR_IMAGE_FORMAT, colorMat)}

Тоже самое необходимо проделать для DepthFrame с тем лишь отличием, что матрица должна быть с типом CvType.CV_16UC1, так как изображение будет строиться из кадра, который содержит данные с датчика глубины:

fun depthFrameToMat(depthFrame: DepthFrame): Mat {    val depthMat = Mat(depthFrame.height, depthFrame.width, CvType.CV_16UC1)    val size = (depthMat.total() * depthMat.elemSize()).toInt()    val returnBuff = ByteArray(size)    depthFrame.getData(returnBuff)    val shorts = ShortArray(size / 2)    ByteBuffer.wrap(returnBuff).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(shorts)    depthMat.put(0, 0, shorts)    return depthMat}

Сохранение изображения с картой глубины:

fun DepthFrame.saveToFile(path: String): Boolean {    val depthMat = depthFrameToMat(this)    return Imgcodecs.imwrite(path + DEPTH_IMAGE_FORMAT, depthMat)}

Работа с библиотекой Face SDK


Face SDK имеет большой объём программных компонентов, но большая часть из них нам не нужна. Библиотека так же, как и RealSense SDK написана на C++ и имеет обёртку, чтобы было удобно работать под Android. Face SDK не бесплатна, но если вы разработчик, то вам выдадут тестовую лицензию.

Большинство компонентов библиотеки настраиваются с помощью XML конфигурационных файлов. В зависимости от конфигурации, будет применяться тот или иной алгоритм.
Чтобы начать работать необходимо создать экземпляр класса FacerecService, он используется при инициализации других компонентов, в параметрах передается путь до DLL библиотек, конфигурационных файлов и лицензии.

Далее, используя этот сервис, нужно создать объекты классов FacerecService.Config и Capturer:

private val service: FacerecService = FacerecService.createService(                dllPath,                confDirPath,                onlineLicenseDir        )private val confManual: FacerecService.Config = service.Config("manual_capturer.xml")private val capturerManual: Capturer = service.createCapturer(confManual)

Класс Capturer используется для распознавания лиц. Конфигурация manual_capturer.xml означает, что мы будем использовать алгоритмы из библиотеки OpenCV это детектор фронтальных лиц Viola-Jones, для распознавания используются признаки Хаара. Библиотека предоставляет готовое множество XML файлов с конфигурациями, отличающихся по характеристикам качества распознавания и времени работы. Менее быстрые методы имеют лучшие показатели по качеству распознавания. Если нам нужно распознавать лица в профиль, то следует использовать другой конфигурационный XML файл common_lprofile_capturer.xml. Конфигов достаточно много, с ними можно подробнее ознакомиться в документации. В нашем случае необходимо было использовать конфиг common_capturer4_singleface.xml это конфигурация с пониженным порогом качества в результате использования которой, всегда будет возвращаться не более одного лица.

Чтобы найти лицо на изображении применяется метод capturerSingleFace.capture(), в который передаётся массив байтов картинки, которая содержит лицо человека:

fun createRawSample(imagePath: String): RawSample? {    val imageColorFile = File(imagePath)    val originalColorByteArray = ImageUtil.readImage(imageColorFile)    return capturerSingleFace.capture(originalColorByteArray).getOrNull(0)}

Объект RawSample хранит информацию о найденном лице и содержит набор различных методов, например если вызвать getLandmarks(), то можно получить антропометрические точки лица.

Принадлежность лица реальному человеку


Чтобы определить реальный ли человек находится в кадре, а не фотография, приставленная к камере детекции лиц, библиотека Face SDK, предоставляет модуль DepthLivenessEstimator, он возвращает enum с одним из четырех значений:

  • NOT_ENOUGH_DATA слишком много отсутствующих значений на карте глубины
  • REAL наблюдаемое лицо принадлежит живому человеку
  • FAKE наблюдаемое лицо является фотографией
  • NOT_COMPUTED не удалось произвести вычисления

Инициализация модуля:

val depthLivenessEstimator: DepthLivenessEstimator = service.createDepthLivenessEstimator(           "depth_liveness_estimator_cnn.xml"   )

Определение принадлежности лица реальному человеку:

fun getLivenessState(            rgbPath: String,            depthPath: String    ): DepthLivenessEstimator.Liveness {        val imageColorFile = File(rgbPath + COLOR_IMAGE_FORMAT)        val originalColorByteArray = readImage(imageColorFile)        val originalRawSimple = capturerSingleFace.capture(originalColorByteArray).getOrNull(0)        val originalRawImage = RawImage(                SCREEN_RESOLUTION_WIDTH,                SCREEN_RESOLUTION_HEIGHT,                RawImage.Format.FORMAT_BGR,                originalColorByteArray        )        val originalDepthPtr = Natives().readDepthMap(depthPath + DEPTH_IMAGE_FORMAT)// параметры камеры        val hFov = 69.4f         val vFov = 42.5f         val depthMapRaw = DepthMapRaw()        with(depthMapRaw) {            depth_map_rows = originalRawImage.height            depth_map_cols = originalRawImage.width            depth_map_2_image_offset_x = 0f            depth_map_2_image_offset_y = 0f            depth_map_2_image_scale_x = 1f            depth_map_2_image_scale_y = 1f            horizontal_fov = hFov            vertical_fov = vFov            depth_unit_in_millimeters = 1f            depth_data_ptr = originalDepthPtr            depth_data_stride_in_bytes = (2 * originalRawImage.width)        }        return depthLivenessEstimator.estimateLiveness(originalRawSimple, depthMapRaw)}

Метод getLivenessState() в качестве параметров получает ссылки на изображения: цветное и с картой глубины. Из цветного мы формируем объект RawImage, этот класс предоставляет данные изображения в сыром виде и опциональной информации для обрезки. Из карты глубины формируется DepthMapRaw карта глубины, отрегистрированная в соответствии с исходным цветным изображением. Это необходимо сделать, чтобы использовать метод estimateLiveness(originalRawSimple, depthMapRaw), который вернёт нам enum с информацией реальное ли лицо было в кадре.

Стоит обратить внимание на формирование объекта DepthMapRaw. Одна из переменных имеет наименование depth_data_ptr это указатель на данные глубины, но как известно в Java нет указателей. Для получения указателя надо воспользоваться JNI функцией, которая в качестве аргумента принимает ссылку на изображение с картой глубины:

extern "C" JNIEXPORT jlong JNICALL Java_ru_face_detect_Natives_readDepthMap(JNIEnv *env, jobject obj, jstring jfilename){    const char * buf = env->GetStringUTFChars(jfilename, NULL);    std::string filename = buf;    env->ReleaseStringUTFChars(jfilename, buf);    cv::Mat depth_map = cv::imread(filename, -1);    unsigned char * data = new unsigned char[depth_map.rows * depth_map.cols * depth_map.elemSize()];    memcpy(data, depth_map.data, depth_map.rows * depth_map.cols * depth_map.elemSize());    return (jlong) data;}

Для вызова кода написанного на C в Kotlin, необходимо создать класс такого типа:

class Natives {    init {        System.loadLibrary("native-lib")    }    external fun readDepthMap(fileName: String): Long}

В System.loadLibrary() передаётся наименование файла .cpp, где содержится метод readDepthMap(), в нашем случае это native-lib.cpp. Также необходимо поставить модификатор external, который означает, что метод реализован не в Kotlin.

Идентификация лица


Не менее важная функция определение личности найденного лица в кадре. Face SDK позволяет реализовать это с помощью модуля Recognizer. Инициализация:

val recognizer: Recognizer = service.createRecognizer(        "method8v7_recognizer.xml",        true,        true,        true)

Мы используем конфигурационный файл method8v7_recognizer.xml, который имеет самую высокую скорость распознавания, но при этом качество распознавания ниже, чем у методов 6v7 и 7v7.

Перед тем, как идентифицировать лицо, необходимо создать список лиц, используя который мы будем находить соответствие по образцу фотографии. Для реализации, нужно создать Vector из объектов Template:

var templates = Vector<Template>()val rawSample = createRawSample(imageUrl)val template = recognizer.processing(rawSample)templates.add(template)

Для создания Template используется метод recognizer.processing(), в качестве параметра передаётся RawSample. После того, как список с шаблонами лиц сформирован, его необходимо добавить в Recognizer и сохранить полученный TemplatesIndex, который нужен для быстрого поиска в больших базах:

val templatesIndex = recognizer.createIndex(templates, SEARCH_THREAD_COUNT)

На этом этапе, нами был сформирован объект Recognizer, который содержит всю необходимую информацию, чтобы произвести идентификацию:

fun detectFaceSearchResult(rgbPath: String): Recognizer.SearchResult {    val rawSample = createRawSample(rgbPath + COLOR_IMAGE_FORMAT)    val template = recognizer.processing(rawSample)    val searchResult = recognizer.search(            template,            templateIndex,            searchResultCount,            Recognizer.SearchAccelerationType.SEARCH_ACCELERATION_1    ).firstElement()    return searchResult}

Функция recognizer.search() вернёт нам результат, где мы можем получить индекс найденного элемента, сопоставить его со списком лиц из базы данных и идентифицировать персону. Кроме этого, мы можем узнать величину сходства, действительное число от 0 до 1. Данная информация предоставлена в классе Recognizer.MatchResult, переменная scope:

val detectResult = detectFaceSearchResult(rgbPath)// Величина сходства шаблонов - действительное число от 0 до 1.val scoreResult = detectResult.matchResult.score

Заключение


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

В Android SDK, постепенно добавляется API, который позволяет разработчику работать с системой идентификации лиц, однако сейчас всё находится на начальном этапе развития. А если говорить о системе контроля доступа с использованием планшета на Android, библиотеки Face SDK и 3D камеры Intel RealSense, хочется отметить большую гибкость и расширяемость. Нет привязки к устройству, камеру можно подключить к любому современному смартфону. Можно расширить линейку поддерживаемых 3D камер, а также подключить несколько штук к одному устройству. Есть возможность адаптировать написанное приложение под Android Things, и использовать его в своем умном доме. Если посмотреть на возможности библиотеки Face SDK, то с её помощью мы можем добавить идентификацию лиц в непрерывном видеопотоке, определять пол, возраст и эмоции. Эти возможности дают простор для множества экспериментов. А мы на своём опыте можем сказать: не бойтесь экспериментов и бросайте вызов себе!
Подробнее..

Из песочницы Часть 1. Dракоши. Эволюционная модель мультиагентной системы на базе нейронной сети. Введение

21.06.2020 18:22:59 | Автор: admin

Идея


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

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

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


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

  1. Моделируется эволюция популяции агентов Dракош, представляющих собой искусственные нейронные сети, структура и параметры которых определяются хромосомами агента;
  2. Агенты могут перемещаться и взаимодействовать в торообразном двумерном пространстве (противоположные стороны квадрата замкнуты друг на друга). При этом пространство разбито на ячейки, в которых может одновременно размещаться не более двух агентов;
  3. Время в мире Dракош дискретно;
  4. В пространстве неравномерно распределяется ограниченный ресурс cake, который служит источником энергии агентам.
  5. Агенты могут выполнять действия (движение, питание, размножение, атака), при этом расходуется запасенная ранее энергия;
  6. Решение о следующем действии является выходным сигналом нейронной сети. Входные сигналы поступают от трех видов рецепторов: глаза для наблюдения еды в окрестности агента, глаза для наблюдения других агентов, рецептор оставшегося запаса энергии;
  7. В популяции агентов реализуется половое размножение, с кроссинговером хромосом и их мутациями. В ходе мутаций случайным образом изменяется генотип агентов, который определяет размер, структуру и параметры их нейронной сети;
  8. Агенты, у которых запас энергии стал меньше минимально необходимого для выживания погибают. Остаток энергии, который был у агента на момент смерти выпадает в ячейку пространства в виде лепешек.

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

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

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

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

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

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

Вселенная Dракош


Агенты обитают в двумерном пространстве, которое свернуто в тор, что бы у него не было краев и агенты всегда могли двигаться, не натыкаясь на препятствия (Рис. 1).

image
Рисунок 1.Тор. Для получения развертки тор разрезается вдоль выделенных окружностей и разворачивается на плоскость в виде прямоугольника.

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

Кроме агентов в клетках находится питательный ресурс cake, который могут поедать агенты. Еда генерируется в клетках в соответствии со специальным алгоритмом.

Еда для Dракош


В каждой клетке может находится произвольное количество целых cake (рис. 2). За один такт времени агент может съесть один cake, это пополнит его запасы энергии на 50 J энергетическая емкость пищи.

image
Рисунок 2. Пример расположения порции пищи в пространстве. Серые клетки не содержат еды, тёмно-синие содержат 1 cake, жёлтая 15 cake.

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

  • уменьшается при поедания агентами;
  • уменьшается из-за деградации части cake;
  • увеличивается в результате разрастания;
  • увеличивается, когда умирают агенты;
  • увеличивается при успешных атаках одних агентов на других, в результате которых в пространство выпадают cake.

Среднее суммарное количество пищи в пространстве зависит от плотности заселения агентами. Когда плотность заполнения пространства агентами меньше одного агента на одну клетку (1 Dr/cell), то стационарная плотность еды в пространстве составляет 20 cake/cell (или 1000 J/cell в энергетических единицах). Но если агентов становится больше одного на клетку стационарное количество пищи в пространстве, которое может поддерживаться в пространстве, будет уменьшается. И когда агенты полностью заполняют пространство (2 Dr/cell) стационарное количество пищи становится равным нулю (рис. 3).

image
Рисунок 3. Зависимость стационарного количества пищи от плотности агентов в пространстве

Если количество пищи становится меньше заданного стационарного значения, то в конце текущего такта времени в пространстве будет сгенерировано 50% текущего недостатка пищи. Необходимый объем пищи генерируется порциями в случайном месте, случайного объема (но не меньше 250 cake). Такие порции генерируются пока не будет выложено в пространство необходимое количество еды.

Если количество пищи превысит заданное стационарное значение, то в конце текущего такта времени количество пищи в случайно выбранных группах смежных клеток будет уменьшено. Группа состоит из 19 клеток (рис. 4). Количество таких групп выбирается таким что бы избыток пищи уменьшился на 10%. Это можно интерпретировать как невозможность поддерживать избыточное количество пищи в пространстве, в результате чего она деградирует. C течением времени количество пищи в пространстве будет стремится к заданному стационарному значению.

Такой алгоритм генерирования пищи позволяет не допустить перенаселения.

Устройство Dракош


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

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

Каждый агент имеет по три хромосомы, две из которых задают параметры его нейронной сети:

  1. Хромосома WEIGHTS матрица весов нейронов скрытого слоя;
  2. Хромосома BIAS вектор смещений нейронов скрытого слоя;
  3. Хромосома COLOR задает три компонента цвета агента красный, зеленый, синий. Эти три хромосомы наследуются при размножении.

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

  • наличия пищи в соседних ячейках (19 рецепторов) позволяют агенту получать информацию о количестве пищи рядом с ним (рис. 4);
  • наличия агентов в соседних ячейках (19 рецепторов) позволяют агенту получать информацию о количестве других агентов рядом с ним (рис. 4);
  • цвета соседнего агента (3 рецептора) и собственного цвета (3 рецептора) позволяют агенту получать информацию о цвете второго агента в клетке, если такой есть и о своем цвете;
  • текущего запаса энергии у агента (1 рецептор);


Рисунок 4. Схема ячеек, которые видны агенту, показан фиолетовым кругом в центре. В каждую из этих клеток агент может совершить шаг. С 1й по 6ю длина шага равна одной клетке. С 7й по 18ю шаг длиной в две клетки.

Выходы нейронной сети соединены с группой эффекторов, состояние которых определяет действие, которое агент совершит в текущий такт времени. Агенты могут совершить одно из шести действий: pass, step 1, step 2, eat, attack, sex.

Pass бездействие агент не совершает никаких действий, оставаясь на месте. Это действие всегда успешно.

Step 1, Step 2 агент совершает попытку шагнуть в одну из 18 соседних клеток (рис. 4). Step 1 шаг длинной в одну клетку. Step 2 шаг длиной в две клетки. Если в выбранной агентом клетке есть свободное место, то действие успешно и агент перемещается на новое место, иначе действие не успешно и агент остается на старом месте.

Eat попытка скушать пищу в текущей клетке. Если в клетке есть еда, действие успешно и агент съедает 1 cake и увеличивает свой запас энергии на 50 J.

Attack попытка ударить агента в текущей клетке. Если в клетке с агентом есть второй, то действие успешно и соседний агент теряет 150 J и в ячейку выпадает 3 cake.

Sex агент пытается спарится с агентом в текущей клетке. Спаривание будет успешным только в том случае если в ячейке находится еще один агент, и он так же совершает действие Sex. В этом случае оба агента-родителя теряют по 1/3 своего запаса энергии (в дополнение к затратам энергии на функционирование нейронной сети и совершение действия, см. табл. 1). Новорожденный агент получает по 1/3 запаса энергии от каждого родителя. Действие будет успешным если новорожденный получит достаточно энергии для выживания больше 500 J, иначе он сразу же умирает. Третьим условием успешности действия Sex является выбор агентом-родителем (который дал большую часть энергии самки) соседней ячейки со свободным местом для размещения новорожденного агента. В случае если в этой ячейке нет свободного места, то действие Sex считается не успешным, и новорожденный погибает. В случае гибели новорожденного его запас энергии превращается в еду и помещается в клетку с родителями.

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

Таблица 1. Энергетическая стоимость действий агентов
Действие Успешность Изменение запаса энергии агента, J
Pass + e0
Step 1 + e0 9
Step 2 + e0 24
Step 1/2 - e0 4
Eat + + 50 e0 3
Eat - e0 3
Attack e0 49
Sex + / - e0 34

Самым дешевым с точки зрения энергозатрат является действие Pass. Количество затрачиваемой на бездействие энергии (e0) определяется размером нейронной сети агента. Чем больше нейронов в скрытом слое, тем больше затраты энергии на функционирование нейронной сети. Эти потери энергии имеют место и при любом другом выбранном действии. Зависимость фоновых энергозатрат от количества нейронов позволит ограничить рост вычислительных затрат без ощутимого роста приспособленности агентов.

Когда запас энергии агента становится меньше 500 J агент погибает, и остаток его энергии выбрасывается в клетку, которую он занимал.

Энергетическая модель вселенной Dракош


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

image
Рисунок 5. Схема потоков энергии в модели Dракош

Еда в пространство поступает извне системы с потоком food in. Так же есть два внутренних потока пополняющих запас еды в пространстве: harm, dead. Первый из них обусловлен потерями энергии агентами, которые подверглись атаке соседнего агента. Потерянная ими энергия выпадает в виде эквивалентного количества cake в клетке с потерпевшим агентом. Второй поток еда, появляющаяся в клетке после смерти агента, количество которой эквивалентно остатку энергии агента перед смертью.

Еда из пространства потребляется агентами, которые успешно совершают действие Eat поток eating. Затраченная на совершение действий энергия покидает систему поток used. Второй путь, которым энергия покидает систему поток spoiled food, который связан с деградирующим избытком еды в пространстве.

Естественный отбор


Во вселенной Dракош действует естественный отбор.

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

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

Что посмотреть на (почти уже не) карантине? Подборка материалов от Технострима (часть 7)

19.06.2020 20:14:58 | Автор: admin


Продолжаем нашу подборку интересных материалов (1, 2, 3, 4, 5, 6). На этот раз предлагаем послушать курс об алгоритмах интеллектуальной обработки больших объёмов данных и два новых выпуска ток-шоу для айтишников Oh, my code с Павлом Dzirtik Щербининым.

Алгоритмы интеллектуальной обработки больших объемов данных (Data Mining), осень 2019


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

Программа лекций:

  • Задачи Data Mining. Постановка задачи машинного обучения. Какие бывают признаки. Типы задач машинного обучения. Разбор прикладных задач. Сравниваем алгоритмы. Переобучение и обобщающая способность. Как обнаружить и бороться с переобучением?
  • Метрики классификации и регрессии. Метод ближайшего соседа. Базовые понятия. Пример переобучения. Гипотеза компактности. Гипотеза непрерывности. Метрические алгоритмы. Примеры классификации и регрессии. Структурные параметры. Скользящий контроль. Оценка качества классификации и регрессии. Метрики алгоритмов. Нормировка признаков. Расстояния на категориальных признаках. Изучение метрик. Уменьшение размерности. Отбор признаков. Сложность алгоритмов. Приближенный поиск ближайших соседей.
  • Линейные модели регрессии. Параметризация. Представление. Оценка. Оптимизация. Нормализация данных. Регуляризация. Разреженные данные.
  • Логистическая регрессия. Линейные модели классификации. Построение разделяющей поверхности. Отступ. Функционал эмпирического риска. Аппроксимация логистической регрессии. Сигмоида. Логистическая регрессия. Math Recap: Метод Максимального Правдоподобия. Recap: Метрическая логика. Порождающая модель p(x). Метрики оценки. Как подобрать порог.
  • Задачи классификации. SVM. Многоклассовая классификация: one-vs-all. Как предсказать класс? Многоклассовая классификация: softmax. Метрики многоклассовой оценки. Геометрическая интерпретация. Построение разделяющей поверхности. Отступ. Функционал эмпирического риска. Аппроксимация SVM, Hinge Loss. SVM: Неразделимый случай. Штрафы за ошибки. SVM: переход к двойственной задаче. Условия Куна-Таккера (ККТ). Нелинейная классификация SVM ядра. Kernel Trick.
  • Решающие деревья. Определение бинарного решающего дерева. Варианты разделяющих функций. Как строить деревья. Критерии информативности для классификации. Как выглядят меры неопределенности. Критерии информативности для регрессии. Критерии останова. Обработка пропущенных значений. Обработка категориальных признаков. Специальные алгоритмы построения деревьев. Композиции деревьев. Бэггинг. Random Forest. Extra Trees (Extremely Randomized Trees).
  • Обработка естественного языка. Применение NLP в Почте Mail.ru. Предобработка: токенизация, лемматизация, стемминг. Признаковое описание текста: BOW, TF-IDF, CountVectorizer, HashingVectorizer. Дистрибутивная семантика: word2vec, fastText. Поиск околодубликатов: minhash, simhash, LSH.
  • Байесовские методы машинного обучения. Оптимальное байесовское правило. Вероятностное описание моделей. Байесовский подход. Оптимальный байесовский классификатор. Преобразовываем оптимальное байесовское правило. Как оценить p(y). Смысл формулы оптимального байесовского классификатора. Методы восстановления плотности. Наивный байесовский классификатор. Сглаживание. ММП vs Bayes. Логистическая регрессия. Регуляризация. Предсказание.
  • Задача кластеризации. Какая бывает кластеризация? Метрики качества кластеризации. Алгоритм k-means. Выбор числа кластеров. Начальная инициализация. K-medoids. Основные положения иерархических алгоритмов. Расстояния между кластерами: Алгоритм k-means ++. Формулы Ланса-Вильямса. Плотностные алгоритмы. Кластер моего кластера мой кластер.
  • ЕМ-алгоритм. Метод максимума правдоподобия. Экспоненциальный класс. Распределения из экспоненциального класса. Модели со скрытыми переменными. Тематические модели. Вариационная нижняя оценка. ЕМ-алгоритм. Дивергенция Кульбака-Лейблера. E-шаг. М-шаг. Метод Ньютона. Многомерное нормальное распределение. Смесь распределений. Правдоподобие. EM для смеси нормальных распределений. GMM как генеративная модель. Байесовский классификатор как генеративная модель.

Ссылки на видеозаписи.

Будущее голосовых помощников


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


Егор Толстой человек и Подлодка


Егор Толстой Product manager в Kotlin и ведущий подкаста Podlodka расскажет про язык программирования как продукт. Как сегментируются программисты, как язык продвигается и растет. Как устроены процессы разработки в команде Kotlin. И зачем тут продакт-менеджеры.


Напомним, что актуальные лекции и мастер-классы о программировании от наших IT-специалистов по-прежнему публикуются на канале Технострим. Подписывайтесь, чтобы не пропустить новые лекции!
Подробнее..

Искусственный интеллект для анализа изображений и видео. Вебинар от Инфосистемы Джет

23.06.2020 12:07:45 | Автор: admin

Интересуетесь темой ML? Тогда вам сюда Зарегистрироваться
26 июня в 15:00 в прямом эфире ведущий эксперт Центра машинного обучения расскажет об опыте разработки собственных решений в компании, а также о применении IBM Visual Insights и возможностях по совмещению обоих подходов.

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

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

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

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

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

Кому будет интересно


  • Всем, кому интересна наука о данных и ее практическое применение
  • Руководителям отдела IT, CDO
  • Руководителям отделов аналитики и математического моделирования
  • Руководителям отдела маркетинга (ритейл)

Спикер


Александра Царева, ведущий эксперт Центра машинного обучения Инфосистемы Джет
Регистрируйтесь и присылайте вопросы!
Подробнее..

Перевод - recovery mode Что должен знать Data Scientist про когнитивные искажения ИИ

25.06.2020 16:23:50 | Автор: admin
image

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

Так, вашему вниманию могут быть представлены следующие примеры определения отклонений:

  • В статистике: искажение (bias) это разница между ожиданием оцениваемой величины и ее значением. Такое определение жутко формально, так что позвольте мне его перевести. Искажение описывает результаты, которые систематически не соответствуют ожиданиям. Представьте себе стрельбу из лука, у которого сбит прицел. Высокий уровень искажения не означает, что вы стреляете куда угодно (в этом случае речь идет о дисперсии), суть будет заключаться в том, что даже идеальный лучник будет постоянно промахиваться. В данном контексте слово искажение несет в себе небольшой эмоциональный оттенок.
  • В сборе данных (а также в статистике): когда вы собираете данные, ваша выборка может не являться репрезентативной для интересующей вас совокупности. Искажение выборки в данном случае формальный термин. Такое искажение означает, что ваши статистические результаты могут содержать ошибки.
  • В когнитивной психологии: систематическое искажение от рационального. Каждое слово в этом содержательном определении, кроме от, заряжено нюансами, специфическими для данной области. Перевод на понятный язык: речь идет об удивительном факте, заключающемся в том, что ваш мозг развил определенные способы реакции на различные объекты, и психологи изначально сочли эти реакции искажениями. Список когнитивных искажений поражает.
  • В нейросетевых алгоритмах: По сути, речь идет об отрезке, отсекаемом с координатной оси. (искажение звучит круче, чем школьные математические термины, да?)
  • В социальных и физических науках: Любое из множества явлений, связанных с чрезмерным влиянием прошлых/актуальных условий на решения, принимаемые в настоящее время. Примерами также являются культурные предрассудки и инфраструктурная предвзятость.
  • В электронике: Фиксированное постоянное напряжение или ток, приложенные в цепи с переменным током.
  • В географии: Биас, в Западной Вирджинии. (от англ. Bias) (Я слышал, что Биас есть и в Франции).
  • В мифологии: Любой из этих древних греков.
  • О чем думает большинство экспертов по ИИ: речь об алгоритмических искажение идет тогда, когда компьютерная система отражает подсознательные ценности человека, который ее создал (разве не все, что создают люди, отражает подсознательные ценности?).
  • О чем думает большинство людей? О том, что наш опыт искажает наше восприятие и реакцию на информацию, особенно в контексте несправедливого отношения к другим людям и плохих поступков вообще. Некоторые люди используют это слово как синоним предрассудков.


Ох. У термина искажение много значений, и некоторые из них более острые, чем другие.

О чем идет речь в области машинного обучения и ИИ?


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

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

Весь смысл ИИ в том, чтобы дать вам возможность объяснить свои пожелания компьютеру на примерах (данных!), а не в инструкциях. Каких примерах? Это ваш выбор в качестве учителя. Датасеты это учебники, по которым ваш ученик может учиться. И знаете что? У учебников есть авторы-люди, как и у наборов данных.

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


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

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

Искажения исходят не от алгоритмов ИИ, они исходят от людей.


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

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Нейроинтерфейс личный опыт использования в практических задачах

27.06.2020 16:12:41 | Автор: admin
Постараюсь рассказать про использование нейроинтерфейса для получения дополнительных данных в процессе обучения персонала (контролем необходимых психофизических возможностей персонала).

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



На самом деле нейроинтерфейс это старая добрая электроэнцефалография (ЭЭГ)).
Оборудование можно изготовить самостоятельно, в интернете достаточно много схема, но это слабо подходит для коммерческих задач. Мы, например, для создания нейроинтерфейса используем аппаратное и программное обеспечение компании OpenBCI (США). Предупреждение очень много проблем на таможне, т.к. по мнению наших это медицинское оборудование! Это конечно не так, но доказывать бесполезно.

image

Вот схема как это работает

image

Обучение и контроль персонала проходит в такой шапке поверх шлема HTC Vive.
При надевании шлема с нейфроинтерфейсом программа (при помощи нейронной сети) анализирует колебания, выделяемые в общей электрической активности головного мозга ритмы головного мозга. Это принимается за 0, т.е. спокойное состояние человека.

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

image

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

image

На видео можно посмотреть что происходит... youtu.be/fhjTsFUcyew

В это время нейронная сеть выдает дополнительные данные в процессе обучения и оценки знаний умений навыков (более 30 показателей):
  • Уровень стресса, влияние стресса на точность и время принятия решения и выполняемых действий.
  • Способность длительное время сохранять устойчивое внимание, несмотря на усталость и посторонние раздражители.
  • Умение распределять внимание при выполнении нескольких действий, функций, задач.
  • Способность вести наблюдения за большим количеством объектов одновременно.
  • Способность к быстродействию в условиях дефицита времени.
  • Эмоциональная устойчивость при принятии ответственных решений.
  • Быстрая адаптация к новым условиям.
  • Способность к длительной умственной работе без ухудшения качества и снижения темпа.


image
-штатное ПО OpenBCI

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

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

image

Если данная статья вызовет интерес буду продолжать публиковать это направление.

Подробнее..

Книга Глубокое обучение в картинках. Визуальный гид по искусственному интеллекту

30.06.2020 16:15:52 | Автор: admin
imageПривет, Хаброжители! Глубокое обучение стало мощным двигателем для работы с искусственным интеллектом. Яркие иллюстрации и простые примеры кода избавят вас от необходимости вникать в сложные аспекты конструирования моделей глубокого обучения, делая сложные задачи доступными и увлекательными.

Джон Крон, Грант Бейлевельд и замечательный иллюстратор Аглаэ Бассенс используют яркие примеры и аналогии, которые позволяют объяснить, что такое глубокое обучение, почему оно пользуется такой популярностью и как эта концепция связана с другими подходами к машинному обучению. Книга идеально подойдет разработчикам, специалистам по обработке данных, исследователям, аналитикам и начинающим программистам, которые хотят применять глубокое обучение в своей работе. Теоретические выкладки прекрасно дополняются прикладным кодом на Python в блокнотах Jupyter. Вы узнаете приемы создания эффективных моделей в TensorFlow и Keras, а также познакомитесь с PyTorch.

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


СЕТЬ ПРОМЕЖУТОЧНОЙ ГЛУБИН НА ОСНОВЕ KERAS


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

Первые несколько этапов создания сети промежуточной глубины в блокноте Jupyter intermediate_net_in_keras.ipynb идентичны этапам создания ее предшественницы неглубокой сети. Сначала загружаются те же самые зависимости Keras, точно так же вносится и обрабатывается набор данных MNIST. Как можно увидеть в листинге 8.1, самое интересное начинается там, где определяется архитектура нейронной сети.

Листинг 8.1. Код, определяющий архитектуру нейронной сети с промежуточной глубиной

model = Sequential()model.add(Dense(64, activation='relu', input_shape=(784,)))model.add(Dense(64, activation='relu'))model.add(Dense(10, activation='softmax'))

Первая строка в этом фрагменте кода, model = Sequential(), та же, что и в предыдущей сети (листинг 5.6); это экземпляр объекта модели нейронной сети. В следующей строке начинаются расхождения. В ней мы заменили функцию активации sigmoid в первом скрытом слое функцией relu, как было рекомендовано в главе 6. Все остальные параметры первого слоя, кроме функции активации, остались прежними: он все так же состоит из 64 нейронов, и прежней осталась размерность входного слоя 784 нейрона.

Другое существенное изменение в листинге 8.1 по сравнению с неглубокой архитектурой в листинге 5.6 заключается в наличии второго скрытого слоя искусственных нейронов. Вызовом метода model.add() мы без всяких усилий добавляем второй слой Dense с 64 нейронами relu, оправдывая слово intermediate (промежуточная) в имени блокнота. Вызвав model.summary(), можно увидеть, как показано на рис. 8.9, что этот дополнительный слой добавляет 4160 дополнительных обучаемых параметров, по сравнению с неглубокой архитектурой (см. рис. 7.5). Параметры можно разбить на:

  • 4096 весов, соответствующих связям каждого из 64 нейронов во втором скрытом слое с каждым из 64 нейронов в первом скрытом слое (64 64 = 4096);
  • плюс 64 смещения, по одному для каждого нейрона во втором скрытом слое;
  • в результате получается 4160 параметров: nпараметров = nw + nb = 4096 + 64 =
    = 4160.

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

Листинг 8.2. Код компиляции нейронной сети с промежуточной глубиной

model.compile(loss='categorical_crossentropy',                      optimizer=SGD(lr=0.1),                      metrics=['accuracy'])

image

Эти строки из листинга 8.2:

  • задают функцию стоимости на основе перекрестной энтропии: loss='categorical_crossentropy' (в неглубокой сети использовалась квадратичная стоимость loss='mean_squared_error');
  • задают метод стохастического градиентного спуска для минимизации стоимости: optimizer=SGD;
  • определяют гиперпараметр скорости обучения: lr=0.1(1);
  • указывают, что в дополнение к обратной связи о потерях, которая предлагается библиотекой Keras по умолчанию, мы также хотим получить обратную связь о точности модели: metrics=['accuracy'](2).

(1) Вы можете попробовать увеличить скорость обучения на несколько порядков, а затем уменьшить ее на несколько порядков и понаблюдать, как это повлияет на обучение.

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

Наконец, мы обучаем промежуточную сеть, выполняя код в листинге 8.3.
Листинг 8.3. Код обучения нейронной сети с промежуточной глубиной

model.fit(X_train, y_train,              batch_size=128, epochs=20,              verbose=1,              validation_data=(X_valid, y_valid))

Единственное, что изменилось в обучении промежуточной сети по сравнению с неглубокой сетью (см. листинг 5.7), это уменьшение на порядок гиперпараметра epochs с 200 до 20. Как вы увидите далее, более эффективная промежуточная архитектура требует намного меньше эпох для обучения.

image

На рис. 8.10 представлены результаты первых четырех эпох обучения сети. Как вы наверняка помните, наша неглубокая архитектура достигла плато на уровне 86%-й точности на проверочных данных после 200 эпох. Сеть промежуточной глубины значительно превзошла ее: как показывает поле val_acc, сеть достигла 92.34%-й точности уже после первой эпохи обучения. После третьей эпохи точность превысила 95%, а к 20-й эпохе, похоже, достигла плато на уровне около 97.6%. Мы серьезно продвинулись вперед!

Разберем подробнее вывод model.fit(), показанный на рис. 8.10:

  • Индикатор процесса, показанный ниже, заполняется в течение 469 циклов обучения (см. рис. 8.5):
    60000/60000 [==============================]
  • 1s 15us/step означает, что на все 469 циклов обучения в первую эпоху потребовалась 1 секунда, в среднем по 15 микросекунд на цикл.
  • loss показывает среднюю стоимость на обучающих данных для эпохи. Для первой эпохи она равна 0.4744 и от эпохи к эпохе уверенно уменьшается методами стохастического градиентного спуска (SGD) и обратного распространения, а в конечном итоге уменьшается до 0.0332 к двадцатой эпохе.
  • acc точность классификации на обучающих данных в данную эпоху. Модель правильно классифицировала 86.37% после первой эпохи и достигла уровня выше 99% к двадцатой. Поскольку модель может переобучиться, не следует особо удивляться высокой точности в этом параметре.
  • К счастью, стоимость на проверочном наборе данных (val_loss), как правило, тоже уменьшается и в конечном итоге достигает плато на уровне 0.08 в ходе последних пяти эпох обучения.
  • Одновременно с уменьшением стоимости на проверочных данных растет точность (val_acc). Как уже упоминалось, точность на проверочных данных составила 97.6%, что значительно выше 86% у нашей неглубокой сети.

ИТОГИ


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

Более подробно с книгой можно ознакомиться на сайте издательства
Оглавление
Отрывок

Для Хаброжителей скидка 25% по купону Глубокое обучение

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Подробнее..

Категории

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

© 2006-2020, personeltest.ru