Как узнать степень влияния входных (сенсорных) нейронов на выходные нейроны?

#1
Например у меня есть нейронная сеть с некоторым количеством входных нейронов, и двумя выходными, потренировав её немного на определенной выборке получаю нейросеть которая при некоторых комбинациях выдает [0;1] при некоторых [1;0] при некоторых [1;1] и т.д.
Вопрос:
Как с помощью формул и вычислений (а не методом тыка) узнать какие входные нейроны нужно стимулировать и на какую величину чтобы получить ответ сети например [1;0].
То есть ответ сети задом на перед, мы задаем ожидаемый ответ, а сеть выводит величины входных нейронов.
Если есть то скиньте ссылки на статьи в интернете, можно и на английском.
 

human

Новичок
#2
Я пока только начинаю нейронные сети изучать, поэтому не очень компетентен в этом вопросе. Насколько я понял, твоя сеть на весь спектр входных значений выдает четыре возможных ответа (0 и 1 с повторениями можно скомбинировать четыре раза всего). Тут, наверное, не совсем так надо вопрос формулировать. Если тебе нужно, чтобы сеть выдавала один ответ, то это уже получается тренировка сети "с учителем". Внутренние слои (если они есть) должны "сами" решать как распределить веса от входных нейронов, чтобы получить нужный тебе ответ. Что мне пока удалось выяснить в вопросе построения и использования нейронных сетей, так это что нужно знать некоторые разделы математического анализа и статистики, не просто знать об их существовании, а уметь их применять на реальных задачах. Например, линейная регрессия - понятие, которое встречается часто по теме сетей. Что это такое, как работает, в каких случаях используется? Мне удалось вот такую ссылку найти https://onlinecourses.science.psu.edu/stat501/node/250 Пока пытаюсь разобраться что там к чему. Много вопросов. Могу предположить, что ответы на твои вопросы вполне могут находится и там тоже.
 

Time_Master

Пользователь
#3
Математически с помощью формул это довольно сложно будет сделать. Придется решать систему уравнений. Вообще, известно какие веса у нейронов после обучения? И зачем это нужно?
По теме посоветую "погуглить" по запросам "извлечение знаний из нейросети".
 
#4
Всем троим советую прокачивать понимание того, что же такое метод обратного распространения ошибки ;)

Кстати, это ещё и показатель кривизны современных учебников по нейросеткам (несмотря на то, что кто-то от этих учебников и кипятком может писать). Ибо поставленную в первом посте задачу решил ещё (ЕЩЁ!) в 1986г один из трёх изобретателей обратного распространения (Р.Вильямс). И учебники плохи не тем, что не перепечатывают тот рецепт - а тем, что не формируют понимания, позволяющего самостоятельно увидеть решение.

Названия статей, которые должны в инете присутствовать (ибо статьи Вильямса в инете нет) я пока не буду давать - надо же поразвлекаться ;)
Но мимо темы не прошёл даже буржуинский FAQ по нейросетям 90х годов. Да и я не проходил ;)
 
#5
Всем троим советую прокачивать понимание того, что же такое метод обратного распространения ошибки ;)

Кстати, это ещё и показатель кривизны современных учебников по нейросеткам (несмотря на то, что кто-то от этих учебников и кипятком может писать). Ибо поставленную в первом посте задачу решил ещё (ЕЩЁ!) в 1986г один из трёх изобретателей обратного распространения (Р.Вильямс). И учебники плохи не тем, что не перепечатывают тот рецепт - а тем, что не формируют понимания, позволяющего самостоятельно увидеть решение.

Названия статей, которые должны в инете присутствовать (ибо статьи Вильямса в инете нет) я пока не буду давать - надо же поразвлекаться ;)
Но мимо темы не прошёл даже буржуинский FAQ по нейросетям 90х годов. Да и я не проходил ;)
На таких форумах как этот дают советы в стиле "вот где можно найти подобную информацию" или "вот как это делается", а советы в стиле "ха-ха, лохи, я знаю но не скажу" пожалуйста идите давайте на форумах для школоты, не замусоривайте страницу пожалуйста. ;)
 

Time_Master

Пользователь
#7
Необходимо просчитать ошибку от выходного слоя к входному. По величене обратных ошибок на входных нейронах должно быть видно на сколько необходимо изменить входные сигналы чтобы получить требуемый результат на выходе.
Это так, своими словами...
 
#8
По величене обратных ошибок на входных нейронах должно быть видно на сколько необходимо изменить входные сигналы чтобы получить требуемый результат на выходе.
Ну, в случае гипотезы о ПОЛНОСТЬЮ линейной сетке (т.е. без нелинейностей у нейронов и без полиномиальных сумматоров) это сработает. Но в случае любой нелинейности...
В общем, совет Ваш неполон.
Но мне нравится эволюция Ваших взглядов - от ранее написанного Вами "Математически с помощью формул это довольно сложно будет сделать. Придется решать систему уравнений." ;)
 
#9
Необходимо просчитать ошибку от выходного слоя к входному. По величене обратных ошибок на входных нейронах должно быть видно на сколько необходимо изменить входные сигналы чтобы получить требуемый результат на выходе.
Это так, своими словами...
Не понимаю как их прогонять обратно через функцию активации, видимо должна быть какая-нибудь обратная формула активации. Хотя мне кажется я не достаточно подробно разъяснил вопрос.
Есть сеть натренированная определенной выборкой, если я хочу чтобы два выходных нейрона давали ответ [1;0] то как узнать какие сигналы нужно подавать на входные нейроны? Из имеющейся информации есть только веса дендритов нейронов. Безымянный.png
 
#10
Вообще-то, вполне возможно существование континуума решений. Т.е. кучи входных векторов, дающих один и тот же (нужный) ответ.
Даже при уточнении значений компонент какого-то начального (стартового) входного вектора, т.е. оставаясь в пределах бассейна некоторого локального минимума (т.е. без сканирования всей области определения "прямой" функции).

Грубо говоря, давайте сведём Ваш выходной вектор к одномерному - и возьмём любую географическую карту (карту высот, или глубин). Одной и той же высоте (или глубине, в общем, значению функции в пространстве некоторых координат=независимых аргументов этой функции) будут соответствовать несколько замкнутых несмежных линий уровня (да и каждая из них вполне может отрисовать кракозябру любого вида), которые могут быть расположены сколь угодно далеко друг от друга, в любых местах карты.
Поэтому - задумайтесь, что Вам нужно найти? Одну из точек на одной из линий уровня, весь контур какой-то линии уровня, либо все возможные решения? И откуда стартовать - с какой-то стартовой точки, ограничиваясь бассейном некоторого лок.минимума, или таки нужно исследовать всю область определения?

Не, если и над этим не хотите думать (как раньше над обратным распространением)... Задача, в конце концов, перед Вами стоит.
 
#11
Вообще-то, вполне возможно существование континуума решений. Т.е. кучи входных векторов, дающих один и тот же (нужный) ответ.
Даже при уточнении значений компонент какого-то начального (стартового) входного вектора, т.е. оставаясь в пределах бассейна некоторого локального минимума (т.е. без сканирования всей области определения "прямой" функции).

Грубо говоря, давайте сведём Ваш выходной вектор к одномерному - и возьмём любую географическую карту (карту высот, или глубин). Одной и той же высоте (или глубине, в общем, значению функции в пространстве некоторых координат=независимых аргументов этой функции) будут соответствовать несколько замкнутых несмежных линий уровня (да и каждая из них вполне может отрисовать кракозябру любого вида), которые могут быть расположены сколь угодно далеко друг от друга, в любых местах карты.
Поэтому - задумайтесь, что Вам нужно найти? Одну из точек на одной из линий уровня, весь контур какой-то линии уровня, либо все возможные решения? И откуда стартовать - с какой-то стартовой точки, ограничиваясь бассейном некоторого лок.минимума, или таки нужно исследовать всю область определения?

Не, если и над этим не хотите думать (как раньше над обратным распространением)... Задача, в конце концов, перед Вами стоит.
Подойдёт любой вариант, в идеале хотелось бы все варианты дающие такой результат, но буду доволен и одним вариантом.
 
#12
Да мне как-то ультрафиолетовы Ваши желания - я тут просто развлекаюсь.

Например.
У Вас вроде как задача классификации (см пост 1), ну или задачу прогноза целочисленных значений можно трактовать как задачу классификации.
Тогда. Почему Вы решили, что найденные при решении обратной задачи входы будут принадлежать тому же закону распределения, который наблюдался в обучающей выборке для нужных ответных значений?
Я Вас огорчу - будет ни одно, ни другое - а что-то совершенно новое.

Т.е. если классифицировать здоровых и больных людей и пытаться найти для больных те входы, при которых нейросетка станет этих больных обзывать здоровыми - то найденные входы будут не похожи ни на здоровых, ни на больных (будут формировать совсем иное=новое скопление точек в многомерном пространстве = иное многомерное распределение).

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

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


Как общее ко всем четырём тутошним моим постам резюме.
Я везде так или иначе говорил о понимании (методов, возможностей методов, границ их применимости, знании возможных результатов,...). Это и отличает профи от дилетанта.
Поэтому. Продолжать постить реально значимую/полезную инфу в теме, видимо, прекращу - буду ждать перехода к ИНОМУ формату взаимодействия со мной (от платных консультаций до заказа разработки софта опять же за денежку).
 
Последнее редактирование:
#13
Да мне как-то ультрафиолетовы Ваши желания - я тут просто развлекаюсь.

Например.
У Вас вроде как задача классификации (см пост 1), ну или задачу прогноза целочисленных значений можно трактовать как задачу классификации.
Тогда. Почему Вы решили, что найденные при решении обратной задачи входы будут принадлежать тому же закону распределения, который наблюдался в обучающей выборке для нужных ответных значений?
Я Вас огорчу - будет ни одно, ни другое - а что-то совершенно новое.

Т.е. если классифицировать здоровых и больных людей и пытаться найти для больных те входы, при которых нейросетка станет этих больных обзывать здоровыми - то найденные входы будут не похожи ни на здоровых, ни на больных (будут формировать совсем иное=новое скопление точек в многомерном пространстве = иное многомерное распределение).

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

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


Как общее ко всем четырём тутошним моим постам резюме.
Я везде так или иначе говорил о понимании (методов, возможностей методов, границ их применимости, знании возможных результатов,...). Это и отличает профи от дилетанта.
Поэтому. Продолжать постить реально значимую/полезную инфу в теме, видимо, прекращу - буду ждать перехода к ИНОМУ формату взаимодействия со мной (от платных консультаций до заказа разработки софта опять же за денежку).
Специально для ультрафиолетовых профи:
1. Задача - вычислить хотя бы одну комбинацию величин сенсорных нейронов для получения определённого ответа сети.
2. Это сайт вопросов, ответов и обсуждений а не выпенндрёжа.
3. Для того чтобы вам кто-то захотел платить денюжку, нужно дать ХОТЯБЫ ОДИН дельный совет, стены пафоса для этого не достаточно.
4. Исправьте наконец в профиле возраст на 13 лет (не больше).
 

Time_Master

Пользователь
#15
Денис предложу вариант "Стрельбы из пушки по воробьям". :)
Создайте "зеркальную" нейросеть (назовём её Y). В Вашем варианте архитектура 2-3-4 (исходя из рисунка выше в Вашем посте).
Создайте обучающую базу используя нейросеть (назовём её X) к которой Вы хотите подобрать входные данные. (т.у. ту которая есть у Вас изначально). Для создания базы примеров для нейросети Y:
1. сгенерируйте входной вектор для нейросети X. Можно рандомно, но в допустимом диапазоне.
2. просчитайте значение ответа нейросети X.
3. значение ответа нейросети Х используйте как входные данные для примера, а для выходных данных использовать значение входа нейросети Х. Т.е. поменяйте местами вход и выход в примере.
4. Из таких "перевёрнутых" примеров создайте базу для обучения нейросети Y.
5. Обучите нейросеть Y.

Теперь при подаче не вход Y желаемого ответа от нейросети Х на выходе Y должны получится значения для входа Х.
Как-то так...:)
 
#16
Чота я ржу :) Опять ;)

Модель (нейросеть), которая и так является АППРОКСИМАЦИЕЙ некоторой таблично-заданной функции (обучающей выборки), теперь предлагается в свою очередь АППРОКСИМИРОВАТЬ ЕЩЁ ОДНОЙ МОДЕЛЬЮ. Пусть и в обратном направлении. Надо бы придумать такую задачу, чтобы в ней предложили сделать ещё и третий шаг накопления ошибок (аппроксимировать аппроксимацию аппроксимации).

Да и про исходную обучающую выборку (на которой можно попробовать обучиться решению обратной задачи) нам предлагают забыть. В пользу некоторого сферического коня в вакууме (какой-то новой выборки - в которой законы распределения будут СОВСЕМ ИНЫМИ по сравнению с исходной, если новые данные рандомно генерировать).

Про то, что обратная функция (если её "учить" с нуля, т.е. на основании обуч.выборки) будет являться МНОГОЗНАЧНОЙ (когда при одних и тех же аргументах (которыми стали выходы) могут существовать разные ответы (ранее - входы)) - советчик не знает. А автор в первом посте явно сказал, что у него дискретнозначные выходы в прямой задаче (разные входы дают одинаковые ответы, значит, при обратной задаче будет наоборот - одинаковым цифрам надо будет сопоставить одновременно существующие РАЗНЫЕ результаты).

В общем, пишите ещё, и почаще. Я буду только рад развлечься :)
И надо бы предложить владельцу сайта+форума ввести тут награды. Например, за пополнение рядов британских учёных (известных бесполезными изобретениями). Один кандидат уже есть ;) Ведь не за некомпетентность же награждать - а то награждаемые будут обижаться :)
 

Time_Master

Пользователь
#17
Виктор, спасибо за сравнение с британскими учёными. Какое ни какое, а признание.:)
 
#18
Денис предложу вариант "Стрельбы из пушки по воробьям". :) Создайте "зеркальную" нейросеть (назовём её Y). В Вашем варианте архитектура 2-3-4 (исходя из рисунка выше в Вашем посте). Создайте обучающую базу используя нейросеть (назовём её X) к которой Вы хотите подобрать входные данные. (т.у. ту которая есть у Вас изначально). Для создания базы примеров для нейросети Y: 1. сгенерируйте входной вектор для нейросети X. Можно рандомно, но в допустимом диапазоне. 2. просчитайте значение ответа нейросети X. 3. значение ответа нейросети Х используйте как входные данные для примера, а для выходных данных использовать значение входа нейросети Х. Т.е. поменяйте местами вход и выход в примере. 4. Из таких "перевёрнутых" примеров создайте базу для обучения нейросети Y. 5. Обучите нейросеть Y. Теперь при подаче не вход Y желаемого ответа от нейросети Х на выходе Y должны получится значения для входа Х. Как-то так...:)
Спасибо огромное!!!
Вариант сработал, правда работает только в выборках с одним правильным ответом и соответственно выдаёт только один результат, я нашел свой вариант, добавил генетический алгоритм, получилось не совсем по условиям, но зато можно получить не один, а несколько результатов.
 
Последнее редактирование: