Las redes neuronales suelen tener una arquitectura y una topología fijas. Eso significa esencialmente que tienen un número fijo de entradas y un número fijo de salidas.
Si entendí tu pregunta correctamente, dices que tienes un conjunto de vectores de entrada (miembros de un conjunto de entrenamiento, supongo) y el número de salidas objetivo es diferente para cada una (o, al menos, para algunas). Si es así, lo que debe hacer es fusionar todas las salidas en un vector de salida más grande.
Por ejemplo, supongamos que tiene el vector de entrada I1
con un vector de destino con miembros (o1, o5, o7)
, I2
con destino (o1, o3, o7, o8)
e I3
con (o2, o3, o4, o6, o8)
. Supongamos ahora que todos los miembros que no se mencionan en cada objetivo son 0 (o cualquier otro valor único y distinguido que usted reserve como señal de “no me importa” o “nada”): usemos X
para ese valor. Tu conjunto de entrenamiento es ahora:
- ¿Cuáles son los pros y los contras de la IA?
- ¿Cómo afectará el desarrollo de la IA a la medicina?
- ¿Qué se siente ser un programador de inteligencia artificial (IA) para videojuegos?
- Qué tan rápido calcula el cerebro la información visual. ¿Desde la luz llega al ojo hasta la "conciencia" de la impresión? ¿Y cómo viaja la información?
- ¿Qué es exactamente la "creatividad computacional"? ¿Y hay algún programa aplicable desarrollado en ese campo? ¿O es solo un campo de investigación hasta ahora?
I1 -> (o1, X, X, X, o5, X, o7, X)
I2 -> (o1, X, o3, X, X, X, o7, o8)
I3 -> (X, o2, o3, o4, X, o6, X, o8)
Ahora tiene un vector de entrada de tamaño fijo y un vector de salida de tamaño fijo. Las redes neuronales pueden lidiar trivialmente con eso. Lo único importante es que debe poder distinguir las X
de las o
, ya que su salida de red neuronal contiene todos los componentes de salida individuales amalgamados. Es por eso que debe reservar un valor que no sea válido para todas las o
‘s, o al menos uno para las o
‘ s en cada columna. Por ejemplo, si sus o
son binarias 0/1, deje que su X
sea -1; o mejor aún, reasigna tu binario 0/1 a -1/1 y deja que tu X
sea 0 (ya que 0 está en el medio de una función de transferencia neural típica).
Sea creativo, elija una X
sensible (o un conjunto de X
) que no se confunda con o
válidas, y que no causará estragos en el entrenamiento y la convergencia, por ejemplo, por ser un valor atípico estadístico.
Otra posibilidad es agregar “columnas de bandera” a aquellas columnas donde no se puede usar una X
sensible. Para cada columna de salida donde no puede usar una X
distinguida, agregue una columna paralela que tenga 0 donde la otra columna tenga X
y 1 en todas partes. Por ejemplo, agreguemos columnas de bandera a las columnas o5
y o6
en el ejemplo anterior:
I1 -> (o1, X, X, X, o5, 1, A, 0, o7, X)
I2 -> (o1, X, o3, X, A, 0, A, 0, o7, o8)
I3 -> (X, o2, o3, o4, A, 0, o6, 1, X, o8)
Donde reemplacé las X
en esas dos columnas por otro valor A
que no afectará las estadísticas de la columna ( A
para “promedio” , por ejemplo). Al usar columnas de marca, “presta atención” o “usa” la salida de una columna marcada solo si el valor correspondiente en la columna de marca es 1; de lo contrario lo ignoras. Incluso puede ir más allá, y cuando entrena establece en 0 el error incurrido en una salida que no está marcada, después de todo, ese valor debe ser ignorado, y también debería ser un error, pero calcula el error en la bandera columna, y aprende de ese error!