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

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

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


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

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

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


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

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


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

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

    Введем систему понятий, позволяющую описать все, что появляется в скользящем окне. Для простоты не будем делать разницы между заглавными и строчными буквами и не будем учитывать знаки препинания.   Так как потенциально любая буква может встретиться нам в любой позиции, то нам понадобятся все возможные сочетания букв и позиций, то есть 26 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. Поиск закономерностей. Комбинаторное пространство
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 66
      +3
      Наконец-то продолжение! Спасибо за чудесный цикл статей!
        0
        То есть эта программа и есть реализация одной миниколонки? Но ведь раньше вы говорили, что мозг проводит обобщение используя пространственную организацию миниколонок, причем это обобщение характеризуется как через близость к другим понятиям, так и через ассоциативную связь, причем вы указывали на недостаток фильтра Хебба в виде коэффициента скорости обучения. И тут для обобщения даже нет необходимости в волнах. Действительно, алгоритм весьма похож на «улучшенный» случайный лес. Или же я чего-то не понимаю? Просто, прочитав предыдущие части, я пришел к выводу что изначально у нас есть пространство с миниколонками, которые случайным образом преобразуют протекающие по коре волны, и эти преобразования являются трактовками понятий (т.е. они являются ключами, с помощью которых миниколонки «расшифровывают» поступившее на кору понятие), а затем мы переносим эти «случайные преобразования» по принципу «похожее рядом», формируя пространства контекстов.
          0
          Это действительно описание работы одной миниколонки. Как миниколонки работают совместно будет в следующей части.
          0
          Вы в этой статье реализовали обучение с учителем (задаёте «правильный ответ» для вашего вычислительного модуля), в то же время сами утверждаете, что кора реализует обучение без учителя (по сути, представляя из себя много автоенкодеров).
          Так какой вариант верный?
          Вариант с автоенкодерами чреват гипервозбуждением участков коры и эпилепсией, вариант обучения с учителем — тривиальный и никак не решает проблему одновременно высокой стабильности-пластичности (у вас получилась высокая стабильность, но низкая пластичность).
          Вообще, так получается, что ограничение соединений между частями мозга нужно в основном именно для защиты от перевозбуждения и для изоляции взаимодействия сигналов от разных органов чувств, иначе (в самом мягком случае) возникает синестезия, которая скорее вредит, чем помогает.
          Вот как раз именно на этот вопрос вы пока неудовлетворительно отвечаете: почему в мозгу информация не перепутывается в кашу? В вашей модели эта возможность присутствует — подхватили автоенкодеры неправильную ассоциацию, как им потом от неё избавиться?
          А как механизм обучения с учителем спасается от этого, мы и так знаем (шаг в сторону, и учитель по руке палкой бьёт).
            +1
            Как происходит обучение без учителя будет описано в следующей части. Там же будет показано как при этом происходит совместная работа контекстов. Пока общей картины не видно.
            +1

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

              +1
              Мне не совсем понятно с правилами преобразования. Допустим, контекстный модуль выявил определенные правила преобразования для определенного понятия (пусть это квадрат). Может ли он применить эти же правила для другого понятия (круг)? Если да, то каким образом? Ведь коды у них разные. Или для каждого понятия свои правила, выполняющие одну и ту же трансформацию (например сдвиг по вертикали)?
                +1
                Для каждого понятия свое правило. Но это в гипотетическом примере для объяснения общего принципа (с кругами и квадратами). На практике изображение описывается бинарным кодом, который в небольших окрестностях (если сами фигуры достаточно большие) превращается в код линии под определенным углом. Для дуги с большим радиусом и прямой этот локальный код будет практически одинаков. При обучении правилам преобразований оказываается невозможно выучить правила преобразований для всех возможных «больших» объектов. Но начинают выделяться множество «мелких» правил для «элементарных» образов. Число бит в которых посильно для кластеров. В результате большой код (квадрата, круга и других больших фигур) преобразуется через сложение множества мелких правил, собственно, и определяющих контекст.
                0
                Эта модель может быть представлена схемой на 6И-100ИЛИ логических элементах. Этакий масштабный коммутатор, в котором в процессе обучения обрываются первоначально заданные случайные связи.

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

                И я правильно понимаю, что эта модель способна обучаться новому без потери предыдущего опыта (так как, собственно, перезаписи в ней нет, а есть только уточнение, очистка от шума)?
                  +1
                  Да, что приятно, можно дообучать без потери предыдущего опыта. В этой части описана самая простая реализация, не учитывающая многих очень важных моментов, в следующей части я опишу значительно более продвинутую модель.
                    +2
                    Кстати, а когда следующую часть ждать?
                      +1
                      Попробую через неделю записать видео с объяснениями. Сейчас закопался в программировании. Пришли в голову новые очень сильные идеи. Старый код по которому планировал писать следующую часть уже не нравится, хочется нового красивого. Но это всегда слабо предсказуемый по времени процесс.
                    0
                    >И я правильно понимаю, что эта модель способна обучаться новому без потери предыдущего опыта (так как, собственно, перезаписи в ней нет, а есть только уточнение, очистка от шума)?
                    В некоторых искусственных ситуациях — да. Но на практике опыт часто бывает противоречив. Если новый опыт будет противоречить старому, то как модель сможет выдавать оба разных противоречащих друг другу предсказания одновременно?
                      0
                      В описываемой модели накопление опыта — это создание новых гипотез и отбор гипотез состоятельных, прошеших проверку. «Противоречивый опыт» отсеивает гипотезы, которые не позволяют сделать корректное предсказание. Это если совсем кратко. В общем случае надо учитывать «цену» ошибки, это делается через механизм подкрепления. В следующей части будет об этом подробнее.
                        0
                        Вы попробуйте смоделировать ситуацию с запоминанием, переучиванием и забыванием в динамике.
                        Причём так, чтобы параметры системы (забывание) не менять на ходу.
                        Предлагаю вам сделать пост, который посвятить именно формированию проверочных датасетов, которые позволят ответить на вопрос области применимости или неприменимости вашей системы в конкретных ситуациях.
                        Потому что пока вы ориентируетесь на один способ применения, вы имеете возможность выставить параметры (время забывания, время срабатывания) так, как нужно для конкретной задачи — иногда даже меняя их в тысячи раз, но эта модель не соответствует мозгу, где эти параметры не имеют такого огромного диапазона для изменения. (Кажется, я намекал на это ещё два года назад.)

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

                        Можете взять примеры тестов для HTM и нейронных сетей, например:
                        * статический mnist — угадывание текущей цифры, запоминание и выдача следующей цифры
                        * динамический mnist — угадывание цифры по попиксельной или построчной информации о ней — т.е. сначала нейромодулю даются пиксели первой строчка цифры, потом вторые, итд. ( есть такая работа для сравнения: http://www.gitxiv.com/posts/7j5JXvP3kn5Jf8Waj/irnn-experiment-with-pixel-by-pixel-sequential-mnist#! )
                        * moving mnist — http://www.cs.toronto.edu/~nitish/unsupervised_video/ — предсказание следующего кадра видео для движущихся цифр из mnist, и просто угадывание текущей цифры по движущейся картинке (я как раз тестировал HTM на таком тесте и результаты на единицу вычислительной мощности были весьма скромными, а наилучшие результаты были намного хуже нейросетей).
                        * запоминание и предсказание следующей цифры в случайной, но повторяющейся последовательности цифр (скажем, 123123123...), потом смена последовательности (12312321321321) и автоматически нейросеть должна теперь предсказывать цифры новой последовательности, не выдавая цифры старой последовательности.
                        * для игр посложнее, можете взять задачи с площадки openai, например, обогнав state-of-the-art и набрав миллион очков в pacman-е и сравнившись с комбинированным code+RL решением от maaluba:
                        https://www.wired.com/story/mircosoft-ai-ms-pac-man/ :)

                        Потому что не забывайте про весьма опасное для научных исследований когнитивное заблуждение, которое называется «поиск только позитивных результатов»: ( https://wiki.lesswrong.com/wiki/Positive_bias, https://en.wikipedia.org/wiki/Confirmation_bias, https://ru.wikipedia.org/wiki/Склонность_к_подтверждению_своей_точки_зрения, https://ru.wikipedia.org/wiki/Принятие_желаемого_за_действительное )
                        Информация о том, где система не работает (и почему), зачастую несёт намного больше пользы, чем информация о реальных способах применения, хотя, конечно, важно и то, и другое.
                        0
                        В модели нет проблем с одновременной выдачей множества результатов. Это же разряженный битовый массив.

                        Если надо поменять выходной код так, чтобы старый больше не вспоминался, то достаточно просто уничтожить кластеры, его формирующие, или разорвать с ними связи. Но лучше не стирать старый код. Люди, те, что поумнее, помнят свои ошибки, чтобы заново их не делать.
                          0
                          >В модели нет проблем с одновременной выдачей множества результатов. Это же разряженный битовый массив.
                          Например, пусть поменялась ситуация: цвет светофора, за которым система следит, сменился с желтого на красный. Тогда выдача системой и старого результата, и нового, в виде logical OR — т.е., и кода для «желтого», и кода для «красного» — не имеет смысла.
                          Понимаете теперь, в чём сложность? Нужно старый результат забыть, потому что он теперь неправильный, а не выдавать одновременно все возможные результаты «потому, что можем».
                            0
                            Вы мыслите в правильном направлении. На практике всегда стоит вопрос не просто описать «все что вижу» или «что это потенциально может быть», а сделать выбор в пользу определенного описания. Этот выбор делается на основании успешности или неуспешности предыдущего опыта. Математика, связанная с этим, называется обучение с подкреплением.
                            Задача обучения и обобщения неразрывно связана с вопросом выбора, вопросом создания удачного описания в котором выбор возможен, обучением того как сделать оптимальный выбор. Собственно, я и планирую показать как связаны вместе все эти функции и как это реализует мозг.
                              0
                              Пока с вашей стороны следуют весьма голословные и общие заявления, и уже год от вас нет какой-либо приличной попытки ответа на мой вопрос.
                              Не забудьте показать, как RL (=reinforcement learning — я вижу, вы мне уже зачем-то начали пытаться рассказывать, что это такое) вам поможет с задачей переучивания. Это, как я вижу, основная претензия к текущей модели — её принципиальная неспособность избавляться от неправильных ассоциаций и ложных закономерностей, при этом не забывая истинные закономерности. См. выше примеры задач, где вы могли бы проиллюстрировать, как на самом деле работает в вашей системе нейропластичность, и насколько она в ней работает.
                              Обратите внимание на очень простую задачу с предсказанием следующей цифры в случайным образом динамически меняемой последовательности (123123123321321321241241241442442442… ) и попробуйте реализовать её в вашей системе.
                                +1
                                Господин прохожий, пока с вашей стороны следует желчь к человеку, который вам здесь ничего не должен.

                                простую задачу с предсказанием следующей цифры в случайным образом динамически меняемой последовательности (123123123321321321241241241442442442… ) и попробуйте реализовать её в вашей системе


                                Губа не дура. Пойдёте с ней казино банкротить?
                                  –1
                                  Действительно, наверное, мне не стоит развеивать заблуждения, которые подхватывают потом другие люди.
                                    0
                                    простую задачу с предсказанием следующей цифры в случайным образом динамически меняемой последовательности (123123123321321321241241241442442442… ) и попробуйте реализовать её в вашей системе


                                    Губа не дура. Пойдёте с ней казино банкротить?

                                    Ваша ирония здесь неуместна. И человек на уровне неокортекса, и нейросетевые алгоритмы умеют данную задачу с некоторой точностью решать. Понятно, что 100% точности никогда не будет. Но эта точность — это один из множества способов измерить стабильность и пластичность модели. Алексей критиковал некоторое время назад в другой статье нейросети за (якобы) низкое значение этого параметра, так почему бы не проверить его модель? Данную проверку можно реализовать за пару часов.
                                0
                                Не понимаю. Откуда у вас взялся на выходе код желтого, когда светофор сменился на красный, или он у вас одновременно горит и жёлтым и красным?

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

                                Если вы ждёте от этой модели какого-то прогноза в отношении «какой будет следующий цвет светофора?», то вы явно прочли статью по диагонали. Это модель сенсорного восприятия, а не аналитической обработки.
                                  0
                                  Вы хотели сказать, откуда у Алексея возьмётся на выходе код жёлтого — модель-то не моя.
                                  1) Я утверждаю, что в достаточно сложной модели (из нескольких зон коры) он точно появится со временем — ведь ассоциации в текущей модели никогда не ослабевают.
                                  И может даже появиться в модели одной зоны коры — если неправильно настроены параметры, или, например, если иногда светофор горит и жёлтым и красным, а иногда только жёлтым или только красным, и вы его видите с разного расстояния, в разных координатах и при наличии шума (чтобы нельзя было отмахнуться от проблемы с помощью выучивания локальных корреляций, обосновывая, что нейроны для красного все рядом, нейроны для жёлтого далеко от них). После этого от неправильной ассоциации в текущей модели будет невозможно избавиться, не забыв одновременно другую полезную информацию. Я это моделировал несколько лет назад. Там даже вводился дополнительный коэффициент переучивания, но он сам по себе не помогал. И, по моему мнению, RL у человека для этого не применяется, а используется система хранения и обновления воспоминаний и таламические ядра для адаптации и построения визуальных гипотез.
                                  2) «Это модель сенсорного восприятия» — т.е. правильно ли я вас понял, что вы считаете, что модель Алексея можно применять только для зоны коры человека V1, но уже не для V2 — ведь в V2 уже нет сенсорной информации? А вот у человека неокортекс устроен одинаково и в V1 и в V2, и в V4. И Алексей утверждает, что он строит не абстрактную модель сенсорного восприятия, а модель человеческого мозга — поэтому сравнивать то, что получилось на выходе, имеет смысл, и имеет смысл объединять модели разных зон коры вместе, и видеть, как вроде бы стройная модель одной зоны коры внезапно перестаёт работать на практике.
                                  Наверное, Алексею пока мои выводы подтверждать или опровергать не интересно. Но если я прав, то тогда он вселяет в вас бездоказательную веру в модель, которая не работает на практике.
                                    0
                                    Вы зря горячитесь. В этой статье описана примитивная, но простая для понимания модель, которая иллюстрирует некоторые базовые идеи. Я двигаюсь шаг за шагом. Дальше я покажу как к этой модели добавить еще несколько очень сильных принципов. То, что будет в результате вам должно понравиться.
                                      0
                                      Нет, я считаю, что я говорю об этом не зря. Не знаю, что вы собираетесь рассказать в будущем, но описанный на данный момент кусок текущей модели не будет на сложных реальных задачах работать так, как декларируется, а, из-за выбранного вами стиля повествования, другие люди будут воспринимать данную серию статей как обучающие материалы (что предполагает работоспособность описываемой модели).
                                      Ну да ладно, не буду больше комментировать неочевидные вещи.
                                      0
                                      Если рассматривать достаточно сложную модель, близкую к естественному интеллекту, то там воспоминания сохраняются. Поэтому забывать старый результат, потому что он теперь неправильный, не нужно. Система должна оценивать его как воспоминание, и не сообщать о нем, если в этом нет необходимости. Это уже аналитика, это более сложная модель, чем описана в статье.
                                      Кроме того, основные принципы может и одинаковые, но назначение блоков разное. На первых уровнях обработки информации вообще ничего не запоминается, происходит просто преобразование, результаты которого передаются дальше.
                                      Поэтому ваши претензии необоснованы.
                                        0
                                        >Это уже аналитика, это более сложная модель, чем описана в статье.
                                        Ну, тогда вопрос в том, включает ли «более сложная модель» описанный в этой статье компонент, или она совсем другая. Мне казалось, что первый вариант, иначе зачем тогда эта статья в этом цикле.
                                        > На первых уровнях обработки информации вообще ничего не запоминается, происходит просто преобразование, результаты которого передаются дальше.
                                        То есть, запоминание параметров преобразования — это не память, по вашему? И если неправильные параметры преобразования запомнятся — это, по вашему, не будет проблемой?
                                          0
                                          включает ли «более сложная модель» описанный в этой статье компонент

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


                                          То есть, запоминание параметров преобразования — это не память, по вашему?

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


                                          И если неправильные параметры преобразования запомнятся — это, по вашему, не будет проблемой?

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

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

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

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

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

                                              Они со временем исчезают. Это та часть, где про "утро вечера мудренее".


                                              Вы упростили до уровня неправды

                                              То есть вы хотите сказать, что вы забудете, что горел желтый, если он сменится на красный? Или может вы хотите сказать, что информация "2 секунды назад горел желтый светофор" анализируется на уровне ON-OFF клеток? Где именно неправда?

                                                0
                                                Они со временем исчезают

                                                В вашей бездоказательной теории?
                                                Или может вы хотите сказать, что информация «2 секунды назад горел желтый светофор» анализируется на уровне ON-OFF клеток.

                                                А вы расшифруйте понятие «анализируется» для начала.
                                                  0
                                                  В вашей бездоказательной теории?

                                                  У меня нет никакой теории. Но в статье описан механизм удаления кластеров.


                                                  А вы расшифруйте понятие «анализируется» для начала.

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

                                                    0
                                                    Но в статье описан механизм удаления кластеров.

                                                    Да, есть такое описание, один в один повторяющее механизм temporal layer из модели HTM CLA. Но, вы, может быть, не обратили внимание, что в некоторой части данной статьи описано обучение с учителем, supervised learning, а не unsupervised learning, который должен делать человеческий мозг в соответствующих областях. Это ключевой момент. Уверения автора о сходимости в данной статье распространяются именно на supervised learning. А я как раз и утверждаю, что при unsupervised learning подобная модель вполне может накапливать ошибки со временем, и в режиме supervised learning у человека она работать не может — это противоречит наблюдаемым данным о строении мозга.

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

                                                    Применяя вашу логику, если некоторое существо (животное, компьютер или ребёнок) не знает, что камень перед ним красный, зелёный или круглый (не имеет соответствующего понятия), то он его не может видеть. Видите логическую ошибку? Так что, пожалуйста, дайте определение понятия «анализируется», которое вы применяете, и мы разберём, что именно анализируется нейроном, который вы, верные своей привычке к манипулированию, внезапно подменили на on- и off- клетки и две секунды, вероятно, надеясь оказаться неправым лишь частично, но даже тут оказались полностью не правы (т.к. ганглионарные клетки преимущественно адаптируются к быстрому изменению освещённости, а биполярные к медленному, о чём в википедии явно не написано, но упомянуто в книге по ссылке ниже — а что это, как не анализ ситуации, происходящий одновременно с запоминанием результатов этого анализа — и, кстати, «границы линий» в основном определяются в зоне мозга V1, а ганглионарные и биполярные нервные клетки — располагаются в сетчатке глаз).
                                                    Хоть бы википедию почитали, прежде чем аргументированно спорить, вот вам русские статьи, их вполне достаточно:
                                                    https://ru.wikipedia.org/wiki/Ганглионарная_клетка
                                                    https://ru.wikipedia.org/wiki/Биполярные_клетки_сетчатки
                                                    https://ru.wikipedia.org/wiki/Зрительная_кора
                                                    А вот момент, который пришлось поискать в книжке: https://books.google.ru/books?id=CepVYuTHYmIC&pg=PA55&lpg=PA55&dq=биполярные+клетки+адаптация+к+освещенности&source=bl&ots=UJHi08UPnG&sig=IRp0tJ9vTraNTQchrtQf5avVwIQ&hl=en&sa=X&redir_esc=y#v=onepage&q=%D0%B1%D0%B8%D0%BF%D0%BE%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BB%D0%B5%D1%82%D0%BA%D0%B8%20%D0%B0%D0%B4%D0%B0%D0%BF%D1%82%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BA%20%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8&f=false
                                                    Вот примерно такого же уровня у меня и претензии к постам Алексея: на взгляд «неспециалистов» всё стройно и логично, как в учебнике, а копнёшь глубже — и видно, что местами (подчёркиваю, местами!) выдаётся желаемое за действительное.
                                                    Я даже объясняю, почему это происходит — потому что теория не равна практике, и предлагаю примеры, чтобы в этом убедиться. Вероятно, часть материала у Алексея пока отработана лишь теоретически на основе переосмысления чужих моделей и данных нейронаук. Но, пока вы не попробуете описанное в литературе реализовать тем или иным образом, вы и не заметите ошибок и нестыковок.
                                                      0
                                                      Применяя вашу логику, если некоторое существо (животное, компьютер или ребёнок) не знает, что камень перед ним красный, зелёный или круглый (не имеет соответствующего понятия), то он его не может видеть. Видите логическую ошибку?

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


                                                      нейроном, который вы внезапно подменили на on- и off- клетки

                                                      on и off клетки это тоже нейроны.


                                                      вероятно, надеясь оказаться неправым лишь частично

                                                      Нет, я на это не надеялся.


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

                                                      Это адаптирование к входным данным Можете назвать это анализом, только это анализ на уровне понятий клетки. Если до входа клетки не появилось понятие "цвет светофора", то клетка его анализировать не будет.
                                                      Они распознают границу свет/темнота, вот эти понятия и влияют на их поведение.
                                                      Я об этом и сказал — информация обрабатывается и передается дальше.
                                                      Будет приходить другая информация — будут передаваться другие результаты.
                                                      Изменилось освещение — изменилось поведение.
                                                      Запоминания предыдущего поведения нет.


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


                                                      и, кстати, «границы линий» в основном определяются

                                                      Граница между светлым и темным определяется в on-off клетках. Граница между светлым и темным это линия. Ориентация и длина линии определяются дальше, в следующих слоях, на основе сигналов от этих клеток.


                                                      Вот примерно такого же уровня у меня и претензии к постам Алексея

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


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


                                                      Но, пока вы не попробуете описанное в литературе реализовать

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

                                                        0
                                                        >Это адаптирование к входным данным Можете назвать это анализом, только это анализ на уровне понятий клетки.
                                                        Понимаете, нету у человека локализации анализа в каком-то определённом месте мозга. В ваше определение «анализа» или попали бы и нейроны глаза, или не попала бы большая часть нейронов мозга.
                                                        Может, просто неудачный термин для того, что вы хотели описать…
                                                        >У вас претензии вида «а вот у меня в нейросети не работало, значит и у вас не будет работать»
                                                        Я не только в нейросети такое делал, я HTM CLA тоже делал и визуализировал: смотрел, что учат нейроны, как происходит обучение, как самонастраиваются перцептивные поля, и как два слоя друг с другом взаимодействуют.
                                                        И, понимаете, верхнеуровневая логика и проблематика от нейросетей вообще не отличается, хотя детали, конечно, немного отличаются.
                                                        А ещё я bloom filter и sparse encoding использовал в реальных задачах — наверное, я и в этом что-то понимаю теперь?
                                                        >и «а сделайте вот этот пример, в котором даже человеку непонятно, какая следующая цифра»
                                                        Ну придумайте любой другой тест на стабильность-пластичность, если этот вам некомфортен. Последовательности есть у Алексея в этой статье, поэтому я и предложил тест на последовательности.
                                                        >Но подход у меня был не математический, а практический — продумать весь путь обработки информации на уровне реакции отдельных нейронов.
                                                        Так понимаете, не зря говорят «great minds thinks alike» — когда вы пытаетесь построить архитектуру, вариантов не так много, и все люди приходят примерно к одним и тем же идеям. Только кто-то их потом скрупулёзно исследует и вычисляет их применимость на реальных задачах, а кто-то лишь строит «свою уникальную модель», и умышленно или неумышленно скрывает недостатки.
                                                        В плане идей — да, почитать статьи Алексея, переосмыслить другие знания — вполне можно. В плане реализации чего-либо — я бы поостерёгся опираться на подобную непроверенную технологию.
                                                        >Если у вас есть другое логичное объяснение, напишите статью, это будет полезнее, чем придирки в комментариях
                                                        Да уже много книг и статей написано, я на некоторые даже ссылался.
                                                        >Здесь описывается другой подход, который может и похож на существущие, но в нем дается объяснение, почему они работают.
                                                        Тут скорее что-то типа «автор так круто рассказывает, я многое переосмыслил в своей голове, пусть он даже считает, что 2+2*2=137». Можно к этому по-разному относиться, я отношусь одним образом, вы — другим.
                                                          0
                                                          Понимаете, нету у человека локализации анализа в каком-то определённом месте мозга.

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


                                                          я HTM CLA тоже делал и визуализировал, bloom filter и sparse encoding использовал в реальных задачах

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


                                                          В плане реализации чего-либо — я бы поостерёгся опираться на подобную непроверенную технологию

                                                          Как можно проверить технологию, не создавая реализацию? Даже наоборот, аргумент "работает же" гораздо лучше всяких теоретических доказательств. Если работает, конечно.


                                                          Да уже много книг и статей написано, я на некоторые даже ссылался.

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

                                                            0
                                                            >>Понимаете, нету у человека локализации анализа в каком-то определённом месте мозга.
                                                            >Есть. Неважно как это назвать, важно то, что на некотором уровне появляется осознание отдельных объектов (сущностей), их поведения, и оценка времени и акуальности («горит сейчас / горел до этого»). В сетчатке вы такой обработки не найдете, и сеть, построенная только на этих принципах, способности естественного интеллекта проявлять не будет. Что в общем-то и заметно по текущей ситуации в этой области.
                                                            В процессоре вы тоже не найдёте места, в котором появляется осознание отдельных объектов, значит ли это, что на процессорах не реализовать компьютерное сознание в принципе?

                                                            >>я HTM CLA тоже делал и визуализировал, bloom filter и sparse encoding использовал в реальных задачах
                                                            >У вас есть искусственный интеллект, который можно использовать как аналог естественного в реальных задачах? Или хотя бы теория, как его сделать? Или хотя бы теория, как работает естественный интеллект и почему именно так?
                                                            Нет. Да. Да.
                                                            У нас уже есть различные куски искусственного интеллекта, но не всё в целом — в основном, отстаёт работа с текстом.
                                                            >Это не аргумент «сперва добейся», это напоминание, что нейросети, которые вы делали и использовали, пока способностей естественного интеллекта не проявляют. Поэтому неважно, сколько у вас них опыта. Раз они не работают, значит нужны другие подходы.
                                                            Всё сложнее. У кошки есть нейроны, но говорить по-человечески она не умеет. Значит ли это, что у неё вообще нет интеллекта?
                                                            Можно ли прийти к интеллекту, решая постепенно разные подзадачи и объединяя их в цельную систему, или же нужно обязательно всю систему строить разом и на основе единой вычислительной платформы?

                                                            >>В плане реализации чего-либо — я бы поостерёгся опираться на подобную непроверенную технологию
                                                            >Как можно проверить технологию, не создавая реализацию? Даже наоборот, аргумент «работает же» гораздо лучше всяких теоретических доказательств. Если работает, конечно.
                                                            Можно проверить, смоделировав в голове, или построив упрощённую или аналогичную модель. Но так можно и ошибиться.

                                                            >>Да уже много книг и статей написано, я на некоторые даже ссылался.
                                                            >Только воз и ныне там. Эти нейросети нельзя использовать вместо естественного интеллекта.
                                                            Ни в одной задаче нельзя, или в некоторых задачах всё-таки можно?
                                                              0
                                                              В процессоре вы тоже не найдёте места, в котором появляется осознание отдельных объектов, значит ли это, что на процессорах не реализовать компьютерное сознание в принципе?

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


                                                              Нет. Да. Да.

                                                              Почему ж никто его еще не сделал? Может теория неправильная? Или недостаточная?


                                                              У нас уже есть различные куски искусственного интеллекта

                                                              Так речь и идет о том, как оно работает в целом. Калькуляторы уже давно придумали.


                                                              У кошки есть нейроны, но говорить по-человечески она не умеет. Значит ли это, что у неё вообще нет интеллекта?

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


                                                              или же нужно обязательно всю систему строить разом

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


                                                              Ни в одной задаче нельзя, или в некоторых задачах всё-таки можно?

                                                              Так вопрос как раз про другие задачи. Почему их решить нельзя. Может мы что-то делаем не так?

                                                                +1
                                                                Да всё у нас правильно с теориями.
                                                                Но вы забываете про главное: нейросети всё ещё в миллион раз меньше человеческого мозга по вычислительной мощности на единицу времени.
                                                                На маленьких задачах (по затратам выч. мощности) и при достаточности тренировочных данных нейросети уже обгоняют среднего, а иногда даже лучшего человека. Примеры таких задач приводить или сами знаете?
                                                                Чтение по губам, распознавание звуков и речи с ограниченным словарём, распознавание рукописных цифр и букв, распознавание дорожных знаков и иероглифов. Внутри Gboard и Swiftkey — нейросети.
                                                                Вот недавно распознавание позиции на доске 19х19 пикселей лучше лучшего человека научилась делать (это я про AlphaGo).

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

                                                                > Кошка распознает объекты и действует в соответствии с результатом.
                                                                Нейросети тоже. Есть робомашины, есть baxter, вот вам даже квадракоптер: https://geektimes.ru/post/289105/
                                                                Просто поймите: от кота надёжности никто не требует, а к роботу предъявляются повышенные требования. Робомашина не может водить на уровне среднего человека: чтобы её выпустили на дорогу, она должна водить хотя бы на уровне профессионального водителя. А робопылесос не должен бояться проходящих людей и обнюхивать другие пылесосы, или внезапно отказываться работать и убегать.
                                                                >Причем двухмесячный котенок справляется с этим лучше, чем любая существющая нейросеть.
                                                                Это не так. В очередной раз вы приукрашиваете действительность.
                                                                  0
                                                                  на железе в миллион раз более слабом, чем мозг человека.

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


                                                                  от кота надёжности никто не требует, а к роботу предъявляются повышенные требования

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


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

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

                                                                    0
                                                                    Скоро этот хайп с нейросетями снова пойдёт на убыль лет на десять. Новый пинок был от свёрточных сетей, но всё, что можно, из них уже выжали, сейчас пошли одни повторы — растут в ширь, а не в глубь. Их эксплуатируют только по причине отсутствия других инструментов. Все понимают, что система, которая обучается только путём последовательных миллиардов подкручиваний миллионов коэффициентов, не способна на обучение с однократным предъявлением.
                                                                      0
                                                                      С трудом удерживаюсь, чтобы не вступить в общее обсуждение. Все говорят неглупые вещи. Ставят правильные вопросы. Я знаю как свести все это воедино и сделать универсальную модель. Но очень не хочется затевать этот интересный, важный и достаточно долгий рассказ в комментариях. Следующая часть должна расставить точки над i. К сожалению, запрограммировать и отладить все, что хотелось бы быстро не получается. В крайнем случае буду рассказывать по частям, описывая то, что реализовано. Наберитесь терпения.
                                                                        0
                                                                        Алексей, пишите посты, описывайте на видео.
                                                                        При понятном описании, повторить рабочую схему, сравнить её с другими решениями или убедиться в её неработоспособности и найти ошибки — достаточно быстрое дело.
                                                                        0
                                                                        1) Слишком хорошо вы про человека отзываетесь.
                                                                        2) Способна нейросеть на обучение с однократным предъявлением. Просто тогда итоговое качество хуже, чем от миллиарда подкручиваний — как и у человека, кстати. Если новое запоминается слишком сильно, то старое забывается или искажается. Помните анекдот про «Темно, как у негра где?».
                                                                        3) Вы сравниваете нейросеть и человека. А лучше сравнивать программу, включающую нейросети, и человека. Нейросеть — лишь часть решения, как и у человека нейроны коры — лишь часть мозга и человека. Уж программу, умеющую запоминать с одного предъявления, несложно написать, правда?
                                                                        0
                                                                        >>на железе в миллион раз более слабом, чем мозг человека.
                                                                        >А почему мы еще не сделали аналог, который будет так же быстро работать? >Может потому что мы еще не знаем, как он работает? Железо работает на частотах в гигагерцы, а биологические клетки на уровне сотни герц.
                                                                        Только, по оценкам, биологических нейронов у человека 10^11 и памяти между ними 10^14 бит, а процессоров в видеокарте тысяча, хоть и в 10^5 раз более быстрых, и памяти на видеокарте 10^10 бит. В лучшем случае получите разницу в 1000-10000 раз по мощности. У нас нет времени ждать годы для их обучения, поэтому компьютеры обучают за дни — вот вам ещё фактор в 100х.
                                                                        Итого, по очень грубой прикидке: домашний компьютер без видюшки или смартфон — в миллион раз медленнее мозга, с видюшкой — в 100 тыс раз, серверная ферма — в 1000 раз.
                                                                        Осознали теперь масштабы?
                                                                        Вы старые посты Алексея читали? Он там даже свою оценку мощности мозга предлагает — в 10^16.
                                                                        Специализированные чипы тоже пытаются делать, но на видюшки уже спрос есть, а для специализированных чипов стоит проблема курицы и яйца: когда нет софта и нет железа, нужно одновременно делать и то и другое и чтобы они друг к другу подходило — а это гораздо дольше. (И внвестиции в такие длительные проекты труднее найти)
                                                                          0
                                                                          Только, по оценкам, биологических нейронов у человека 10^11 и памяти между ними 10^14 бит

                                                                          — Да, только для задачи например перевода, они используются не все.
                                                                          — Довольно большая часть нейронов обрабатывает зрительную информацию. А оценка смысла от типа информации не зависит.
                                                                          — Эти оценки очень условные. Как раз потому что никто не знает, как оно работает на самом деле.
                                                                          — Речь идет не о быстродействии, а о принципе. Нет ни одного устройства с аналогичными возможностями, пусть даже работающего медленно. Есть только имитации, нацеленные на конкретные задачи. AlphaGo не умеет играть в шахматы.
                                                                            0
                                                                            >— Да, только для задачи например перевода, они используются не все.
                                                                            Ну хорошо, пусть десятая часть мозга. Это что-то меняет?
                                                                            >— Эти оценки очень условные. Как раз потому что никто не знает, как оно работает на самом деле.
                                                                            На таком оценочном уровне — знают.
                                                                            >AlphaGo не умеет играть в шахматы.
                                                                            А я вот умею играть в шахматы, но не умею играть в го. Но это показывает лишь то, что меня не тренировали играть в го.
                                                                            Но и в случае человека и компьютера, это не принципиальная проблема, а вопрос качества и быстродействия.
                                                                            Вот почитайте: https://research.googleblog.com/2017/06/multimodel-multi-task-machine-learning.html
                                                                            >Нет ни одного устройства с аналогичными возможностями, пусть даже работающего медленно.
                                                                            Да откуда берутся такие ваши смелые но расплывчатые заявления? RL вполне успешно работает на практике, квадракоптер я вам показывал, просто людям нужно непременно чтобы качественно и в real-time.
                                                                            Какие именно «аналогичные возможности» вам нужно, которых нет?
                                                                              0
                                                                              Но это показывает лишь то, что меня не тренировали играть в го.

                                                                              Но вы можете научиться играть в Го, Причем просто услышав правила. А AlphaGo не сможет научиться играть в шахматы. А если научится, перестанет играть в Го. Поэтому нет, проблема принципиальная.


                                                                              2017/06/multimodel-multi-task-machine-learning.html

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


                                                                              RL вполне успешно работает на практике, квадракоптер я вам показывал

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


                                                                              Какие именно «аналогичные возможности» вам нужно, которых нет?

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

                                                                                0
                                                                                Вам самолёт или махолёт? Шашечки или ехать?
                                                                                Да, это имитация, как и любая модель, но уже неплохая имитация, и я объяснил выше, почему так происходит.
                                                                                И one-shot/few shot learning для нейросетей тоже есть, если надо — но ценой качества. Как и у человека, кстати.
                                                                                А в го я не научусь хорошо играть, читая правила — а лишь только играть по правилам. Это два разных вида научения, и один — интуитивный — компьютеру намного проще повторить, он требует меньше логического интеллекта, которого у животных нет или почти нет, и у человека тоже мало — потому что логическому интеллекту нужно на порядки больше мозгов!
                                                                                Но тут прогресс тоже есть, погуглите по «neural networks relation learning», на маленьких задачах с этим тоже справились не хуже человека, как видите. Принципиального барьера нет.
                                                                                По собаку и изменение нескольких пикселей отвечу так: вы выбираете удобные для себя примеры, чтобы показать, как далеко нейросетям до людей. Но нет, нейросетям не настолько далеко до людей.
                                                                                На «контрпримерах» из разноцветных пикселей я тоже вижу «банан» или «панду» — хоть и едва-едва, это значит, что нейросеть видит даже в чём-то *лучше* человека, да и визуальные глюки у людей бывают тоже, а действовать по словесной команде попробуйте научить кошку, у которой нейронов не меньше, чем у собаки. Да, кстати, попробуйте собаку научить играть в игру го по правилам.
                                                                                Да, и, применяя вашу логику так же избирательно, как и вы: кошка и собака — это тоже плохая внешняя имитация результата, да?
                                                                                Вы просто идеалист: вам подавай всё и сразу. Ну, удачи тогда, ждите, пока мощность вырастет, раз уж неплохо работающая имитация вам не нравится.
                                                                                  0
                                                                                  Да, кстати, попробуйте собаку научить играть в игру го по правилам.

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


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

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


                                                                                  кошка и собака — это тоже плохая внешняя имитация результата, да?

                                                                                  Наоборот. Я ведь не просто так их привел в пример, сравнивая с нейросетью.


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

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

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

                                Так что, по крайней мере, меня, buriy, не надо приписывать к девушкам с обманутыми надеждами, я уже получил от статей Алексея пользу.

                                =====

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

                                Пожалуйста, — модель «предсказывает» часто следующий символ/слово. Можно использовать для подсказок набора текста, прогнав через неё «Войну и Мир».

                                «abc» => d | a0,b1,c2 => d0
                                «bcd» => e | b0,c1,d2 => e0
                                «i am feeling» => «good» | i0,a2,m3,f5,e6,e7,l8,i9,n10,g11 => g0,o1,o2,d3

                                =====

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

                                Насколько помню, именно на таком принципе у гугла работает новый переводчик. Ему скормили огромное количество таких множеств-«нарезок» от волонтёров переводчиков, и он нашёл в них закономерности отображения одного языкового пространства в другое, даже не зная и не применяя никаких правил этих языков, чем особенно гордятся в гугле.
                                  0
                                  У вас модель supervised или unsupervised?
                                  Если supervised — то это аналог обычной нейросети с backpropagation. Да, известно, что оно работает, есть лишь один недостаток: требует supervision, а это очень сильно ограничивает круг решаемых задач, например, в синтактическо-семантическом анализе языка всё по-прежнему плохо, т.к. нет больших качественных датасетов.
                                  Но это непохоже на человеческий мозг, которому посвящена большая часть статей Алексея. Т.е., получается, Алексей развивает не одну модель, а несколько разных — может, потом он их и объединит, но сейчас это непонятный микс из нескольких моделей.
                                  Если unsupervised — то есть HTM CLA, и есть spiking neural networks. Такие модели в целом ближе к мозгу. Они тоже это всё отлично реализуют, и не сильно отличаются от модели Алексея — ведь у всех общий объект для моделирования. Но они относительно медленные — потому как более сложные для моделирования. Аналог в мире нейросетей — autoencoders, реализации разные, но обычно они быстрые и могут обработать много данных. Вот например: https://blog.keras.io/building-autoencoders-in-keras.html
                                  И у unsupervised-моделей есть один недостаток: подобные модели склонны к выучиванию того, что интересно им, а не экспериментатору. Когда это экспериментатора устраивает, и датасета для supervised learning нет, ими вполне себе пользуются. Качество обычно хуже supervised, в том числе и из-за той проблемы, о которой я говорил выше: подобные модели склонны путать корреляцию и реально присутствующую закономерность. У однослойных спайковых сетей есть для защиты порог отсечения, который можно легко настроить под задачу. У многослойных спайковых сетей с этим труднее — и отсюда возможны различные проблемы, связанные с качеством генерализации (https://ru.wikipedia.org/wiki/Обобщение_понятий) и с возможным накоплением ошибок (из-за отсутствия/недостатка целевой обратной связи).
                                  Так что посмотрим, как Алексей справится с перечисленными проблемами.

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

                                  >Так что, по крайней мере, меня, buriy, не надо приписывать к девушкам с обманутыми надеждами, я уже получил от статей Алексея пользу.
                                  1) Я думаю, вы бы получили ещё больше пользы, если бы почитали статьи по тем же нейросетям и вообще по ML.
                                  2) Вы вполне могли от Алексея получить не только пользу, но и какие-то заблуждения ( заметьте, та же проблема, что и с unsupervised learning :D ), в то время, как в других источниках информация «чище», потому что она подкреплена практическими измерениями.
                                  Например, очень рекомендую книжку http://neuralnetworksanddeeplearning.com по нейросетям,
                                  HTM CLA — про модель от Numenta (есть русский перевод: https://numenta.com/assets/pdf/whitepapers/hierarchical-temporal-memory-cortical-learning-algorithm-0.2.1-ru.pdf ).
                                  И в википедии:
                                  https://en.wikipedia.org/wiki/Spiking_neural_network
                                  https://en.wikipedia.org/wiki/Autoencoder
                                  https://en.wikipedia.org/wiki/Machine_learning
                                    0
                                    Например, обнаружит влияние пиратов на глобальное потепление.

                                    Маленький Альберт.

                                    * Вы слишком зашорены классическими нейронными сетями.
                                      0
                                      Дополню.
                                      обнаружит влияние пиратов на глобальное потепление.

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

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

                                      Такие модели в целом ближе к мозгу. Они тоже это всё отлично реализуют, и не сильно отличаются от модели Алексея

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

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

                                        >Тогда чего вы прицепились к этой модели Алексея? Сами говорите, что она ближе к мозгу и аналогична другим авторитетным моделям.
                                        Сложный вопрос. У меня скорее пока претензии к unsupervised learning с помощью модели Алексея, но может, ему просто нужно опубликовать ещё статьи и дополнить или исправить то, что уже есть.
                                        >Вообще непонятно, как можно советовать мне Нументу (кстати, спасибо, но я её знаю со времён её раннего появления) и хаять эту модель. Вы уж определились бы к какому лагерю принадлежите, одно другое исключает.
                                        Увы, тут тоже всё небинарно.
                                        У Numenta тоже модель работает, просто её итоговое качество оказывается достаточно низким на доступных вычислительных мощностях (по сравнению с нейросетями, скажем), и, опять же, на доступных мощностях, она не решает те проблемы, о возможности решения которых она с пафосом заявляет.
                                        >Вы слишком зашорены классическими нейронными сетями.
                                        Вот тут вы сильно неправы. Я, скорее, сфокусирован на качестве результата — и это, кстати, моя основная претензия к нейросетям, т.к. их качество всё ещё достаточно низкое для больших задач.
                                    0
                                    Алексей, вы писали, что миниколонки зрительной коры обучаются представлять одну информацию в разных контекстах за счет движения глаз. К примеру, линия сначала в одной позиции — один паттерн, потом линия смещается — это другой паттерн, и миниколонка таким образом учится представлять эту линию в определенном контексте. Но тогда у миниколонки и движения глаза должна быть какая нибудь синхронизация, чтобы колонка знала, когда первый паттерн а когда второй. Как это может быть реализованно?
                                      0
                                      Есть вехние бугры четверохолмия они управляют движением глаз. Похоже, что при движениях кроме команды мышцам глаз создаются и коды самих движений, которые описывают направление и амплитуду смещения. Эти коды поступают на зрительную кору вместе с самой зрительной информацией и обрабатываются совместно. Сама информация приходит последовательно друг за другом, коды перемещений маркируют ее и позволяют работать с контекстами.
                                        0

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

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

                                      Алексей, опубликуйте, пожалуйста, то, что есть. Даже, если зашли в тупик.

                                      Появилась работа по капсульным сетям.
                                      tproger.ru/news/capsule-neural-network
                                      arxiv.org/abs/1710.09829
                                      openreview.net/forum?id=HJWLfGWRb&noteId=HJWLfGWRb

                                      Перекликается с Вашей работой по части контекста.
                                      обнаруживает в изображении определенный признак и распознает его в разных сценариях. Например, под разным углом.
                                        0
                                        а где можно подробнее по капсульным сетям на русском почитать?
                                          0
                                          Пока видимо нигде. Статья Хинтона только вышла.
                                            0
                                            В ближайшие дни будет продолжение. Статья Хинтонв интересная. Но идеология ближе к сверточным сетям, чем к контекстам. Один капсуль заточен на распознование одного образа, но в разных контекстах. Один контекст — распознование всех образов, но только в этом контексте.
                                              0
                                              Спасибо.

                                              После прочтения статья Хинтона, к сожалению, меня разочаровала. Это действительно оказалось теми же самыми сверточными сетями, но с «3D ускорителями».
                                                0
                                                Очень жду продолжения, о том как происходит взаимодействие миниколонок между собой и создание «больших» сложных контекстов из множества составных простых.

                                                Спасибо за статьи!

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

                                        Самое читаемое