Pull to refresh

Comments 15

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

Нашёл вот это описание, сложное для быстрого понимания. Да, пересечение по ключевым словам есть. Спасибо вам.

пример 1 - а разве тут есть детектор аномалий? в чем выражается аномальность? как подтвердить что это не garbage in - garbage out?

Да, разумеется, это детектор аномалий, multivariate из коробки. Клонируйте этот репозиторий, поиграйте в OutlierDetectionPlayground, а также OutlierDetectionSample, все сомнения пропадут.

"Аномальность", действительно, бывает сложно найти невооруженным глазом на многоканальных данных. Как подтвердить? Постепенно наращивая сложность входящих данных, экспериментируя. На выходе детектора безразмерная величина, от 0 до 1, чем выше, тем "аномальнее" поток на входе.

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

8 конечных элементов вы нашли как 2 (число состояний нейрона) в третьей степени (число рецепторов). Так можно рассчитать количество нейронов без учета времени.

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

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

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

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

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

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

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

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

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

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

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

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

Другой вариант: ввести большое пространство параметров...

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

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

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

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

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

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

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

Sign up to leave a comment.

Articles