¿Puede una red neuronal LSTM aprender a reescribir un código C en C ++ sabiendo que lo entrené con un conjunto de datos equivalente a la instrucción C / C ++?

Creo que esto está más allá de la capacidad de los LSTM actuales. El problema es que la generación de C ++ de buena calidad requiere inferir conocimiento sobre la estructura del problema . Los LSTM no están lo suficientemente avanzados (todavía) para hacer esto; necesitaría capacitarlos no solo sobre el código, sino también sobre el problema que intentaban resolver.

No es exactamente lo mismo, pero Andrej Karpathy ha intentado entrenar un LSTM para generar un código de estilo C.

Los resultados fueron interesantes, pero en realidad no compilan ni hacen nada por el estilo. Aquí hay un ejemplo (de La irrazonable efectividad de las redes neuronales recurrentes: Karpathy ha hecho un trabajo increíblemente genial):

/ *
* Incremente el archivo de tamaño de la nueva información incorrecta del grupo UI_FILTER
* del tamaño generatively.
* /
static int indica_policy (nulo)
{
en terror;
if (fd == MARN_EPT) {
/ *
* El espacio en blanco del núcleo lo convertirá en espacio de usuario.
* /
if (ss-> segmento <mem_total)
unblock_graph_and_set_blocked ();
más
ret = 1;
ir a la fianza;
}
segaddr = in_SB (in.addr);
selector = seg / 16;
setup_works = true;
para (i = 0; i <bloques; i ++) {
seq = buf [i ++];
bpf = bd-> bd.next + i * search;
si (fd) {
actual = bloqueado;
}
}
rw-> name = “Getjbbregs”;
bprm_self_clearl (& iv-> versión);
regs-> new = blocks [(BPF_STATS < historidac)] | PFMR_CLOBATHINC_SECONDS << 12;
retorno segmentable;
}

Se parece a C, pero desde una perspectiva de codificación, es una tontería. por ejemplo, no declara variables, qué demonios es “Getjbbregs” o “historidac”, etc. Si no puede generar código en el mismo idioma, las posibilidades de hacerlo aprender a través de la barrera del idioma son pequeñas.

Depende completamente de su red neuronal, la única red neuronal que encontré que era portátil era la red neuronal perceptrónica determinista que entrené en datos meteorológicos en Inglaterra y luego probé para predecir el clima australiano y fue lo suficientemente satisfactoria. En algunos casos, las redes neuronales tienen cierto grado de portabilidad, pero debe ejecutar la prueba usted mismo para averiguar si esto es aplicable en su caso. Básicamente estaba agregando dimensionalidad al problema hasta que los conjuntos de datos en el problema eran linealmente separables según el algoritmo Convex Hull. Su caso puede ser diferente, pero la única forma es que lo pruebe.

En primer lugar, ese es el camino equivocado.

C ++ no es mejor como lenguaje de computadora, pero es mejor en términos de lidiar con las limitaciones humanas. C está más cerca del hardware y, por lo tanto, es más eficiente y más rápido. Creamos C ++ no como una mejora, sino que permite a los humanos ver más fácilmente un aspecto de un gran problema de programación a la vez.

Y el objetivo no es limitar las computadoras para que se parezcan más a los humanos, sino permitir que sean más grandes que los humanos, sin todas nuestras limitaciones conceptuales.

Entonces, en lugar de tratar de convertir C en C ++, para qué red neuronal son buenos es hacer programas C mejores, más rápidos y más eficientes a partir de programas C ++ ineficientes destinados a ser percibidos más fácilmente por los humanos. En efecto, lo que deberíamos desear es un compilador optimizador que genere el mejor código de lenguaje de máquina a partir de las percepciones humanas más abstractas. Entonces, pasar de C a C ++ es al revés. Lo que queremos es que nuestro C ++ se convierta en el mejor C posible.

Los LSTM están completos. Por lo tanto, dada una red lo suficientemente grande, suficientes datos de entrenamiento y un algoritmo de entrenamiento lo suficientemente bueno (¿son los actuales capaces de hacer esto? ¡No lo sé!), Intrínsecamente tienen la capacidad de hacerlo.

Sin embargo, me sorprendería si las redes actuales pueden hacer esto en la práctica.

No obstante, puede mirar la investigación de traducción de idiomas (es decir, idiomas humanos). Podría ser un proyecto interesante.

http://arxiv.org/pdf/1409.3215v3

Quizás una arquitectura de 2-lstm enconder / decoder pueda funcionar, como las que se usan para la traducción.

Necesitará un conjunto de datos de código equivalente grande y consistente para esto, si este método funciona en absoluto.

La traducción entre idiomas es probablemente más fácil que generar código desde cero.

La respuesta depende en gran parte de lo que quieres decir con reescribir código c en c ++. La mayoría de los códigos c son códigos válidos de c ++, pero probablemente desee algo más parecido a ‘c ++’.

Si tiene toneladas de datos de entrenamiento y se adhiere a transformaciones bastante simples, entonces tal vez probablemente, siempre que sea algo tolerante con los errores 🙂

Cualquier tipo de transformación compleja, probablemente no.

More Interesting

Cómo convertirse en un experto en aprendizaje automático y PNL desde principiantes

¿Vale la pena desarrollar un algoritmo de minería de datos más rápido que otros de código abierto y comerciales existentes? Si vale lo suficiente, ¿qué valor tiene ser el algoritmo más rápido?

¿Cuáles son las aplicaciones del procesamiento del lenguaje natural en una revista en línea?

¿Qué usos novedosos hay para el aprendizaje de refuerzo profundo?

¿Se pueden combinar blockchain y machine learning?

¿Por qué TF (frecuencia de término) a veces da mejores puntuaciones F que TF-IDF para la clasificación de texto?

¿Cuáles son algunas limitaciones de un enfoque bayesiano?

¿Por qué las redes neuronales profundas no pueden extraer la estacionalidad de las series de tiempo?

¿Cuáles son las innovaciones clave en el documento 'Evolución a gran escala de clasificadores de imágenes' de Google Brain?

¿Cuál es la diferencia entre los pronósticos de combinación y conjunto?

¿Por qué se utilizan imágenes en escala de grises para el análisis de componentes principales?

Cómo encontrar la correlación más fuerte entre los vectores de colores a continuación en MATLAB o Python

Cómo aplicar mis conocimientos de aprendizaje automático para invertir en el mercado de valores indio

¿Qué recursos sobre modelos gráficos se recomiendan para los estudiantes de aprendizaje automático que desean ingresar al campo?

¿Qué área de la PNL es más prometedora y gana más tracción en la industria: la PNL sobre los datos de voz frente a texto?