Искусственный интеллект

индекс
244,28

Вариант синхронной импульсной нейронной сети с обратными связями

Предупреждение


Предупреждаю, рассуждения на данный момент чисто теоретические. Но уж очень красивая теория получается. Или я схожу с ума. Интересно ваше мнение о моих рассуждениях — стоит ли затевать практическую реализацию?
Скажу честно, причина по которой родились все дальнейшие рассуждения в том, что мне не удалась одна моя дурная затея — научить нейронную сеть самостоятельно играть в тетрис. Обучать сеть с учителем нереально долго, т.к. учитель — это я, да и однозначно правильных вариантов движения фигурок в тетрисе нет. Был применён генетический алгоритм обучения сети. Максимум чему обучилась моя популяция за сутки виртуального процесса эволюции и естественного отбора — раскладывать падающие фигурки в три столбика (на самом деле она ещё научилась поворачивать фигурки так, чтоб они были скорее «горизонтальны», чем «вертикальны», но вот научиться делать поворот фигурок так чтоб линии убирались — оказалось не по силам).

Что мне не нравится в классических нейронных сетях (а-ля персептроны)


Как правило, когда рассматривают те или иные варианты применения нейронных сетей — подразумевают использование аналоговых нейронных сетей, наподобие персептронов и т.п.
Такие нейронные сети взяли от реальных, живых, организмов только самую поверхностную форму и суть. Вроде как самолёты взяли идею крыльев от птиц. Хотя используют их совершенно по разному (но с одной и той же целью). Фактически, различные вариации персептронов являются нелинейной функцией от суммы таких же нелинейных функций y=k1*f(k2*f(...)+k3*f(....)+...), и алгоритмы обучения просто подбирают значения коэффициентов k.
По причине слишком большого отличия реальных нейронных сетей от искусственных приходится изобретать различные суррогатные методы обучения сети. Естественно нигде в природе нет обучения сети «методом обратного распространения ошибки», как и нет «обучения без учителя» в чистом виде.
Хотелось бы реализовать более правдоподобную нейронную сеть и поэкспериментировать с ней.

Основные принципы функционирования «моей» нейронной сети



В соответствии с моими познаниями о том, что на данный момент знают нейробиологи о функционировании реальных нейронных сетей, основные принципы должны быть такими:
  1. Передача информации в виде импульсов
  2. Кодирование информации — частотное (возможно модулированное по амплитуде)
  3. Способность к самоорганизации за счёт создания новых синаптических связей
  4. Способность к самообучению по заданным критериям
  5. Возможность использования некоторых параметров сети для оптимизации генетическими алгоритмами
  6. Возможность реализации всех трёх известных видов памяти реальных сетей — краткосрочная, среднесрочная, долговременная


Поясню по пунктам.
1. Передача информации в виде импульсов

Это, думаю, знают все — сигналы между живыми нейронами передаются в виде импульсов.
2. Частотное кодирование информации

Интенсивность сигнала от рецепторов и далее, в живой нейронной сети, кодируется частотой импульсов. Например, чем сильнее вкусовое ощущение у вас на языке, тем чаще поступают импульсы от соответствующих рецепторов. Амплитуда этих импульсов не зависит от интенсивности раздражителя (но зависит от «усталости» нервной системы).
Т.е. помимо собственно нейронов, обязательной частью нейронной сети являются рецепторы и, так называемые, «химические синапсы». Рецепторы это аналог АЦП, интенсивность воздействия кодируют в импульсы определённой частоты. Химические синапсы это аналог ЦАП, в зависимости от частоты импульсов выделяют больше или меньше различных веществ которые, например, расширяют или сужают сосуды. Тут надо сказать, что термины АЦП и ЦАП не совсем верны, скорее это АЧП и ЧАП (аналогово-частотные и частотно-аналоговые преобразователи).
3. Способность к самоорганизации и созданию новых синаптических связей

Известно, что в живых организмах постоянно создаются новые синаптические связи. Число нейронов у нас — сколько дано от природы и «больше не вырастет», а вот число синаптических связей мозг умеет наращивать. Причём заранее не задано откуда и куда эти связи появляются. В частности, это один из механизмов памяти.
4. Способность к самообучению по заданным критериям

Никто не будет спорить, что животные учатся методом проб и ошибок. Это нечто среднее между обучением с учителем и обучением без учителя. Фактически — учитель это эффект от тех или иных действий. Придумываемая нейронная сеть должна уметь самообучаться. Некоторые критерии конечно задаются заранее, но только очень общие критерии. Нечто вроде инстинктов.
5. Возможность использования некоторых параметров сети для оптимизации генетическими алгоритмами

Известно, что существует генетическая память. Как минимум, мы от рождения умеем управлять лёгкими, т.е. дышать. Этому мы не учимся ни с учителем, ни без. Это генетическая память. Какую-то базовую информацию сеть должна уметь передавать своим потомкам.
6. Возможность реализации всех трёх известных видов памяти реальных сетей — краткосрочная, среднесрочная, долговременная

Тут надо сказать, что существует ещё и мгновенная память, длительностью до секунды. Но мгновенная память это память рецепторных нейронов, и к проектируемой сети особого отношения не имеет.
А вот три основных вида памяти должны реализовываться.
Краткосрочная память (у человека — десятки секунд) — за счёт наличия в сети обратных связей, и образования замкнутого цикла нейронов, в котором импульсы двигаются «по кругу».
Среднесрочная память (у человека — несколько дней) — за счёт усиления синаптических связей при неоднократном прохождении импульса. Этот вид памяти реализуется и в классических искусственных нейронных сетях, при различных видах обучения.
Долговременная память (у человека — долго, может даже на всю жизнь) — за счёт образования новых синаптических связей и вовлечения в работу ранее неиспользуемых нейронов.
Существует ещё теория, что есть супердолговременная «нестираемая» память, эдакое ПЗУ. Т.е. воспоминания которые вообще не забудутся никогда. Предположительно её механизм связан с изменением внутренней структуры нейрона, когда он некоторой синаптической связи отдаёт большее предпочтение, т.е. подключает к ней «дополнительный усилитель», который никогда больше не удаляется. Для упрощения, пока обойдёмся без супердолговременной памяти.

Общая схема функционирования сети


Общий алгоритм работы сети таков:
1. Инициализация. Есть только нейроны. Связей нет.
2. Выбираем некоторые (любые) нейроны в качестве входных. На них постоянно подаём входные сигналы (закодированные частотно).
3. Выбираем некоторые (любые) нейроны в качестве выходных. С них постоянно снимаем выходную информацию.
4. В цикле:
4.1. Очередной такт работы сети (передача импульсов).
4.2. Проверка необходимости создания новых связей и их создание если это необходимо.
4.3. Проверка необходимости удаления неиспользуемых связей и их удаление (для уменьшения используемых ресурсов).

Постепенно появятся новые синаптические связи и на выход станет поступать какая-то информация.

Здесь удобно пояснить почему сеть называется синхронной.
При синхронной работе — мы вычисляем значение на выходе нейрона, но пока просто запоминаем, а не устанавливаем выход в новое состояние. После обработки всех нейронов — даём команду — установить новые значения на выходах всех нейронов.
При асинхронной работе — на выходе нейрона устанавливаем новое значение после его вычисления.
В принципе, асинхронные сети более близки к реальности. Но фактически их имеет смысл реализовывать только аппаратно, т.е. когда каждому нейрону сопоставлен свой вычислительные блок.

Обучение импульсной нейронной сети



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

Учитель может давать понять сети — хорошо или плохо она себя ведёт, т.е. выдаёт ли те выходные данные, которые мы от неё желаем получать. Реализовать можно в виде некоторой функции, примерный алгоритм работы которой очень прост.
Параметр — ЭМОЦИЯ_УЧИТЕЛЯ. Диапазон параметра от -1 до 1, где -1 = очень плохо, 1 = очень хорошо, 0 = нет оценки.
Для всех связей установить вес связи W=W+W*ЭМОЦИЯ_УЧИТЕЛЯ*k, где k — коэффициент обучаемости (может подстраиваться, например, генетически).
Всё.
image
Таким образом, при положительном значении параметра ЭМОЦИЯ_УЧИТЕЛЯ мы усиливаем связи, причём сильные связи (приводящие к правильному результату) усиливаются сильнее. При отрицательном значении параметра ЭМОЦИЯ_УЧИТЕЛЯ, мы ослабляем связи, причём сильные связи (приводящие к неправильному результату) ослабляются сильнее.
Обучение без учителя

Здесь концепция пока не до конца проработана, но намётки имеются. Если будет интересно — расскажу в следующих статьях.
Сам себе учитель

Такой способ самообучения возможен после того как мы некоторое время обучали сеть с учителем. Реализуется просто.
Делаем некоторый дополнительный выход сети, назовём его ВНУТРЕННЯЯ_ЭМОЦИЯ, подаём его на тот же вход, куда подаётся ЭМОЦИЯ_УЧИТЕЛЯ (суммируем их). И в процессе обучения с учителем следим за внутренней эмоцией сети. Допустим учитель даёт сигнал +0,5 (положительная эмоция), если сеть выполнила правильное действие и у неё не было внутренних эмоций. Учитель даёт сигнал 0, если сеть выполнила правильное действие, но у неё была отрицательная эмоция, и учитель даёт сигнал 1 (очень хорошо), если сеть выполнила правильное действие и у неё была при этом положительная эмоция. Т.е. мы дополнительно обучаем сеть на правило «правильное действие — хорошая внутренняя эмоция».
Поскольку мы соединили выход ВНУТРЕННЯЯ_ЭМОЦИЯ с тем же входом, куда подавалась ЭМОЦИЯ_УЧИТЕЛЯ, и при этом обучили «что такое хорошо, и что такое плохо», то теоретически сеть будет сама управлять своим дальнейшим обучением, даже без участия учителя.
image

На этом завершаю вступительную часть.
Подробности далее, в случае если эти размышления хоть кого-нибудь заинтересуют.
+51
11 мая 2010, 11:33
48

комментарии (153)

+7
dimag0g #
Идея безусловно интересная, но я не уверен, что у Вас всё так гладко получится. Проблема рискует возникнуть на этапе обучения. Персептрон тем и хорош, что его обучение — детерминированный процесс с гарантированной сходимостью. У Вас, за счёт динамических связей, получится сеть нелинейной структуры (возможно даже с циклами). В такой сети вообще нет гарантии сходимости процесса обучения — коэффициенты могут циклически изменяться неопределённо долго в ответ на «отрицательную эмоцию».

Мой совет — попробуйте сначала зафиксировать структуру сети (например, линейная многослойная). Связи всё равно можно создавать динамически, но только между слоями х и х+1. Входные и выходные нейроны фиксированы. Посмотрите, как такой зверь заработает (и расскажите об успехах/трудностях)!
+1
eresik #
Я уверен, что вообще не получится, но блин интересно.

Понятие «сходимости» там тоже весьма специфическое, т.к. вполне возможно, что на одинаковые раздражители будут разные реакции. Импульсы в сети бегают ведь всё время, вроде как «мысли», и кто его знает чего там сеть надумала за время между предыдущим и следующим раздражителем.

Оооочень теоретически — там уже стоит говорить не о сходимости, а о «психической устойчивости» сети.

Для начала естественно опыты с несколькими нейронами, плюс реализация не упомянутых здесь «инстинктов».
+2
mplaksin #
Вы на верном пути :) имхо

Надо только внести немного ясности в функционирование модели.
Попробуйте посмотреть на нейронную сеть не как на обособленную мат. модель, а как на:
Адаптивную систему управления, тогда в ней появляется определенный смысл.

Адаптивность — способность подстраиваться под изменения внешней среды
Система управления — это суть есть оптимизация. Т.е. мы имеем некоторые входные данные и на основании их формируем управляющее воздействие с целью оптимизации некоторого параметра.

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


Еще, рекомендую вот над чем поразмыслить. Может это натолкнет вас на какие-то интересные изыскания.

Попробуйте эту адаптивную систему управления (АСУ) представить в виде двух подсистем.
Подсистемы восприятия и подсистемы реагирования. Чтобы разделить функциональную нагрузку.
Тогда, задачей подсистемы восприятия будет построение модели предметной среды на основании поступающих данных (грубо говоря, просто запоминать что и в какой последовательности происходит, только в нечетком, обобщенном виде).
А подсистема реагирования путь на основании этой модели (построенной подсистемой восприятия) будет производить оптимизацию, пытаясь выполнять те или иные действия и анализируя получаемый эффект.

В целом, я это к чему написал — попробуйте детерминировать задачи проектируемой системы. Если задачи будут ясны, тогда варианты реализации могут стать более очевидными. Вы меня натолкнули на идею — тоже написать статью, поскольку мыслей на данную тему накопилось достаточно много.
+1
eresik #
Попробую
0
mplaksin #
Сори, еще про немного добавлю про передачу информации частотами.
Я считаю, что так или иначе, мы должны оперировать сущностями, которые подвласны нашим компьютерам. Если вы будете реализовывать частотные схемы (с АЧП и ЧАП) — это будет вносить изрядную путаницу, замедлять работу и затруднять «бэктрейс» системы (когда хочется понять что же там внутри происходит).

По сути, ведь, частота является показателем наличия сигнала с определенного входа и его интенсивности. Т. обр. мы входную информацию можем представить в виде некоего сигнала: s = <id, V, E>, где
id — идентификатор сигнала
V — значение/сила/интенсивность сигнала (то, что в биологической системе передается частотой)
E — энергия сигнала (то, что в биологической системе передается амплитудой)

и далее манипулировать уже этими данными.
В конечном счете, V (значение) позволит нам настраиваться на определенные значения для, скажем, распознавания, а E (энергия) оценивать составляющую сигнала количественно.

Для примера, 10 сигналов с E = 1 проходят через нейрон, который производит их распознавание на 90%, и на выходе получаем сигнал с E = (1 * 10) * 0.9 = 9
Это дает нам возможность судить о том, что данный сигнал имеет вес (значимость) 9-ти сигналов. И если при принятии решения перед нами встанет выбор: какой сигнал должен стать управляющим: <id1, V1, E1=3> или <id2, V2, E2=50>, мы сможем с уверенностью сказать, что E2=50 имеет большую значимость, т.к. в его образовании приняло участие 50 других сигналов.

Опять же, под этим углом данные обретают определенный смысл и их можно будет потом анализировать, а не смотреть на множество абстрактных коэффициентов.
0
eresik #
Нет, так не получится.
За один такт через нейрон должен проходить (или не проходить, а «накопиться внутри») один импульс.
+2
mplaksin #
С одной стороны:
Если мне не изменяет память, нейроны имеют различную пропускную способность. «Жирнее» становятся те, которые вовлекают больше связей, «тощее» те, которые теряют связи. Соответственно, энергия их импульсов будет разной.

С другой стороны:
С точки зрения электродинамики это тоже логично. Если параллельно соединить 3 батареи по 1.5V / 300mA каждую, на выходе будет 1.5V / 900mA (сила тока выше).
Нейрон можно рассматривать как источник тока. Его выходной ток будет равен сумме токов всех связей, умноженный на эффективность срабатывания.

С третьей стороны (цитата из моего предыдущего поста):
> Опять же, под этим углом данные обретают определенный смысл и их можно будет потом анализировать, а не смотреть на множество абстрактных коэффициентов.
Вводя понятие энергии (аналог электр. силы тока), мы получаем количественную оценку, которая может пригодиться для оценки значимости сигналов при принятии оптимизирующего решения.
Интерпретировать эту оценку можно так: если в образовании сигнала принимало участие больше источников, значит идентифицируемый им объект более значим (имеет больший размер в пространстве или же большую длительность во времени, если в случае обратных связей).

А почему вы считаете что так не должно быть?
0
eresik #
Если я правильно понял, то реализация по вашим рассуждением получится нечто вроде обыкновенного персептрона, но оперирующего не действительными числами, а комплексными.
0
mplaksin #
Ну, это не комплексные числа. В комплексных числах есть взаимосвязь между действительной и мнимой частями, а тут нет. Я бы назвал это просто набором параметров: s = <id, V, E>
Так и в базе данных можно хранить, в соответствующих столбцах.
Рассчитываются они тоже отдельно. V считается как обычно, а E — как сумма Ei и умножения на выходное значение нейрона (т.н. эффективность срабатывания).
0
Sharpy #
я так понял, подразумевается представление сигнала в виде его спектра(частота и амплитуда, грубо говоря), все верно, прогоняем сигнал через ацп, считаем фурье и получаем спектр сигнала. но это все к вопросу о том, по каким параметрам оценивать сигналы. это уже чистый цос.
+1
mplaksin #
Да, еще хотелось бы отметить, что вводя энергетическую составляющую в сигналах, мы при этом не теряем и не искажаем информационную составляющую.
Т.е. при строении сигнала: s = <id, V, E>
id — это уникальный идентификатор
V — значение — информационная составляющая
E — энергия — количественная оценка

при обработке в нейроне:
Информационная составляющая, скажем, меняется в зависимости от распознавания сигнала, а энергетические составляющие суммируются и умножаются на общую эффективность элемента.

Т.е. на выходе получаем сигнал, значения которого можно интерпретировать как:
id — уникальный идентификатор нейрона, который выдал этот сигнал
V — уровень распознавания входного множества сигналов, например: 0.7
E — количество задействованных связей в образовании сигнала, напр.: 84

Получается красиво и понятно.
+1
multik #
> Я уверен, что вообще не получится, но блин интересно.
А вот с такой эмоцией начинать — зло поставьте себе 0 по правилу «Учитель даёт сигнал 0, если сеть выполнила правильное действие, но у неё была отрицательная эмоция,»

Интересная статья — интересная идея продолжайте!
0
ruguevara #
В циклах всё и дело. У нас в голове они есть.
+1
equand #
Диапазон параметра от -1 до 1, где -1 = очень плохо, 1 = очень хорошо, 0 = нет оценки.

Наверное все-таки -1 недопустимый абсолют отрицательного (в жизни учитель показывает это раздражением, недовольством, или же окружающий мир враждебностью), 1 недопустимый абсолют положительного (наоборот, одобряющее отношение, как это реализовать?), а на 0 нейронная сеть должна делать вывод сама, основываясь на собственных понятиях «плохого» или «хорошего»
Возникает вопрос как реализовывать «окружающий мир» для нейронной сети и как наиболее точно передать эмоцию учителя? (по попе не дашь ведь).
В противном случае для это НС понятия об окружающем мире будут «несколько» иные, т.к. она будет сомневаться / основываться только на доверие к учителю и при встрече с реальным миром, может просто отказаться от предыдущего опыта и навыков, если их подавал «ошибающийся» учитель.
Как в этот график попадает фактор риска (который контролируется нашими физическими способностями и «быстрым» анализом на подсознании и небольшим желанием сделать что-то от балды (в чем я сомневаюсь)).

Напишите, пожалуйста, дальше, как будет происходить самообучение?
Очень интересует данный вопрос, хочу как-нибудь заняться работой надо нейронной сетью для пары проектов, но встает вопрос, насколько «человеческой» должна быть такая система? Мало того, что множество вещей ей не объяснить (нет ну можно, допустим камерой, но что такое боль ей пока что не понять), так из-за скорости решений система может быстрее прийти к определенному решению, чем должно было бы прийти и из-за нехватки дополнительных данных прийти в итоге к неверному с точки зрения человека выводу (и переубедить ее без форсирования будет сложно).
0
eresik #
Обучение будет не только с учителем, но и без. Здесь не описано как именно, т.к. я ещё не до конца проработал. Но общий смысл — введение понятия «инстинкт». Делаем так. У сети есть некий уровень энергии, которая тратится на работу сети. А получать энергию сеть может выполняя некие «правильные» действия (человек — «кушать»). Т.е. есть некий внешний анализатор (аналог «тела»), который в зависимости от действий сети увеличивает или уменьшает уровень энергии. Делаем миллион таких сетей, запускаем генетический алгоритм. Большая часть, конечно, сразу подохнет, но какие-то научаться выполнять базовые действия, способствующие получению энергии в той среде, в которую погрузим сеть. Это и будут врождённые инстинкты. Т.е. учитель в этом варианте не нужен, главное — определить правила по которым сеть получает энергию.
Например, некий механизм должен бегать по лабиринту. Правило — столкновение=потеря энергии. (а вот какое стимулирующее правило здесь задать я не знаю).
0
equand #
Тогда есть вариант, что получится «жывотное» (в смысле важны будут только удовлетворения примитивных инстинктов, амеба короче), т.к. нет социальной части. Как ее описать и эмулировать?
+2
eresik #
Если точки-экземпляры будут бегать по виртуальному полю и находить себе еду — я уже буду доволен.
Про «разум» пока никто и не заикается.

Просто, надеюсь, такая сеть будет более… оптимальна что-ли. А то читаешь про эксперименты с сетями из миллионов нейронов, а у комара вон всего несколько десятков (или сотен?) нейронов, и как он, сволочь, надоедливо себя ведёт.
0
eresik #
А внутреннее самообучение — по классическому варианту — «прошёл импульс — связь усилилась, нет импульса — связь ослабилась». Немного сложнее, но примерно так.
0
Halt #
Мне кажется, что тут есть риск скатиться в классическую проблему САУ/АСУ. А именно возникновение колебаний, за счет запаздывания обратной связи. При этом, сеть будет колебаться около равновесного положения, то улучшая свои параметры, то ухудшая их. Притом далеко не факт, что это будет оптимум. Возможно лишь один из локальных потенциальных минимумов.

Ну и еще одно соображение.

Говоря про обучение с учителем, вы вроде как говорили что негативная реакция учителя приводит к ослаблению всей сети. Может быть, имеет смысл как то концентрировать воздействие на измененных участках? То есть скажем применять ослабление на основании производной параметров.

Грубо говоря — если что-то пошло не так, то ломать наиболее изменившиеся [недавно] части, а не всю сеть. По сути, это аналог фразы «блин! что я делаю не так?». Мы же ставим под сомнения только текущие действия, а не все бытие сразу.
0
eresik #
Может быть, «ослабляем связи, если в данный момент по ним идут импульсы», сильнее будут ослабляться связи по которым за время действия эмоции прошло больше импульсов.
+2
mplaksin #
Если предположить что души нет и наше поведение на 100% регулируется ВНД (высшей нервной деятельностью), то можно с уверенностью сказать, что интеллект — это ни что иное как статистическая машина :-D
Мы просто накапливаем опыт и применяем в нужный момент.
Даже т.н. созидательность интеллекта — это ни что иное как успешное комбинирование имеющихся данных или, другими словами, — проецирование опыта на другую предметную среду в совокупности с какими-либо модификациями для адаптации решения.

К примеру, если меня попросят нарисовать совершенно новый, ни на что не похожий дизайн. Вы думаете я его возьму «из космоса»? :) Он будет являться комбинацией моего накопленного опыта и проекцией на нужную предметную область. А для стороннего наблюдателя это будет выглядеть конечно же так, как будто я получил «божественное прозрение».

И, на счет самообучения. Я считаю, что это не «аппаратно зашитый» в нас механизм. Ну, т.е., конечно же, есть некий инстинктивный базис в виде подражания, стадности, голода, самосохранения и т.п., но самообучение в том в виде, в котором мы о нем говорим: «понять, что то, что я сделал только что это хорошо/плохо и запомнить» — это уже результат информационной обработки.
Т.е. это свойство приобретаемое системой в процессе обучения.
Т.обр. не надо пытаться сразу реализовать социальное самообучение, надо просто заложить базовые предпосылки. Выше я привел свои умозаключения на счет оптимизации. Т.е. у системы есть цель — оптимизация одного или нескольких параметров. Это и есть потенциальная предпосылка для будущего самообучения.

Ведь, как обучают животных — воздействуя на их инстинктивные потребности. А когда рефлекс закрепляется, на базе этого рефлекса создается еще один и т.д…
Человек от животных, в частности, отличается тем что он может так до бесконечности наслаивать одни рефлексы на другие (т.е. одни рефлексы могут являться стимулами для других). Так зарождается мышление, ну и там дальше всякое… :-D
0
equand #
Вы немного не поняли. Плохо или хорошо в жизни регулируется инстинктами — плохо значит опасно, хорошо значит приносит пользу.
0
mplaksin #
На базовом уровне — да.
А как вы тогда объясните то, что человек может взять гранату, зажать в зубах и полезть под танк? (кстати, с прошедшим праздником) Ведь, это прямая угроза жизни.
Т.е. инстинкт не работает, опачки!

И таких примеров много:
— Я могу взять книжку читать, не смотря на то что сильно хочу спать.
— Я работаю когда сильно голоден, вместо того чтобы бросить все и побежать есть.
— Несмотря на прямую опасность свалиться вниз, я все-равно люблю горный туризм.

Вот об этом я выше и говорил — есть социальное наслоение, который возникает в результате обучения и, как бы это выразить, — формирует нашу личность. Это не «аппаратная функция» системы, а приобретенная.
+1
equand #
Ну наверное, потому что в счетной машинке человека срабатывает сигнал, что это приносит пользу?
Инстинкт сохранения потомства, инстинкт сохранения вида, адекватная оценка происходящего.
Или же наоборот полностью неадекватная оценка, например когда одна из эмоций зашкаливает, то есть инстинкт не абсолют, я уже писал об этом выше.
Выходит что-то вроде рейтинговой системы
Я хочу жить (100500) vs. Я все равно умру => постараюсь спасти товарищей (100000), уничтожу врага (100), сыграю роль в сохранении рода (250) и вида (250) + эмоция высшего раздражения — гнев (100)
Вот такое мморпг :).
Я хотел написать, что поэтому социальное обучение важно. То есть да будут зачатки в общении с учителем, но что будет когда система поймет, что Вы не похожи? (когда дойдет до осознание сенсоров, собственного «мышления» и систем восприятия)
0
eresik #
Это вам к Станиславу Лему.
Он, кажется, любил в художественной форме пытаться отвечать на подобные «что будет, если...».
+1
mplaksin #
Тут я с вами полностью согласен — это комплексное явление.
Просто, фраза на которую я ответил звучала немного категорично:

>Плохо или хорошо в жизни регулируется инстинктами

Инстинкты могут быть заложены в фундамент мышления, как базовые носители, способы оценки и то, только в роли несущей, а не абсолютной сущности.

К примеру (этого не было на самом деле), меня в детстве отец бил носком набитым мелочью и говорил что все женщины стервы и т.п.
Т.е. прямым образом воздействовал на инстинкт самосохранения, вызывал страх/боль и внушал определенную фразу. Детство — это период активного формирования мышления. Отец потом умер от цирроза печени, я его забыл, НО, в жизни я буду пользоваться этой засевшей в голове мыслью и выкорчевать её будет не легко.
Т.обр. инстинкт лег в основу определенного убеждения, хотя никак не был связан с той информацией, которую подкрепляет. Вот жешь, засада…

Это был выдуманный, простой и прямолинейный пример. Но теперь давайте представим, что таким образом в нас вкладывают массу информации. Не обязательно носком с мелочью, через базовые инстинкты, а косвенно, через уже имеющуюся информацию.

Например, как детей пугают пауками, Бабой Ягой или еще чем-то. И каждый раз когда они не слушаются — напоминают, что может произойти с непослушным ребенком. Вот и пошло наслоение…
В итоге получается такой многослойный пирог, что разобрать в нем первоначальные стимулы не смогут даже опытные психиатры.

Напрашивается вывод: есть инстинктивный «скелет» на который наращивается информационное «мясо». Но сами инстинкты при этом не являются показателями «хорошо или плохо» а только носителями или инициаторами. Так я считаю.
0
eresik #
Инстинкты формировались ведь эволюцией с целью выживания не кого-то конкретного, а вида в целом. Поэтому кому-то лично, в какой-то конкретной ситуации, какие-то инстинкты могут и вредить.

Например — инстинкт помощи, из-за которого люди губят себя, дабы спасти других людей.
Лично для меня было удивительно, что у человека действительно есть неосознанный инстинкт помощи. Особенно эффектно проверяется на детях 3-4 лет — если «невзначай» уронить что-нибудь — ребёнок инстинктивно поднимет и подаст (у взрослых этот инстинкт часто перебит всяческими эго и т.п.)
+1
mplaksin #
Хм, а вы уверены что это инстинкт? Я первый раз о таком слышу.
Есть инстинкт подражания. И ребенок может просто делать это подражая другим. Он ведь видит что если что-то падает, то это поднимают и дают тому кто уранил + получают поощрение.

Например, у меня дочь если что-то падало вообще не обращала на это внимание :-) только когда повзрослела — начала подавать, т.к. просили об этом.
0
eresik #
Сейчас поискал в интернете на эту тему.
Нашёл только анекдот — «Сделай дельфина гомо сапиенс, и у него исчезнет инстинкт помощи утопающим.»
+1
mplaksin #
Уже давно хочу заметить, все к слову не приходилось:
В вики есть определение инстинкта.

Свойства инстинктов:
— наследственность и независимость от обучения;
— одинаковость у всех особей данного вида;


Инстинкт не может меняться или исчезать. Разве что, может отсутствовать как следствие патологии.

Т.обр., если пол группы детей поднимает мячи, а другая половина нет — это уже не инстинкт.
Или половина полка бросилась под танки с гранатами, а другая половина — дала дёру. Тоже не инстинкт.
А вот то, что весь полк ест каждый день регулярно — это инстинкт.

И еще такая ремарка:

> Популярна также точка зрения, что инстинктивным называют поведение живых существ, которое не может быть объяснено обучением.

Т.е. своего рода «научный Бог». Когда нет объяснения — значит на то воля инстинкта. :) Имхо, не верно так делать. Надо называть вещи своими именами. Если не знаем откуда реакция берется — значит так и говорить: «Не знаем».
+1
eresik #
Вспомнил где я видел про этот инстинкт.
Фильм про обезьян, и их сравнение с маленькими детьми.
Узнают ли себя в зеркале и т.д.
В т.ч. было и это — поднимают ли случайно упавший предмет.
0
mplaksin #
Инстинкт (как сказано в вики), является результатом эволюционно выработанной реакции, которая помогает виду выжить.

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

Но повод поразмышлять, конечно же, есть.
+1
megalol #
В этом смысле, вполне вероятно, что взаимопомощь является одной из решающей реакций и мы являемся свидетелями того как данный инстинкт генетически укрепляется у представителей нашего вида.

альтруизм site:ethology.ru
0
mplaksin #
Прочитал. Но опять же, красной нитью по тексту проходит то, что это в большинстве случаев нам известно как родительский инстинкт или инстинкт защиты по­томства.

И мне очень понравилось как там объясняется вероятный механизм возникновения альтруизма:

2) альтруист рискует собой только ради близких родственников, при ма­лом риске для альтруиста, большом шансе на спасение гибнущего, ген альтруиста распространится широко

Звучит вполне логично. Спас родственника — значит укрепил шансы на выживание своего генофонда, в котором и заложен альтруизм. Т.обр. альтруизм закрепляется.

Действительно интересно, спасибо за ссылку.
0
equand #
Вот тут и случиться сенсорный диссонанс.
Эта запись сначала будет получать рейтинг, потом с опытом понижать рейтинг в итоге ее рейтинг станет адекватным, останутся только воспоминания.
То есть изначальная связь били => женщина-стерва, перейдет в женщина-стерва => били.
Столкновение с социумом все равно извратит эту «вбитую» идею
0
mplaksin #
Да ну, есть люди с моральными травмами. У них оно почему-то в норму не приходит. Становятся жестокими. Часто обрастают горой комплексов. Как следствие — тем самым настраивают против себя окружающих и им еще больше начинает казаться что все вокруг плохо.

Я как раз продолжу свою основную мысль — нет четкого алгоритма как это происходит, потому, что это индивидуально и обусловлено опытом каждого конкретного индивида, а не его инстинктами.

При правильной профилактике человека можно избавить практически от любых психических проблем.

Другими словами, это не нужно изначально реализовывать в системе. Это приобретаемое с опытом. Система имеет первоначальные структурные ограничения и правила функционирования, которые не меняются со временем. Меняется только информационное наполнение системы.

Вот, для примера я приведу компьютер. Изначально он ничего не может. Просто гора металла. Потом мы вставляем CD и устанавливаем систему, как следствие — компьютер уже умеет показывать картинки, реагировать на нажатие с клавиатуры, играть музыку…
И чем больше ПО мы будем устанавливать, тем выше будут возможности.

Так же и с человеком. Сразу после рождения — это тупая банановая мавпа, которая только и может что жрать-срать-спать (извините за резкие слова, но так звучит в рифму).
Дальше начинается длительное, монотонное обучение.
У меня дочь пока была маленькая я думал у меня мозг взорвется. Одно и то же по 20 раз в день надо объяснять, рассказывать…
Сейчас вот, 5 лет, уже более менее цивилизованный человек просматривается :-)

Так вот. Я к тому веду, что изначальная система и не должна ничего уметь кроме как уметь обучаться.
0
eresik #
Может стоит сначала смотреть на то что попроще?
Улитки там всякие.
Которым учиться в общем-то и нечему почти, всё врождённое.
0
mplaksin #
В своей практике я так и поступаю.
Моя текущая задача просто смоделировать простейшие рефлексы.
Изолировать их, исследовать и дальше уже думать как из этого построить что-то большее.

На бумаге получилась довольно красивая теория. И в дискуссию я так активно вклинился как раз по причине того что активно занялся реализацией.

Мне кажется, что как раз потенциал обучаемости и является решающим в природе. Например, собаки не могут строить сложные абстракции, поэтому их обучение заканчивается десятком команд.
0
megalol #
А как вы тогда объясните то, что человек может взять гранату, зажать в зубах и полезть под танк? (кстати, с прошедшим праздником) Ведь, это прямая угроза жизни.

Жертвенный альтруизм есть и у животных. И потребности могут противоречить друг другу у любого живого существа.
Вот об этом я выше и говорил — есть социальное наслоение, который возникает в результате обучения и, как бы это выразить, — формирует нашу личность.

Вы открыли бессознательное
0
mplaksin #
> Жертвенный альтруизм есть и у животных.

Я бы сказал что это скорее исключение чем правило.
Если бы это был один из сильных инстинктов, то не было бы бездомных и в детдомах не было бы необходимости.
А то как-то странно выходит: один с гранатой под танк, а другой собственного ребенка в детдом потому что надоел.

> Вы открыли бессознательное

Странно, но ведь чаще всего именно сознательно можно себя заставить сделать что-то вопреки желаний.
Например, мне сейчас сильно хочется спать, но я сознательно заставляю себя сидеть и писать тут ответы, потому что знаю, что этот топик завтра уже уйдет в анналы истории. Если бы мной управляло бессознательное, то я бы уже давно спал или я что-то не понял?
0
megalol #
Я бы сказал что это скорее исключение чем правило.
Если бы это был один из сильных инстинктов, то не было бы бездомных и в детдомах не было бы необходимости.

Это как посмотреть. За счет кого содержатся детдома? Эгоизм в виде сдачи ребенка в детдом покрывается альтруистичностью человечества, которое готово за них платить.
Эгоизм и альтруизм всегда баланс, баланс интереса особи и интереса группы. У разных видов этот баланс разные, социальные животные в среднем более альтруистичны, но и то и то — не человеческое изобретение.
В условиях перенаселенности модель поведения меняется, потому что случайно включаются программы сокращения населения, их много, почти все называются болезнями современного общества. У человека эти программы работают на полную катушку уже тысячи лет. При этом даже война может рассматриваться как акт альтруизма ради вида — работы по сокращению численности.
Так что в интересах особи одно, группы — другое, экосистемы — третье, вида четвертое. Эгоизм на одном уровне оказывается альтруизмом на другом. И такие моделей поведения, обслуживающие разные уровни, есть не только у человека.
Человек отличается тем, может более взвешивать последствия на большее количество времени вперед, поэтому противоречивость желаний сильнее рвет голову.
Странно, но ведь чаще всего именно сознательно можно себя заставить сделать что-то вопреки желаний.

Формирование желаний процесс неосознанный. Вопреки одному желанию будет другое желание. Против желания спать работает, например, интерес, инстинкт познания. Задача сознания потребности взвешивать, используя доступный аппарат мышления.
Но я хотел не о том сказать. Как таковых врожденных инстинктов мало. Есть определенные структуры, в которые загружается уже культура (зачатки которой есть и у животных — так панды рожденные в неволе размножаться толком не умели из-за отсутствия образца, и таких примеров немало). А все то море, что бесконтрольно живет в голове, вместе с социальными наслоениями, положенными на инстинкты, и плавающими под водой рыбами — это бессознательное. Называть это инстинктами сильный редукционизм.
0
mplaksin #
Человек отличается тем, может более взвешивать последствия на большее количество времени вперед, поэтому противоречивость желаний сильнее рвет голову.


Я все же считаю, что это результат не врожденных, а приобретенных знаний. Ведь, если вырастет «маугли» — он будет жить исключительно небольшим набором инстинктов и вряд ли будет задумываться что едой надо поделиться с умирающим рядом от голода собратом. Там будет действовать закон выживания в чистом виде, как мы это можем наблюдать в животном мире. Догнали, порвали, съели. Кто не смог догнать и поесть — доедает падаль, сам становится жертвой или же подыхает унося на тот свет дефективный генофонд.
Это мы, люди, имеем альтруизм, эгоизм и т.д. А у животных это просто — выживание. А если мы наблюдаем у животных заботу — это уже материнский инстинкт или же приобретенное групповое поведение, как у обезьян, например, когда они друг другу выколупывают блох.

Задача сознания потребности взвешивать, используя доступный аппарат мышления.


Значит, это все-таки сознательный процесс, а не бессознательный.
Потому что, если бы я сейчас был в бессознательном состоянии, то не смог бы отвечать :)
0
equand #
Есть мнение, что первое зависит от «жадности» и «благосостояния» животного или человека. То есть нельзя говорить, что что-то непостоянное является приобретенным.
0
mplaksin #
> То есть нельзя говорить, что что-то непостоянное является приобретенным.

Вы имеете в виду фрагментальное проявление инстинкта, который мы можем принять за приобретенное поведение? Если да — вполне согласен. Поведение сложная штука.
+1
kossmoss #
Может, надо наказывать отъятием нейронов, а поощрять их добавлением? Чем не аналог страдания? Можно ещё научить её наказывать себя самой, 'за грехи'.
0
equand #
Какой Вы однако, злобный :)
0
kossmoss #
Люди рождаются через страдания и познают мир через них жe. Пока ИИ не страдает, у него нет стимулов жить :)
+1
megalol #
Отсутствие связей равносильно k=0 в перцептроне. Действие эмоции на нейрон равносильно увеличению каких-либо k (k становится больше 0, что равносильно появлению связи), причем нейрон, видимо, должен выбирать, какие куда расти в зависимости от предыдущих сигналов. Из пороговой функции он превращается в автомат с памятью. Причем должна быть базовая структура.

Обучение мозга идет еще на этапе построения, нейроны мигрируют далеко от того места, где появляются, причем лишние умирают. Т.е. без какого-либо обучения уже имеется готовая структура, приспособленная под жизнь.

В общем что надо:
1. Базовая структура (иначе обучение работать не будет). Или нечто многослойное, или можно попробовать ГА и посмотреть, будут ли формироваться какие-либо зоны.
2. Алгоритм реакции нейрона на эмоцию — по-моему это аналог модулирующих рецепторов в мозге. Тоже ГА, вряд ли можно как-то интуитивно это придумать.

Минусы — все это будет обучаться очень долго.
+1
eresik #
«Куда расти в зависимости от предыдущих сигналов» — можно сделать так.
У нейрона есть 3 доп параметра «хочу поделиться информацией», «нужна информация-» (нужна тормозящая связь), «нужна информация+» (нужна возбуждающая связь).
«Хочу поделиться информацией» — по аналогии с человеком — если давно не было импульсов на выходе, и тут вдруг появился — сразу хочется поделиться информацией, затем желание плавно снижается.
«Нужна информация-» — пропорционально частоте импульсов на выходе нейрона.
«Нужна информация+» — обратно пропорционально частоте импульсов на выходе нейрона.

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

Т.е. при первом запуске связи в общем-то и не нужны, сами вырастут откуда надо и куда надо.
+2
eresik #
Кстати, соотношение тормозящих и возбуждающих синапсов (или их силы?) будет определять «темперамент» сети.
Холерик — много возбуждающих, мало тормозящих связей.
Сангвиник — много возбуждающих и много тормозящих связей.
Флегматик — мало возбуждающих и много тормозящих связей.
Меланхолик — мало возбуждающих и мало тормозящих связей.
+1
nehyrb #
Может быть немного не в тему, но раз Вы копались и разбирались в вопросе скажите мне:
1. Механизм сна каким-то образом внедряется в нейронные сети?
2. Эмоции, как некий механизм глобального оповещения всех элементов сети используется только в качестве характеристики «хорошо/плохо», в лучшем случае чего-то нейтрального «хорошо/нормально/плохо», чтобы сказать сети, что она сделала правильный или наоборот неверный выбор?

Самому тоже очень интересны вопросы нейронных сетей, но не нахожу времени хоть сколько-нибудь серьезно почитать про них и тем более пощупать на практике. Так что пробуйте и пишите! Думаю, это область, где как раз нужно экспериментировать и проверять новые идеи… даже если они на первый взгляд безумны. ;)
+1
eresik #
1. Как мне видится — механизм сна тесно связан с механизмом эмоций. Для простых сетей сон может быть и не нужен, а для сложных сетей — прямо-таки необходим. Вот описанном простейшем случае воздействия эмоций на сеть — если постоянно подавать сигнал «хорошо», то через какое-то время начнутся сбои в функционировании сети, просто потому что дальше усиливать связи с помощью воздействия эмоций уже некуда. В этом случае, во время сна, видимо должно происходить перераспределение полученной эмоциональной нагрузки на менее загруженные связи (или на создание новых связей).
2. Для экспериментов достаточно будет эмоций «хорошо/плохо». В реальном организме за различные эмоции отвечают различные нейромедиаторы (т.е. сильно упрощая — синапсы бывают разных видов, «смеющийся», «боящийся» и т.п.). На принципе блокировки выработки тех или иных видов нейромедиаторов основаны некоторые психотропные лекарства (антидепрессанты например). Ну и всем известно вещество — никотин, блокирует разрушение одного из видов нейромедиаторов — дофамина (дофамин — нейромедиатор «удовольствия»), т.е. улучшает проводимость тех синапсов по которым бегут сигналы «удовольствия», организм видит несоответствие — уменьшает самостоятельную выработку дофамина, и если «бросать курить», то бывает хреново, т.к. организм «разучился» вырабатывать дофамин в нужных дозах самостоятельно.
0
Halt #
У высших форм жизни сон является неотъемлемой фазой. При этом происходит перераспределение потенциалов в мозгу, накопление ионов калия (непосредственно участвующих в процессе передачи сигналов), а так же различные процессы «верхнего уровня».

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

Ну а вообще советую обратиться к специальной литературе/википедии. Ибо я не биолог и все вышеописанное взято из собственной головы. Так что что-то мог и перепутать :)
+1
khizhaster #
Больше всего интересует следующая проблема. Вы рассмотрели различные особенности функционирования сети в максимальном (с вашей точки зрения) приближении к природе, обучение на основе понятия «инстинкт», опыт «предков» на основе учителя и прочее. Это замечательно, но остаётся вопрос. Как это всё сеть будет применять и для чего? Собственно, главный определяющий момент: для чего всё это? Как эта сеть будет сама себя осознавать, есть ли у неё цель в «жизни» (хе-хе), к чему двигаться и как? У всех живых существ цель есть, у всех, кроме человека, эта цель задана базовыми инстинктами и потребностями: «выживание», «еда», «сон», «размножение». Кроме всего прочего, как сказали выше, есть окружающая среда. Месячный щенок хочет жрать и он пробует на вкус всё вокруг, включая тапочки и камни, рецепторы рассказывают ему что съедобно, а что нет. Но вот интересный момент, когда особь вырастает, то она может принимать решения вопреки опасности (причем уже осознанной и узнаваемой опасности), то есть ставить цель и осознавать риски, например добыть еду не смотря на то, что может быть раненой. В дополнение, существа способны оценивать новые воздействия по мере появления. Если в процессе добычи еды с нулевым риском появляется что-то, что может быть опасным, а может и не быть, то это нужно проанализировать (кусок мяса на рельсах (неопасных) и поезд, видимый впервые). Кроме того, если брать человека, то такие особи способны ставить разнообразные цели и решать несколько таких практически параллельно, совместно либо «вопреки», либо последовательно, причем мотивируя себя не только низшей нервной деятельностью, но и мозгом.

Дык вот в контексте того, что вы вроде как замахнулись на «универсальную» модель, сможет ли сеть ставить сама себе задачи? Сможет ли осознавать свои потребности для постановки цели? Сможет ли задать себе «далёкие» и «близкие» цели и различать их «вес»? Сможет ли менять и наращивать себя для увеличения и расширения своей применимости, функционала и способностей?

Ведь в конечном итоге любая нейронная сеть это набор функций и коэффициентов, и для разных задач могут потребоваться разные коэффициенты и тем более функции. Мозг тем и интересен, что он свободно оперирует этими понятиями и меняет их в зависимости от потребностей, а все текущие нейронные сети после стадии обучения уже не перестраивают свои параметры. Например, сеть, заточенная на распознавание образов, ничем не поможет в распознавании речи.
0
equand #
Ну цель нейронной сети обозначать будут операторы, в этом в принципе и весь смысл сего действа.
Есть мнение (ну ладно, я считаю), что человеческая самоцель, ни что иное как самообман, а цель для человека «распространение жизни», в таком случае ясно почему человек не обделен природой мозгами.
«кусок мяса на рельсах, поезд»
Ну допустим, если поезд видимый впервые, то система должна уметь мыслить абстрактно. Через эмоциональные связи это в принципе возможно, только опять же как объяснить слепому, глухому, «бестактильному» с детства, что такое поезд? Он ведь даже не поймет «предмет надвигающийся на тебя может тебя ушибить». Так что скорее всего он попадет под поезд, если не сработает инстинкт заложенный в генетике (читай учителем).
Человеческая нейронная сеть тоже редко перестраивает соединения.
+1
khizhaster #
Да дело ведь не в том обман это или нет. Смысл в том, что человек способен придумать таких целей миллион, и важно то, что мозг его будет находить способы достигать этих целей. Ведь суть не только в «смысле жизни», а и в промежуточных достижениях. Против мнения «просто распространять жизнь» есть удачный контр-пример: зачем тогда всё вокруг? Жизнь распространять можно было и в пещерах. Значит либо природа с эволюцией ошиблась когда-то, либо что-то не так в суждениях.

Вот про абстракции я и говорил. Пример со слепыми/глухими только дополняет суть вопроса. Слепой либо глухой могут вообще поезда не увидеть/услышать, но это не значит, что опасности нет. В то же время слепые и глухие будут больше ориентироваться на вибрации, например. Это дополнительная функциональность будет наращиваться в процессе жизни особи, то есть его мозг автоматически научится воспринимать среду вокруг и подстраиваться.

Про «редко перестраивается». В данном контексте нельзя говорить «сеть» про мозг. Ибо сеть ограничена одной функциональностью, значит в этих терминах мозг это совокупность миллионов сетей для каждого действия. В таком случае да, сети не перестраиваются, но наращиваются новые и удаляются «ненужные». Следовательно, должен быть механизм, который запускает создание новой сети по факту нового внешнего воздействия. Вот про этот механизм очень интересно. По сути, это еще одна сеть, которая управляет другими, удаляет/добавляет, хранит накопленный опыт каждой сети, но самое главное, связывает их в единые механизм, то есть даёт способность одной сети получать опыт другой сети, который в данном случае и будет абстрактным для сети-получателя, потому как у последней нет никаких понятий о характеристиках полученных знаний, и тем не менее какие-то общие параметры всё же есть, что позволяет сети-получателю применять эти знания. Это простейший механизм абстракции, но он должен быть кем-то обеспечен. Например, сеть, отвечающая за восприятие слепым вибраций может передавать сети для анализа опасностей некие абстрактные данные, которые анализатор «окрашивает», как «потенциально опасные» на основе опять же накопленных знаний из других сетей. Анализатор может брать дополнительные данные из других сетей, которые так же абстрактно «окрашены» в контексте опасности и принимать решение. Здесь же может подключиться ещё несколько сетей, которые на основании опыта о вибрациях смогут установить расстояния до опасности и вычислить риски и допустимость самого риска в действиях на основании силы желания «пожрать». То есть, слепой/глухой это как раз таки дополнительная сложность и интересность для анализа мозговой деятельности.

Это как одна из моделей в терминах именно нейронных сетей. С другой стороны не факт, что мозг построен именно так. Возможно, что это наше видение работы мозга не более, чем поверхностный взгляд на деятельность мозга и реально мозг намного сложнее, просто еще не придумана модель, описывающая его деятельность.
0
eresik #
Для простейших экспериментов вы слишком сложные вопросы ставите (но правильные).
0
equand #
Распространять жизнь! вне! планеты :) это я имел ввиду.
Так бы природе «хватило» бы крокодилов :).
Так что ничего «она» не ошиблась, учитывая временной промежуток и «обучение» днк на ошибках (Есть еще иной взгляд на жизнь «я существую, значит я мыслю», как-то по Discovery про это слышал). Человек всего лишь одна из цепей эволюции, само-организованная для дальнейшего распространения жизни вне рамок планеты, т.к. существующие рамки были преодолены «природой» ранее.
За «Аватаром» далеко бегать не приходится.
0
equand #
В то же время слепые и глухие будут больше ориентироваться на вибрации, например
Немного не точно выразился, я имел ввиду полное отсутствие сенсоров у организма. Вибрация тоже сенсор.

… Следовательно, должен быть механизм, который запускает создание новой сети по факту нового внешнего воздействия...
SMP, cluster, threads и вперед. Связываются в мозге они вроде абстракциями. Слышал передачу на TED Talks, там говорили про то, что когда в мозге поврежден центр опознавания лиц (целый кусок мозга между прочим), люди воспринимают голос человека, но при взгляде понимают, что это не тот человек (даже мать) или же простой пример фантомных болей. Соответственно, необходима приоритезация «сенсорных сетей» (конкретных нейронных сетей обучаемых конкретным сенсором-учителем).
То есть грубо говоря: сенсор вибрации определяет у себя в нейронной сети, с чем это связано («набор абстракций») и рассылает «UDP» остальным доступным сенсорам по факту, дальше уже выбирается действие в соответствии с картой абстракций, например:
Вибрации->запрос к нейронной сети-> создание карт абстракций (т.к. сенсор более развит в связи с более частым (или в нашем примере постоянным) действием):
частота низкая
частота чуть выше и т.п
Так как сенсоров вибраций много и все сразу посылают сигналы в нашу нейронную сеть параллельно, то в процессе обработки возникает обширная карта абстракций с увеличивающейся частотой. Все это посылается нейро-пакетами по остальным нейронным сетям (память, инстинкты), где эта карта вызовет не 100 процентное, но все-таки попадание в абстракцию математической нейросети (вот как ее создать? видимо на основе данных всех сетей) с меткой «увеличивается» «скорость» (то есть определенно, что данные-таки увеличиваются и есть скорость этого увеличения), дальше карта расширяется и передается снова всем нейросетям (этот процесс должен быть постоянным, то есть нужно писать распределитель какой-то, чтобы нагрузка была невысокой для пк) и соответственно абстракция «вибрация»,«увеличивается»,«скорость высокая» с определенным коэффициентом либо попадет в «память» и вызовет очередным дополнением «плохо» реакцию-действи -> тревогу и все это вместе в инстинктах вызовет действие отойти дальше от источника вибраций (ну всю цепочку долго расписывать).
То есть в итоге нейросети могут быть не только связаны но еще и nested (не знаю как по-русски простите) и merged (смешанные?)
В итоге выходит любая абстракция и по сути будет являться объектом IO для нейросети.
0
mplaksin #
А вот, интересно. В теории систем есть эффект, когда сложная система имеет свойства входящих в нее подсистем. Забыл как термин называется.

А что, если предположить, что единичный элемент памяти должен в основных чертах следовать общей логике поведения системы в целом. А именно:
— бороться за выживание;
— получать питание;
— размножаться.
— стремиться к стабильности/определенности;
— адаптироваться/обучаться;
и т.д.

В проекции на элемент памяти это можно представить так.

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

Размножение. Когда элемент памяти становится очень большим он отдает часть своего «функционала» «мертвому» соседу, тем самым «оживляя» его и делая своим приемником. Например, эл-т отвечал за распознавание понятия <A, B, C, D> и D-составляющая так и норовила сработать автономно, он ее «отпочковал» и оставил себе только стабильные <A, B, C> зато теперь отдельно распознается некий признак отдельным элементом и позволяет системе в целом выделить новый класс объектов.

Стремление к стабильности/определенности. Это сопряженное с размножением. Т.к. в результате повышается стабильность.

Обучение. Стремление элемента памяти к вовлечению новых связей с целью повысить свою эффективность.

Как-то так… По идее, можно довольно неплохую модель на базе этого состряпать.
0
megalol #
Поправка — сложная система имеет свойства всех подсистем, но при усложнении появляются и новые свойства. Мозг это не просто куча нейронов, и живые нейроны намного более сложные автоматы, чем то, что применяют при создании практически полезных нейросетей. Даже при моделировании мозга модель какая-то сильно примитивная. Зато клеток дофига. Возможно, им виднее, но лично я не представляю, что там можно намоделировать, имитируя 4 типа рецепторов, без управляющих цепей.
По поводу идеи, что у клеток своя жизнь есть передача Эгоизм и альтруизм нейрона. Мне не очень нравится подобный редукционизм а-ля Докинз.

Вообще перед тем как браться за все это, нужно внимательно читать со всех сторон — кибернетику, нейронауки, особенно важно читать психологию, потому что психологи до всего этого добираются сверху. Иначе получаются изобретения велосипеда, причем весьма предвзятые, когда, например, базовые потребности, известные в психологии, заменяются словом инстинкт, т.е. ближе к попсовой этологии.
0
mplaksin #
...uses 456 CPUs and 144 TB of total memory...


Да-а-а, вот это отжиг не по децки.

Я когда-то прикидывал цифры, сейчас не уверен что всё вспомню, но где-то так. Исходим из того, что нейроны имеют специализацию, иерархическую подчиненность в построении образов и что в в коре головного мозга их порядка 4 млрд.
— активно используется около 5% (остаток: 200 млн)
— 90% информации приходится на зрение, на речь остается порядка 5% где-то (остаток: 10 млн)
— мне достаточно смоделировать интеллект 3-х летнего ребенка, т.е. можно еще смело пополам разделить (остаток: 5 млн)
— моделироваться будет упрощенная внешняя среда, которая будет раз в 100 проще реальной (остаток: 100 тыс.)
— в коре головного мозга идет как минимум 3-4-кратное дублирование для надежности (остаток: 25 тыс)

Были еще какие-то пункты, уже не помню. Но пусть даже так. Т.е. для того чтобы смоделировать мышление 3-х летнего ребенка с примитивной речью в упрощенной среде — надо моделировать порядка 25 тыс. нейронов.

Если взять, что в среднем на один нейрон будет приходиться около 100 связей — это в сумме 2.5 млн.

Грубо говоря, если на хранение связи или состояния нейрона у меня отводится 20 байт — это получается: ~50 Мб памяти.

Даже мой рабочий ноутбук способен рассчитать такую сеть пусть не 10 раз в секунду, но даже если раз в 10 секунд — это все же выглядит более реально чем «456 CPUs and 144 TB».

Знаю, что расчеты очень спорные и весьма абстрактные и не претендую на истину в первой инстанции. Просто, я считаю, что современные бытовые компьютеры уже способны моделировать ИИ, — дело только за алгоритмами.

А на счет литературы — в студенческие годы перелопатил много всякого. В том числе читал психологию и нейрофизиологию. Даже нашел несколько томов академика Павлова чтобы почитать про легендарные клинические исследования рефлексов на собаках.

Но это не отменяет сумасшедших идей. Вы же видите какой контингент тут собрался. От силы десяток теоретически подкованных людей, остальные — просто проснулись и поняли что это их призвание, теперь готовы бросаться на баррикады и просят выдать боевые патроны. Пусть работают, думают… вдруг что-то да и получится. Как говорится: «Даже слепая белка раз в год может найти орешек» :-)
0
eresik #
Можно сделать и оценку «сверху».
По памяти: никакая система, естественного или искусственного происхождения не может выполнять более 10^50 (+-2 порядка, точно не помню) элементарных операций (переключений) в секунду над не более чем 10^31 бит информации на килограмм своей массы. Если поискать — есть простое строгое доказательство в несколько строк.

Если для удобства принять что мозг примерно и весит килограмм (на самом деле меньше — если вычесть воду и всяческие системы обеспечения функционирования), то это как раз и есть оценка сверху вычислительной способности мозга.
+1
megalol #
— В мозге 100 млрд. нейронов, в коре 30.
— Интеллект подразумевает огромное количество знаний. Без них никак, даже если в данный момент однозадачное сознание их использовать не желает.
— Такая мода была у кибернетиков 50-х, мол, напишем распознаватель речи, и будет ИИ. Речь худо-бедно распознавать научились, однако интеллектом у таких систем и не пахнет.

5 миллионов — количество нейронов не у трехлетнего ребенка, который в этом возрасте уже умнее человекообразных объезьян (объезьян человеческому языку не научишь). Это меньше, чем у лягушки.
Т.е. для того чтобы смоделировать мышление 3-х летнего ребенка с примитивной речью в упрощенной среде — надо моделировать порядка 25 тыс. нейронов.

Это уже таракан.
Кстати, человек без внешней среды думает совсем не по-человечески, это называется диссоциативный наркоз.
Просто, я считаю, что современные бытовые компьютеры уже способны моделировать ИИ, — дело только за алгоритмами.

Ну если поведение пчелы считать ИИ (а много пчел весьма умно себя ведут), то да, хотя для получения алгоритмов природе понадобилось запустить генетический алгоритм длинной в миллионы лет.
Но 50 мб тут не обойдешься. Потому что живой нейрон — не математический нейрон, модель нейрона сама по себе может моделироваться на суперкомпьютере. Нервная система это результат уже за сотни миллионов лет.
А на текущих системах может и можно что-то делать, но не на базе нейронов. Это все равно, что начать писать эмулятор денди моделируя открытие-закрытые транзисторов процессора на нем.
0
mplaksin #
Вы вырвали фразы из контекста, без которого они ошибочны.
Я исходил из предположения, что не все нейроны используются в жизнедеятельности. Приведен список таких условных предположений, которые позволяют уменьшить кол-во нейронов в модели.

Вы же не будете доказывать, что все 100% нейронов участвуют в жизнедеятельности?
Как минимум, мы знаем, что даже если у человека грубо говоря пол мозга отшибет, то со временем оставшаяся часть восстановит нормальное функционирование. И что без зрения человек не умрет, а зрение — источник 90% информации для мозга и т.д…

Если исходить из сделанного предположения, то достаточно вышеуказанного количества. Но это не факт и я не буду его доказывать. Просто, информация для размышления, кому интересно.
0
eresik #
«Любая нейронная сеть это набор функций и коэффициентов» — в данном случае это ещё и набор бегающих по сети импульсов. Т.е. просто создав абсолютно точную копию мозга — мы не получим копию личности (но получим копию привычек, характера, воспоминаний и т.п.). Вообще это часто обсуждаемая проблема — «будет ли мозг думать, если его отключить от всех внешних сигналов». Вроде бы склоняются, к тому, что мозг в пустоте — неработоспособен.

«Цель в жизни» — формируется с помощью блока «энергия»+эволюция. Т.е. если человек получает энергию из еды, то и один из базовых инстинктов у него «пожрать». В блок «энергия» закладываем, например — «сеть получает энергию, если управляемый ею робот обходит препятствие», это и будет «инстинкт и цель в жизни».

А вообще, для простейших экспериментов это слишком сложные вопросы.
+1
khizhaster #
Вопросы, само собой, не простые и на данный момент решения не имеют. Но если размышлять об «универсальности», то стоит задуматься об абстракциях. Если сеть строится для чего-то конкретного, то нет смысла выдумывать велосипед, текущие модели сетей нормально справляются с простыми задачами. А вот такие задачи, как «игра в тетрис» уже сложнее, тут не просто набор готовых заготовок, а еще и анализ нужен. Потому это уже не просто сопоставление на основе подобранных коэффициентов.

Что такое импульс? Какова его характеристика? Может ли меняться эта характеристика между нейронами? А между синапсами? В чём разница между бинарным 1/0 и импульсом?

Об фразу «цель в жизни» сломали копья и все философы, и все учёные. На данный момент это абстракция. Суть этой фразы в том, что мозг осознаёт себя 9свой организм), самоопределяется, умеет ставить цели, размышлять над путями достижения этих целей. А фраза «смысл жизни» это как квинтэссенция этих целей, как свет в конце тоннеля. Но мозг всё равно размышляет, ставит, достигает либо отказывается и так далее.

Для простейших экспериментов можно взять модель клетки, модель инфузории и т.д. Это реально проще, чем играть в тетрис :-)
0
bab1n #
>Для простейших экспериментов можно взять модель клетки, модель инфузории и т.д. Это реально проще, чем играть в тетрис :-)

Что-то типо такого сделать предлагаете? www.youtube.com/watch?v=Fp9kzoAxsA4
0
eresik #
Как-то это слишком просто, научиться двигаться в сторону еды. Но для проверки работоспособности самого принципа — как раз подходяще.
0
halyavin #
А теперь хотите узнать как подобные задачи решают сейчас?

Во-первых, принимает решение не нейронная сеть — она ответственна только за оценивание текущей ситуации. Соответственно алгоритм игры следующий — смотрим все варианты положить фигурку и выбираем среди них тот, на котором выход нейронной сети наибольший. Кроме того, полезно еще рассчитать игру на пару ходов вперед. Поскольку мы не знаем следующих фигурок, то мы должны перебрать все варианты и потом усреднить оценочные функции в соответствии с вероятностями появления фигурок.

Процесс обучения следующий. Для начала нужно определить цель игры. Допустим, что это наибольшее число очков. Введем a=1-eps (0.9 например) и попросим нейронную сеть выдать среднее значение dscore_0 + a * dscore_1 + a * a * dscore_2 + a * a * a * dscore_3 +… при оптимальной игре, где dscore_i — очки полученные на ходу i (если в игре нельзя продержаться достаточно долго, то можно брать a=1). Соответственно если мы рассчитываем на один ход, то мы берем, не значение нейронной сети B после хода, а dscore_0+a*B (или 0, если мы завалились) и ищем максимум этой величины. После чего говорим, что нейронная сеть должна была выдать на текущей ситуации значение этого максимума и применяем какой-либо алгоритм обучения (либо сразу, либо скопом раз в N~100-1000 ходов). Другой вариант — рассчитать среднее значение максимума с учетом всех возможных фигурок и вероятностей их появления.

Для тетриса возможно лучше подойдет не количество очков, а текущее число рядов. Легче подобрать начальное приближение. Ну и на последнем слое не надо применять функцию f, поскольку результат может быть большим.

Эта общая идея называется Time Difference Learning. На одной match-3 игре она у меня успешно работала и обыгрывала человека в 3 случаях из 4 (скорее правда за счет глубины просчета, чем крутой оценочной функции).
0
eresik #
Т.е. это вариант использования сети в качестве одной из составляющих алгоритма. Насколько я понял, в данном случае — нейронная сеть используется для прогноза «какой вариант действий лучше»?
0
halyavin #
Угу
–3
Ueasley #
А я PHP-разработчик.
+2
lesa80 #
[irony] неудачник =) [/irony]
+5
3d6 #
Мдаа…
Вам неплохо бы все же для начала почитать, что в этой области делается. Перцептрон — это далеко не последнее слово в области ИНС.
Например, для самого минимального общего представления о том, что бывает, можно прочитать мою статью: habrahabr.ru/blogs/artificial_intelligence/83781/ и ссылки, которые в ней есть, на другие очень популярные статьи на хабре.

В частности, сети с импульсным кодированием называются спайковые сети.

Ваш алгоритм обучения W=W+W*ЭМОЦИЯ_УЧИТЕЛЯ*k не даст ничего. Совсем ничего. Попробуйте проследить за жизнью потока спайков в сети, которая обучается по этому правилу — и увидите это сами (если же вы видите обратное — напишите подробно свои рассуждения, будем искать ошибку). Как правильно учить спайковые сети — это вопрос очень серьезный, и по большому счету нерешенный (решения есть только для некоторых специфических случаев).
0
eresik #
1. Не суть важно как они называются. Наверняка есть ещё десяток названий.
2. В данном виде действительно такая формула ничего не даст, я лишь попытался показать что должно влиять на ход обучения.
3. Вот раз неизвестно как учить импульсные сети — заодно и поэкспериментируем.

Надеюсь дня за четыре чего-нибудь напишу экспериментальное.
Одна беда — знаю PHP, MySQL, С++.
Делать на С++ — сложности с сохранением/восстановлением (для меня сложно сохранять/читать объекты), и с контролем работы.
Вариант хранить и обрабатывать экземпляры сети в MySQL — насколько это эффективно?

+1
Ueasley #
> Делать на С++ — сложности с сохранением/восстановлением (для меня сложно сохранять/читать объекты),
Омг
–1
eresik #
Как есть.
Просто сделать нечто работающее — могу. Но вот как сохранить состояние этого работающего на диск — для меня проблема, да и вникать особо нет желания (я не профессиональный программист). В том же эксперименте с тетрисом — всё сети были в памяти и никуда не сохранялись.
0
Ueasley #
> знаю С++
> для меня сложно сохранять/читать объекты
–1
eresik #
Ай, не важно, уже начал на php+mysql, будет сильно медленно — перейду на c++
0
3d6 #
Я тоже не профессиональный программист. Но все же периодически трачу час-два на то, чтобы разобраться в том, что впоследствии сэкономит месяцы (в результате за многие годы стал в некотором роде даже неплохим программистом, если только не вспоминать про стандартные либы, которые мне действительно обычно не нужны). Это — разумно, если вообще заниматься исследованиями, связанными с вычислениями.
–1
eresik #
Приведу пример, что для меня сложно (точнее даже не стал разбираться как это сделать).

Сохранить на внешнем носителе vector если каждый CNeyron — содержит переменные в динамической памяти (уж не помню точно что там было, но смысл — сохранять вектор объектов, которые содержат другие объекты, да ещё к тому же в динамической памяти.

Вот это для меня сложно.
0
eresik #
vector
0
eresik #
Тьфу, блин, разметка глотает знаки — vector of CNeyron, так должно быть понятно.
0
Halt #
Если бы будете описывать каждый нейрон как отдельный объект, то пересчет состояний займет миллионы лет. Вы бы лучше курили в сторону матриц и SIMD технологий (MMX, SSE, ну и CUDA)
0
eresik #
SIMD — дадут ускорение в разы, а не на порядки. Мне как-то всё равно, будет выполняться один миллион лет или два.
Я делал каждый нейрон и даже каждую связь как отдельный объект (просто для удобства и наглядности наблюдения за функционированием сети). На сетях с десятками слоёв и десятками нейронов в каждом слое — работало быстро, насколько помню — пересчёт состояния популяции из 1000 сетей занимал несколько секунд (на практике использовались менее сложные сети).
Объекты-не объекты — это не сильно влияет на быстродействие (да, быстрее просто умножить вектор информации на матрицу весов, но не в разы ведь).

А в данной конструкции я как-то слабо представляю, что там можно сделать матрицами, если предполагается сложное поведение связей и нейронов (запасы энергии и т.п.)
+1
3d6 #
>Объекты-не объекты — это не сильно влияет на быстродействие (да, быстрее просто умножить вектор информации на матрицу весов, но не в разы ведь).

Это смотря как писать. Хорошие объекты действительно незначительно дольше голых матриц, но если на тысячу арифметических операций будет приходиться сотня вызовов методов — то… :)
+1
3d6 #
А зачем нейроны сохранять как цельный вектор, если непонятно, как им пользоваться? Достаточно сделать отдельно функцию сохранения/загрузки отдельного нейрона в байт-код, и функцию последовательной записи/считывания в файл байт-кода для N нейронов (в случае считывания — с добавлением соответствующего нейрона в вектор). Ну или решить проблему еще десятком других методов.
+2
3d6 #
1. Названия важны, чтобы знать, что искать.
2. Не показали, в том-то и проблема.
3. Эксперименты это замечательно, если понимать что и зачем делается.

Нейросеть на MySQL — это дааа… У меня при экспериментальном исследовании небольшой модификации (кстати, оказавшейся полезной) известного метода обучения рекуррентного перцептрона уходило несколько часов на один полный эксперимент с сетью на пару десятков нейронов, при весьма оптимизированном С++ коде.
+1
mplaksin #
Для экспериментов удобно использовать Python. Сам язык простой до боли, быстрый и главное — листинги у него понятные. Можно модель запускать прямо в памяти и в случае удачного результата сохранять сериализированные данные в файл, а потом уже разбираться куда ее перевести — в БД или просто сохранить в виде текстового лога для «отчетности».

Еще плюс большой в том, что Python ускоряется легко с использованием psyco. Достаточно просто импортировать эту библиотеку и код раз в 10 быстрее работать начинает.

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

Думаю, вполне можно использовать для небольших исследований, где участвует до 100-200 нейронов.

В последствии у меня только одна проблема возникла, когда захотел интерфейс сделать человеческий. Там эти Qt, Tcl/Tk и т.п. довольно сложны в освоении, по крайне мере с наскоку я не осилил.

Сейчас вот, тоже делаю сложную модель и выбрал для этого PHP+MySQL. Хотя сердцем чую что это противоестественно.
С другой стороны, при выборе того же Python, наверное, в качестве БД прийдется использовать postgres, а с ним я тоже не дружу особо :(

Вот так всегда — идеи есть, а когда доходят руки до реализации, вместо того чтобы излить свое творчество приходится решать технические вопросы и читать тонны литературы по не связанной с темой исследования тематике.
+2
equand #
Мой выбор :)
Питон для этого имхо идеален
И не нужен MySQL и вообще SQL, сохранять можно serialize/pickle.
Ну а в случае чего MySQL подключается довольно легко к питону установкой модуля. Но все равно, почему не какое-нибудь mongodb? Оно же ближе выходит… Имхо проще свою БД (объектную) написать на python, чтобы в случае чего полностью разбираться в том что, куда, как и почему работает…
0
mplaksin #
Я слышал, что сейчас на смену SQL базам приходят новые, но подробнее не знаю.
Слышал что это базы вида ключ-значение или memcached, но утверждать не буду, т.к. не нашел более детальной инфы на эту тему.
+2
equand #
В поиске хабра напишите mongodb или nosql еще вроде сайт nosql.org
0
mplaksin #
Спасибо, обязательно гляну.
0
ruguevara #
А чем mysql для питона не угодил? Да и нужны ли там базы данных для нейросетей? Все в память и из памяти надо разом грузить через сериализацию.
0
mplaksin #
Да, пока моделька не большая, вполне и без БД обойтись можно.
Например, на маленькой модели я добился устойчивой работы рефлексов, теперь хочу протестировать на больших массивах данных и поэкспериментировать с диалоговым интерфейсом. Вот тут и затык. Нужна БД и интерфейс.
0
equand #
В том то и дело, что БД будет узким из-за структуры горлышком, в итоге Вы придете к тому, что напишите внутри реляционной объектную БД, все должно быть в памяти и храниться ключами, в том числе и соединения между ними.
0
mplaksin #
А вы, случайно, не можете указать, где можно почитать что-то по объектным БД? Я бы с удовольствием попробовал.
0
Kalobok #
По поводу генетической памяти — это, строго говоря, не память, а просто свойство системы. То же дыхание, как и сердцебиение, происходит просто потому, что какие-то структуры генерят определенные ритмы, а не потому, что система была обучена (обладала памятью). Переходя к IT я бы это сравнил скорее с рефрешем памяти, чем с работой программной нейросети.
+3
AirLight #
как сказал Ашманов, — «в этой статье много нового и верного, но ничего верного из нового и ничего нового из верного»

читайте больше книг о нейронных сетях, там это все описано
+3
morincer #
Поддерживаю 3d6 двумя комментами выше. Потратьте лучше две-три недели на изучение мат.части, чтобы не убить два-три месяца на написание того, что не будет работать.
Касаемо предложенной Вами схемы — тут дьявол, как водится, в деталях.
Несколько хинтов к размышлению:
1) До сих пор толком не ясно, имеет ли смысл использовать импульсные (спайковые) ИНС. То, что таким путем пошла эволюция не значит, что этот путь — единственно верный
2) Частотное кодирование потребует долгой настройки параметров (например, максимальный-минимальный порог и шаг импульса)
3) Вы как-то обошли в описании механизм образования новых синаптических связей, возможно, он вам кажется чем-то несложным или, упаси боже, даже тривиальным. Это не так. Фактически, он — краеугольный камень нейроморфологии. Соответственно, необходимо будет продумать ответы на такие вопросы: выходы каких нейронов надо будет объединять (пространственное расположение? схема «импульсации»? «срабатываем вместе — объединяемся»?), на входе какого нейрона надо объединить выходы, деградация связей и т.д. и т.п.
4) Самообучение — это уже прямая дорога к аппарату эмоций. Опять же, система далеко не тривиальная. Главный вопрос, на который придется ответить — это как технически та или иная эмоция влияет на, простите за программерский сленг, ран-тайм поведение ИНС, в частности на генерацию импульсов и изменение структуры
5) Оптимизация генетическими алгоритмами — не панацея. Ибо а) может идти очень долго и б) чуствительна к ошибкам в программировании. Как правило, для практического решения задач методами ГА пространство поиска максимально сужают. Поэтому Вам придется очень крепко подумать на тему — что и как Вы собираетесь оптимизировать.

Ну, и в догонку — советую почитать мою статью по методам нейросетевой эволюции — возможно, вы эволюционировали свою сеть как-то не так (особенно пристально рекомендую посмотреть на методику NEAT). А если хочется попробовать силы в более глобальных вещах — возможно, вам будет интересно почитать книгу Жданова А.А. «Автономный искусственный интеллект» — очень интересная работы с сильным междисциплинарным исследованием.
0
eresik #
Ответить могу только на 3 — где-то в комментариях писал по этому поводу.

У нейрона есть 3 доп параметра «хочу поделиться информацией», «нужна информация-» (нужна тормозящая связь), «нужна информация+» (нужна возбуждающая связь).
«Хочу поделиться информацией» — по аналогии с человеком — если давно не было импульсов на выходе, и тут вдруг появился — сразу хочется поделиться информацией, затем желание плавно снижается.
«Нужна информация-» — пропорционально частоте импульсов на выходе нейрона.
«Нужна информация+» — обратно пропорционально частоте импульсов на выходе нейрона.

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

Согласен, притянуто за уши, но по крайней мере «хоть что-то»
+3
morincer #
Действительно, несколько притянуто.
По поводу «хочу поделиться информацией»/«нужна информация+» — если реализовать этот механизм в том виде, как описано, то смысл жизни вашей нейросети будет в том, чтобы максимально быстро «слить» в истоки (эффекторы, механизмы) все новые паттерны сигналов, при этом слив будет идти через наименее активные нейроны (другими словами — ваша ИНС будет слишком активно реагировать на все новое).
При этом активно работающие нейроны будут изо всех сил тормозиться, что тоже не есть гуд.

Для мысленного тестирования Вашего механизма могу предложить следующую простую модель.

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

Попробуйте смоделировать, как такая задача будет решаться Вашей ИНС.
0
eresik #
Ну так эта задача ведь не имеет отношения к формированию новых связей, тем более что наверное только что сформированным связям надо устанавливать нулевой вес (или какой-то минимальный), фактически — сразу они в работу не вступают.

Да, самые активные нейроны (но только самые активные) будут стараться создавать новые тормозящие входные связи, дабы не сдохнуть от работы.
А самые пассивные (но только самые пассивные) будут стараться создавать новые возбуждающие входные связи, т.е. вовлекаться в работу, дабы не бездельничать.

Вроде как самобалансировка получается.
0
eresik #
И вообще — рассказать «как эта сеть будет работать в такой-то ситуации» сказать наверное в принципе невозможно, поскольку в одной и той же ситуации она может выдавать разные сигналы (мало ли, настроение у неё плохое).
+2
mplaksin #
Вам morincer дело говорит.

Такой случай смоделировать можно и на бумаге и сразу будут видны все проблемы/пробелы в теории. Ведь, если с двумя рецепторами/эффекторами не сможет работать, то при большем количестве и подавно.

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

Я бы добавил еще небольшое усовершенствование. Оленюсу амёбису добавить целевой параметр: «сытость». Который он должен оптимизировать.
Т.е. когда он щиплет траву — сытость растет, когда бежит — активно тратится. Когда ничего не делает, то медленно уменьшается.

И сделать так, чтобы Волкус инфузорис появлялся рандомно, в любой момент. Или иногда вовсе не появлялся.

Если сеть сможет сама обучиться управлять Оленюсом — это победа. Значит она сможет научиться и более сложным вещам.
+3
eox425 #
я бы прикручивал genetic fuzzy systems к определению связей и их деструкции так бы было проще…
в журналах ieee уже в 2009 об этом писали. MIT использовали сеть подобного рода (она была нечёткая, а не частотная) для интерполяции полиномиальныхъ алгоритмов — задача синтеза логарифмического алгоритма с существующих полиномиальных… ну кароч я долго могу продолжать. Почитайте тётю Рутковскую Нейронные сети генетические алгоритмы и нечеткие системы + журналы ieeе как реальные реализации этой гадости в продакшине да они самообучающиеся и полны Матана =)
если что — пишите. Я в принципе сейчас тоже формирую систему самообучающихся сетей на основе «самодатамайнинга» и ген. алгоритмов. хочу повторить успех MIT.
0
eresik #
Нечёткие сети это наверное совершенно другое что-то.
С нечёткими алгоритмами не знаком, знаю лишь что они очень ресурсопрожорливы.
0
mplaksin #
Четкая логика: Маша + Петя = <true | false>.
Нечеткая логика: Маша + Петя = 0.7343
Как-то так :)
0
eresik #
На этом уровне я знаю, но где здесь ресурсоёмкость? :)
0
mplaksin #
Вычисления с плавающей запятой более ресурсоёмки операции с дискретной логикой.
–1
eresik #
Вот может где-то неправильно ставил эксперимент, но разницы по быстродействию операций int и float на современных процессорах вообще нет, абсолютно, ни на процент (по результатам моих давнёшних тестов). В тестах (VC++) использовались операции умножение и сложение (перемножение большого числа больших матриц).
Тестировал когда-то дабы понять — имеет ли смысл переходить на целочисленную арифметику, смысла не увидел.
0
mplaksin #
Еще есть такая штука — функции. Синусы всякие, косинусы, тангенсы…
При работе с четкой логикой чаще всего используется что-то вроде: A&&B, A||B, not A…

А в нечеткой логике расчеты связаны с теорией вероятности, использованием экспоненциальных функций и т.д. В целом мат. аппарат довольно разнообразный.

Хотя, надо признать — всё зависит от частной реализации. Иногда и с дискретной логикой можно так намутить что мало не покажется…
–1
Halt #
Это не есть нечеткая логика. Совсем. В вашем примере представлена строгая функция результата от аргументов.

Нечеткие алгоритмы отличаются тем, что не предполагают строгого решения. Они оперируют понятиями «A должно быть больше B», «обычно A предшествует B», и т. д. Притом вероятности не являются определяющим фактором.

Простейший и наиболее жизненный пример, описанный в книге Рутковской: парковка грузовика задним ходом в бокс. Попробуйте написать программу, которой дается положение машины, ориентация колес и т. д. и которая дает команды на исполнительные механизмы.

Вы увидите, что это все не так просто как кажется. Особо хардкорный вариант — парковка фуры с прицепом на свободной связке.

0
mplaksin #
Это не есть нечеткая логика. Совсем.


Неужели?
Дело ведь не в сложности вопроса. Я умышленно утрировал, чтобы показать только суть. А суть заключается в том, что операции производятся над вероятностными величинами. Маша любит Петю с вероятностью 0.7343. Для общего понимания нечеткой логики этого более чем достаточно.

Они оперируют понятиями «A должно быть больше B»


В четкой логике это выглядит как: А больше Б = истина|ложь
В нечеткой логике это: А больше Б = истина(75%) или = 0.75

Не вникнув, вы меня просто перефразировали.

Вы увидите, что это все не так просто как кажется.


Обратите внимание на смайлик в конце моего поста. Я понимаю что не все так просто.
0
Halt #
Почитайте предложенную выше книгу «тёти Джоан Рутковской». Очень толковая. Там дается хорошая база для входа в тему.
0
eresik #
Почитаю
+2
Dmitry_f #
Извиняюсь, что не в тему, но не могли бы вы сгруппировать заголовки с абзацами ниже (к которым они относятся), а не с абзацами выше. Все время сбивался при чтении — заголовок воспринимается как продолжение абзаца.
0
DirectX #
По поводу памяти — мне кажется совершенно верное направление повышения качества распознавания. Даже если взять хрестоматийный пример распознавания персептроном букв, то даже в этом случае очевидно, что информация о ранее распознанных буквах имеет, скажем так, немалую ценность.

Другой вопрос что каждое концептуальное усложнение задачу обучения не просто сложной а катастрофически сложной. Особенно здесь портят малину обратные связи, если реализовывать память через них. Понятно что они есть в природе и скорее всего являются ключевым моментом вообще всей концепции, но такая система в принципе, из самых общих соображений, с очень высокой вероятностью неустойчива.

Могу предложить другой вариант учёта эффекта памяти, адаптированный к идее сферических нейронов в вакууме. Это концепция, применяемая в цифровых фильтрах — звено задержки. Что-то меня на эту тему недавно осенило (понятно что велосипед, зато сам придумал). Проще все схематично изобразить:



Т.е. система — обычная идеальная нейронная сеть, в которой обработка информации идёт по тактам — фактически цифровой фильтр с конечной импульсной характеристикой.
0
eresik #
В neurosolutions реализовано.
Вообще там по-моему почти всё что можно реализовано, вплоть до сетей с использованием нечёткой логики.

Идеальное поле для экспериментов.
+Исходники на C++ (простые и понятные классы)
+Ооочень легко дописывать/модифицировать все алгоритмы (хотя это вряд ли понадобится)
+Ооочень легко встраивать в свои программы.
+2
mplaksin #
Как говорил когда-то мой профессор (покойный, царство ему небесное): «Как бы ты не усложнял нейронную сеть — она все-равно останется с точки зрения математики — матрицей, а матрица думать никогда не сможет». По сути ведь так и есть — как ни крути, а выходит многомерный вектор. Конечный автомат. Машина Тьюринга… (и дальше на ум приходит грустная аналогия) — велосипед с чугунными педалями и карданным приводом на оба колеса.

Эту ситуацию немного исправляет введение обратных связей, но тогда, как сказали выше, — это приводит к неразберихе и сложности в понимании/настройке/обучении.

Мне кажется, что чего-то мы в нейронах недопонимаем… чего-то важного…
0
s0b3r #
Всё мы понимаем, просто ваш профессор не был готов так думать. Некоторым людям нелегко признать, что их мозг — это ограниченный в возможностях инструмент, который можно скопировать. Просто технологии ещё настолько не развились, но это факт. Тут вспоминается доклад Кудинова на РИТе… Рано или поздно мы научим машины думать так же, как это делаем мы, даже, возможно, до конца не разобравшись в том, как точно это работает.
0
eresik #
А я 50/50 думаю что вполне может быть верной и теория — мозг=«телевизор», а не генератор картинки. И как ты в нём не разбирайся, понять откуда берётся картинка — не получится. Можно, например, разобраться, что блок развёртки отвечает за геометрию картинки, и даже подстраивать размеры/форму. Но вот откуда сама картинка…
0
s0b3r #
по-моему, второе предположение просто бесполезно… исследователям оно ни к чему =) я бы даже сказал, что те, кто считает его верным на 100%, не могут быть исследователями… только религиозными фанатиками =)
0
eresik #
Интересно, а можно ли придумать какие-то формальные критерии для того что бы по ним понять — генератор или приёмник перед нами.

Так сходу и не придумаешь.

0
megalol #
Мозг точно не телевизор (это противоречит данным о его строении, почитайте что известно на данный момент про первичную визуальную кору, например), но он может быть тонким клиентом, и вот это уже хрен опровергнешь. Как без изучения софта определить, тонкий клиент перед нами, или полноценный компьютер? Да никак.
0
eresik #
Так же как и если бы физики считали результат всегда 100% прогнозируемым — не появилась бы квантовая физика, где всё зиждется на вероятностях. Эдакие две крайности — фанатики формулы и фанатики религии :)
0
s0b3r #
по этому поводу ещё вспоминается попсовая бритва Оккама…
0
mplaksin #
Я не отрицаю того, что ИИ будет создан. Более того, я в это свято верю.
Вопрос только в подходе. Линейные вычисления на это не способны однозначно.
Обратные связи вводят возможность использования своего же опыта на новых итерациях и, гипотетически, будут предпосылкой к появлению самосознания в подобных машинах. Но, как было сказано выше: «это приводит к неразберихе и сложности в понимании/настройке/обучении».
Математический аппарат не в силах тривиально описать сети с динамическими топологиями да еще и с обратными связями. Там начинаются такие формулы, что на них даже смотреть страшно, не говоря уже о понимании.
Статическая топология немного упрощает дело для математики, но зато резко ограничивает возможности. Краеугольный камень.
Получается что вся надежда в данный момент — на эмпирические опыты, подобные тому, что предлагает автор топика.
0
ruguevara #
Именно в введении обратных связей, привнесением хаоса. А просто не нужно пытаться понимать влияние каждой связи. Из понимания каждой связи по отдельности общего понимания не получится, надо просто понимать сам принцип. Эмерджентность в том и состоит.
0
mplaksin #
Увы, но неправильное функционирование связи может повалить работу всей сети. Например, чересчур быстрое затухание не даст возможность связывать объекты во времени и всё. Сеть будет в холостую глотать тонны информации, которые не будут оседать в её памяти.
0
ruguevara #
F вот тут надо с генетическими алгоритмами колдовать, чтобы такую сеть отбраковать
0
mplaksin #
Я использую немного другой концепт. У меня не только связи но и нейроны добавляются в сеть динамически.
А связи формируются генетически — методом проб и ошибок (не все, а те, которые достраиваются со временем).
Т.е., получается что не сеть внутри ГА, а ГА внутри сети.
0
ruguevara #
ГА внутри экземпляра, то есть наоборот к тому, что в природе, это смело и оригинально, возможно даже интересно.
0
mplaksin #
А кто сказал, что ГА только в макромасштабах действует? :-)
Нейрон тоже вполне можно рассматривать как объект, который должен пытаться выживать, искать удачную комбинацию входов для этого…

К примеру, я (нейрон) запомнил некий паттерн данных, но в примере были пробелы или шумы. Я должен все-равно с каждым разом пытаться дополнить запомненный образ и устранить шумы, чтобы добиться максимальной эффективности в работе. В этом мне помогает ГА:

— я от рандома тыкаю в один из синхронно сработавших сигналов и присоединяю его к себе с минимальным весов и дальше смотрю — мешает он мне работать или наоборот — помогает.
— если мешает — связь деградирует
— если помогает — закрепляется и становится частью образа
+1
3d6 #
Вообще-то для многих моделей роль обратных связей абсолютно ясна, и никаких проблем с их вычислением нету. А матрица, которая сама себя непрерывно обновляет — как раз вполне может думать, если это обновление имеет достаточно интересный вид.
0
mplaksin #
Если матрица себя обновляет — это и есть некая обратная связь, только не информационная, а уже, получается, — функциональная.

Вот простой пример:
У меня сеть с динамической топологией (связи достраиваются в процессе работы), а так же с выхода заводятся на вход сигналы (обратная связь). Связи, в частности, достраиваются на основании синхронного срабатывания.
Получается, что не исключен вариант короткого замыкания и образования циклов. А это не нормально. Что мне толку, если модель со временем полностью зациклится?
Приходится думать, как эти циклы подавлять или разрывать. Но опять же, не исключена возможность образования «восьмерок» — двух циклов, завязанных друг на друга. Или циклов, в которых более 5 цепочек.
0
3d6 #
Я же говорю — роль обратных связей для многих моделей вполне ясна. И например в ассоциативной памяти никаких циклов не возникает (по крайней мере, нежелательных для нас циклов — т.к. некоторые вполне могут быть полезны). И обновление матрицы там есть (ну, я конечно неточно сказал про «сама себя обновляет» — матрица как таковая этого делать разумеется не может — но в результате работы сети вычисляются необходимые изменения, которые нужно внести).
0
mplaksin #
А если посмотреть шире?
К примеру, у нас система имеет такую архитектуру:

[вход] >> [ассоциативная память] >> [модуль реагирования] >> [выход]

при этом:

[выход] >> [вход] /* обратная связь в масштабах системы */

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

Получается что-то вроде:

вход1 => [состояние1] => действие1 (оно же становится вход2)
вход2 => [состояние2] => действие2 (оно же становится вход3)

а вот тут, к примеру, у нас повторяется <вход1> и [состояние1] захватывает в себя предыдущий результат <вход3>

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

вход1 => действие1 => действие2 =>… => действиеN

Но, у нас уже образовалась связь, которая зацикливает <действиеN> на <действие1>…
Получается, что эта цепочка будет повторяться вечно.
Конечно, можно ввести такое понятие как «утомление» и после 3-4 срабатываний эта цепочка остановится. Но опять же, а вдруг наоборот, надо чтобы она сработала 10 раз в подряд, а я её буду «аппаратно» гасить?

Например, Вам ведь ничто не мешает 50 раз в подряд повторить слово «верблюд»? И при этом вы не зациклитесь.

Этот момент для меня пока остается загадкой.
0
3d6 #
>[вход] >> [ассоциативная память] >> [модуль реагирования] >> [выход]

Не надо такую сложную схему, достаточно посмотреть на рекуррентный перцептрон. Там не только могут быть, но и регулярно бывают циклы, по достижению которых сеть становится непригодной. Это означает в основном то, что такая модель плохо изучена.

>Например, Вам ведь ничто не мешает 50 раз в подряд повторить слово «верблюд»? И при этом вы не зациклитесь.

Да, потому что помимо небольшого участка мозга, занятого повторением слова «верблюд», которое происходит циклически, у меня есть еще масса других участков, которые совершенно нециклично себя ведут. А если мой мозг в точности будет повторять все свои состояния в цикле — то я из такого режима сам не выйду, разве что под внешним воздействием или за счет «утомления» — вот например при эпилепсии как раз происходит зацикливание достаточно большого участка, который так просто не остановить.
0
mplaksin #
Да, называется аффективным состоянием.
Кстати, вы правы, если вот, взять к примеру, ребенка…
Они даже так дурачатся — повторяют что-то кучу раз. Иногда в подобные аффективные состояния заходят и ревут до тех пор пока сил не станет…
Похоже, это правильный путь.
Т.е. циклы должны подавляться утомляемостью, но которая наступает не очень быстро. Зато если наступает, чтобы не повторялась потом длительное время.
0
equand #
Ну вероятно, по-мимо физической утомляемости, должен быть голод и т.п. Базовые инстинкты.
+2
StrangeAttractor #
> Число нейронов у нас — сколько дано от природы и «больше не вырастет»

Неоднократно и из самых разных по серьёзности источников слышал что эта гипотеза давно опровергнута.
0
eresik #
В любом случае — сила не в числе нейронов.
У неандертальцев мозг был больше чем у современного человека, если не ошибаюсь.
+вот это «Мы всегда упрощённо думали, что чем больше нейронов, тем круче мозг, но наша последняя работа это опровергает».
0
mplaksin #
Так и есть — алгоритмы рулят.
Еще с универа помню, нам на лекциях по искусственному интеллекту преподаватель говорил, что знания — это активная информация, которая может сама производить действия и другую информацию. Т.е. нечто сродни функциональному программированию.

Если не изменяет память, еще вроде есть даже подход такой к моделированию ИИ систем — агенты. Там каждый агент умеет выполнять какое-то эксклюзивное действие и объединяясь они могут решать сложные задачи. Ну и потом генетический алгоритм ищет наиболее удачное сочетание агентов. Тогда это был писк моды. Кстати, случайно не знаете как сейчас обстоят дела с агентами?

Вполне логично, что эффективность будет зависеть от качества алгоритмов, а не от объема памяти.
0
s0b3r #
Очень обидно, что такая отличная статья получает так мало плюсов. Ведь это именно то, ради чего я читаю хабрахабр (и ради чего, как мне кажется, он задумывался). Похоже, люди плюсуют, только если понимают то, о чём написано. А понять что-то про нейронные сети могут далеко не все… И всё потому, что хабр уже не торт.

Одним словом, автор, пиши ещё. Всё супер!
0
3d6 #
Статья ни разу не отличная. Автор не знает очень многого, и весьма непрофессионально рассуждает, вдаваясь в несущественные детали и опуская главное.
0
eresik #
Автор где-то утверждал что он профессионал и «сейчас вам всё расскажет как оно есть на самом деле»???
0
3d6 #
Нет, но это еще не повод говорить «вот супер статья».
0
3d6 #
Собственно, если публикуется статья с недостатками, автор прислушивается к критике, и корректирует свою работу в соответствии с ней — это нормальный, здоровый научный процесс. Такого рода статьи нужны, у них есть вполне определенная роль в эволюции науки.

Но когда из этого делается священная корова, когда оценка дается просто по факту выполнения какой-либо работы, без учета ее положения относительно работ других людей — тогда начинается совковая наука в худшем смысле этого слова, вместо коллектива развивающихся специалистов начинается его деградация, превозносится глупость, и имеем после этого ученые советы, в которых из 20 докторов наук — 5 нормальных ученых, и 15 ученых дураков (в нашей стране это типичная ситуация, даже в весьма приличных местах).
0
s0b3r #
У меня другие критерии «хорошести» статьи. Статья даёт пищу для ума, преподносит информацию в довольно доступном для тех, кто не разбирается в предмете профессионально виде, и написана хорошим слогом. Этого достаточно. К тому же, автор говорит о продолжении.

А то, что автор чего-то не знает — ничего не говорит о статье. Только о профессионализме автора. Если бы он писал ересь, то это был бы огромный минус. Но он делится своим опытом, мыслями и подходом. И обсуждение породило множество отличных развёрнутых комментариев. Если бы не полная загруженность, я бы сам снова взялся за нейросети после такой статьи.
0
North #
Учитель может давать понять сети — хорошо или плохо она себя ведёт, т.е. выдаёт ли те выходные данные, которые мы от неё желаем получать. Реализовать можно в виде некоторой функции, примерный алгоритм работы которой очень прост.


Наверное будет интересно — в книге 81 года английского ученого -кибернетика С. Бира "Мозг фирмы" — такого типа управление называется алгедоническим.

Алгедонический (от греческих алхос — боль, гедос — удовольствие) — относящийся к регулированию в неаналитическом смысле.
Алгедонический подход подразумевает управление системой путём посылки ей сигналов о том, находится ли она в (не)удовлетворительном состоянии и/или о том, что её тенденция к изменению является (не)удовлетворительной без явного и прямого учёта внутренних особенностей работы системы.


В этой книге описываются принципы организации систем с таким управлением, аналоги из биологии этой связи, организация потоков информации между управляющей системой и объектом управления и т.д. Книга переведена на русский и легко находиться в электронных библиотеках :)
Формул в этой книге нет — она написана в таком философско-организационном ключе, но идей всяких там много — может что ни будь из них вам пригодиться.
0
bear11 #
А еще абсолютно другой подход описан в книге Инфицирование как способ защиты жизни, Расторгуев C.П..
Вкратце — делается случайная сеть из большого числа нейронов, а обучение её состоит в «гибельном выжигании» ненужных путем подачи на входы и выходы обучающих паттернов.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.