Может ли нейронная сеть научиться действовать как мультиплексор? - PullRequest
0 голосов
/ 06 ноября 2019

Допустим, мои входные данные, A и B. Входные данные примерно такие, A = [10, 5, 30, 2], которые могут иметь произвольные значения в диапазоне [1100] и B = [0, 1,0, 0], который является одним горячим вектором. Ожидаемый выходной сигнал C равен = [5], который является точечным произведением двух входных векторов, C = AB

Аналогично, для A = [10, 5, 30, 2] и B = [0, 0, 1, 0], на выходе будет C = [30].

По сути, я хочу, чтобы нейронная сеть действовала как 4-полосный мультиплексор (https://en.wikipedia.org/wiki/Multiplexer).

Я реализовал нейронную сеть с двумя скрытыми слоями. Хотя она работает с обучающими данными, она не может обобщать дальше.

Существует ли основная причина, по которой эта проблема будет трудной для нейронной сети?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

По сути, вы ищете A.T * B (в натуральном выражении). Ответ Хуана правильный и неправильный одновременно. Нейронные сети не выполняют взаимодействия (просто проверьте математику), поэтому нет «естественного» представления этой формулы. Это может быть приблизительно , однако, если у вас существенно сложная архитектура.

Без нейронных сетей, с голым Tf, это просто tf.math.reduce_sum(A * B).

Пример:

>>> A = tf.constant([10, 5, 30, 2])                                                                                             
>>> B = tf.constant([0, 1, 0, 0]) 
>>> with  tf.Session() as sess: print(tf.math.reduce_sum(A * B).eval())
5
0 голосов
/ 06 ноября 2019

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

Более того здесь: https://en.wikipedia.org/wiki/Universal_approximation_theorem

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

https://stats.stackexchange.com/questions/10289/whats-the-difference-between-normalization-and-standardization

Кроме того, возьмитеПосмотрите на ваше пространство ввода, у вас есть 100 ^ 4 умножить на 4 возможных входа (около 4 x 10 ^ 8, исходя из этого, вы должны учитывать размер ваших обучающих данных, потому что несколько тысяч примеров не помогут,потому что данные очень разбросаны (примеры в обучающей выборке могут сильно отличаться от приведенных в данных проверки).

...