Rede neural convolucional

As redes neurais convolucionais (tamén chamadas CNN polas súas siglas en inglés: Convolutional Neural Networks) son un tipo especializado de redes neurais para procesar datos que teñen unha topoloxía coñecida en forma de cuadrícula. Caracterízanse por servir para detectar diferentes características en imaxes, aínda que se poden utilizar en moitos outros ámbitos. Están formadas por unha secuencia de capas convolucionais e funcións de activación. Este tipo de redes neurais foron creadas por Yann LeCun e o seu equipo no ano 1989, tendo éxito en moitas aplicacións prácticas. O seu nome indica que para o seu funcionamento emprega unha operación matemática chamada convolución, polo que se pode dicir que este tipo de redes son simplemente redes neurais que utilizan a convolución en lugar da multiplicación xeral de matrices como mínimo nalgunha das súas capas. Motivación
As redes neurais convolucionais caracterízanse por estaren localmente conectadas e pola compartición de pesos.
Nas redes neurais tradicionais, cada neurona está conectada a tódalas neuronas da seguinte capa, é dicir, a rede está totalmente conectada. No caso das redes convolucionais, en vez da multiplicación usual de matrices, utilízase o filtro da convolución, que consegue que cada neurona só estea conectada a un número reducido de neuronas na capa seguinte, o que dá lugar a unha rede localmente conectada. Nestas redes, os pesos dos arcos interprétanse como un filtro que vai pasando ao longo da rede, conseguindo unha saída final, que é o valor das neuronas da seguinte capa. Esta operación pódese interpretar como un produto escalar. Variando os valores dos filtros, pódense detectar os eixes verticais e horizontais das imaxes, o que serviría, por exemplo, para diferenciar obxectos dentro dunha imaxe.
Hai dúas vantaxes claras das redes localmente conectadas. Por unha banda, precisamos almacenar menos parámetros que se se tratase dunha rede totalmente conectada, o que reduce a memoria do modelo e mellora a súa eficiencia estatística. Por outra banda, ao haber menos parámetros, calcular a saída require menos operacións, o que se traduce nun tempo computacional menor. Se a nosa rede ten m {\displaystyle m} entradas e n {\displaystyle n} saídas, a multiplicación de matrices precisa m × n {\displaystyle m\times n} parámetros, e os algoritmos utilizados na práctica adoitan ter orde O ( m × n ) {\displaystyle O(m\times n)}. Polo tanto, se cada neurona está conectada a k {\displaystyle k} neuronas da capa seguinte, k < m {\displaystyle k<m}, a complexidade é menor.
A compartición de pesos refírese a repetir os pesos dos arcos en diferentes neuronas. Isto distínguese na figura que describe a operación convolución cos filtros, onde os pesos x, z, t {\displaystyle x, z, t} e u {\displaystyle u} utilízanse para calcular as sumas ponderadas de moitos grupos de neuronas. Esta compartición de pesos non afecta ao tempo de execución, mais reduce considerablemente o almacenamento dos parámetros. Filtros
Profundando máis nos filtros, hai diferentes parámetros que se poden variar neles á hora de percorrer a imaxe.
En primeiro lugar, pódese mudar o tamaño do filtro, engadindo máis parámetros para que abranga máis neuronas de entrada. En segundo lugar, pódese modificar o salto que realiza o filtro cando cambia de neuronas. Por exemplo, na figura da convolución, estase dando un salto de 1, pois o filtro vai recorrendo tódalas combinacións posibles. Porén, se o salto fose de 2, o grupo de neuronas b − c − f − g {\displaystyle b-c-f-g} non se analizaría, pasando directamente ao grupo c − d − g − h {\displaystyle c-d-g-h}. Nese mesmo exemplo, non se podería facer un salto de 3, pois o filtro sairíase da imaxe.
Para calcular os parámetros dos filtros hai unha fórmula que nos indica a relación entre todos eles. Sexan T S {\displaystyle TS} o tamaño de saída (supoñemos imaxes cadradas de tamaño T S × T S {\displaystyle TS\times TS} ), T E {\displaystyle TE} o tamaño de entrada, T F {\displaystyle TF} o tamaño do filtro e S {\displaystyle S} o salto do filtro. Tense entón a relación: T S
T E − T F S + 1 {\displaystyle TS
{\frac {TE-TF}{S}}+1} Despexando os parámetros que queiramos calcular, podemos obter os valores correctos en función dos dados.
Recheo
O recheo (tamén coñecido como padding, do inglés) consiste en engadir ceros no bordo da imaxe, o que modifica o tamaño da imaxe de entrada. Isto adóitase facer para ter unha imaxe de saída do mesmo tamaño que a de entrada, é dicir, non modificar o número de neuronas a medida que se van aplicando capas convolucionais. Neste caso, chamándolle R {\displaystyle R} ao recheo, a relación que hai é a seguinte: T S
T E + 2 R − T F S + 1 {\displaystyle TS
{\frac {TE+2R-TF}{S}}+1} Para un salto de 1 ( S
1 {\displaystyle S
1} ), se R
T F − 12 {\displaystyle R
{\frac {TF-1}{2}}}, o tamaño de entrada é o mesmo que o de saída ( T S
T E {\displaystyle TS
TE} ).
Capa convolucional
Nunha capa convolucional, máis xeralmente, se L e {\displaystyle L_{e}} é o número de neuronas de largo da imaxe, A e {\displaystyle A_{e}} é o número de neuronas de alto, e N e {\displaystyle N_{e}} é o número de filtros de entrada, o tamaño de entrada é L e × A e × N e {\displaystyle L_{e}\times A_{e}\times N_{e}}, téndose as seguintes relacións: L s
L e + 2 R − T F S + 1 {\displaystyle L_{s}
{\frac {L_{e}+2R-TF}{S}}+1}, sendo L s {\displaystyle L_{s}} o largo da imaxe. A s
A e + 2 R − T F S + 1 {\displaystyle A_{s}
{\frac {A_{e}+2R-TF}{S}}+1}, sendo A s {\displaystyle A_{s}} o alto da imaxe. N s
{\displaystyle N_{s}
} número de filtros de saída.
O tamaño de saída é L s × A s × N s {\displaystyle L_{s}\times A_{s}\times N_{s}}.
Ademais, o número de parámetros é ( T F × T F × N e + 1 ) × N s {\displaystyle (TF\times TF\times N_{e}+1)\times N_{s}}, onde T F × T F × N e {\displaystyle TF\times TF\times N_{e}} é o número de parámetros por filtro, ao que se lle suma unha constante. Todo isto queda multiplicado polo número de filtros que apliquemos na seguinte capa. Polo tanto, haberá tantos mapas de características (saída dunha convolución) como número de filtros que se apliquen. Agrupamento
Unha rede neural convolucional típica consta de 3 etapas por capa. A primeira etapa consiste en aplicar convolucións. Na segunda, pásase a saída por unha función de activación (xeralmente ReLU). Na terceira etapa, aplícase unha función de agrupamento (tamén coñecida como pooling, do inglés).
Unha función de agrupamento substitúe a saída dunha rede nunha certa localización por un resumo estatístico das neuronas próximas. Por exemplo, unha función de agrupamento comunmente usada é a de agrupamento máximo, que colle o valor máximo do conxunto de neuronas a agrupar. Outras funcións de agrupamento coñecidas son as de facer a media con tódolos valores, a norma ou unha suma ponderada baseada na distancia ao píxel central.
O agrupamento reduce o tamaño de saída da rede, o que deriva en redes máis pequenas onde se usa menos memoria e menos operación. Ademais, o agrupamento opera sobre cada mapa de características individualmente, mentres que a convolución opera sobre todos os mapas á vez.
Neste caso, as relacións entre a entrada e a saída son as seguintes: L s
L e − T F S + 1 {\displaystyle L_{s}
{\frac {L_{e}-TF}{S}}+1} A s
A e − T F S + 1 {\displaystyle A_{s}
{\frac {A_{e}-TF}{S}}+1} A operación de agrupamento non precisa parámetros adicionais. Normalización por lotes
Usualmente, antes de aplicar a función de activación, realízase unha normalización. A máis usada nas redes neurais convolucionais é a normalización por lotes. Esta normalización é aprendida pola rede e utilízase para manter os valores dentro dun rango razoable. Ademais, non utiliza media 0 e varianza 1, por seren valores demasiado restritivos.
Os datos normalízanse en capas, onde cada dimensión é independente, é dicir, para tódalas imaxes faise a normalización coa media e varianza de tódolos exemplos por canle. Dilución
Para adestrar á rede, adóitase utilizar o proceso de dilución (ou drop-out, en inglés), que consiste en desactivar aleatoriamente certas neuronas de cada capa. Isto é eficaz para que a rede non se adapte demasiado aos exemplos que se lle introducen na fase de adestramento.
O valor do hiperparámetro de dilución neste tipo de redes está arredor do 0, 5, aínda que dependendo da rede que esteamos a adestrar, pódense probar diferentes valores para ver cal se axusta mellor á rede en cuestión. Tipos de redes neurais convolucionais
Existen numerosas arquitecturas que utilizan redes neurais convolucionais. En xeral, as redes convolucionais adoitan ter algunhas capas totalmente conectadas ao final da rede. Ademais, moitas destas redes están xa previamente adestradas con conxuntos de datos como o ImageNet ou CIFAR-10. Algunhas destas redes son: VGG: unha rede profunda con filtros pequenos ( 3 × 3 {\displaystyle 3\times 3} ). O número de filtros dóbrase despois de cada operación de agrupamento. VGG16: 138 millóns de parámetros.
ResNet: utiliza un bloque de cálculo máis eficiente, sumándolle o valor inicial ao valor de saída da capa. Utiliza filtros de tamaño 3 salvo o primeiro, que é de tamaño 7. Ao principio de cada bloque de convolucións fai unha operación de agrupamento e incrementa o número de filtros en 2. Só é totalmente conectada a última capa.
ResNeXt: engade o concepto de cardinalidade, que se refire a incrementar o número de camiños que hai en cada bloque de cálculo. Aplicacións
As redes neurais convolucionais destacan no recoñecemento de imaxes. Foron moi utilizadas no recoñecemento facial, chegando a ter precisións do 97, 6% na detección de sorrisos. Tamén se utilizaron no recoñecemento xeral de obxectos, competindo en moitos concursos de rendemento, para detectar obxectos pequenos ou que están a longa distancia, por exemplo.
A análise de vídeos por redes convolucionais é menos común que en imaxes, por ter a compoñente do tempo, mais seguíronse diversas estratexias para ter unha boa análise con este tipo de arquitecturas. Utilizáronse tamén para a detección de obxectos en vídeos.
Outra aplicación destas redes é no procesamento da linguaxe natural, onde se estudaron para o modelado de oracións, a clasificación e a predición, entre outros. As redes convolucionais comparáronse coas súas predecesoras neste campo, as redes recorrentes, onde nalgunhas situacións eran mellores as primeiras, e noutras, as segundas.
Ademais de aplicacións tecnolóxicas, as redes neurais convolucionais tamén serven para o descubrimento de fármacos. Investigadores de Atomwise publicaron no 2015 un artigo onde presentaban a primeira rede neural convolucional profunda baseada en estruturas, AtomNet. Estaba deseñada para predicir a bioactividade de pequenas moléculas para aplicacións de descubrimento de fármacos. No artigo explican como aplicar os conceptos convolucionais de localidade de características e composición xerárquica ao modelado de bioactividade e interaccións químicas. Esta rede predicía con éxito novas moléculas activas para obxectivos sen moduladores previamente coñecidos.
Ademais de nestes campos, estas redes pódense utilizar en moitos outros campos, dependendo da natureza do problema.