Может ли нейронная сеть научиться работать как мультиплексор?

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

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

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

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

Есть ли основная причина того, что эта проблема будет сложной для нейронной сети?


person KuttuKutu    schedule 06.11.2019    source источник
comment
Насколько велик ваш набор данных?   -  person Banks    schedule 06.11.2019
comment
У меня есть генератор синтетических данных. Я пробовал до 25600 обучающих примеров.   -  person KuttuKutu    schedule 06.11.2019
comment
Вы ограничены классическими нейронными сетями или заинтересованы в практическом решении в TF?   -  person Marat    schedule 06.11.2019
comment
Ну, я пробовал только полносвязные нейронные сети с несколькими скрытыми слоями. Но я открыт для других практических решений.   -  person KuttuKutu    schedule 06.11.2019


Ответы (2)


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

Подробнее об этом здесь: https://en.wikipedia.org/wiki/Универсальная_аппроксимация_теорема

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

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

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

person Juan David    schedule 06.11.2019

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

Без нейросетей, с голым 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
person Marat    schedule 06.11.2019