Fundamentos Básicos del Reconocimiento de Voz
Enviado por Christian Herrera
- Aparato fonador
- Formantes
- Reconocimiento del habla empleando técnicas de comparación de patrones
- Estudio basado en la posición de los formantes
- Procesamiento de la voz en el dominio del tiempo
- Energía y magnitud
- Estimación espectral por predicción lineal (LPC)
- Modelos de señales
- Procesos discretos de Markov y Cadenas ocultas de Markov (HMM)
- Redes neuronales artificiales
- Estructura de una red neuronal artificial
- Aprendizaje
- El Perceptrón
- Perceptrón multicapa
- Perceptrón multicapa con capas de retardo
- Entrenamiento de varias capas
- Método del gradiente (aplicado a retropropagación) : ventajas y limitaciones
- Refuerzo de estos conceptos
- Sobreaprendizaje (overfitting) o cómo las RNA pueden "pasarse de listas"
- Conclusiones
- Bibliografía
– Si nos paramos a pensar un poco sobre este tema, descubriremos que la cantidad de información que se necesita para realizar este trabajo es demasiada, empezando por los modelos básicos, el tema se bifurca en muchos caminos y es prácticamente imposible obtener una visión completa de todo. Debido a su complejidad matemática, física, informática y lingüística tendríamos que hacer un estudio previo de todos estos campos, lo que requiere mucho tiempo de estudio.
Me he limitado a describir los procesos de reconocimiento de voz de una manera superficial e intuitiva, haciendo hincapié en uno de los métodos más exitosos hasta ahora: Redes Neuronales. Por tanto, iré de menor a mayor dificultad.
Me ahorrare fórmulas matemáticas complejas ya que considero este trabajo como una introducción teórica para luego poder profundizar, en alguna otra ocasión, en cualquiera de los temas expuestos aquí. (Daré por sabido, conceptos de muestreo y demás.) Tocaré temas de probabilidad, pero como he dicho antes, lo haré de forma teórica, intuitiva y superficial. Considero ésta la mejor propuesta, porque para saber de algo en concreto habrá que empezar desde el principio; no habrá ningún momento en que el lector se pierda, espero, por tanto, aclarar el nivel de dificultad de este trabajo.
¿Qué es reconocimiento de voz?:
– Al hablar de reconocimiento de voz, podemos imaginarnos varios campos de aplicación. Desde la domótica hasta la inteligencia artificial.
¿Emplearemos reconocimiento de palabras aisladas o del habla continua? ¿Será o no será dependiente del locutor? ¿tendrá una gramática restringida?. Todo depende de la aplicación que queramos. Por ejemplo, si queremos un sistema que reconozca un número limitado de palabras para poder apagar o encender las luces de nuestra casa, está claro que grabando unos cuantos ejemplos que servirán de patrones a identificar con las entradas, bastará para poder satisfacer nuestras necesidades.
Imaginemos que en vez de 10 palabras queremos tratar un vocabulario completo y no sólo eso, queremos poder hablar con naturalidad y que el sistema identifique las palabras, las frases y el significado. Es decir, queremos que un robot nos entienda, para ello el nivel de complejidad se eleva a un nivel casi impensable.
Un sistema de reconocimiento de voz podrá operar identificando:
- Palabras aisladas
- Fonemas (mayor complejidad)
Éste último podrá utilizarse para reconocer palabras, frases, etc. Además de su entendimiento.
Si nos interesa un sistema simple de reconocimiento de palabras, actualmente se venden módulos que funcionan mediante comparación de patrones. Necesitaremos almacenar en una memoria dichos patrones y luego se compararán las entradas con éstos dando una salida de tipo binario (1 ó 0).
El método de funcionamiento se podrá comprender más adelante, ya que conociendo lo difícil se intuye lo fácil. Por ello me voy a ceñir en el reconocimiento de fonemas, que es actualmente el sistema más perseguido por los más ambiciosos investigadores.
Como veremos, no se analiza fonema por fonema, sino que se divide la señal (en función del tiempo) en pequeñas ventanitas de unos 20 mseg. y se van analizando las frecuencias además de sus variaciones.
La dificultad empieza a nacer cuando nos damos cuenta de que al pronunciar las palabras: "siete" y "nueve" hay cuatro letras señaladas en negrita que parecen ser la misma, pero lo mejor de todo es que la pronunciación, en al menos dos de ellas ,es diferente, aunque sea la "e" depende mucho de dónde la coloquemos, qué es lo que la precede y en qué estado de ánimo la pronunciamos. Es decir, necesitamos predecir de alguna manera qué tipo de "e" es. Aquí entra en juega la probabilidad, pero retornemos al principio explicando todo paso por paso.
– Partiendo del conocimiento de la producción de sonidos por las cuerdas vocales, hay que tener en cuenta qué es lo que nos hace distinguir las letras y las consonantes.
Si acudimos a referencias fonéticas, nos explicarán que hay ciertas consonantes oclusivas, otras son fricativas, etc. Y esto influye muchísimo en el traspaso del dominio del tiempo a la frecuencia.
Como ejemplo, citemos la "s", en un espectrograma veríamos ruido a altas frecuencias, sin embargo la "a" tiene ciertas componentes frecuenciales de alta energía.
La posición de la lengua, la abertura de la boca, los labios, todo un conjunto fonético que consigue emitir infinidad de sonidos. En nuestro idioma se acotan dichos sonidos para poder construir un lenguaje ordenado.
Otros idiomas recogen otros sonidos producidos por el aparato fonador que difieren bastante del castellano.
Si emitimos un sonido constante y sólo movemos la lengua, nos daremos cuenta de que en cierta manera producimos el mismo sonido pero cambiamos las distribuciones armónicas… Los formantes.
– Son frecuencias que entran en resonancia en las cavidades nasales y orales, saliendo hacia el exterior como la información más importante del habla.
En reconocimiento de voz solemos anular la frecuencia fundamental y nos quedamos con los dos primeros formantes.
Éste es el ejemplo de la palabra "queso" se visualiza perfectamente las altas frecuencias debidas a la "s" y los dos primeros formantes de la "e", así como el tono fundamental.
Y aquí está la primera bifurcación, la fonética, la cual se merece un estudio bastante detallado. Voy a suprimir debido al propósito de este trabajo que he comentado en la introducción.
Ésta es la palabra "soy". Podemos ver perfectamente que el primer formante se desplaza en frecuencia por el efecto del corrimiento de la lengua en el fonema /oi/.
Para hacerse una idea de lo grande que puede llegar a ser este estudio fonético, comentaré que una de las referencias que he usado, planteaban como pregunta en una de las secciones: ¿Por qué alguien en su sano juicio se dedicaría al análisis del lenguaje?…
Debemos pensar un poco en todo esto y hacernos muchas preguntas acerca de las vocales y consonantes, y saber además, que la diferencia entre una "a" y una "e" reside en la ubicación de sus formantes. Nuestro cerebro analiza esas frecuencias y su relación entre ambas, ante la duda, suponemos…qué vocal puede ser. Eso lo podemos traducir como una operación probabilística que realizan nuestras neuronas concluyendo a una decisión final.
Reconocimiento del habla empleando técnicas de comparación de patrones:
– Su principal ventaja inmediata reside en que no es necesario descubrir características espectrales de la voz a nivel fonético, lo que evita desarrollar etapas complejas de detección de formantes, de rasgos distintivos de los sonidos, tono de voz, etc.
Esto está muy bien para un número finito de palabras, cuyo número no sea muy grande. Si queremos implementar esto para un completo entendimiento de nuestro lenguaje, a ver quien se atreve a coger un diccionario y grabar palabra por palabra. Sería una auténtica locura, además de ser inútil porque si por ejemplo pronunciásemos la palabra "queso" tendríamos que hacerlo exactamente igual que en la grabación. Tendríamos que decir "queso" con la misma velocidad, con el mismo tono…etc. Si nuestro "queso" se pronuncia muy rápido, habría que ajustar los tiempos de inicio y de final, pero si el sistema no está seguro de que sea esa palabra…adiós muy buenas. Necesitaríamos un sistema que aprenda por sí mismo éstas posibles deficiencias y se atreva a estipular qué palabra es.
La base de datos que necesitaríamos sería tan grande, que haría falta sistemas toscos de almacenamiento. Cuando el sistema intente buscar la palabra, al menos basará su funcionamiento en el establecimiento de una distancia matemática entre vectores, de tal manera que se puede calcular lo cercano que se encuentra cada patrón.
De todos modos, existe la necesidad de aplicar este sistema única y exclusivamente a ciertos casos donde el número de palabras necesarias sea pequeño.
También se puede constituir los grupos de patrones por unidades tales como sonidos básicos (fonemas y demás clasificaciones de sonidos cortos).
Al grabar estos sonidos en la base de datos, se obtendrán sus características espectrales (suele hacerse con los parámetros LPC, de los cuales hablaremos después).
Por último mencionar que por mucho que se mejore éste sistema, siempre existirá el error al normalizar en tiempo y amplitud éstas señales de entrada para que coincidan con el patrón.
Estudio basado en la posición de los formantes:
– Para obtener una información detallada de los tres primeros formantes hay que recurrir a otra solución. Un simple espectrograma nos da información…pero no tanta. ¿Qué podríamos hacer para poder diferenciar unas personas de otras?, ¿qué haríamos para poder ver las relaciones entre formantes de una manera más precisa?. La solución está en construir gráficas donde F1 (primer formante) se situé, por ejemplo, en el eje de abscisas, F2 en el eje de ordenadas, y así probando todas las combinaciones. También podemos establecer gráficos de 3 dimensiones donde intervienen los tres formantes.
Esta gráfica muestra lo dicho. Cada color representa una persona diferente, si nos fijamos en la de arriba a la derecha (F2 eje x, F1 eje y), podremos observar las vocales (i,e,a,o,u) de derecha a izquierda.
Cuanto más a la derecha esté la información, mayor frecuencia tendrá F2.
Cuanto más arriba, menor frecuencia tendrá F1.
Las demás gráficas se usan para complementar casi siempre a la que hacemos referencia. De esta forma podremos distinguir entre quién habla y qué sonido produce dicha persona.
Pero una aplicación recóndita reside aquí. ¡Podemos diferenciar si una vocal es adyacente a una consonante bilabial (por ejemplo, la "b"), o si la misma vocal es adyacente a una consonante velar, o a una dental/interdental… Lo que quiero expresar con esto es la solución a la identificación de las consonantes adyacentes a una misma vocal. Bien antes hemos dicho que una misma vocal puede pronunciarse de diferentes maneras según sus consonantes adyacentes.
En éstas gráficas podríamos apreciar cómo F1 y F2 bajan en frecuencia (desplazadas hacia la izquierda y hacia arriba) en el caso de tener adyacente una consonante bilabial.
F1 baja y F2 sube en el caso de tener una consonante velar, este caso se ve claramente porque es la parte coloreada de azul en la gráfica de arriba a la derecha, donde podemos observar que está desplazada de las demás hacia arriba y hacia la derecha (F1 baja y F2 sube).
Un análisis mucho más profundo revelaría grandes detecciones sobre la evolución de los formantes, pero no entraremos en detalle porque podemos perdernos todos juntos, tanto yo como el lector.
Procesamiento de la voz en el dominio del tiempo:
– Debido a la naturaleza cambiante de la voz, resulta más conveniente aplicar el análisis a porciones de voz, ya que nuestro interés es observar la evolución de los distintos parámetros calculados; por ello se procesan porciones o ventanas de la señal.
Si nos damos cuenta, nos vamos alejando poco a poco de la comparación brusca de palabras o fonemas. Estamos llegando a un nivel superior donde el descubrimiento de la evolución de los formantes nos obliga a tratar la señal con porciones de unos 20 mseg. como dijimos anteriormente.
Pero esto no es todo, cada ventanita tendrá asociada un peso, es decir, no todas las secciones tendrán mayor importancia. De esta forma las muestras quedan ponderadas con los valores de la función escogida. En este ejemplo, (Hamming) las muestras que se encuentran en los extremos de la ventana tienen un peso mucho menor que las que se hallan en el medio, lo cual es muy adecuado para evitar que las características de los extremos del bloque varíen la interpretación de lo que ocurre en la parte más significativa (central) de las muestras seleccionadas.
Existe un pequeño solapamiento en los extremos de las ventanas, ¿por qué?, pues para proporcionar una mejor calidad en los resultados obtenidos ya que los valores (de la ventana) en sus extremos, quedan muy reducidos.
Pero como siempre pasa, en toda ley donde algo mejora, otra… empeora; en este caso va a repercutir en los tiempos de respuesta de los algoritmos utilizados, alargándolos ligeramente.
Hay varios tipos de ventanas: Ventana rectangular, ventana Hanning, ventana Hamming… quizá esta última es la más utilizada.
Para cualquier ventana, su duración determina la cantidad de cambios que se podrán obtener. Con una duración temporal larga, se omiten los cambios locales producidos en la señal, mientras que con una duración demasiado corta, se reflejan demasiado los cambios puntuales y se reduce la resolución espectral.
– Tanto la energía como la magnitud son útiles para distinguir segmentos sordos y sonoros en la señal de voz.
Existen otras maneras para identificar consonantes, hay un método denominado "cruces por cero y máximos" donde por ejemplo la "s" provoca que las muestras consecutivas de esa consonante difieren de signo (señales discretas). Generalizando más, podremos decir que una señal clasificada como ruido (la "s" es un ruido de alta frecuencia) provoca en la amplitud un cambio de signo. De esta manera se pueden localizar consonantes fricativas.
También se encuentran los bancos de filtros, usados para calcular la energía de la señal en cada ventana, y así poder representar un espectro.
Estimación espectral por predicción lineal (LPC):
– Su importancia es mayor que la que su propio nombre sugiere. Es una de las técnicas más usadas en el procesamiento de señales de voz.
Esta técnica ha probado ser muy eficiente debido a la posibilidad de parametrizar la señal con un número pequeño de patrones con los cuales es posible reconstruirla adecuadamente. Estos parámetros van cambiando poco a poco en función de la señal en el tiempo Otra ventaja es que no necesita demasiado tiempo de procesamiento.
El modelo matemático sugiere que el tracto vocal puede modelarse mediante un filtro digital, siendo los parámetros los que determinan la función de transferencia.
Esto consiste en que, dado un segmento de palabra, se extraen sus parámetros que en este caso vienen a ser los coeficientes del filtro.
El sistema LPC es sin duda una manera acertada de poder registrar una señal, ya que, en vez de registrar dicha señal, se transforma todo en un filtro con determinados coeficientes, de manera que al reconstruir la señal, se le "inyecta" un tren de pulsos periódicos o una fuente de ruido aleatorio que al pasar por el filtro se transformará en la señal original, es decir, en nuestra señal de voz.
- El tren de impulsos producirá señales sonoras q La fuente de ruido aleatorio producirá señales no sonoras.
- De esta manera, el filtro viene a representar un modelo del tracto bocal.
Si aplicásemos en vez de este sistema la transformada discreta de Fourier, se podría observar que coinciden en las resonancias que vienen a ser las que caracterizan el contenido frecuencial de la señal vocal, pero el espectro de la señal tratada por el sistema LPC se caracterizaría por tener contornos más suaves de lo normal, se podría decir que "suaviza" el espectro.
Aquí vendría otra bifurcación, en este caso matemática, ya que para la obtención de las ecuaciones del filtro, hay un largo recorrido de algoritmos, convoluciones, etc. Por tanto no pondré ninguna fórmula.
Hasta ahora, hemos visto los principios básicos, pero quedan muchas cosas que dar. En este punto es donde cabe mencionar los sistemas avanzados como son las cadenas ocultas de Markov (HMM) y las redes neuronales. Por supuesto debe haber más métodos, (como los algoritmos genéticos), pero valoro estos dos como los más importantes.
– Los modelos de señales que existen para caracterizar señales, pueden clasificarse de modo general en determinísticos y estocásticos (o de señales aleatorias). Esta clasificación se basa en la naturaleza de la señal tratada.
Los modelos determinísticos utilizan propiedades conocidas de la señal, y así poder estimarla de forma inmediata. Ejemplo: Onda senoidal, la cual puede caracterizarse por Amplitud, Fase y Frecuencia.
Por otra parte, los modelos estocásticos estiman propiedades estadísticas de las señales. (series de Gauss, series de Poisson, etc). Se asume que la señal modelada puede caracterizarse como una serie paramétrica aleatoria, y los parámetros de la serie aleatoria pueden estimarse de manera definida y precisa. Por esto los modelos estocásticos son una aproximación particularmente adecuada para el reconocimiento de voz.
El modelo estocástico más popular empleado en el reconocimiento de voz es el HMM
Procesos discretos de Markov y Cadenas ocultas de Markov (HMM):
– Los HMMs se han utilizado en diversas aplicaciones como sistemas de comunicación, biología molecular (para el análisis de las secuencias de ácidos proteicos y nucléicos), etc.
A este modelo se le llama "oculto" (hidden), en el sentido en que la secuencia de estados que producen una secuencia de patrones determinada, no puede ser observada/determinada.
Dependiendo de cómo evolucionen los estados, podemos hablar de HMMs ergódicos (cualquier estado se puede alcanzar desde cualquier otro estado) o HMMs left-to-right (donde el modelo únicamente lleva a cabo transiciones hacia delante).
Una característica importante es que estos sistemas tienen un futuro independiente del pasado, lo cual no ocurre en Redes Neuronales.
Estos modelos que acabo de describir serían la cuarta bifurcación, ya que se necesita una amplia gama de conocimientos estadísticos para poder llegar a comprender esto.
Por falta de conocimientos estadísticos no puedo decir más sobre las HMMs.
Está claro que para el reconocimiento de voz necesitamos sistemas estadísticos como el de Markov, pero la aplicación de Redes Neuronales va a superar con creces cualquier modelo estadístico que se le enfrente. Por supuesto, hay fallos en las Redes Neuronales, pero son el último avance en cuanto a este tema.
Dedicaré el resto del trabajo a explicar exclusivamente las Redes Neuronales ya que por lo menos, se puede profundizar un poco en ellas, sin necesidad de ser un genio de estadística ni de matemática. Es obvio que las siguientes explicaciones sigan siendo superficiales, porque a ver quien me enseña a programar una red de ese calibre, necesitaría una asignatura dedicada exclusivamente a ello.
He hecho todo lo posible por explicarlo de manera filosófica-científica con el fin de que se llegue a comprender, por lo menos, algo. Y así introducirnos y culturizarnos un poquito de lo que pasa a nuestro alrededor…
– Se puede definir como: "Una nueva forma de computación inspirada en modelos biológicos".
Por ello, vamos a ver primero el modelo biológico:
Una neurona se compone de dendritas(entradas),cuerpo(decisión) y axón(salida).
Por supuesto, el funcionamiento de una neurona es muchísimo más complejo de lo que aparentemente parece. La información en sí, es el potencial eléctrico.
En nuestro cerebro tenemos miles de neuronas interconectadas entre sí, lo que equivale a unas 10E15 conexiones (aproximadamente).
El modelo que vamos a tomar de ella es el siguiente:
Los sistemas neuronales biológicos presentan un mecanismo de vital importancia para controlar el flujo de la información que transita a través de las neuronas. Para ello están los neurotransmisores, que actúan químicamente sobre la sinapsis, amplificando o disminuyendo la cantidad de potencial que se transmite de una neurona a otra. Nosotros modelaremos un neurotransmisor como una multiplicación de la salida por un peso (número).
Éste hará las veces de neurotransmisor.
Por tanto, una red neuronal aplicada a cualquier sistema de reconocimiento, se basará simplemente en modelos matemáticos calculados con un lenguaje de programación.
Actualmente, se usa para varias aplicaciones además de la de reconocimiento de voz. Por ejemplo: Para la identificación de señales ultrasónicas en la emisión acústica, para detectar posibles grietas en los tanques de las petrolíferas. En este campo, interesa saber cómo se agrietan los tanques cuando son sometidos a una tensión, ya que hay varios tipos de ruptura, algunas son poco importantes y otras lo son mucho. Por tanto, conviene un sistema que analice automáticamente todas las señales y haga un informe del resultado. Actualmente, estos sistemas avanzados no existen en España debido a que las petrolíferas no quieren gastar dinero en esto, en cambio en Francia, USA, etc. Hay una gran competitividad en este sector.
Volviendo a nuestra aplicación de reconocimiento de voz, en la siguiente figura podremos ver más detalladamente las entradas (u), la salida (y) y los pesos (w).
Si W>0 ® sinapsis excitadora
Si W=0 ® no existe conexión
Si W<0 ® sinapsis inhibidora
Hay que dejar bien claro que las entradas no van a ser coeficientes LPC ni nada por el estilo. Simplemente, por ejemplo, serán los parámetros de una Transformada de Fourier.
Cuando multiplicamos la entrada por el peso (u*w) tendremos un valor con el cual decidiremos si a la salida daremos un 1 o un 0.
Existe un umbral q tal que si (u*w-q) es mayor que cero, la salida vale y = 1.
A primera vista, podemos pensar que la salida será un impulso tipo escalón, pero esto no es así ya que necesitamos una función derivable (por motivos de programación) así que aproxima esa señal a una de tipo sigmoidea (continua y derivable).
Estructura de una red neuronal artificial:
– Una vez establecido el comportamiento de una neurona artificial, vamos a conectar neuronas entre sí con el fin de formar una red de computación.
– Así como las neuronas biológicas están continuamente creando y destruyendo conexiones, nosotros vamos a regular esta función mediante la variación del valor de los pesos. En términos básicos podemos entender esto como: Llega la entrada, se multiplica por el peso, lo cual implica una salida de tipo 1 ó 0. Cómo esto no es una función exacta y debido a que cuando tenemos muchas neuronas es prácticamente imposible predecir el valor de los pesos para que el sistema funcione maravillosamente bien, entonces se establecen unos valores de los pesos de manera aleatoria. Si el resultado no es bueno, se le comunica de alguna forma para que aumente o disminuya el valor del peso. Y así, tenemos un sistema que aprende por sí solo.
Hay muchos tipos de aprendizaje, ya que se necesitan probar muchos algoritmos para ver cuál funciona mejor. Por la década de los 70, nació el sistema de retropropagación (Algoritmo Back Propagation), en el que cuando la última capa de salida suelta un valor, comienza el proceso contrario (propagación hacia atrás) analizando qué es lo que ha pasado en cada neurona de cada capa y dando órdenes a cada una de ellas para ver cómo puede mejorar. Podemos asimilar esto como una especie de programa llamado "maestro" que supervisa el trabajo de sus alumnos.
Este sistema revolucionó el mundo del aprendizaje en redes neuronales y hablaremos más profundamente de esto más adelante.
Si nos sumergimos un poco más en el sector del aprendizaje, podemos definir uno de los muchos algoritmos que existen.
Por ejemplo, aprendizaje supervisado por corrección de error, aquí se opera de la manera siguiente:
Esperamos un valor a la salida, pero obtenemos uno distinto. Entonces dichos valores se restan y la diferencia se aplica a un factor que regula la velocidad de aprendizaje. Así, cuanto más cerca estemos de nuestra solución, el sistema irá con más cuidado. Todo ello se engloba en un incremento del peso. En otras palabras:
DW = a*Y*(d-Y) (Regla delta)
d: valor de salida deseado
a: factor de aprendizaje (regula la velocidad de aprendizaje)
DW = Wactual – Wanterior : modificación del peso W.
d-Y: error que se produce en la neurona.
A este tipo de aprendizaje, se le denomina Hebbiano, dada una suposición de Hebb en 1949.
Vamos a definir un tipo de red neuronal, profundizaremos sobre él, pero hay que tener en cuenta que existen otros casos mucho más complejos, los cuales, parten de la idea básica de éste:
– Presenta una sola neurona de cómputo, de ahí su sencillez. Es un tipo de estructura mostrada a continuación:
Las neuronas de menor tamaño pertenecen a la capa de entrada y son parte del formalismo de la red. Se encargan de recibir y distribuirlos datos del exterior, sin realizar cómputos sobre los mismos.
En el caso más simple (N=2):
Y = f [(X1*W1+X2*W2)-q]
Esto significa que el resultado de la neurona va a tomar uno de los dos valores previstos en la función escalón (-1 y 1). El valor de la salida dependerá de si X1*W1+X2*W2 es mayor o menor que el umbral q.
Por tanto podemos establecer la siguiente ecuación
X1*W1+X2*W2-q = 0
Esta ecuación se corresponde con una recta que separa un plano de 2 dimensiones en 2 partes, el valor de los pesos y el del umbral, variará la posición de esa recta en el plano.
Imaginemos ahora que N=3 . Eso implica una neurona más en la capa de entrada, más exactitud de computación y un plano de 3 dimensiones donde la región que separa 1 de –1 es un plano. Cuando tenemos por ejemplo 6 neuronas en la capa de entrada, ¿Podemos imaginarnos un espacio de 6 dimensiones? Lógicamente no, pero matemáticamente existe…
El método de aprendizaje que utiliza el perceptrón es el supervisado por corrección de error (Hebbiano).
Consiste básicamente en poner varias capas elementales, como las anteriormente descritas, interconectadas sucesivamente con el objeto de dotar a la red de la complejidad suficiente para realizar la tarea requerida.
La función XOR se puede implementar con 3 capas (al ser más compleja). Las funciones AND y OR requieren una sola capa; cuando necesitemos operaciones de cierta dificultad, tendremos que recurrir a tantas capas como exija nuestro proceso.
Perceptrón multicapa con capas de retardo:
Es el modelo más complejo. Consiste en la inclusión de bloques (o capas) de neuronas que toman como entradas las salidas de otro/s bloque/s en el instante anterior. Esto permite que la red sea un sistema con memoria a corto plazo (o en fase operativa). Esta memoria es muy diferente a la memoria debida al entrenamiento que presenta el sistema global (que podría llamarse memoria a largo plazo o memoria en fase de entrenamiento).
Teniendo en cuenta que los patrones que pasamos a la red varían con el tiempo se puede comprender la importancia de estos retardos. Si la red no presenta retardos y la entrenamos mediante unos parámetros variables con el tiempo, impedimos que la red tenga en cuenta el orden en que llegan los parámetros (no podría distinguir "uno" de "onu" por ejemplo; la red pudiera ser entrenada para distinguir unos ejemplos pero sería imposible que generalizara).
Entrenamiento de varias capas:
Cuando tenemos varias capas ya no tenemos un sistema de ecuaciones lineales porque no hemos aplicado sólo una no linealidad sino que hemos aplicado una no linealidad a una aplicación lineal de varias no linealidades y esto ya no se puede resolver como un sistema de ecuaciones lineales. Al no tener una solución directa podemos pensar en buscar llegar a la solución siguiendo varios pasos a partir de un punto. El método de entrenamiento será por tanto iterativo. Ahora se puede hablar más propiamente de entrenamiento (mejora por fases).
Ahora lo que buscamos son dos cosas:
- Un punto de comienzo (pesos iniciales). Se suelen escoger unos números aleatorios pero pequeños.
- Un camino. (o una dirección a seguir en cada paso). Lo que nos interesa ahora es buscar en cada paso (cada iteración) una dirección de nuestro espacio de pesos que nos conduzca por un camino que lleve al objetivo: la minimización del error.
Wn+1 = Wn + DWn
La inteligencia artificial pretende acercar el comportamiento de las máquinas al comportamiento humano. Esto pretende liberar al hombre de tediosas tareas que hasta ahora sólo él podía realizar. Para que la supuesta máquina pueda conocer las necesidades del hombre es necesario que tenga una forma (lo mejor posible) de comunicarse con él. Entre las formas de comunicación creo que la voz juega un papel primordial y es muy importante que se realice en ambos sentidos. Si bien se puede pensar que las máquinas podrían aprender por sí solas a entender la voz, quizá sea más conveniente ayudarles mediante la creación de reconocedores y sintetizadores de voz.
Intentaremos usar las Redes neuronales artificiales (RNA) de manera eficiente para el reconocimiento de voz. Para ello debemos elegir las entradas de nuestra red, las salidas y la estructura necesaria para que produzca las salidas deseadas (dadas unas entradas). Después habrá que elegir un algoritmo de entrenamiento y unos parámetros para después realizarlo.
Método del gradiente (aplicado a retropropagación) : ventajas y limitaciones:
La ventaja de este método es que te da una dirección para poder seguir un camino que puede minimizar el error.
Recordando el concepto de gradiente de una función escalar donde en este caso la función escalar es el error y nuestro espacio vectorial es el espacio de todos los pesos (cada uno de los pesos es una dimensión del espacio):
El gradiente del error respecto a un vector (pesos) es un vector cuya dirección es la dirección de máximo crecimiento del error, su módulo es la variación del error en esa dirección (la de máxima variación) y su sentido es el que indica el crecimiento.
ÑE = (dE/dw1, dE/dw2, …, dE/dwi, …, dE/dwm) = grad (E)
Como lo que nos interesa es minimizar el error lo que debemos hacer es ir en sentido contrario al que indique el vector gradiente (máximo decrecimiento).
– ¿ Cuánto debemos avanzar cada vez (cada iteración) en esa dirección (que indica el gradiente) para acercarnos convenientemente al mínimo?.
Superficie de error para un solo perceptrón
Como en principio no sabemos cuánto avanzar podíamos pensar en una primera aproximación sumar al vector de pesos el vector gradiente tal cual. Sin embargo, hacerlo así podría llevarnos a dar saltos demasiado grandes en esa dirección (y puede que lleguemos a otra zona del espacio donde no hayamos mejorado). Para controlar esto podemos multiplicar ese vector de gradiente por una constante (que controlase el tamaño del salto en cada iteración). Esta constante se suele llamar tasa de aprendizaje (o tasa de entrenamiento "a") y esta forma de actuar es la implementación básica del método del gradiente del error.
El objetivo de este apartado es vincular todas las ideas que se han mostrado, llegando por fin a la visión global que nos permite "intuir" como funciona esto.
Observemos la siguiente figura:
Uno de los ejes es el error, el otro son los pesos.
La gráfica representa la superficie de error correspondiente a un modelo multicapa, ya que si miramos la gráfica anterior, podemos observar los simple que resulta para un solo perceptrón. A medida que vamos aumentando capas, la superficie del error se vuelve más compleja. Entonces aparecen los mínimos globales y los mínimos locales.
- Los mínimos locales son todos aquellos mínimos que están por encima de un mínimo global.
- El mínimo global es único y es el que representa el menor de los errores.
El símbolo que aparece en la gráfica (con la flecha) representa el avance de gradiente negativo que nos acerca a un mínimo. ¡OJO! El sistema no sabe que tipo de mínimo puede ser. Es decir, nosotros colocamos a nuestro símbolo en alguna parte de la gráfica, y él mismo decide ir bajando por el valle del error. La colocación de dicho símbolo en una u otra parte del valle viene determinada por la asignación inicial de los pesos.
En otras palabras, cada punto en la superficie del error corresponde a un conjunto de valores de los pesos de la red. Con el gradiente descendiente, siempre que se realiza un cambio en los pesos, se asegura el descenso por la superficie del error. Así, el algoritmo sólo encuentra el valle más cercano, lo que puede hacer que caiga en un mínimo local. Sin embargo, ha de tenerse en cuenta que no tiene por qué alcanzarse el mínimo global de la superficie del error, sino que puede bastar con un error mínimo preestablecido.
En el caso de la figura, nos encontramos en un mínimo local, y el sistema converge hacia él. No podremos salir de éste a menos que saltemos bruscamente…
Problema: ¿ Cómo de grande debe ser ese salto ? Posible solución: Empezar pegando saltos pequeños y si vemos que "no salimos del agujero" (pozo de potencial) probamos a ir dando saltos más grandes.
El planteamiento sería similar a una pulga patinadora miope ("rompetechos") que quiere bajar por una montaña hacia una altura determinada lo más pronto posible. Como conoce el entorno local (es miope pero no ciega) bajaría por donde existiese la máxima pendiente (gradiente) mirando a cada paso (de longitud la constante de entrenamiento) para modificar el rumbo. Cuando no descendiera más por sí sola (mínimo local) miraría si llegó suficientemente bajo (tiene un altímetro) y si no pegaría un salto para salir de ese hoyo donde ha caído y buscar por otro sitio.
Tenemos dos opciones:
1.Saltar de manera que los pesos se alejen de su valor inicial cada vez más rápidamente (de pequeños saltos, a saltos mayores) hasta que en uno de esos saltos nos sitúen en otro valle. (Iremos aumentando a poco a poco, de manera que la magnitud de los saltos sea cada vez mayor)(mirar gráfica de arriba).
a es la velocidad de variación de los pesos W
2.Teletransportarnos a otro remoto lugar de la inmensa cadena montañosa. Es decir, cambiar drástica y aleatoriamente los pesos, ya que puede haber grandes zonas cuyos mínimos locales conllevan demasiado error.
Cuando lleguemos a una zona donde el error sea aceptable, entonces paramos, y evitamos el sobreaprendizaje (sobreentrenamiento).
Sobreaprendizaje (overfitting) o cómo las RNA pueden "pasarse de listas":
Si la estructura de la red está sobredimensionada y además el entrenamiento es demasiado largo puede que la red se aprenda los ejemplos y disminuya demasiado su capacidad de generalización Métodos para mejorar la generalización:
– Añadiendo un ruido de unas características determinadas a las entradas para que no aprenda a distinguir un punto de otros sino que aprenda a distinguir un conjunto de puntos cercanos de otro grupo de puntos cercanos. Este concepto es muy importante, podemos pensar que el sobreaprendizaje consiste en que el sistema llega a reconocer a la perfección todas las características de cada sonido, lo cual es erróneo ya que no es una ciencia cierta. Si nuestro cerebro funcionase así, nos sería imposible reconocer el habla de las personas que hablan con cierta gangosidad.
También podemos poner el caso extremo de una persona que habla con la boca llena, en estos casos, nuestro cerebro entiende la mayoría de las palabras por pura probabilidad. Si todo esto lo trasladamos a una RNA (Red Neuronal artificial) podemos intuir lo que pasaría si el sistema se pasase de listo…
Volviendo al añadido de ruido, hay programas como el WinNN que hacen esto automáticamente.
Los parámetros a ajustar en ese ruido serían:
* función densidad de probabilidad: Normalmente de tipo gaussiana.
* varianza:.
– Eligiendo una buena estructura: Si la red tiene unas dimensiones justas (ni muy grandes ni muy pequeñas) la red será capaz de funcionar sin que ocurra sobreaprendizaje.
– Realizando un buen entrenamiento:
Eligiendo una buena condición de finalización (disminuimos el error máximo que se considera aceptable) no pararemos demasiado tarde, y de esta manera, es más difícil que ocurra el sobreaprendizaje.
Métodos para mejorar la generalización: Pruning, Weight Sharing, Complexity Regularization.
Un buen método es dividir los datos en dos conjuntos: uno para el entrenamiento y otro para evaluar la generalización.
– Hemos visto que una vez creada la red, hay que entrenarla y permitirle que llegue a generalizar (sin sobreaprendizaje).
El método de entrenamiento no es tan abstracto como parece. Simplemente estableceríamos una primera ecuación (supongamos que tenemos una sola capa y queremos entrenar el aprendizaje de una operación AND), en ésta ecuación general:
Y = F[X1*W1 + X2*W2 + q] = 0 ó 1
sustituiríamos las entradas por sus valores, multiplicamos por los pesos, y si el resultado de Y, por ejemplo (0*1 es 1, cuando tendría que ser 0), al no estar de acuerdo aplicamos:
Error = (Salida deseada – Salida obtenida) = 0,1 ó –1
Si el valor de Y es 0 significa salida esperada. Con cualquier otro valor (1,-1) salida errónea.
El proceso acabará cuando el error sea nulo, durante una vuelta completa en los valores de entrada, si no es asó seguimos operando.
Asignamos valores iniciales cuales sea: W1=2.2 ; W2=1.2 ; q =-0.2
Según un aprendizaje Hebbiano donde:
W1 (t+1) = W1(t) + X1*Error
W2 (t+1) = W2(t) + X2*Error
q (t+1) = q (t) + X1ó2*Error
Sustituiremos las entradas en la ecuación de salida en el siguiente orden:
00,01,10,11,00,01,10, etc.
Partimos de ciertos valores, comprobamos la salida, si ésta es errónea nos iremos a calcular los nuevos pesos y el nuevo error (donde X1ò2 se refiere que podemos usar tanto uno como otro en cualquier ocasión), y con ello volvemos a empezar.
Como la entrada X es también binaria, las variaciones del peso serán de uno. Entonces con el nuevo valor del peso calculamos en la ecuación los valores y le metemos las nuevas entradas, y si sigue sin darnos el resultado que queremos, volvemos ha hacer esto, una y otra vez… Está demostrado que al final el sistema aprende cómo realizar una operación AND ya que sólo hay una capa, sólo hay un mínimo hacia el cual convergeremos.
NOTA:
Si un resultado es aceptado Error = 0 y por mucho que multipliquemos y sumemos en las tres ecuaciones, nada cambiará.
Claro que éste es el caso más sencillo…
También suelen representarse todas estas ecuaciones de manera geométrica, y así poder ver el proceso de aprendizaje mediante el plano XY y la(s) recta(s) contenidos en él.
Y así acaba este pequeño temario, de nivel básico. Ya que, si nos quisiésemos poner a programar una red neuronal… no sabríamos por donde empezar, pero al menos ahora tenemos una visión general de qué es el reconocimiento de voz, cuales son sus posibles aplicaciones, y lo más importante: Cuál es el camino por el que se están debatiendo los investigadores…Redes Neuronales Artificiales.
Uno de los conceptos que me ha gustado mucho dejar bien claro, ha sido el de Inteligencia artificial, ya que se ha demostrado cómo un sistema aprende por sí solo.
Después de haber visto todos estos conceptos, supongo que estaremos más convencidos de que la humanidad no está tan lejos de fabricar un robot que entienda perfectamente al ser humano, si por cada cosa que no entienda, la gestiona y con ello aprenda…
La mayoría de la información encontrada aquí, así como de las gráficas, dibujos y espectrogramas, han sido extraídas de:
Libro: Reconocimiento de Voz y Fonética Acústica. Autores: Jesús Bernal Bermúdez, Jesús Bobadilla Sancho, Pedro Gómez Vilda. Editorial: Ra-Maâ
http://www.intersaint.org/acid/ (Sección trabajos – Link MLP)
http://mailweb.udlap.mx/~sistemas/tlatoa/courses/syllabus.html
Christian Herrera
Extraído de http://www.adictosaltrabajo.com