Мета-кластеризация с минимизацией ошибки, и почему я думаю, что так работает мозг |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-10-24 10:02 Большие достижения в области машинного обучения, впечатляют. Сверточные сети и LSTM это круто. Но почти все современные технологии основаны на обратном распространении ошибки. На основе этого метода вряд ли получится построить думающую машину. Нейронные сети получаются чем-то вроде замороженного мозга, обученного раз и навсегда, неспособным
Я подумал, почему бы не попробовать создать что-то похожее на живой мозг. Этакий реинжиниринг. Поскольку у всех животных, несмотря на различия в интеллекте, мозг состоит из примерно одинаковых нейронов, в основе его работы должен лежать какой-то базовый принцип. Что я не знаю о нейронах Есть несколько вопросов, на которые я не нашел однозначных ответов в популярной литературе;
Просто кластеризация Правдоподобным ответом на все эти вопросы мне представляется то, что мозг работает как множество простых кластеризаторов. Можно ли выполнить такой алгоритм на группе нейронов? Например метод К-средних. Вполне, только нужно его немного упростить. В классическом алгоритме центры вычисляются итеративно как среднее всех рассмотренных примеров, но мы будем смещать центр сразу после каждого примера.
Проверим получившийся алгоритм на практике. Я набросал несколько строчек на Питоне. Вот что получается с двумя измерениями из случайных чисел: А вот MNIST: На первый взгляд, кажется что все вышеописанное ничего не изменило. Ну были у нас на входе одни данные, мы их как-то преобразовали, получили другие данные. Но на самом деле есть разница. Если до преобразования мы имели кучу аналоговых параметров, то после преобразования имеем только один параметр, при этом закодированный унитарным кодом. Каждому нейрону в группе можно сопоставить определенное действие. Приведу пример: Допустим в группе кластеризаторе есть только два нейрона. Назовем их “ВКУСНО” и “СТРАШНО”. Чтобы позволить мозгу принимать решение, нужно только к первому подсоединить нейрон “КУШАТЬ”, а ко второму “УБЕГАТЬ”. Для этого нам нужен учитель. Но сейчас не об этом, обучение с учителем тема для другой статьи. Если увеличивать количество кластеров, то точность будет постепенно расти. Крайний случай — количество кластеров равное количеству примеров. Но есть проблема, количество нейронов в мозге ограничено. Нужно постоянно идти на компромисс, либо точность либо размер мозга. Мета-кластеризация Предположим, что у нас есть не одна группа-кластеризатор, а две. При этом на входы подаются одинаковые значения. Очевидно, что получится одинаковый результат. Перед тем как подать пример на вход кластеризатора будем умножать этот пример на маску. Например, если маска используется для картинки, то если для какого-то пикселя маска равна единице, то она как бы совершенно прозрачна. А если маска равна нулю, то этот пиксель всегда черный. А если маска равна 1/2, то пиксель затемнен наполовину. А теперь главное действие, будем уменьшать значение маски пропорционально ошибке кластеризатора. То есть, если ошибка большая, то уменьшим значение сильнее, а если нулевая то не будем уменьшать совсем. Для того, чтобы значения масок постепенно не обнулились, будем их нормировать. То есть, сумма значений масок для каждого входного параметра, всегда равна единица. Если в одной маске что-то отнимается, то к другой это прибавляется. Попробуем посмотреть, что получается на примере MNIST. Видим что маски постепенно разделяют пиксели на две части. В правой части картинки показаны получившиеся маски. По окончании процесса, верхний кластеризатор рассматривает правую нижнюю часть, а нижний кластеризатор оставшуюся часть подаваемых примеров. Интересно, что если мы запустим процесс повторно, то получим другое разделение. Но при этом группы параметров получаются не как попало, а таким образом, чтобы снизить ошибку предсказания. Кластеризаторы как бы примеряют каждый пиксель к своей маске, и при этом пиксель забирает тот кластеризатор, которому пиксель подходит лучше. Попробуем подавать на вход сдвоенные цифры, не наложенные друг на друга, а расположенные рядом, вот такие (это один пример, а не два): Теперь мы видим, что каждый раз, разделение происходит одинаково. То есть, если есть единственный, явно лучший вариант разделения масок, то он и будет выбран. Случайным будет только одно, выберет ли первая маска левую цифру или правую. Я называю полученные маски мета-кластерами. А процесс формирования масок мета-кластеризацией. Почему мета? Потому, что происходит кластеризация не входных примеров, а самих входов. Пример посложнее. Попробуем разделить 25 параметров на 5 мета-кластеров. Для этого возьмем пять групп по пять параметров, закодированные унитарным кодом. То есть в каждой группе одна и только одна единица на случайном месте. В каждом подаваемом примере всегда пять единиц. На картинках ниже каждый столбец это входной параметр, а каждая строка это маска мета-кластера. Сами кластеры не показаны. 100 параметров и 10 мета-кластеров: Работает! Местами, даже немного напоминает изображение матрицы из одноименного фильма. Применяя мета-кластеризацию можно радикально снизить количество кластеров. Например, возьмем десять групп по десять параметров, в каждой группе одна единица. Если у нас один кластеризатор (нет мета-кластеров), то нам нужно 1010 = 10000000000 кластеров, чтобы получить нулевую ошибку. А если у нас десять кластеризаторов, то нужно всего 10 * 10 = 100 кластеров. Это похоже на десятичную систему счисления, не нужно придумывать обозначения для всех возможных чисел, можно обойтись десятью цифрами. Мета-кластеризация очень хорошо распараллеливается. Самые затратные вычисления (сравнение примера с центром кластера) можно выполнять независимо для каждого кластера. Обратите внимание, не для кластеризатора, а для кластера. Как это работает в мозге До этого я говорил только о дендритах, но у нейронов есть аксоны. Причем они тоже учатся. Так вот, очень похоже, что аксоны это и есть маски мета-кластеров. Заключение А теперь, если допустить, что мозг состоит из мета-кластеров, можно попытаться рассмотреть с этой точки зрения некоторые понятия, присущие живому мозгу: Источник: habr.com Комментарии: |
|