Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 1558 сообщений
Cообщения с меткой

искусственный интеллект - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

Видеозаписи докладов конференции AI&BigDataLab за последние три года

Среда, 26 Апреля 2017 г. 10:25 (ссылка)





Через 2 недели, 13 мая в Одессе, команда FlyElephant будет проводить конференцию Data Science Lab. Это будет наша 4-я конференция, которая посвящена искусственному интеллекту, большим данным и науке о данных.



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


Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/327390/

Комментарии (0)КомментироватьВ цитатник или сообщество
kseniasamohina

6 причин, почему следует посетить выставку AI Conference

Понедельник, 24 Апреля 2017 г. 21:46 (ссылка)
md-eksperiment.org/post/201...conference


25 апреля в Москве состоится международная конференция по искусственному интеллекту – AI Conference.

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Приглашаем на IV конференцию по практическому применению науки о данных DataScience Lab 13 мая

Понедельник, 24 Апреля 2017 г. 13:46 (ссылка)





Команда FlyElephant приглашает всех 13 мая в Одессу на IV конференцию по практическому применению науки о данных Data Science Lab (exAI&BigDataLab).



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



Среди докладов, можно отметить следующие:




  • From bag of texts to bag of clusters (Терпиль Евгений / Павел Худан, Data Scientists / NLP Engineer at YouScan).

  • Сходство пациентов: вычистка дубликатов и предсказание пропущенных диагнозов (Виктор Сарапин, CEO at V.I.Tech)

  • Cервинг моделей, построенных на больших данных с помощью Apache Spark (Степан Пушкарев, GM (Kazan) at Provectus / CTO at Hydrosphere.io).

  • Графические вероятностные модели для принятия решений в проектном управлении (Ольга Татаринцева, Data Scientist at Eleks).

  • BioVec: Word2Vec в задачах анализа геномных данных и биоинформатики (Дмитрий Новицкий, Старший научный сотрудник в ИПММС НАНУ).

  • Optimizing ML Hyper-parameters with Bayesian Optimization (Maksym Bevza, Research Engineer at Grammarly).

  • Data Sciences и Big Data в Телекоме (Александр Саенко, Software Engineer at SoftServe/CISCO).

  • Обобщенное предпочтительное присоединение (Александр Крот, Head of Data Science at Sberbank).

  • Мониторинг модных трендов с помощью глубокого обучения и TensorFlow (Ольга Романюк, Data Scientist at Eleks).

  • Как знать всё о покупателях (или почти всё)? (Дарина Перемот, ML Engineer at SynergyOne).

  • Коррекция геометрических искажений оптических спутниковых снимков (Алексей Кравченко, Senior Data Scientist at Zoral Labs).



Среди блиц-докладов, можно отметить следующие:




  • Энтерпрайз «из коробки» (Сергей Шельпук, Head of Data Science Office at Eleks).

  • Recent deep learning approaches for speech generation (Дмитрий Белевцов, Techlead at IBDI).

  • Распределенные вычисления: использование BOINC в Data Science (Виталий Кошура, Software Developer at Lohika).

  • Применение машинного обучения при разработки HR продукта (Мамед Халилов, CEO & Founder at Morbax HR).



Полная программа конференции, все детали и регистрация по адресу: www.datascience.in.ua.



Для читателей нашего блога действует 10% скидочный промо-код: FlyElephant10.
Original source: habrahabr.ru.

https://habrahabr.ru/post/327238/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Комментарии (0)КомментироватьВ цитатник или сообщество
lj_matveychev_oleg

Автоматизацию не остановить, потому что это часть капитализма

Четверг, 21 Апреля 2017 г. 01:00 (ссылка)

0

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

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

11
Книжный магазин без касс и продавцов

Писатель Мартин Форд в интервью CNBC отметил, что открытие подобных магазинов неизбежно, а автоматизация выгодна всем — как потребителям, так и торговым предприятиям. "Случай с Amazon — это не просто попытки сократить затраты на оплату труда, это настоящий подрыв", — считает Форд.

О замене продавцов автоматизированными системами предупреждал отчет McKinsey & Co. Аналитики подчеркивали — для автоматизации магазинов и ресторанов достаточно существующих технологий, ничего изобретать не нужно. Открытие Amazon Go доказало этот тезис. Остановить процесс автоматизации уже не получится, убежден Мартин Форд: "Это часть капитализма — постоянное стремление к повышению производительности".

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

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

По прогнозам компании Forrester, рост числа умных агентов и ИИ-систем к 2021 году приведет к потере 6% рабочих мест в США. В развивающихся странах этот процесс будет не менее выраженным, а роботы займут две трети рабочих мест, утверждает доклад ООН. Ряд экспертов считает, что страхи по поводу тотальной автоматизации преувеличены. Более того, роботы смогут спасти мировую экономику, которую в ближайшие годы ждет новый вызов — рост продолжительности жизни и сокращение процента трудоспособного населения. [link]



http://matveychev-oleg.livejournal.com/5271936.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lj_matveychev_oleg

Автоматизация лишит работы даже финансистов с Уолл-стрит

Среда, 20 Апреля 2017 г. 01:01 (ссылка)

7

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

Количество рабочих мест в сфере финансов в Нью-Йорке стабильно сокращается уже несколько лет. По данным исследовательской фирмы Coalition Ltd., 10 крупнейших банков потеряли более 10 000 руководящих должностей с 2011 года. При этом число штатных работников с фиксированным доходом в этой области сократилось на 31% с 2011 года.

Даже классические обитатели Уолл-стрит — биржевые маклеры — остаются не у дел. Как сообщает The Financial Times, в 2000 году на Нью-Йоркской фондовой бирже числилось 5500 трейдеров. Теперь их осталось менее 400. Многие работают на неполную ставку. Однако большую часть работников успешно заменяют серверы, на которых запущены алгоритмы для биржевой торговли.

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

Программные инструменты проникают и в нормативно-правовую сферу. Системы от Digital Reasoning автоматизируют процесс рассмотрения мошенничества внутри компании. Программа Amelia от IpSoft помогает создавать документацию, а Narrative Science автоматически составляет отчеты по борьбе с отмыванием денег.

Стартовые позиции на Уолл-стрит обычно требуют работы с данными в поисках подходящего варианта для проведения транзакций. Эти задачи тоже автоматизируются. Стартап Kensho разработал систему, которая анализирует данные о различных рынках, а затем автоматически составляет возможные сценарии работы с этими рынками. В интервью The New York Times глава Kensho Дэниэль Нэдлер отметил, что к 2026 году от 33% до 50% финансистов потеряют свою работу из-за автоматизированного программного обеспечения.

Даже в сфере финансового консультирования начинают появляться ИИ-агенты. Традиционные фирмы с Уолл-стрит пока не используют робоконсультантов для работы с крупными клиентами, но мелкие инвесторы все чаще имеют дело с программами, а не с людьми. WealthNavi, Albert и Digit — три демократичных приложениях для инвестирования, рассчитанных на обычных пользователей со средним достатком.

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



http://matveychev-oleg.livejournal.com/5266151.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Понтифик_Иванов

Искусственный интеллект: эффективная раскрутка профиля инстаграм

Понедельник, 17 Апреля 2017 г. 17:05 (ссылка)
md-eksperiment.org/post/201...-instagram

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

Чей AI-проект получит финансирование? Узнай на грандиозном стартап-батле AI Conference!

Понедельник, 17 Апреля 2017 г. 13:27 (ссылка)
md-eksperiment.org/post/201...conference


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

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

[Перевод] Как говорить с искусственным интеллектом?

Суббота, 15 Апреля 2017 г. 11:22 (ссылка)



Перевод поста Стивена Вольфрама (Stephen Wolfram) "How Should We Talk to AIs?".

Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации



Содержание



Вычисления — это сила

Язык вычислительного мышления

Понимание ИИ

Что будет делать ИИ?

Постановка целей для ИИ

Разговор одного ИИ с другим

Сбор информации: обзор миллиарда лет

А что, если бы каждый мог писать код?

Действительно ли это будет работать?

Скажу больше




Еще совсем недавно идея иметь компьютер, который может отвечать на вопросы на английском языке, казалась научной фантастикой. Но когда мы в 2009 году выпустили Wolfram|Alpha, одним из самых больших сюрпризов (по крайней мере, для меня!) стало то, что мы сумели сделать наш продукт реально работающим. И теперь люди ежедневно задают личным помощникам несметное количество вопросов — на обычном разговорном языке.







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



Я долго думал об этом, пытаясь совместить философию, лингвистику, неврологию, информатику и другие области знания. И я понял, что ответ всегда был перед моим носом, и лежал он в той сфере, которой я занимался последние 30 лет: Wolfram Language.



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



Вычисления — это сила



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







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



Язык вычислительного мышления



Я видел свою роль в том, чтобы определить «куски» вычислений, которые люди будут использовать, — вроде FindShortestTour, ImageIdentify или Predict. Традиционные компьютерные языки были сосредоточены на низкоуровневых конструкциях. Но в Wolfram Language я начал с того, что мы, люди, понимаем, а затем попытался захватить как можно больше этого «понимаемого» в языке.



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



Можно задаться вопросом: зачем придумывать язык для всего этого? Почему бы просто не пользоваться, скажем, английским языком? Ну, для конкретных понятий вроде "ярко-розовый", "Нью-Йорк" или "луны Плутона" английский язык действительно неплохо подходит (и в таких случаях Wolfram Language позволяет людям пользоваться только английским языком). Но если попытаться описать более сложные вещи, разговорный английский довольно быстро становится слишком громоздким.



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







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



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







Понимание ИИ



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



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







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



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



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



Но в случае с ИИ мы должны уйти с проторенной дорожки, лежащей в пределах Вычислительной Вселенной, и нам придется (как и в мире природы) иметь дело с явлениями, которые мы не можем понять.



Что будет делать ИИ?



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



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



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



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



Постановка целей для ИИ



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



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



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



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



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



Разговор одного ИИ с другим



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



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



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



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



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



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



Но как это поддерживается в рамках английского языка? Я полагаю, что каждая новая концепция может обозначаться словом, образованным из некоторого хэш-кода (вроде набора букв). Но структурированный символический язык (вроде Wolfram Language) обеспечивает более подходящую основу. Поскольку для него нет необходимости в том, чтобы единицами языка были простые «слова», такими единицами могут стать произвольные блоки символьной информации, — такие, как наборы примеров.



Так должны ли ИИ разговаривать друг с другом на Wolfram Language? Мне кажется, в этом есть смысл. При этом не имеет значения, как именно кодируется синтаксис (форма ввода, XML, JSON, двоичный, — что угодно). Важнее структура и содержание, которые встроены в язык.





Сбор информации: обзор миллиарда лет



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



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



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







И именно здесь становится явной значимость языка, основанного на вычисляемых знаниях (вроде Wolfram Language), потому что он обеспечивает возможность обмена понятиями и фактами о мире, не требуя отдельного толкования.



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



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



А что, если бы каждый мог писать код?



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



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



Именно естественный язык способствовал формированию многих черт современного общества. Какие возможности открывает код, основанный на знаниях? Самые разные. Сегодня вы можете получить меню в ресторане для выбора блюда. Но если бы люди могли читать код, можно было бы создать код для каждого варианта, чтобы вы могли легко внести изменения на свой вкус (на самом деле, что-то вроде этого скоро будет возможно (Emerald Cloud Lab) с помощью кода Wolfram Language для лабораторных экспериментов по биологии и химии). Еще одно следствие для людей, которые в состоянии прочитать код: вместо того, чтобы написать обычный текст, можно написать код, которым смогут воспользоваться как люди, так и машины.



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



Действительно ли это будет работать?



Хорошо: допустим, мы хотим использовать Wolfram Language для общения с ИИ. Получится ли это? Этот вариант уже воплощается в жизнь, потому что внутри Wolfram|Alpha и основанных на ней системах вопросы, формулируемые на естественном языке, преобразуются в код Wolfram Language.



Но как насчет более сложных применений искусственного интеллекта? Во многих случаях, когда используется Wolfram Language, мы имеем дело с примерами ИИ, — являются ли они вычислениями, производимыми с изображениями, или данными, или символьными структурами. Иногда вычисления включают в себя алгоритмы, цели которых мы можем точно определить (FindShortestTour); иногда цели менее точны (ImageIdentify). Иногда вычисления представляются в виде "того, что надо сделать", иногда — как "то, что надо найти", или "то, к чему стремиться".



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



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



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





Скажу больше



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



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



Другие статьи Стивена Вольфрама на Хабре, расширяющие понимание вопроса




Искусственный интеллект, зачем он нам?




































































Проголосовало 2 человека. Воздержавшихся нет.





Как скоро стоит ожидать появление полноценного искусственного интеллекта?


























































Проголосовало 2 человека. Воздержавшихся нет.





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


Original source: habrahabr.ru.

https://habrahabr.ru/post/326570/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

[Перевод] Как говорить с искусственным интеллектом?

Суббота, 15 Апреля 2017 г. 11:22 (ссылка)



Перевод поста Стивена Вольфрама (Stephen Wolfram) "How Should We Talk to AIs?".

Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации



Содержание



Вычисления — это сила

Язык вычислительного мышления

Понимание ИИ

Что будет делать ИИ?

Постановка целей для ИИ

Разговор одного ИИ с другим

Сбор информации: обзор миллиарда лет

А что, если бы каждый мог писать код?

Действительно ли это будет работать?

Скажу больше




Еще совсем недавно идея иметь компьютер, который может отвечать на вопросы на английском языке, казалась научной фантастикой. Но когда мы в 2009 году выпустили Wolfram|Alpha, одним из самых больших сюрпризов (по крайней мере, для меня!) стало то, что мы сумели сделать наш продукт реально работающим. И теперь люди ежедневно задают личным помощникам несметное количество вопросов — на обычном разговорном языке.







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



Я долго думал об этом, пытаясь совместить философию, лингвистику, неврологию, информатику и другие области знания. И я понял, что ответ всегда был перед моим носом, и лежал он в той сфере, которой я занимался последние 30 лет: Wolfram Language.



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



Вычисления — это сила



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







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



Язык вычислительного мышления



Я видел свою роль в том, чтобы определить «куски» вычислений, которые люди будут использовать, — вроде FindShortestTour, ImageIdentify или Predict. Традиционные компьютерные языки были сосредоточены на низкоуровневых конструкциях. Но в Wolfram Language я начал с того, что мы, люди, понимаем, а затем попытался захватить как можно больше этого «понимаемого» в языке.



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



Можно задаться вопросом: зачем придумывать язык для всего этого? Почему бы просто не пользоваться, скажем, английским языком? Ну, для конкретных понятий вроде "ярко-розовый", "Нью-Йорк" или "луны Плутона" английский язык действительно неплохо подходит (и в таких случаях Wolfram Language позволяет людям пользоваться только английским языком). Но если попытаться описать более сложные вещи, разговорный английский довольно быстро становится слишком громоздким.



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







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



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







Понимание ИИ



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



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







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



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



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



Но в случае с ИИ мы должны уйти с проторенной дорожки, лежащей в пределах Вычислительной Вселенной, и нам придется (как и в мире природы) иметь дело с явлениями, которые мы не можем понять.



Что будет делать ИИ?



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



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



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



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



Постановка целей для ИИ



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



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



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



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



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



Разговор одного ИИ с другим



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



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



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



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



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



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



Но как это поддерживается в рамках английского языка? Я полагаю, что каждая новая концепция может обозначаться словом, образованным из некоторого хэш-кода (вроде набора букв). Но структурированный символический язык (вроде Wolfram Language) обеспечивает более подходящую основу. Поскольку для него нет необходимости в том, чтобы единицами языка были простые «слова», такими единицами могут стать произвольные блоки символьной информации, — такие, как наборы примеров.



Так должны ли ИИ разговаривать друг с другом на Wolfram Language? Мне кажется, в этом есть смысл. При этом не имеет значения, как именно кодируется синтаксис (форма ввода, XML, JSON, двоичный, — что угодно). Важнее структура и содержание, которые встроены в язык.





Сбор информации: обзор миллиарда лет



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



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



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







И именно здесь становится явной значимость языка, основанного на вычисляемых знаниях (вроде Wolfram Language), потому что он обеспечивает возможность обмена понятиями и фактами о мире, не требуя отдельного толкования.



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



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



А что, если бы каждый мог писать код?



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



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



Именно естественный язык способствовал формированию многих черт современного общества. Какие возможности открывает код, основанный на знаниях? Самые разные. Сегодня вы можете получить меню в ресторане для выбора блюда. Но если бы люди могли читать код, можно было бы создать код для каждого варианта, чтобы вы могли легко внести изменения на свой вкус (на самом деле, что-то вроде этого скоро будет возможно (Emerald Cloud Lab) с помощью кода Wolfram Language для лабораторных экспериментов по биологии и химии). Еще одно следствие для людей, которые в состоянии прочитать код: вместо того, чтобы написать обычный текст, можно написать код, которым смогут воспользоваться как люди, так и машины.



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



Действительно ли это будет работать?



Хорошо: допустим, мы хотим использовать Wolfram Language для общения с ИИ. Получится ли это? Этот вариант уже воплощается в жизнь, потому что внутри Wolfram|Alpha и основанных на ней системах вопросы, формулируемые на естественном языке, преобразуются в код Wolfram Language.



Но как насчет более сложных применений искусственного интеллекта? Во многих случаях, когда используется Wolfram Language, мы имеем дело с примерами ИИ, — являются ли они вычислениями, производимыми с изображениями, или данными, или символьными структурами. Иногда вычисления включают в себя алгоритмы, цели которых мы можем точно определить (FindShortestTour); иногда цели менее точны (ImageIdentify). Иногда вычисления представляются в виде "того, что надо сделать", иногда — как "то, что надо найти", или "то, к чему стремиться".



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



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



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





Скажу больше



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



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



Другие статьи Стивена Вольфрама на Хабре, расширяющие понимание вопроса




Искусственный интеллект, зачем он нам?




































































Проголосовал 1 человек. Воздержавшихся нет.





Как скоро стоит ожидать появление полноценного искусственного интеллекта?


























































Проголосовал 1 человек. Воздержавшихся нет.





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


Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/326570/

Комментарии (0)КомментироватьВ цитатник или сообщество
kseniasamohina

AI Conference 2017

Пятница, 14 Апреля 2017 г. 22:10 (ссылка)
md-eksperiment.org/afisha/r...0414191706


Наступает эпоха умного бизнеса. Узнай об эффективном применении искусственного интеллекта на AI Conference

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Тим Бернерс-Ли: современный Интернет должен быть централизован и защищен шифрованием

Пятница, 14 Апреля 2017 г. 16:38 (ссылка)





Британский учёный Тим Бернерс-Ли (Tim Berners-Lee), создатель Всемирной Сети, наконец, удостоился Премии Тьюринга 2016 года. Эту награду называют еще и «Нобелевской премией в ИТ». Каждый год она вручается Ассоциацией вычислительной техники специалиста, которые вносят вклад, который «имеет огромное значение для ИТ». Размер премии составляет $1 млн. Но речь, конечно же, не о размере премии.



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



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



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







Еще одна компания, которая занимается децентрализацией Интернета, это MaidSafe. Еще один стартап, который в течение многих лет кропотливо работает наз созданием p2p сети. Сейчас она позволяет размещать сайты, хранить обычные данные.



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



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



Что касается Бернерса-Ли, то еще несколько лет назад он заявил следующее: «Я хочу видеть открытый Интернет, который прекрасно работает на международном уровне и не зависит от стран». В качестве того, чего бы он не хотел видеть, Бернерс-Ли высказал другой пример: «Я не хочу такого Интернета, в котором бразильское правительство хранит все данные социальных сетей на серверах в Бразилии. Теперь людей подставлять стало еще легче». Он считает, что, возможно, идею социальных сетей стоит переосмыслить во имя «общего блага планеты», поскольку тот же Facebook сильно фрагментирует Интернет, являясь вещью в себе.



Кстати, он высказался и по такому важному вопросу, как ИИ. По мнению Бернерса-Ли, через какое-то время искусственный интеллект станет полностью контролировать экономику. Причем речь идет о слабой форме ИИ, когда компьютер может решать вопросы не только о выдаче кредитов, но и о приобретении компаний. «Машинный интеллект начнёт создавать собственные компании, создавать холдинги и генерировать новые копии себя, чтобы руководить этими компаниями», — сказал Бернерс-Ли. Он считает, что между «машинными» компаниями рано или поздно развернется борьба, в которой будут выживать лишь сильнейшие.




Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/326544/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Логика сознания. Часть 12. Поиск закономерностей. Комбинаторное пространство

Среда, 12 Апреля 2017 г. 17:04 (ссылка)

imageПоэзия — та же добыча радия.

В грамм добыча, в годы труды.

Изводишь единого слова ради

Тысячи тонн словесной руды.

Но как испепеляюще слов этих жжение

Рядом с тлением слова-сырца.

Эти слова приводят в движение

Тысячи лет миллионов сердца.



Владимир Маяковский




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



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



Задача контекстного сдвига текстовой строки



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



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





Фрагмент текста. Числами обозначен циклический идентификатор позиции. Период идентификатора K=10. Вертикальными линиями выделено одно из положений скользящего окна. Размер окна N=6



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



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



{a0,a1···a(K-1),b0,b1···b(K-1),z0,z1···z(K-1)}



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



{s1,w3,e4,d6}



Сопоставим каждому понятию некий разряженный бинарный код. Например, если взять длину кода в 256 бит и отвести 8 бит для кодирования одного понятия, то кодирование буквы «a» в различных позициях будет выглядеть как показано на рисунке ниже. Напомню, что коды выбираются случайным образом, и биты у них могут повторяться, то есть одни и те же биты могут быть общими для нескольких кодов.





Пример кодов буквы a в позициях от 0 до 9. Бинарные вектора показаны вертикально, единицы выделены горизонтальными светлыми линиями



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



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



Пример сложения бинарных кодов понятий в код фрагмента



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





Изменение кодировки текста при разном начальном смещении



Первому случаю будет соответствовать описание



{s1,w3,e4,d6}



Второй случай будет записан, как



{s9,w1,e2,d4}



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



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



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



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



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



a0->a0, a2->a2···z(K-1)->z(K-1)



Для контекста со смещением на 8 позиций при длине кольцевого идентификатора K=10, что соответствует нижней строке примера с рисунка выше, правила будут иметь вид

a0->a8, a1->a9, a2->a0···z9->z7



При таких правилах в контексте со смещением 8 описание окна из первой строки примера перейдет в описание окна из второй строки, что, собственно, вполне очевидно и без долгих пояснений



{s1,w3,e4,d6}->{s9,w1,e2,d4}



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



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



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





Код исходной строки и ее смещения



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



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



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



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



В чем сложность?



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



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



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



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



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



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



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



Комбинируя эти два принципа, можно построить решение и нашей задачи.



Комбинаторное пространство



Возьмем входной битовый вектор и пронумеруем его биты. Создадим комбинаторные «точки». В каждую точку сведем несколько случайных битов входного вектора (рисунок ниже). Наблюдая за входом, каждая из этих точек будет видеть не всю картину, а только ее малую часть, определяемую тем, какие биты сошлись в выбранной точке. Так на рисунке ниже крайняя слева точка с индексом 0 следит только за битами 1, 6, 10 и 21 исходного входного сигнала. Создадим таких точек достаточно много и назовем их набор комбинаторным пространством.





Комбинаторное пространство



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



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



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



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



Когда создаются точки комбинаторного пространства с сильно ограниченным «обзором» (случайные подпространства), то оказывается, что некоторым точкам может повезти и они увидят закономерность если не совсем чистой, то, по крайней мере, в значительно очищенном виде. Такой ограниченный взгляд позволит, например, провести градиентный спуск и получить уже чистую закономерность. Вероятность для отдельной точки наткнуться на закономерность может быть не очень высока, но всегда можно подобрать такое количество точек, чтобы гарантировать себе, что всякая закономерность «где-то да всплывет».



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



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



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



Кластеры рецепторов



Как искать закономерности в комбинаторном пространстве? Каждая точка видит свой фрагмент входного вектора. Если в том, что она видит, оказывается достаточно много активных битов, то можно предположить, что то, что она видит, и есть какая-либо закономерность. То есть, набор активных битов, попадающий в точку, можно назвать гипотезой о наличии закономерности. Запомним такую гипотезу, то есть зафиксируем набор активных битов, видимых в точке. В ситуации, показанной на рисунке ниже, видно, что в точке 0 надо зафиксировать биты 1, 6 и 21.





Фиксация битов в кластере



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



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



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


  • длина входного вектора — 256 бит;


  • длина выходного вектора – 256 бит;


  • отдельная буква кодируется 8 битами;


  • длина строки — 5 символов;


  • количество контекстов смещения — 10;


  • размер комбинаторного пространства – 60000;


  • количество битов, пересекающихся в точке – 32;


  • порог создания кластера – 6;


  • порог частичной активации кластера — 4.






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



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



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



Обучение. Консолидация памяти



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



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



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



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



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





Хроника частичного срабатывания кластера рецепторов



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



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



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



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





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



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



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



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



Выход комбинаторного пространства



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



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



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





Пример работы комбинаторного пространства в процессе обучения (порядка 200 шагов). Сверху исходный код, в середине требуемый код, снизу код, предсказанный комбинаторным пространством



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





Пример работы обученного комбинаторного пространства. Сверху исходный код, в середине требуемый код, снизу код, предсказанный комбинаторным пространством



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









Усиление правил



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



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



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



Случайный лес



Описанный механизм позволяет найти закономерности, которые в Data Mining принято называть правилами типа «if-then». Соответственно, можно найти что-то общее между нашей моделью и всеми теми методами, что традиционно используются для решения таких задач.  Пожалуй, наиболее близок к нам «random forest».



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



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





Пример дерева принятия решений



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



На завершающем этапе применяется идея бустинга. Решающие деревья формируют комитет для голосования. На основании коллективного мнения создается наиболее правдоподобный ответ. Главное достоинство бустинга – это возможность при объединении множества «плохих» алгоритмов (результат которых лишь немного лучше случайного) получить сколь угодно «хороший» итоговый результат.



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



Биология обучения



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



На мембране нейрона располагается множество различных рецепторов. Большинство этих рецепторов находится в «свободном плавании». Мембрана создает для рецепторов среду, в которой они могут свободно перемещаться, легко меняя свое положение на поверхности нейрона (Sheng, M., Nakagawa, T., 2002) (Tovar K. R.,Westbrook G. L., 2002).





Мембрана и рецепторы



В классическом подходе на причинах такой «свободы» рецепторов обычно акцент не делается. Когда синапс усиливает свою чувствительность, это сопровождается перемещением рецепторов из внесинаптического пространства в синаптическую щель (Malenka R.C., Nicoll R.A., 1999). Этот факт негласно воспринимается как оправдание подвижности рецепторов.



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



Метаботропные рецепторы, а речь идет о них, имеют достаточно сложную форму (рисунок ниже). Они состоят из семи трансмембранных доменов, которые соединены петлями. Кроме того, у них есть два свободных конца. За счет разных по знаку электростатических зарядов свободные концы могут через мембрану «залипать» друг на друга. За счет таких соединений рецепторы и объединяются в кластеры.





Одиночный метаботропный рецептор



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



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



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



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



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



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



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



Сон



У здорового человека сон начинается с первой стадии медленного сна, которая длится 5-10 минут. Затем наступает вторая стадия, которая продолжается около 20 минут. Еще 30-45 минут приходится на периоды третей и четвертой стадий. После этого спящий снова возвращается во вторую стадию медленного сна, после которой возникает первый эпизод быстрого сна, который имеет короткую продолжительность — около 5 минут. Во время быстрого сна глазные яблоки очень часто и периодически совершают быстрые движения под сомкнутыми веками. Если в это время разбудить спящего, то в 90% случаев можно услышать рассказ о ярком сновидении.  Вся эта последовательность называется циклом. Первый цикл имеет длительность 90-100 минут. Затем циклы повторяются, при этом уменьшается доля медленного сна и постепенно нарастает доля быстрого сна, последний эпизод которого в отдельных случаях может достигать 1 часа. В среднем при полноценном здоровом сне отмечается пять полных циклов.



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



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



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





Распределение белка Arc в теменной коре крысы после трех часов сна (S) и после трех часов спонтанного бодрствования (W) (Cirelli, 2002)





Распределение транскрипционного фактора P-CREB в корональных участках теменной коры крысы после трех часов сна (S) и в случае лишения сна на три часа (SD) (Cirelli, 2002)



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



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

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



Быстродействие мозга



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



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



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



Алексей Редозубов



Логика сознания. Часть 1. Волны в клеточном автомате

Логика сознания. Часть 2. Дендритные волны

Логика сознания. Часть 3. Голографическая память в клеточном автомате

Логика сознания. Часть 4. Секрет памяти мозга

Логика сознания. Часть 5. Смысловой подход к анализу информации

Логика сознания. Часть 6. Кора мозга как пространство вычисления смыслов

Логика сознания. Часть 7. Самоорганизация пространства контекстов

Логика сознания. Пояснение «на пальцах»

Логика сознания. Часть 8. Пространственные карты коры мозга

Логика сознания. Часть 9. Искусственные нейронные сети и миниколонки реальной коры

Логика сознания. Часть 10. Задача обобщения

Логика сознания. Часть 11. Естественное кодирование зрительной и звуковой информации

Логика сознания. Часть 12. Поиск закономерностей. Комбинаторное пространство


Original source: habrahabr.ru.

https://habrahabr.ru/post/326334/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Логика сознания. Часть 12. Поиск закономерностей. Комбинаторное пространство

Среда, 12 Апреля 2017 г. 17:04 (ссылка)

imageПоэзия — та же добыча радия.

В грамм добыча, в годы труды.

Изводишь единого слова ради

Тысячи тонн словесной руды.

Но как испепеляюще слов этих жжение

Рядом с тлением слова-сырца.

Эти слова приводят в движение

Тысячи лет миллионов сердца.



Владимир Маяковский




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



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



Задача контекстного сдвига текстовой строки



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



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





Фрагмент текста. Числами обозначен циклический идентификатор позиции. Период идентификатора K=10. Вертикальными линиями выделено одно из положений скользящего окна. Размер окна N=6



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



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



{a0,a1···a(K-1),b0,b1···b(K-1),z0,z1···z(K-1)}



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



{s1,w3,e4,d6}



Сопоставим каждому понятию некий разряженный бинарный код. Например, если взять длину кода в 256 бит и отвести 8 бит для кодирования одного понятия, то кодирование буквы «a» в различных позициях будет выглядеть как показано на рисунке ниже. Напомню, что коды выбираются случайным образом, и биты у них могут повторяться, то есть одни и те же биты могут быть общими для нескольких кодов.





Пример кодов буквы a в позициях от 0 до 9. Бинарные вектора показаны вертикально, единицы выделены горизонтальными светлыми линиями



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



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



Пример сложения бинарных кодов понятий в код фрагмента



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





Изменение кодировки текста при разном начальном смещении



Первому случаю будет соответствовать описание



{s1,w3,e4,d6}



Второй случай будет записан, как



{s9,w1,e2,d4}



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



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



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



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



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



a0->a0, a2->a2···z(K-1)->z(K-1)



Для контекста со смещением на 8 позиций при длине кольцевого идентификатора K=10, что соответствует нижней строке примера с рисунка выше, правила будут иметь вид

a0->a8, a1->a9, a2->a0···z9->z7



При таких правилах в контексте со смещением 8 описание окна из первой строки примера перейдет в описание окна из второй строки, что, собственно, вполне очевидно и без долгих пояснений



{s1,w3,e4,d6}->{s9,w1,e2,d4}



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



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



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





Код исходной строки и ее смещения



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



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



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



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



В чем сложность?



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



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



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



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



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



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



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



Комбинируя эти два принципа, можно построить решение и нашей задачи.



Комбинаторное пространство



Возьмем входной битовый вектор и пронумеруем его биты. Создадим комбинаторные «точки». В каждую точку сведем несколько случайных битов входного вектора (рисунок ниже). Наблюдая за входом, каждая из этих точек будет видеть не всю картину, а только ее малую часть, определяемую тем, какие биты сошлись в выбранной точке. Так на рисунке ниже крайняя слева точка с индексом 0 следит только за битами 1, 6, 10 и 21 исходного входного сигнала. Создадим таких точек достаточно много и назовем их набор комбинаторным пространством.





Комбинаторное пространство



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



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



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



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



Когда создаются точки комбинаторного пространства с сильно ограниченным «обзором» (случайные подпространства), то оказывается, что некоторым точкам может повезти и они увидят закономерность если не совсем чистой, то, по крайней мере, в значительно очищенном виде. Такой ограниченный взгляд позволит, например, провести градиентный спуск и получить уже чистую закономерность. Вероятность для отдельной точки наткнуться на закономерность может быть не очень высока, но всегда можно подобрать такое количество точек, чтобы гарантировать себе, что всякая закономерность «где-то да всплывет».



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



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



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



Кластеры рецепторов



Как искать закономерности в комбинаторном пространстве? Каждая точка видит свой фрагмент входного вектора. Если в том, что она видит, оказывается достаточно много активных битов, то можно предположить, что то, что она видит, и есть какая-либо закономерность. То есть, набор активных битов, попадающий в точку, можно назвать гипотезой о наличии закономерности. Запомним такую гипотезу, то есть зафиксируем набор активных битов, видимых в точке. В ситуации, показанной на рисунке ниже, видно, что в точке 0 надо зафиксировать биты 1, 6 и 21.





Фиксация битов в кластере



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



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



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


  • длина входного вектора — 256 бит;


  • длина выходного вектора – 256 бит;


  • отдельная буква кодируется 8 битами;


  • длина строки — 5 символов;


  • количество контекстов смещения — 10;


  • размер комбинаторного пространства – 60000;


  • количество битов, пересекающихся в точке – 32;


  • порог создания кластера – 6;


  • порог частичной активации кластера — 4.






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



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



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



Обучение. Консолидация памяти



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



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



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



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



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





Хроника частичного срабатывания кластера рецепторов



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



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



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



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





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



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



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



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



Выход комбинаторного пространства



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



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



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





Пример работы комбинаторного пространства в процессе обучения (порядка 200 шагов). Сверху исходный код, в середине требуемый код, снизу код, предсказанный комбинаторным пространством



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





Пример работы обученного комбинаторного пространства. Сверху исходный код, в середине требуемый код, снизу код, предсказанный комбинаторным пространством



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









Усиление правил



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



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



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



Случайный лес



Описанный механизм позволяет найти закономерности, которые в Data Mining принято называть правилами типа «if-then». Соответственно, можно найти что-то общее между нашей моделью и всеми теми методами, что традиционно используются для решения таких задач.  Пожалуй, наиболее близок к нам «random forest».



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



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





Пример дерева принятия решений



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



На завершающем этапе применяется идея бустинга. Решающие деревья формируют комитет для голосования. На основании коллективного мнения создается наиболее правдоподобный ответ. Главное достоинство бустинга – это возможность при объединении множества «плохих» алгоритмов (результат которых лишь немного лучше случайного) получить сколь угодно «хороший» итоговый результат.



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



Биология обучения



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



На мембране нейрона располагается множество различных рецепторов. Большинство этих рецепторов находится в «свободном плавании». Мембрана создает для рецепторов среду, в которой они могут свободно перемещаться, легко меняя свое положение на поверхности нейрона (Sheng, M., Nakagawa, T., 2002) (Tovar K. R.,Westbrook G. L., 2002).





Мембрана и рецепторы



В классическом подходе на причинах такой «свободы» рецепторов обычно акцент не делается. Когда синапс усиливает свою чувствительность, это сопровождается перемещением рецепторов из внесинаптического пространства в синаптическую щель (Malenka R.C., Nicoll R.A., 1999). Этот факт негласно воспринимается как оправдание подвижности рецепторов.



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



Метаботропные рецепторы, а речь идет о них, имеют достаточно сложную форму (рисунок ниже). Они состоят из семи трансмембранных доменов, которые соединены петлями. Кроме того, у них есть два свободных конца. За счет разных по знаку электростатических зарядов свободные концы могут через мембрану «залипать» друг на друга. За счет таких соединений рецепторы и объединяются в кластеры.





Одиночный метаботропный рецептор



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



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



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



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



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



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



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



Сон



У здорового человека сон начинается с первой стадии медленного сна, которая длится 5-10 минут. Затем наступает вторая стадия, которая продолжается около 20 минут. Еще 30-45 минут приходится на периоды третей и четвертой стадий. После этого спящий снова возвращается во вторую стадию медленного сна, после которой возникает первый эпизод быстрого сна, который имеет короткую продолжительность — около 5 минут. Во время быстрого сна глазные яблоки очень часто и периодически совершают быстрые движения под сомкнутыми веками. Если в это время разбудить спящего, то в 90% случаев можно услышать рассказ о ярком сновидении.  Вся эта последовательность называется циклом. Первый цикл имеет длительность 90-100 минут. Затем циклы повторяются, при этом уменьшается доля медленного сна и постепенно нарастает доля быстрого сна, последний эпизод которого в отдельных случаях может достигать 1 часа. В среднем при полноценном здоровом сне отмечается пять полных циклов.



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



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



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





Распределение белка Arc в теменной коре крысы после трех часов сна (S) и после трех часов спонтанного бодрствования (W) (Cirelli, 2002)





Распределение транскрипционного фактора P-CREB в корональных участках теменной коры крысы после трех часов сна (S) и в случае лишения сна на три часа (SD) (Cirelli, 2002)



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



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

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



Быстродействие мозга



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



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



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



Алексей Редозубов



Логика сознания. Часть 1. Волны в клеточном автомате

Логика сознания. Часть 2. Дендритные волны

Логика сознания. Часть 3. Голографическая память в клеточном автомате

Логика сознания. Часть 4. Секрет памяти мозга

Логика сознания. Часть 5. Смысловой подход к анализу информации

Логика сознания. Часть 6. Кора мозга как пространство вычисления смыслов

Логика сознания. Часть 7. Самоорганизация пространства контекстов

Логика сознания. Пояснение «на пальцах»

Логика сознания. Часть 8. Пространственные карты коры мозга

Логика сознания. Часть 9. Искусственные нейронные сети и миниколонки реальной коры

Логика сознания. Часть 10. Задача обобщения

Логика сознания. Часть 11. Естественное кодирование зрительной и звуковой информации
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/326334/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<искусственный интеллект - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda