В комментариях к статье Алгоритмическая неразрешимость – это не препятствие для алгоритмического ИИ я высказался, в свете того, что
Почему-то все зациклились на задачах NP. Но никто почему то не ставит задачи БЫСТРЕЕ решать задачи класса P (вплоть до мгновенного ответа)
и намекнул, что проблемы построения ИИ заключаются скорее в принципиальной (непреодолимой) медленности компьютеров построенных по принципу машин Тьюринга.
В статье же говорилось о теоретической проблеме алгоритмической неразрешимости на примере задачи останова.
Человек решает задачу останова, но делает это с ошибками, вероятность которых повышается с усложнением программ. Способность человека решать алгоритмически неразрешимые проблемы (как массовые проблемы) является крайне сомнительной. Его способность находить решения для отдельных частных случаев ничего не доказывает, ведь это под силу и компьютеру.
и вот тут кажется недооценен «алгоритм» работы человек с нахождением частных случаев. Не под силу это компьютеру, ему не хватает устройства, благодаря которому он мог бы выделять частные случаи. Конечно, в комментария в этой статье — многие сразу закодировали эти частные случаи, но речь же идет о том, чтобы компьютер сам это осуществил бы при решении. Представляется, что нахождение частных случаев как минимум принципиально снижает сложность расчетов. Человек упрощая и идеализируя затем переходит к формулированию законов, тем самым переходя на качественно другой уровень. И вот это компьютеру не доступно.
Но все по порядку.
Как человек решает проблемы?
Человек решает проблемы (структурные проблемы, а не параметрические (уточнение терминов позже) ) существенно быстрее, чем их принципиально можно высчитать на любой мыслимой вычислительной машине. Но за счет чего? Как гипотеза: за счет потери всеобщности решения, т.е. сводя к определенному множеству частных конечных решений, и лишь вера позволяет решенную проблему мыслить как решенную вообще, пока не будет найдено опровергающие частное решение.
Пример: Посмотрим тот период когда ребенок учится считать. Он уже умеет считать до 100. Умеет складывать/вычитать числа до 10. Но он еще не может решить примеры складывания десятков. Например когда его просят решить 10+10=, или 20+10=. Это вызывает существенные проблемы. Но в тоже время он же понимает принципы сложения и уже считает до 100. Т.е. ребенку надо просто сложить 10+1+1+1+1+1+1+1+1+1+1. Но ни взрослые, ни ребенок не считает это решением. Пока он сходу не отвечает 10+10=20, мы считаем что он не знает этого, не умеет, не понимает как складывать. Т.е. полиномиальное вычисление не признается человеком за умение считать. Вот и компьютер этого делать не умеет. Можно так же попробовать вычислить 10+1+1+1+1+1+1+1+1+1+1 параллельно, но окажется, что распараллеливание не сокращает число расчетов, время лишь немного можно сократить. Но главное для решение необходимо знание глобального контекста (см. ниже). Что же приходит на помощь? — введение структуры при вычислениях. Не известно почему, но исторически человек пришел к тому, что считать десятками (не пятерками, дюжинами или двоично) удобнее. И поэтому когда мы учим ребенка считать мы отдельно учим прибавлять десятки, отбрасывая ноль, приводя к такой форме 10+10=1+1+«0»=20. Т.е. убираем нули, складываем единицы и просто приписываем ноль снова. Это и есть структурное разложение операции сложения. Это правило далеко не всеобщие, но именно оно позволяет считать быстрее в определенных нужных случаях, чем потенциально способно любая вычислительная машина, в которой этот аспект не структурирован.
Примеры структурной адаптации
Как же возможно преодолеть предел полиномиального вычисления для полиномиальных задач.
Чтобы не вдаваться в детали, предположим, что перцептрон Розенблатта решает задачу «четность», поставленную Минским. Если на пальцах, то проблема там такова, что несмотря на то, что перцептрон работает параллельно, чтобы определить четно или нечетно число единиц на входе, требуется как минимум один узел, который был бы связан со всеми входами. Т.е. требуется знать глобальный контекст.
И тогда мы видим, что ценность параллельных устройств для таких задач как сложение, умножение и т.д. становится не очень высока. Степень параллельности на таких базовых вещах минимальна.
Но допустим, что мы имеем 4 точки со значениями 0 (нет точки) или 1 (есть точка). Тогда есть 16 комбинаций для которых нужно ответить четно ли число точек. Если мы уберем хотя бы одну комбинацию, то требование глобального контекста становится необязательным.
Тогда такое решение при R=4 и с потерей одного стимула — подсказывает нам логику действия. Давайте потеряем всеобщность решения, но решим всё остальное и плюс к этому будем знать на каком стимуле мы делаем ошибку.
Такой подход, приводит нас к определенному устройству. Допустим некая система G будет нам говорить сколько точек на сетчатке, т.е. будет реализовывать инвариант размер. Тогда нашу обучающую выборку можно разделить на 4 части в зависимости от размера. И далее отдельно провести обучение на разных «колонках» промежуточных нейронов. Что это даст? Это позволит существенно сократить число связей с необходимых 4 до 2. Почему это стало возможно? Потому, что каждая обучающая выборка не содержит проблемы «целиком», и соответственно не требует решения проблемы «четность» вообще.
Используя инвариант «размер» наша задача стала даже вырожденной, т.к. знание размера = знанию числа точек, и используя это знание уже проще сказать четно это число или нет. Но допустим мы решаем задачу, где имеющийся инвариант «размер» не облегчает так прямо нашу задачу. Что тогда? Облегчение произойдет косвенно, главное с помощью инварианта размера задача будет разбита на части, и аналогично задачи «четность», обучающая выборка будет разделена, что и уменьшит всеобщность требуемого решения. И опять будут необходимы на порядок меньше связей, чем нужно для решения задачи вообще.
На пути к «жидкому перцептрону»
Нам осталось теперь посмотреть чего нам стоит организовать систему G, которая в частном случае будет реализовывать инвариант «размер». Тут ни какого чуда не случилось? Конечно, нет — наш закон о необходимости глобального контекста преодолеть нельзя.
Допустим мы реализуем систему G как 4 пороговых элемента, которые соединены со всеми входами, но у них стоят разные пороги. Элемент а1 будет пропускать сигнал, если число точек больше нуля, а2>1, a3>2, a4>3. И снова мы здесь использовали соединения все со всеми и «перерасходовали» число связей. Но дело в том, что логическая структурная адаптация без физической структурной адаптации действительно дает мало толку.
Но если мы физически откажемся для нашей системы G использовать принцип соединения связей, и заменим на более физически пригодную систему «концентрации жидкости», то эффект уже будет наблюдаться (практический). Такую систему «концентрации жидкости» можно представить себе так: предположим наш перцептрон плавает в жидкости. Входы посылают не только электрические сигналы по связям, но и химически воздействуя на жидкость. Жидкость имеет определенный уровень концентрации «кислотности». Промежуточные нейроны имеют разный уровень терпимости к «кислотности». Чем больше электрических сигналов появляется на входах, тем больше уровень концентрации становится в жидкости. А с повышением уровня концентрации начинают постепенно «отрубаться» те или другие группы нейронов, которые менее терпимы к «кислотности». И тем самым под действием электрических сигналов обучается только специально выделенная группа нейронов, определенной части одной задачи.
Люди знакомые с нейрофизиологией поймут, что описанная система по сути есть упрощенный прототип биологической нейросистемы. Но если в теории перцептронов ранее использовали только идеи о электрическом взаимодействии, то теперь становится ясным для чего необходимо еще и химическое взаимодействие. Если электрическое взаимодействие реализует «целенаправленность», то химическое обеспечивает «глобальным контекстом».
Автор: tac