- Introdução
- Método
- Guia de Uso
- Resultado
- Comparação com Perceptron de Camada Única
- Discussão
- Referências
O nome redes neurais no âmbito da computação toma emprestado o termo de inspiração da neurociência não necessariamente por conta de neurônios reais mas sim a sua aplicação em redes artificiais. Para evitar confusões com termos da área biológica, entretanto, outros termos como sinapses são evitados, ainda que se associe nodes, ou células onde as operações ocorrem, a neurônios. Isso deve, principalmente, ao início dos estudos em computação dessas estruturas que tinha como foco a modelagem de neurônios cerebrais de fato.
Partindo de modelos bem rudimentares e inspirados nos próprios neurônios, pôde-se obter formas bem eficientes de resolver alguns problemas como é o caso dos problemas aqui a serem apresentados, modelagem de portas lógicas.
O tipo de "neurônio" mais simples é o de classificação binária, chamado de perceptron após a sua implementação por Frank Rosenblatt em 1957. Proposto por Warren McCulloch e Walter Pitts em 1943, consistia em computar uma soma dos pesos do seu input de outras unidades e retorna um ou zero caso a soma dos pesos estiver acima ou abaixo de um determinado valor (limiar), de forma prática:
Onde
McCulloch e Pitts provaram então que o esse modelo era capaz de realizar qualquer operação computacional, dados os pesos adequados.
Ressalta-se que um neurônio real apresenta diferenças significantes do perceptron. Em suma, os inputs} não são discretos os outputs não são unitários mas sim sequências de pulsos.
Ainda assim, a quebra de simetria ou ausência de linearidade entre os
Para os modelos mais atuais de redes neurais,
Um problema que perceptrons de camada única não são capazes de resolver é o de classificação binária do tipo XOR e equivalentes.
Contudo, perceptrons de camadas múltiplas onde há "comunicação" entre as camadas anteriores e seguintes e vice-versa são capazes de resolver e obter resultados que reproduzem a porta lógica XOR. Esse modelo é conhecido como back-propagation.
Em perceptrons multi-camadas, as camadas existentes que intermediam as camadas de input e output são chamadas de camadas ocultas. Para o caso da porta XOR, apenas uma camada oculta se mostra suficiente para classificação binária esperada.
Para que o resultado pudesse ser obtido foi desenvolvida uma regra de aprendizagem chamada de back-propagation, que consiste em "informar" ou propagar as correções dos pesos para as camadas anteriores após a propagação direta (para as camadas seguintes).
Dessa forma, o algoritmo implementa um aprendizado de pares de input-ouput e usa como base o método do gradiente descendente.
Partindo da minimização de uma função custo
Assim, os pesos
Em que
Para a modelagem da porta XOR:
1 | 0 | 0 | 0 |
2 | 1 | 0 | 1 |
3 | 0 | 1 | 1 |
4 | 1 | 1 | 0 |
foram determinados duas sequências de inputs para o aprendizado,
A função custo total utilizada foi a log-loss somada sobre todos os elementos das sequências de inputs.
o que confere uma boa implementação de um critério de convergência já que a função log-loss fornece a proximidade entre os dados produzidos
A função de ativação para este problema foi determinada como a função sigmoide.
Definindo as quantidades:
e usando a regra da cadeia
Logo a atualização dos pesos é dada por:
Onde
Um problema amplamente estudado é o de escolha dos pesos iniciais que por não poderem ser 0 pois não quebram a simetria caso sejam.
Logo, é necessário algum processo de otimização da escolha desses pesos. A racionalização mais comum é de que os pesos devem ser suficientemente grandes para que a informação seja propagada corretamente porém pesos muito grandes podem provocar irregularidades como overflows. Além disso, algoritmos como este, que faz uso do gradiente descendente, tendem a parar em regiões próximas dos parâmetros iniciais, implicando o uso de pesos que não devem alterar muito os parâmetros iniciais em relação aos resultados esperados.
Uma abordagem que possui resultados expressivos em redes neurais que fazem uso da função de ativação do tipo sigmoide é a inicialização de pesos de Xavier:
Para este modelo, foi utilizado por padrão a distribuição de pesos de Xavier normalizada, que consiste em um distribuição uniforme do tipo:
Onde
Em relação aos vieses, a inicialização como zero é razoável nesse caso pois não há contribuição dos vieses no camada de saída que sobrepõe consideravelmente o valor dos pesos, responsáveis pela quebra de simetria.
> python3 xor_modeling.py --help
usage: xor_modeling.py [-h] [-g porta lógica] [-n neurônios] [--lr aprendizado]
[--maxit máximo de iterações] [--conv convergência]
[--lim convergência convergência]
Rede Neural de modelagem de porta lógica, utilizando o método do gradiente descendente e back-
propagation com função custo log-loss, função de ativação sigmoide, 1 camada oculta de "n"
neurônios, hiperparâmetro "h", máximo de iterações "maxit" e convergência usando a diferença
sobre a função custo "conv" onde "n", "h", "maxit" e "conv" são parâmetros a serem definido
pelo usuário, tendo valores definidos por padrão. Outro fator que pode ser definido pelo
usuário é o limite inferior e superior da distribuição uniforme dos pesos e vieses (Ws e bs).
Ainda que direcionado à porta XOR, garante a modelagem de outras portas lógicas conhecidas
AND, NOR, OR, NAND, XNOR. Dependências: matplotlib, numpy, argparse*
options:
-h, --help show this help message and exit
-g porta lógica, --gate porta lógica
insira a porta lógica desejada. Opções: AND, OR, NOR, NAND, XOR, XNOR.
Default = XOR - Argumento do tipo: str
-n neurônios, --nnum neurônios
insira o número de neurônios presentes na camada oculta. Default = 4 -
Argumento do tipo: int
--lr aprendizado insira a taxa de aprendizado (learning rate). Default = 1.0 -
Argumento do tipo: float
--maxit máximo de iterações
insira o número máximo de iterações. Default = 5000 - Argumento do
tipo: int
--conv convergência insira o valor de convergência para a diferença entre a função custo
em relaçao à função custo anterior, basicamente |C(n+1) - C(n)| <
"conv". Default = 1e-08 - Argumento do tipo: float
--lim convergência convergência
insira o valor limite inferior e superior da distribuição uniforme dos
pesos e vieses (Ws e bs). Default = 0 0. Por padrão, esses valores
resultam na Inicialização de Pesos de Xavier Normalizada. Caso
especial 1 1: Pesos e vieses sugeridos - Argumento do tipo: float
float
Exemplo:
> python3 xor_modeling.py
Pesos (Weights) e Vieses (Biases) Iniciais W ~ U(-sqrt(6/(n+m)),sqrt(6/(n+m))):
W(l=1)
[[-0.78416706 0.70013829]
[ 1.274711 0.09583239]
[ 0.34750134 -0.70974577]
[-0.10455123 -1.01884815]]
b(l=1)
[0. 0. 0. 0.]
W(l=2)
[0.22142459 1.06778323 0.9526455 0.5042465 ]
b(l=2)
0
Taxa de Aprendizado: 1.0
Neurônios da Camada Oculta: 4
Número de Iterações: 6000 de 6000
Critério de Convergência: |C(n+1) - C(n)| < 1e-08
Tabela de Classificação:
s | X1 | X2 | y | Y
-----------------------------------
1 | 0 | 0 | 0 | 0.00044
2 | 0 | 1 | 1 | 0.99849
3 | 1 | 0 | 1 | 0.99897
4 | 1 | 1 | 0 | 0.0023
Realizando a tentativa de modelagem da porta XOR com um perceptron de camada única, que é equivalente à operações exclusivamente de forward propagation, são obtidos resultados do tipo:
Resultados consideravelmente homogêneos para todas os inputs. Enquanto que para as portas AND e OR, são obtidos resultados que satisfazem as condições, sendo essas bem classificadas.
É interessante observar que há dois cenários comuns ao utilizar a inicialização de pesos que assume valores negativos, pois ela permite o cenário que permite que a sensibilidade do modelo tenha também uma tendência a classificar a combinação de inputs
Não há razão para acreditar que essa variação na região
No que diz respeito à variação do hiperparâmetro que determina a taxa de aprendizado, aqui temos um exemplo no qual atribuir valor maior do que 1 pode ser benéfico visto que as condições propostas garantem a efetividade do gradiente descendente (localizar o mínimo) e, portanto, não oferece risco quanto a atribuir um peso maior as derivadas do que aos próprios pesos. Porém há um valor limite para que ele aumente a precisão da classificação em que o limite é próximo de
A regra de aprendizado empregada no programa apresentado, back-propagation, é necessária por conta da ausência de tendência natural dos outputs que caracterizam a porta XOR, não há preferência instantânea, não sendo suficiente para que um perceptron de camada única seja capaz de modelá-la. Com base no gráfico, existe uma descontinuidade entre os valores, com duas regiões de mínimos e tal fator implica que o gradiente descendente em uma única camada não é capaz de predições de boa precisão com regiões de múltiplos mínimos ou máximos.
-
GIORDANO, N. J., DE JONG, M. L., MCKAY, S. R., AND CHRISTIAN, W. Computational physics. Computers in Physics 11, 4 (1997), 351–351.
-
GLOROT, X., AND BENGIO, Y. Understanding the difficulty of training deep feedforward neural networks. In Proceedings of the thirteenth international conference on artificial intelligence and statistics (2010), JMLR Workshop and Conference Proceedings, pp. 249–256.
-
GOODFELLOW, I., BENGIO, Y., AND COURVILLE, A. Deep learning (adaptive computation and machine learning series). Cambridge Massachusetts (2017), 321–359.
-
HERTZ, J., KROGH, A., AND PALMER, R. G. Introduction to the theory of neural computation. CRC Press, 2018