Tengo una entrada que es una lista y la salida es el máximo de los elementos de la lista de entrada.
¿Puede el aprendizaje automático aprender una función que siempre selecciona el máximo de los elementos de entrada presentes en la entrada?
Esto puede parecer una pregunta bastante básica, pero podría darme una idea de lo que el aprendizaje automático puede hacer en general. ¡Gracias!
machine-learning
deep-learning
usuario78739
fuente
fuente
Respuestas:
Tal vez , pero tenga en cuenta que este es uno de esos casos en los que el aprendizaje automático no es la respuesta . Existe una tendencia a intentar el aprendizaje automático de calzador en casos donde realmente, las soluciones basadas en reglas estándar son más rápidas, más simples y, en general, la elección correcta: P
Editar : Originalmente escribí esto como "Sí, pero tenga en cuenta que ...", pero luego comencé a dudar de mí mismo, ya que nunca lo había visto. Lo probé esta tarde y ciertamente es factible:
La salida es 0.74576, por lo que está encontrando correctamente el máximo 74.5% del tiempo. No tengo dudas de que eso podría mejorarse, pero como digo, este no es un caso de uso que recomendaría para ML.
EDIT 2 : en realidad volví a ejecutar esta mañana usando el RandomForestClassifier de sklearn y funcionó significativamente mejor:
Y la puntuación aquí es del 94,4% de las muestras con el máximo correctamente identificado, lo cual es bastante bueno.
fuente
@
, como en@Marco13
). Con respecto a la pregunta: creo que su afirmación "el aprendizaje automático no es la respuesta" lo deja claro. Principalmente me temo que demasiadas personas no aplican el escrutinio apropiado cuando usan ML / DL / NN, y particularmente, cuando encuentran algo que parece que podría "resolver su problema", sin entender por qué parece hacerlo. y, por lo tanto, sin reconocer cuándo una "solución" es solo un artefacto de un proceso no tan bien entendido.Sí. Muy importante, USTED decide la arquitectura de una solución de aprendizaje automático. Las arquitecturas y los procedimientos de capacitación no se escriben solos; deben diseñarse o crearse una plantilla y la capacitación sigue como un medio para descubrir una parametrización de la arquitectura que se ajusta a un conjunto de puntos de datos.
Puede construir una arquitectura muy simple que realmente incluya una función máxima:
donde a y b son parámetros aprendidos.
Dadas suficientes muestras de entrenamiento y una rutina de entrenamiento razonable, esta arquitectura muy simple aprenderá muy rápidamente a establecer a 1 yb a cero para su tarea.
El aprendizaje automático a menudo toma la forma de entretener múltiples hipótesis sobre la creación y transformación de puntos de datos de entrada, y aprender a preservar solo aquellas hipótesis que están correlacionadas con la variable objetivo. Las hipótesis se codifican explícitamente en la arquitectura y las subfunciones disponibles en un algoritmo parametrizado, o como los supuestos codificados en un algoritmo "sin parámetros".
Por ejemplo, la elección de usar productos de punto y no linealidades, como es común en la red neuronal de vainilla ML, es algo arbitraria; expresa la hipótesis general de que una función puede construirse utilizando una estructura de red composicional predeterminada de transformaciones lineales y funciones de umbral. Las diferentes parametrizaciones de esa red incorporan diferentes hipótesis sobre qué transformaciones lineales utilizar. Se puede usar cualquier caja de herramientas de funciones y el trabajo de un aprendiz de máquina es descubrir mediante diferenciación o prueba y error o alguna otra señal repetible qué funciones o características en su conjunto minimizan mejor una métrica de error. En el ejemplo dado anteriormente, la red aprendida simplemente se reduce a la función máxima en sí misma, mientras que una red indiferenciada podría "aprender" alternativamente una función mínima. Estas funciones se pueden expresar o aproximar por otros medios, como en la función de regresión neta lineal o neural en otra respuesta. En resumen, realmente depende de qué funciones o piezas de LEGO tenga en su caja de herramientas de arquitectura ML.
fuente
max()
(a partir de datos etiquetados). No dijeron " Dado que ya tienesmax()
como un bloque de construcción"Sí, el aprendizaje automático puede aprender a encontrar el máximo en una lista de números.
Aquí hay un ejemplo simple de aprender a encontrar el índice del máximo:
fuente
Algoritmos de aprendizaje
En lugar de aprender una función como un cálculo realizado por una red neuronal de retroalimentación, hay todo un dominio de investigación sobre algoritmos de aprendizaje a partir de datos de muestra. Por ejemplo, uno podría usar algo como una Máquina Neural de Turing o algún otro método en el que la ejecución de un algoritmo esté controlada por el aprendizaje automático en sus puntos de decisión. Los algoritmos de juguete como encontrar un máximo, ordenar una lista, revertir una lista o filtrar una lista se usan comúnmente como ejemplos en la investigación de aprendizaje de algoritmos.
fuente
Excluiré los diseños educados de mi respuesta. No, no es posible utilizar una salida de la máquina de aprendizaje caja (ML) a totalmente representar la función máxima para arbitrarias listas con precisión arbitraria. ML es un método basado en datos y está claro que no podrá aproximar una función en regiones donde no tiene ningún punto de datos. Por lo tanto, el espacio de posibles observaciones (que es infinito) no puede ser cubierto por observaciones finitas.
Mis declaraciones tienen una base teórica con el Teorema de aproximación universal de Cybeko para redes neuronales. Citaré el teorema de Wikipedia:
Si su espacio de observaciones es compacto, entonces podría aproximar la función máxima con un conjunto de datos finito. Como la respuesta más votada dejó en claro, ¡no debes reinventar la rueda!
fuente
Aquí hay una expansión de mi comentario. Como prefacio, absolutamente @DanScally tiene razón en que no hay razón para usar ML para encontrar el máximo de una lista. Pero creo que su "podría darme una idea de lo que el aprendizaje automático puede hacer en general" es una razón suficiente para profundizar en esto.
Los comentarios y la respuesta de @ MachineLearner plantearon teoremas de aproximación universales: en un dominio acotado , una red neuronal puede aproximar cualquier función razonablemente agradable como , pero no podemos esperar a priori aproximar en una entrada arbitraria, ni exactamente calcular cualquier lugar.max max max
Pero resulta que una red neuronal puede ordenar exactamente números de entrada arbitrarios. De hecho, enteros -bit se pueden ordenar por una red con sólo dos capas ocultas de tamaño cuadrática. Profundidad de redes neuronales eficientes para problemas de división y relacionados , Teorema 7 en la página 955; Muchas gracias a @MaximilianJanisch en esta respuesta por encontrar esta referencia.n n
Describiré brevemente una simplificación del enfoque en ese documento para producir la función para entradas distintas arbitrarias. La primera capa oculta consiste en neuronas, cada una representando la variable indicadora , para . Estos se construyen fácilmente como con un indicador de paso. La siguiente capa tiene neuronas, una para cada entrada ; comience con la suma ; es decir, el número de tal que , y por lo tanto la posición deargmax n (n2) δij=1(xi<xj) i<j xj−xi n xi ∑j<iδji+∑j>i(1−δij) j xi>xj xi en la lista ordenada. Para completar el argumento argmax, solo pon umbral a esta capa.
En este punto, si pudiéramos multiplicar, obtendríamos el valor máximo real con bastante facilidad. La solución en el trabajo es usar la representación binaria de los números, en cuyo punto la multiplicación binaria es la misma que la suma de umbral. Para obtener el argmax, es suficiente tener una función lineal simple multiplicando el ésimo indicador por y sumando.ii
i i
Finalmente, para la siguiente pregunta: ¿podemos entrenar a un NN en este estado? @DanScally nos ayudó a comenzar; ¿Quizás conocer la arquitectura teórica nos pueda ayudar a engañarnos en la solución? (Tenga en cuenta que si podemos aprender / aproximar el conjunto particular de pesos anterior, la red realmente funcionará bien fuera del rango de las muestras de entrenamiento).
Cuaderno en github / Colab
Cambiando las cosas un poco, obtengo un mejor puntaje de prueba (0.838), e incluso las pruebas en una muestra fuera del rango de entrenamiento original obtienen un puntaje decente (0.698). Usando entradas escaladas a[−1,1] obtiene el puntaje de la prueba hasta 0.961, con un puntaje fuera de rango de 0.758. Pero, estoy puntuando con el mismo método que @DanScally, lo que parece un poco deshonesto: la función de identidad puntuará perfectamente en esta métrica. También imprimí algunos coeficientes para ver si aparece algo cercano al ajuste exacto descrito anteriormente (en realidad no); y algunos resultados en bruto, que sugieren que el modelo es demasiado tímido para predecir un máximo, errando por el lado de predecir que ninguna de las entradas es el máximo. Quizás modificar el objetivo podría ayudar, pero en este punto ya he dedicado demasiado tiempo; Si a alguien le interesa mejorar el enfoque, siéntase libre de jugar (en Colab si lo desea) y hágamelo saber.
fuente
Sí, incluso un aprendizaje automático tan simple como los mínimos cuadrados lineales comunes pueden hacer esto si utiliza cierta inteligencia aplicada.
(Pero la mayoría consideraría esta exageración bastante horrible).
(Asumiré que queremos encontrar el máximo de abs del vector de entrada):
fuente