O treinamento de uma multilayer perceptron, como a Rede Elman, geralmente é feito de forma supervisionada utilizando o algoritmo de retropropagação de erros (Error Back-
Propagation). Este algoritmo tem como função encontrar as derivadas da função de erro
com relação aos pesos e Bias da rede neural [26]. A função de erro calcula a diferença entre a saída fornecida pela rede neural e a saída desejada em relação a um determi- nado padrão de entrada [27]. Outras variações desse algoritmo propostas para otimizar a convergência em certos casos também são utilizadas em treinamentos de redes neurais
2.5.1
Algoritmo Error Back-Propagation
Basicamente, o algoritmo Error Back-Propagation passa por duas etapas, a etapa forward e a etapa backward. Na etapa forward, os sinais de entrada são aplicados aos neurônios e seus efeitos são propagados pela rede, camada por camada, até chegar à camada de saída, produzindo a resposta da rede em relação às entradas. Nesta etapa, os pesos sinápticos são fixos. Na etapa backward, são calculadas as derivadas da função de erro em relação aos pesos sinápticos. O sinal do erro é propagado da camada de saída para a camada de entrada. Esse sinal de erro corresponde à diferença entre a saída do resultado da etapa
forward em relação à saída desejada estipulada nos targets do treinamento. Nesta etapa,
os pesos sinápticos são todos ajustados de acordo com algum método de otimização, com um dos mais populares sendo o método do gradiente descendente [28], para que o sinal da rede seja mais próximo ao sinal desejado, diminuindo o erro. O Error Back-Propagation é apresentado no Algoritmo 1.
Algoritmo 1 Algoritmo Error Back-Propagation
Inicialização
Os pesos sinápticos e os Bias são inicializados aleatoriamente no intervalo [0, 1]. Apresentação dos padrões de treinamento
O conjunto de padrões data de treinamento é apresentado à rede neural.
for d in data do
Etapa Forward
Começando pela camada de entrada, computa as atividades dos neurônios em cada camada.
Etapa Backward
Computa as derivadas da função de erro de acordo com o resultado da camada de saída.
for layer in layers do
Computa as derivadas da função de erro de acordo com as entradas dos neurônios da camada anterior.
Computa as derivadas da função de erro de acordo com os pesos sinápticos entre a camada anterior e a camada posterior.
Computa as derivadas da função de erro de acordo com os resultados da camada posterior.
end for
Atualiza os pesos sinápticos.
end for
Critérios de parada comuns são o número de épocas de treinamento e o valor mínimo de erro atingido pelo algoritmo. Uma medida de erro bastante utilizada é o Erro Médio Quadrático definido por
EM Q = 1 ne
Te, (2.11)
onde n é o número de padrões de entrada, e é um vetor que armazena o erro relativo a todos os padrões de entrada da rede.
2.5.2
Algoritmo Levenberg-Marquardt
O algoritmo Levenberg-Marquardt [29] é o algoritmo usado no treinamento das redes neu- rais deste projeto. Trata-se de um método de otimização e aceleração da convergência do
Error Back-Propagation, sendo considerado mais eficiente para treinamentos de redes de
tamanhos pequeno e médio. O algoritmo Error Back-Propagation é popular e amplamente utilizado ainda nos dias de hoje, porém possui uma convergência lenta. Esse problema da convergência é melhorado com o algoritmo Gauss-Newton [30]. Este algoritmo usa deri- vadas de segunda ordem da função de erro para avaliar a curvatura da superfície de erro, achando tamanhos de passos adequados em cada direção, possibilitando uma convergência mais rápida, especialmente para superfícies de erro quadráticas.
O Levenberg-Marquardt combina conceitos do método do gradiente descendente [27], herdando sua estabilidade, e do algoritmo Gauss-Newton, herdando sua velocidade. É mais robusto que o Gauss-Newton pois converge mesmo em casos onde a superfície de erro é mais complexa do que em uma situação quadrática, permitindo também maior variabilidade nos parâmetros iniciais de entrada.
A ideia do algoritmo Levenberg-Marquardt é um treinamento combinado, onde o al- goritmo muda para o método gradiente descendente em torno de uma área com curva- tura complexa até a curvatura local possibilitar uma aproximação quadrática. Então, o algoritmo passa a se comportar como o Gauss-Newton, aumentando a velocidade de convergência significantemente [30].
Capítulo 3
Sistema Proposto
Este capítulo descreve a proposta e a implementação de uma aplicativo iOS com um sis- tema de autenticação de usuário baseado em gestos utilizando uma rede neural recorrente. A rede neural foi criada e treinada no MATLAB, e sua estrutura foi implementada no código do sistema.
3.1
Ambiente de desenvolvimento
Para a criação de qualquer aplicativo no sistema operacional iOS, é necessário um compu- tador com o sistema operacional macOS e com a IDE Xcode [31] instalada como mostrado na Figura 3.1.
Figura 3.1: Xcode.
Para o programador testar seus aplicativos em um dispositivo iPhone ou iPad, é neces- sário ter uma conta de desenvolvedor ativa no site Apple Developer [32]. Existem ainda outras alternativas de plataformas para desenvolvimento de aplicativos para dispositivos iOS como o Qt for iOS [33]. A linguagem de programação utilizada neste projeto foi o Objective-C [10].
3.2
Ambiente de Treinamento
A rede neural implementada no aplicativo foi criada no MATLAB [34] utilizando uma Rede Neural Recorrente de Elman. Amostras de gestos coletadas de pessoas que partici- param do experimento são rotuladas e utilizadas nos treinamentos para definir a estrutura da rede neural a ser implementada. A Figura 3.2 mostra o exemplo de uma rede contendo 9 neurônios na camada de entrada, 16 neurônios na camada escondida e de contexto, e 2 neurônios na camada de saída.
Figura 3.2: Representação de uma Rede Neural Recorrente Elman no MA- TLAB (Fonte: [34]).
A rede é treinada utilizando o algoritmo Levenberg-Marquadt com base em valores de input e target selecionados para o treinamento. Após o treinamento, um script é executado para transportar os valores dos pesos sinápticos e Bias da rede treinada no MATLAB para o código fonte do aplicativo.