Как практически оценить вклад "конкретного" входа в работу НС? - страница 3

 
alexeymosc:
Есть и обратная ситуация: теоретически возможно, что есть два входа с высокой информативностью и один с низкой. По логике, хочется убрать третий, но если его убрать, то разрушится сложная квадро-взаимосвязь (три входа - выход), и два оставшихся входа будут уже не столь информативны.

Так я это делаю на готовом примере так сказать и сразу вижу изменение результата работы НС и на обучающей выборке, и вне ее. Если что-то рушится - это должно сказаться на конечном результате. Удалил один вход - нет никаких ухудшений, удалил другой вход есть ухудшение менее 1% от конечно результата, удалил 3й вход есть есть ухудшение в 10%. Потом тоже самое с комбинациями 2х входов, 3х и т.д.

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

А еще я нашел 2 входа исключение которых не ухудшает результат что было понятно, а улучшает что неожиданно. С ними надо экспериментировать дальше, входы явно не пустые, их влияние на результат пусть и в обратную сторону говорит об этом.

Ну и спасибо всем поучавствавшим в обсуждение, реально получил несколько толковых советов.

 
Figar0:

Так я это делаю на готовом примере так сказать и сразу вижу изменение результата работы НС и на обучающей выборке, и вне ее. Если что-то рушится - это должно сказаться на конечном результате. Удалил один вход - нет никаких ухудшений, удалил другой вход есть ухудшение менее 1% от конечно результата, удалил 3й вход есть есть ухудшение в 10%. Потом тоже самое с комбинациями 2х входов, 3х и т.д.


Это и есть самый надежный способ подбора входов - перебор. Тяжело, но честно. Успехов!
 

Для 20 входов чистый перебор - это что-то порядка 2^20 комбинаций, т.е. миллион.

Снова в голову лезет теория информации, но советовать ничего не буду.

 
Mathemat:

Для 20 входов чистый перебор - это что-то порядка 2^20 комбинаций, т.е. миллион.

Так ведь можно перебирать "отсюда и до обеда" или "пока не надоест"...
А дальше- генетикой контрольный... прогон.
 

Определить "ненужность" того или иного входа можно. Чем ближе значение веса нейрона к 0, тем более его "ненужность". По сути, значение нейрона умножается на 0, и что бы в нем не было, в результате будет 0, то есть входа как бы и нет вовсе.

Самый отрицательный момент наличия такого ненужного нейрона - неоправданно повышенное время обучения.

Но, такие "ненужные" нейроны могут оказаться не только во входном слое сетки, но и вообще в любом её слое.

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

 
joo:

Определить "ненужность" того или иного входа можно. Чем ближе значение веса нейрона к 0, тем более его "ненужность". По сути, значение нейрона умножается на 0, и что бы в нем не было, в результате будет 0, то есть входа как бы и нет вовсе.


это так. но откуда взялся входной сигнал, всегда равный нулю? такого быть не может.

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

сигнал от ССI будет в миллионы раз больше, чем сигнал от OsMA. эти сигналы несоизмеримы и их нельзя использовать без приведения к единому масштабу.

 
joo:


Но, такие "ненужные" нейроны могут оказаться не только во входном слое сетки, но и вообще в любом её слое.


этого не может случиться при нелинейности преобразований в нейронах
 
mersi:

это так. но откуда взялся входной сигнал, всегда равный нулю? такого быть не может.

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

сигнал от ССI будет в миллионы раз больше, чем сигнал от OsMA. эти сигналы несоизмеримы и их нельзя использовать без приведения к единому масштабу.

Я думал, что для всех нейронщиков приводить(масштабировать) сигналы для сети в один диапазон, годный для скармливания сети, как "Отче наш", но ошибся, как вижу. :)

Итак, сигналы отмасштабированы и меняются, скажем, в диапазоне [-1.0;1.0]. Но у одного из входных нейронов вес 0. Что это значит? - это означает, что сетки пофигу, какое значение у этого нейрона на входе, результат работы сети ни как не зависит от этого входа.

mersi:
этого не может случиться при нелинейности преобразований в нейронах

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

 
joo:

Я думал, что для всех нейронщиков приводить(масштабировать) сигналы для сети в один диапазон, годный для скармливания сети, как "Отче наш", но ошибся, как вижу. :)

Итак, сигналы отмасштабированы и меняются, скажем, в диапазоне [-1.0;1.0]. Но у одного из входных нейронов вес 0. Что это значит? - это означает, что сетки пофигу, какое значение у этого нейрона на входе, результат работы сети ни как не зависит от этого входа.

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

На первый взгляд это утверждение не выглядит ложным.

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

--------------

Чем больше нейронов в сети, тем точнее и сложнее задачи нейросеть способна решать.

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

 
Figar0:

Не совсем пятнично, но ...

Есть НС, любая, есть вход А={A1, A2, .... A20}. Обучаем НС и получаем удовлетворяющий нас результат. Как нам практически оценить вклад каждого элемента входа A1, A2, ... A20 в этот результат?

Варианты навскидку пришедшие мне в голову:

1) Как-то просуммировать и посчитать все веса элемента с которыми он проходит через сеть. Не совсем понятно как это сделать, сильно придется погрузиться в работу сети, где-то как-то высчитать какие-то коэффициенты и т.д.

2) Попробывать как-то "занулить", или например перевернуть элемент входного вектора и посмотреть как это скажется на конечном результате. Пока остановился на нем.

Но прежде чем реализовывать этот второй вариант решил посоветоваться. Может кто думал на ту тему уже дольше чем я? Может кто-то книжечку-статейку посоветует?

Применение солидного научно обоснованного подхода вне своего эконометрического контекста вызывает детские вопросы.

Делаем регрессию:

профит = с(1) * А0 + ... с(n) * А(n)

Оцениваем коэффициенты этой регрессии.

Сразу получаем

вероятность равенства нулю конкретного коэф. - удаляем такой вход

вероятность равенства нулю всех коэффициентов вместе взятых

по эллипсам получаем коррелированность коэф

проводим тест на избыточные входы

проводим тест на пропущенные входы

проводим тест на стабильность значения коэф (оцениваем случайность их изменения)