Скорость работы ИНС, MapReduce как аналог нейросети
Суббота, Ноябрь 28th, 2009Сильно ускорить работу интеллекта традиционными компьютерами не выйдет из-за квантовой природы окружающего мира. Так как любой квантовый объект в общем виде может взаимодействовать с любым количеством других объектов, нужны вычисления, экспоненциально усложняющиеся с ростом размерности задачи.
Человеческий интеллект использует то упрощение, что слабые квантовые запутанности можно не учитывать. Например, при строительстве кирпичного дома можно не учитывать, что после ухода жителей на работу у них останутся квантовые запутанности с молекулами стен из кирпича. Так происходит первое ускорение, в сравнении с полноценным моделированием квантовой физикой.
За счет игнорирования слабых связей, при N нейронах, нужно создавать не О(N*N) синапсов «все нейроны соединены со всеми», а намного меньше – у человека около (10^4)*N, где N составляет миллиарды. За счет этого же игнорирования, можно активировать не все нейроны одновременно, а лишь небольшую часть – это тоже экономия на порядок.
В общем виде, при анализе некоторого процесса, интеллект должен постоянно производить сопоставление этого процесса со всеми знаниями, которыми он уже обладает. Так как крутейшая оптимизация уже проведена – вместо N*N связей используются только значимые, и их относительно немного, то уж эти актуальные связи точно придется обрабатывать. Так называемый ассоциативный поиск, который производят нейросети. Кроме поиска, это может быть и прогнозирование – учет всех ассоциаций от данного образа с учетом развития времени. Неважно, как это называть – важно то, что при анализе всего _одного_ процесса или явления, нужно одновременное сопоставление его со всей памятью. Это сразу накладывает ограничения на скорость мышления примерно до человеческого уровня, так как все ресурсы задействуются для решения всего одной задачи.
Аналогичный процесс наблюдается при работе поисковых систем типа google. Во время построения индекса, поисковику приходится агрегировать информацию касательно всех связей некоторого слова – собирать все страницы мира, содержащие заданное слово, затем сортировать полученный список. Тут отдельное слово или отдельная страница выступает аналогом отдельного нейрона. Гиперссылки – аналог межнейронных связей. Данный алгоритм (map reduce – http://labs.google.com/papers/mapreduce.html / http://ru.wikipedia.org/wiki/MapReduce ) универсален, и тем же google используется в тысячах задач. MapReduce – аналог работы нейросети. Шаг «map» – это аналог прохождения по всем нейронам, и создание наборов «нейрон отправки сигнала, нейрон назначения сигнала, уровень сигнала». Например, «нейрон отправки»=«страница с url=xxx». «Нейрон назначения»=«содержит слово Y». «Значение активации» = «рейтинг слова на странице». Затем происходит шаг «reduce»: для всех нейронов назначения, происходит «суммирование связей и сигнала». Например, создается «нейрон»: данное слово содержится в таких-то документах, с такими-то рейтингами.
Еще один пример, из google maps: «нейрон отправки»=«географический объект с названием Х» (фирма/дом/дорога), «нейрон назначения»=«область с координатами=Y». После шага «reduce» получается «нейрон», который имеет связи со всеми объектами, которые находятся по заданным координатам (точнее, в заданной области).
Сейчас google выступает аналогом нейросети, где нейросеть читает все доступные через Интернет документы, хранит почти все связи между ними, а отдельные части нейросети хранятся в специализированном сжатом виде. Например, часть нейросети, знающая url, хранится в виде строк, а не нейронов, что на три порядка эффективнее. Часть нейросети, знающая приоритет страницы, хранится в качестве четырехбайтового или восьмибайтового числа, что на два порядка эффективнее. Часть нейросетей заменены специализированными и быстро выполнимыми алгоритмами, на основе вариаций того же MapReduce, моделирующего работу нейросети. Например, нейросети со знанием изображений выделены в одну подсистему, со знанием навигационной информации google maps – в другую.
При этом, отдача результатов поисковиком – это аналог всего нескольких циклов работы нейросети, аналог мгновенного воспоминания, с выдачей сформированного образа человеку. Если поисковый запрос содержит несколько слов, то аналог работы поисковика в нейросети – это посылка сигналов от всех слов-нейронов в запросе. «Нейроны» страниц суммируют все пришедшие сигналы с нейронов-слов с учетом рейтинга. Страницы, «потенциал действия» которых в результате суммирования максимален, выводятся в поисковый ответ первыми.
Когда google добавляет всего пару «тактов работы нейросети» в отдачу результатов поиска, все радуются. Например, добавили такт, когда слово посылает сигналы не только на страницы, на которые оно входит, но также и на «нейроны» других словоформ, а уж те в свою очередь шлют сигналы страницам – все радуются новому качеству поиска.
Я сомневаюсь, что можно придумать что-то эффективнее google без применения квантовых компьютеров. Но google только на пару тактов своей «нейросети» – на один поисковый запрос – создает трафик в сотни мегабайт. Если не хочется мириться с ограниченностью google, а хочется иметь ИИ, то нужно будет сделать две вещи: 1) унифицировать данные до формата нейросетей – чтобы разные части ИНС могли более свободно обмениваться информацией, а не работать в рамках ограничений частных реализаций алгоритмов MapReduce, пусть бы частных случаев были сотни. 2) Позволить делать «нейросети» не пару тактов, а работать все время. Уберем требование, чтобы ИИ знал весь Интернет на память, но увеличим на три порядка требование к памяти после перевода на нейросеть – получим все тот же трафик в гигабайты при только одном такте нейросети. Что приводит к все тем же требованиям по быстродействию, которые описаны выше.
На один-два порядка скорость ИИ можно повысить в сравнении с человеком за счет того, что интеллект не будет отвлекаться на еду и прочие человеческие заботы, и также будет обладать более высокой мотивацией и работать большую часть времени. Еще раз на порядок повысить скорость можно за счет того, что те образы, которые у человека являются высокоуровневыми (типа команд программирования), в ИИ можно сделать низкоуровневыми, на уровне отдельных сенсорных нейронов.
Можно ли увеличить на порядок скорость работы, заставив нейросеть одновременно анализировать не один процесс/явление, а множество? Это затруднительно по следующим причинам. Чтобы достичь качества моделирования, как и при одном процессе, нужно будет создавать в общем случае множество контекстов моделирования. Например, моделируя разговор, нужно помнить контекст – модель собеседника, модель разговора, прогнозировать развитие событий. Если моделировать много разговоров одновременно, то возникают задачи типа такой: «в контексте вычислений 1, машина поехала налево, в контексте 2 – направо. В контексте 1 она врезалась, и машина слева находится в перевернутом состоянии, в контексте 2 машина слева еще едет направо». Это ведет к взрывному росту информации, которую нужно хранить и моделировать. В общем виде контекст затрагивает всю нейросеть. В нейросетях за единственный контекст отвечает единственный потенциал действия у каждого нейрона. Каждый нейрон можно было бы наделить несколькими копиями потенциалов действия, так что одна нейросеть могла бы думать одновременно над разными процессами. При этом, в сравнении с просто еще одной копией нейросети был бы выигрыш в том, что многие данные типа общих связей и параметров нейронов общие и не дублируются. А дублируется лишь небольшая часть ИНС, касательно потенциалов действия. Но это ускорение не на порядок, а лишь в разы, причем в пределе дальнейшее линейное ускорение работы требует линейного роста объемов памяти. И исследование такой ИНС пока трудно: возникают проблемы синхронизации, когда создается связь из-за информации в одном из контекстов. Хотя такие ИНС могут применяться для случаев, когда обучение не нужно или ограничено – в разных узкоспециализированных областях.
Можно в несколько раз повысить скорость работы ИНС, если учитывать, что некоторые процессы можно было бы моделировать одновременно без создания копий мозга за счет того, что эти процессы в нейросети не пересекаются или пересекаются слабо. Но таких областей не так уж и много, а реализация таких алгоритмов мне представляется сложной.
В некоторых моделях нейросетях (типа моделей Шуклина), контекст информации о выполнении создается «на лету». Аналог – и работа современных поисковиков. Но такие ИНС на задачах постоянно работающего многоитеративного широкого ассоциативного поиска при активации значительных количество нейронов будут медленнее, так как производится лишняя работа по созданию контекста, который в других моделях нейросетей никуда не пропадает и присущ нейронам. Так, если бы вы разговаривали с google, а не задвали бы один запрос, google бы заманалась создавать трафики в десятки гигабайт. Потому, что вместо пары активных слов «отправки сигналов» нужно было бы создавать трафик от сотен образов, которые активировались с предыдущих разговоров, и суммировать сигналы на значительном проценте «нейронов».
Можно сделать предположение относительно облика поисковых систем будущего. Это нейросети, выполняющие ограниченное количество тактов на запрос, но ограничение значительно выше современного. Данные предельно унифицированы с нейросетью, но специализированные данные типа гиперссылок по прежнему хранятся в более экономичном виде. Нейросеть хранит примитивные обобщения, типа «тут слово замок употреблено в контексте строения». Нейросеть содержит классификации, так что на запрос «строение с названием Х» может найти ответ в виде текста «данный замок называется Х», так как знает, что «замок=строение». Нейросети можно задавать вопросы, информация о которых и результат обработки которых сохраняется для следующих запросов. Такая поисковая система предположительно должна быть создана после экспериментов в области нейронных вики-движков, как описано в блоге.

