Наивное добавление слоев Boolean приводит к остановке или незавершению.
Введение
В своем предыдущем посте я представил функцию упрощения логической логики как форму машинного обучения. Здесь мы попытаемся сделать сети глубокими, похожими на многослойные персептроны, чтобы ввести иерархию логических формул.
Цель
Наивно создайте скрытый слой в логической сети и извлеките информацию из его производительности.
Эксперимент
Код можно найти по адресу: https://github.com/arjay55/Logic_learn_12202019
На этот раз добавляется плотный скрытый слой. Каждый узел представляет собой объект, состоящий из ff:
- логическая формула
- Таблица истинности оценивается как 1
- Таблица истинности оценена как 0
- Таблица правды не волнует
Как видно из рисунка выше, сеть по сути похожа на типичную плотную нейронную сеть, но описание узла представляет собой логическую формулу в форме SOP или Суммы произведений.
Ошибки, где node(j,k ) XOR node(j+1,k) == 1, заданное правильное значение получается из входных данных. Если входные данные взяты из набора неважно node(j,k), формула пересчитывается с новой таблицей истинности. В противном случае следующее значение из набора данных «безразлично» используется как правильное значение из node(j,k), таким образом обучая затронутые узлы, используя соединения в node(j- 1,k). Это аналогично «обратному распространению» в многослойных персептронах. Как указано в предыдущем посте, обновленная таблица истинности является частью атрибутов узла для дальнейших обновлений, поступающих из набора безразлично.
Алгоритм обучения:
Алгоритм обучения является аналогом «разработки через тестирование» в разработке программного обеспечения. Если вывод допускает ошибку, то для обучения получается обучающая выборка. Процесс повторяется до тех пор, пока не будет достигнута 100% точность. Цель состоит в том, чтобы достичь 100 %, если данные, используемые для обучения, меньше 100 %.
Эксперименты на 1 слое:
- Как и ожидалось, обучение проходит успешно, достигая 100% логической эквивалентности. Однако это привело к непосредственной неразрешимости (NP-hard) характеру обобщения булевой логики. Вы можете запустить более раннюю версию кода (), чтобы просмотреть обучение набора данных
Поскольку наивно добавляется плотная сеть, могут возникнуть некоторые проблемы:
- В этом эксперименте метод «обратного распространения» вместе с «обучением через тестирование» застревает в бесконечном цикле из-за той же ошибки при прямом распространении, что приводит к отказу в обучении. Это может быть связано с любой из следующих причин:
а. Чрезмерная связанность приводит к неверным предположениям, как показывает бритва Оккама. Это аналогично переоснащению в других алгоритмах машинного обучения.
б. Неспособность учиться аналогична оптимизации только до локального оптимума.
Выводы:
Сеть булевых узлов (узлов, содержащих логические формулы) требует дальнейшего изучения обучаемых архитектур со свойствами обобщения. Комментарии к этому исследованию приветствуются.
Дальнейшая работа:
В настоящее время проводится исследование новой гипотезы создания обучаемой булевой логической сети, которое может служить продолжением этой статьи/сообщения.