Comments 15
Есть похожая методология искусственного интеллекта - называется "биморф", возможно вас заинтересует.
Нашёл вот это описание, сложное для быстрого понимания. Да, пересечение по ключевым словам есть. Спасибо вам.
Сделал пару попыток разобраться в "биморфе" по его описанию для чайников - не вышло. Заглянув в его код, убедился окончательно, что это невозможно.
пример 1 - а разве тут есть детектор аномалий? в чем выражается аномальность? как подтвердить что это не garbage in - garbage out?
Да, разумеется, это детектор аномалий, multivariate из коробки. Клонируйте этот репозиторий, поиграйте в OutlierDetectionPlayground, а также OutlierDetectionSample, все сомнения пропадут.
"Аномальность", действительно, бывает сложно найти невооруженным глазом на многоканальных данных. Как подтвердить? Постепенно наращивая сложность входящих данных, экспериментируя. На выходе детектора безразмерная величина, от 0 до 1, чем выше, тем "аномальнее" поток на входе.
8 конечных элементов вы нашли как 2 (число состояний нейрона) в третьей степени (число рецепторов). Так можно рассчитать количество нейронов без учета времени.
Сеть же оперирует паттернами во времени, создавая причинно-следственные связи с паттернами из предыдущих тактов. В создаваемой структуре записывается поток (последовательность) состояний от "трёх бинарных рецепторов", а не, например, Бинарная диаграмма решений, хотя внешне на это похоже.
На каждый такт добавляется только один новый нейрон, на него прокидываются связи от прочих нейронов сети. Связи, при этом, создаются не "каждый с каждым", а довольно сильно разреженные. Степень "разреженности" никак не регулируется, а задаётся естественным образом, т.е. регулируется самим потоком данных. Максимальное число связей в зависимости от числа нейронов в сети n·n.
Думаю, ваш вопрос в следующем (поправьте). Вы бы хотели, чтобы был естественный (некостыльный) механизм ограничения роста сети, если на сеть приходит знакомый поток? Сейчас экспериментирую с сетью в режиме reinforcement learning. И - да, очень логично не заставлять сеть разрастаться, если текущая структура уже справляется с задачей.
То есть, сеть всегда растёт дерерминированно и решает какую-то одну задачу (мы даже не знаем, какую). А задач может быть множество.
Было бы неплохо ввести обратную связь. Результат работы системы — рост сети. Нужно на этапе обучения на каждом шаге давать оценку «хорошо/плохо добавлен узел», и алгоритм должен перестраиваться так, чтобы больше получать оценок «хорошо».
Другой вариант: ввести большое пространство параметров, чтобы сеть росла не по фиксированным правилам, а эти правила можно было бы сильно менять. Тогда внешний агент мог бы проводить обучение: рандомно выбрать параметры, запустить сеть на них, получить оценку, и каким-либо методом (градиентного спуска, например) перебирать параметры, настраивая сеть на требуемую задачу.
По моему мнению, основная проблема в том, что алгоритм расширения сети фиксированный.То есть, сеть всегда растёт дерерминированно и решает какую-то одну задачу (мы даже не знаем, какую). А задач может быть множество.
На самом деле, сеть вообще не решает никаких задач. Она просто подстраивает свою структуру под входящий в неё поток. Структура сети - это физическое воплощение потока. Множество задач, о которых вы говорите - они есть только в интерпретации "внешнего агента" - экспериментатора. Сеть работает с данными без каких-либо ярлыков, полностью абстрагируясь от объектов реального мира.
Как будем решать "множество задач"? Множество конкретных прикладных задач сеть будет решать, общаясь с внешним миром через соответствующие адаптеры. Например, вот код адаптера для детектора аномалий.
Другой вариант: ввести большое пространство параметров...
Я проектировал всё это таким образом, чтобы в базовой реализации уйти от числовых параметров. Было тяжело, числовые параметры преследовали на каждом шагу, от них действительно сложно избавиться.
Но я не настроен фанатично против параметров, скорее даже наоборот - числовые параметры потребуются, когда (например) надо будет ограничивать рост сети. Более того, я уже пробовал вводить затухание потока во времени, сопротивление при распространении потока, пороги возбуждения нейрона и т.п. Но это уже в рамках конкретных реализаций, не имеющих отношения к интерфейсам.
Было бы неплохо ввести обратную связь. Результат работы системы — рост сети. Нужно на этапе обучения на каждом шаге давать оценку «хорошо/плохо добавлен узел», и алгоритм должен перестраиваться так, чтобы больше получать оценок «хорошо».
Да. В заключении в статье есть слова про небольшой механизм "подстройки структуры по сигналам от внешней среды" - именно над этим работаю сейчас.
Вы предлагаете оптимизироваться по оценкам "хорошо". Моя рабочая гипотеза в том, что сеть после получения оценки "плохо" должна перестроить структуру (добавив новый нейрон), чтобы минимизировать получение "плохо" при распознавании того же пространственно-временного паттерна. Мотивация подхода? Как в эволюции, не приспособился - не выжил.
Спасибо, что находите время на анализ и комментарии.
Очень интересная реализация и ход рассуждений мне в целом близок, будем посмотреть как себя поведёт...
Структурная адаптация, brand-new самоорганизующаяся сеть на палочках и кружочках