Ознакомьтесь с Условиями пребывания на сайте Форнит Игнорирование означет безусловное согласие. СОГЛАСЕН
ВХОД
 
 
Привет! Правила | Свежее | Чат | Подписка
Чтобы оставлять сообщения нужно авторизоваться.

Тема форума: «Нейросимулятор»

Сообщений: 295 Просмотров: 17386 | Вся тема для печати
1 2 3 4 5 6 7 8 9 10 11 12
 
usr
Пишет без ограничений, редактирует историю - unlimited

Сообщений: 521

Оценок: 2
список всех сообщений
clons
Сообщение № 46326 показать отдельно Декабрь 08, 2019, 03:12:04 PM
ответ -только после авторизации
Зачем ты пронумеровал нейроны 5 и 6 номерами 7 и 8?

INSERT [dbo].[Neuron] ([ID_N], [Limit_neuro], [AKS_neuro]) VALUES (7, 3, 0)
INSERT [dbo].[Neuron] ([ID_N], [Limit_neuro], [AKS_neuro]) VALUES (8, 3, 0)

Метка админа:

 
Palarm
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 2771

личная фото-галерея
Оценок: 6
список всех сообщений
clons
Сообщение № 46327 показать отдельно Декабрь 08, 2019, 03:43:26 PM
ответ -только после авторизации
Это поле счетчик. Пару записей удалил, каскадным удалением снеслись связанные с ними, новые сделал. Этот код для связей между таблицами, для юзера никакой смысловой нагрузки не несет. Если нужен номер, тогда отдельное поле надо.

Метка админа:

 
usr
Пишет без ограничений, редактирует историю - unlimited

Сообщений: 521

Оценок: 2
список всех сообщений
clons
Сообщение № 46331 показать отдельно Декабрь 08, 2019, 05:21:28 PM
ответ -только после авторизации

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

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

1. Переписать код на более распространенном языке программирования, чем язык процедур SQL Server-а. В самом простом виде можно сделать страницу с javascript-ом. Пока настольно мало данных, что всё поместится в оперативку.

2. Не просто устанавливать выход синапса в выход аксона рецепторав, а хранить вес, на который его умножать.

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

4. Не знаю, как надо соединять нейроны с рецепторами. Сейчас ты сделал 3 нейрона связаны со строками матрицы, 3 - со столбцами. Но это не догма.

5. Желательно код выкладывать на github, хранить архивами на форуме - неудобно. Могу создать репозиторий для нас.


Метка админа:

 
Palarm
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 2771

личная фото-галерея
Оценок: 6
список всех сообщений
clons
Сообщение № 46332 показать отдельно Декабрь 08, 2019, 06:09:47 PM
ответ -только после авторизации

1. Это уже делается

2. Сейчас пока просто дублируется 1 от выхода рецептора в поле Snp таблицы синапсов. Но потом думаю в этом поле хранить вес синапса, а срабатывание нейрона делать как раз после умножение сигнала от рецептора на значение в этом поле - и только потом их складывать. Хотя вообще это может и не понадобиться, потому как в самом первом посте я описал свое понимание "веса" синапса: это не величина заряда, которую он получил или пропустил - а:

Ws = Up/Ns, где Ws - вес синапса, Up - порог срабатывания нейрона, Ns - число синапсов.

На вход синапса теоретически всегда поступает 1, и "внутрь нейрона" он не часть от 1 пропускает, как это делало бы сопротивление, а всю эту 1. Но: если для срабатывания нейрона нужно 5 таких синапсов, то вес их будет 0,2 согласно формуле. Хотя получать и "пропускать" сквозь себя они будут полноценный сигнал без потерь. Ведь они не ток пропускают, чтобы "зарядить" нейрон как конденсатор, а получив раздражающий импульс впрыскивают через синаптические пузырьки нейромедиаторы, которые служат катализаторами для электро-хим. реакции нейрона. Это мое понимание, может и не верное.

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

4. Соединение через таблицу синапсов нейрона с матрицей собственно и есть процесс обучения. Сейчас она уже как бы заранее обучена. Но в реальности такие связи должны прописаться сами - см. п.3

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

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


Метка админа:

 
usr
Пишет без ограничений, редактирует историю - unlimited

Сообщений: 521

Оценок: 2
список всех сообщений
clons
Сообщение № 46350 показать отдельно Декабрь 14, 2019, 03:47:06 PM
ответ -только после авторизации

Сделал базовую версию симулятора в HTML/Javascript.

https://github.com/usr345/neuro

Реализована та же функциональность, что и у тебя в SQL. Но даже javascript больше подходит для программирования, чем язык хранимых процедур SQL Server-a. Сенсорное поле линеаризуется в вектор, который умножается на матрицу синапсов. После чего получаемый вектор проверяется на превышение порога и выводится как выход нейронов.

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

Ваши комментарии?


Метка админа:

 
Palarm
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 2771

личная фото-галерея
Оценок: 6
список всех сообщений
clons

Выложу завтра или послезавтра. А пока думаю надо утрясти некоторые спорные моменты по принципам построения однослойной сети.

1. Изначально закладывался порог чувствительности сенсора, но в итоге думается лучше сделать просто: сенсор True/False на раздражитель. Сигнал на выходе всегда просто 1. Если нужно ловить мощность регистрируемого сигнала, то думаю надо просто учитывать кол-во активных сенсоров на единицу площади. Так можно повысить чувствительность до регистрации одним сенсором условно одного фотона. А размытость контура будет означать не бледность сенсоров по краям, а их рассеивание.
2. Так же предполагалось закладывать переменный порог срабатывания нейрона, но в итоге правильнее порог задать как константу для всех нейронов, а веса задавать только для синапсов. Устанавливая веса можно менять логику работы нейрона: если порог нейрона=1, то три синапса по 0,4 приведут к его срабатыванию (И), или любой из них по отдельности (ИЛИ), если поставить веса 1,1 и выше. Была идея еще попытать смешанную логику, типа пучок связей по И + несколько связей по ИЛИ. Но думается, это приведет к глюкам распознавания, потому как будет множество вариантов срабатывания на частично активные входы от "пучка" и отдельных "мощных".
3. Срабатывание нейрона определяется по принципу: если сумма весов всех его синапсов, получивших сигнал от сенсоров превысит порог - нейрон выдает 1. Лучше именно превышение а не >=. Это отсечет неустойчивые состояния. Но тогда надо бы по идее параметр погрешности - на сколько надо превысить порог, чтобы сработал нейрон.

4. В дальнейшем нужно будет прикручивать конфигурации нейрона, а именно: меняя веса группы нейронов (имитация нейромедиаторного фона) тем самым перестраивается логика распознавания элементов сети: какие то И становятся ИЛИ и наоборот.

Самообучение однослойной сети я вижу так:
1. Сенсорная матрица показывает покадрово разные примитивы в виде фигур с определенной частотой и выдержкой или группа примитивов показывается на экране в динамике: перемещаясь, вращаясь с определенной частотой и скоростью. В любом случае нужен параметр "тактовая частота".
2. Нейрон специализируется на распознавании только близлежащего от него участка сенсорной матрицы, стало быть нужен параметр, задающий область "видимых" нейроном сенсоров и по нему уже определять, реагировать ли нейрону на сигнал. Иначе получится каша одновременной специализации всего ко всему. В природной реализации это не получится ввиду невозможности нейрону физически дотянуться до всех сенсоров матрицы.
3. Вес определяется так: 1/(Nsnp*Npls) - где:
Nsnp - ко-во синапсов нейрона, получивших одновременно (за один такт) импульсы
Npls - кол-во импульсов, необходимых для фиксации веса. В итоге, если к примеру нужно 3 импульса для фиксации, и все три раза они пришли на один синапс нейрона со своей частотой - он получит вес 1. А если бы три импульса пришли разом на три синапса - 0,33. В первом случае будет логика ИЛИ, во втором И. Проще говоря синхронные сигналы формируют логику И, асинхронные - ИЛИ.
4. Слой должен закрываться после специализации нейронов для самообучения - это критически важно при многослойной логике распознавания. Признаком закрытия слоя можно например считать кол-во специализировавшихся нейронов от их общего кол-во в слое - и это тоже надо задать параметром.


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

« Последнее редактирование: 2019-12-15 07:03:36 Palarm »

Метка админа:

 
usr
Пишет без ограничений, редактирует историю - unlimited

Сообщений: 521

Оценок: 2
список всех сообщений
clons
автор: Palarm сообщение № 46352:
Выложу завтра или послезавтра.

Сделай pull request, я тебя добавлю как collaborator-а.

автор: Palarm сообщение № 46352:
Если нужно ловить мощность регистрируемого сигнала, то думаю надо просто учитывать кол-во активных сенсоров на единицу площади.

Сейчас у нас математическая модель без площади. К физике пока рано переходить. Мы еще обучение толком не построили.

автор: Palarm сообщение № 46352:
Устанавливая веса можно менять логику работы нейрона: если порог нейрона=1, то три нейрона по 0,4 приведут к его срабатыванию (И), или любой из них по отдельности (ИЛИ), если поставить веса 1,1 и выше.

Что-то здесь нелогично. Ты уверен, что говоришь про 3 нейрона, а не про 3 синапса? Как я тебя понял, в простейшем случае мы имеем: 1 нейрон, 2 синапса.

  • Порог нейрона равен нулю: вечная единица.
  • Порог нейрона меньше веса каждого из синапсов, но больше нуля - логическое ИЛИ.
  • Порог нейрона больше веса каждого из синапсов, но меньше суммы весов - логическое И.
  • Порог нейрона больше суммы весов синапсов - вечный ноль.

Я думаю, из этого ясно, почему на нейроне нельзя реализовать исключающее или.

автор: Palarm сообщение № 46352:
Лучше именно превышение а не >=. Это отсечет неустойчивые состояния. Но тогда надо бы по идее параметр погрешности - на сколько надо превысить порог, чтобы сработал нейрон.

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

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


Метка админа:

 
Palarm
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 2771

личная фото-галерея
Оценок: 6
список всех сообщений
clons
автор: usr сообщение № 46353:
Ты уверен, что говоришь про 3 нейрона

Пардон, конечно синапсы

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

Nan практически весь код запилил, я лишь немного поправил.

Нейросимулятор


Метка админа:
Спасибо за это сообщение! Благодарность от: nan
 
Palarm
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 2771

личная фото-галерея
Оценок: 6
список всех сообщений
clons
Сообщение № 46355 показать отдельно Декабрь 15, 2019, 11:34:29 AM
ответ -только после авторизации
автор: usr сообщение № 46350:
Ваши комментарии?

Думаю чувствительность рецептора надо убрать, лишнее. А вообще, я буду переделывать под БД, и там видятся всего 2 таблицы вместо 3: Нейроны и Связи. В первой будут рецепторы и эффекторы, потому как уже со второго слоя нейроны предыдущего слоя становятся рецепторами для текущего. В таблице  связей коды из таблицы нейронов, показывающие их зависимости - классическая "многие ко многим". Чтобы задать первичные рецепторы надо просто в таблице связей поставить в поле кода родителя 0 - это значит что эти нейроны первичные рецепторы.


Метка админа:
Спасибо за это сообщение! Благодарность от: nan
 
usr
Пишет без ограничений, редактирует историю - unlimited

Сообщений: 521

Оценок: 2
список всех сообщений
clons
Сообщение № 46356 показать отдельно Декабрь 15, 2019, 12:38:48 PM
ответ -только после авторизации
автор: Palarm сообщение № 46354:
Nan практически весь код запилил, я лишь немного поправил. Нейросимулятор

Удивительно, что независимо друг от друга мы с nan-ом сделали нечто даже внешне похожее. Где он сам кстати?

Давайте сейчас распределим задачи. Я бы хотел написать математическую модель того, что сделал nan (или он сам напишет).


Метка админа:

 
nan
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 12275


E-Mail
личная фото-галерея
Оценок: 39
список всех сообщений
clons
Сообщение № 46357 показать отдельно Декабрь 15, 2019, 02:18:13 PM
ответ -только после авторизации
автор: usr сообщение № 46356:
 

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

Есть рад нейронов в количестве Nштук.

Подсчитаны потенциалы на их сходах P[n], где n- текущий номер нейрона.

Активируются те нейроны, у которых P[n]> К, где К – порог срабатывания.

НО. Каждый активный нейрон тормозит соседние (до него и после него) с потенциалом = Т, где Т  где Т - вес воздействия тормозного синапса = 0.5.

Задача: найти формулу для подсчета конечного состояния потенциалов на входах всех нейронов, с учетом тормозного влияния соседей. Это – равновесный процесс.



p.s. Допускаю, что мое утверждение может быть неверно, поэтому прошу показывать, что именно и почему неверно и запрашивать объяснения, если что-то непонятно.
Метка админа:

 
Palarm
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 2771

личная фото-галерея
Оценок: 6
список всех сообщений
clons
Сообщение № 46358 показать отдельно Декабрь 15, 2019, 03:20:02 PM
ответ -только после авторизации
Есть биржи помогаторов для студентов типа Автор24. Там даже преподы вузов калымят. Можно туда скидывать сложные задачи, только надо четко растолковать с картинками, чего от них надо. Берут по слухам не дорого.

Метка админа:

 
usr
Пишет без ограничений, редактирует историю - unlimited

Сообщений: 521

Оценок: 2
список всех сообщений
clons
Сообщение № 46359 показать отдельно Декабрь 15, 2019, 04:00:56 PM
ответ -только после авторизации
автор: nan сообщение № 46357:
Задача: найти формулу для подсчета конечного состояния потенциалов на входах всех нейронов, с учетом тормозного влияния соседей.

Я не понял топологию сети, есть ли возможность привести рисунок с примером?


Метка админа:

 
nan
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 12275


E-Mail
личная фото-галерея
Оценок: 39
список всех сообщений
clons
Сообщение № 46360 показать отдельно Декабрь 15, 2019, 04:30:14 PM
ответ -только после авторизации
автор: usr сообщение № 46359:
Я не понял топологию сети, есть ли возможность привести рисунок с примером?

Просто линейка нейронов, один за другим. Соседи влияют друг на друга, если они активны. Понятно, что если нейрон_1 подавил активность следующего своим торможением, нейрон_2 то нейрон_2 сам уже перестает влиять на нейрон_1.

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

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



p.s. Допускаю, что мое утверждение может быть неверно, поэтому прошу показывать, что именно и почему неверно и запрашивать объяснения, если что-то непонятно.
Метка админа:

 
Palarm
Имеет права полного администратора сайта - админ

Род: Мужской
Сообщений: 2771

личная фото-галерея
Оценок: 6
список всех сообщений
clons
Сообщение № 46361 показать отдельно Декабрь 16, 2019, 09:35:45 AM
ответ -только после авторизации

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

Можно еще по другому сказать: имеет место инертность созревания синапса, он как бы затухает при отсутствии раздражения, и наоборот - все больше активируется при его повторяемости. Это можно сравнить такой аллегорией: если начать стучать по пластинке ксилофона, то в зависимости от частоты ударов мы получим определенной величины средний по мощности звук: чем чаще бьем - тем громче и чище он звенит и наоборот. То есть имеет место коэфф. снижения веса синапса нейрона обратно пропорциональный частое его раздражения. При большой частоте он разгоняет вес, а при небольшой понижает вплоть до смены знака. Или можно его назвать вектором, задающим направление роста веса синапса: + или -. В зависимости от частоты сигналов он крутится как стрелка компаса на 180 град.

 

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


Метка админа:

 
1 2 3 4 5 6 7 8 9 10 11 12 Статистика:
Всего Тем: 1925 Всего Сообщений: 47850 Всего Участников: 5200 Последний зарегистрировавшийся: kghkgklg
Страница статистики форума | Список пользователей | Список анлимитов
Последняя из новостей:
Трилогия: Основы фундаментальной теории сознания.

Обнаружен организм с крупнейшим геномом
Новокаледонский вид вилочного папоротника Tmesipteris oblanceolata, произрастающий в Новой Каледонии, имеет геном размером 160,45 гигапары, что более чем в 50 раз превышает размер генома человека.
Тематическая статья: Тема осмысления

Рецензия: Рецензия на статью

Топик ТК: Дисциплина и сила воли
Пользователи на форуме:

Из коллекции изречений:
>>показать еще...