Respositório de anotações e exemplos desenvolvidos em um curso de redes neurais com python, na Udemy.
Link para o curso, aqui
- Instalando as dependências
pip install -r requirements.txt
- Redes neurais se aplicam somente em casos onde você tem muitos dados e problemas complexos
- "Imitar" o sistema nervoso de humanos no processo de aprendizagem
- Inspirada em redes neurais biológicas, principalmente na troca de informações
- Neurônios: O cérebro usa para processar informações
- Axônio: Transmite o sinal de um neurônio pra outro, conectando os neurônios
- Substâncias químicas: São lançadas das sinapses e entram pelos dentritos, aumentando ou baixando o potencial elétrico do corpo da célula
- Funcionamento: Neurônio dispara se a entrada é maior que um número definido
- É fornecido um valor de entrada, a rede processa e retorna uma resposta
- O neurônio é ativado somente se o valor for maior que um limiar
- Entradas, e pesos (weight)
- Função soma
- Função ativação
X
são entradasW
são pesos- Faz a soma da multiplicação de xi por wi
(x1 * w1) + (x2 * w2) + (x3 * w3)
- Step function (função degrau)
- Retorna 1 caso soma seja maior que N
- Retorna 0 caso contrário
- Step function é bem tudo ou nada, pequenas modificações podem mudar todo o resultado
- Peso positivo: sinapse excitadora: tem chandes de ativar o neurônio
- Peso nevagito: sinapse inibidora, tem chances de desativar o neurônio
- Pesos são as sinapses
- O CONHECIMENTO DA REDE NEURAL, SÃO OS PESOS
Supervisionada | Não supervisionada | Reforço |
---|---|---|
Classificação | Associação | |
Regressão | Agrupamento | |
Detecção de desvios | ||
Padrões sequenciais | ||
Sumarização |
- Algoritmo simples para encontrar valor de
erro
:erro = resposta_correta - resposta_calculada
- Definições de novos pesos
peso(n+1) = peso(n) + (taxa_aprendizagem * entrada * erro)
- Ele consegue resolver somente problemas lineramente separáveis (aula 17)
- Por isso ele conseguiu aprender a tabela
AND
, tabelaOR
, mas não a tabelaXOR
- Para trabalharmos com problemas não linearmente separáveis, precisamos adicionar mais camadas a nossa rede
- Fornece um valor de entrada, a rede processa e retorna uma resposta (feed forward)
- O neurônio é ativado somente se o valor for maior que um limiar
- Step (função degrau): Retorna 0 ou 1
- Sigmoid (função sigmoide): Retorna entre 0 e 1 (não retorna valores negativos)
- Hyperbolic tangent (função tangente hiperbólica): Retorna entre -1 e 1
- Inicializa os pesos com valores aleatórios
- Baseado nos dados (aprendizagem supervisionada), realiza os cálculos com os pesos e calcula o erro
- Calcula as mudanças nos pesos e os atualiza (backpropagation)
- O algoritmo termina quando o erro é pequeno
- Em outras literaturas, Cost function é a função de erro
- Encontrar a combinação de pesos que o erro é o menor possível
- Força bruta
- Simmulated anealing
- Algoritmos genéticos
- Gradiente é calculado para saber quanto ajustar os pesos
- Mínimos locais
- Mínimos globais
- Calcular o declive da curva com derivadas parciais
- Cálculo de derivadas parciais: y * (1 - y), onde y é o resultado da sigmóide
A derivada serve para descobrir para qual lado um peso deve "pender", afim de encontrar o mínimo global
Fluxo de cálculos:
- Função ativação
- Derivada da função
- Delta
- Gradiente
É necessário calcular o delta da camada oculta e da camada de saída
Fórmula do delta para a camada de saída
delta_saida = erro * derivada_sigmoide
Fórmula do delta para a camada oculta
delta_oculta = derivada_sigmoide * peso_camada_seguinte * delta_saida
Fórmula
peso = (peso * momento) + (entrada * delta * taxa_de_aprendizagem)
- Taxa aprendizagem (learning rate)
- Define o quão "rápido" um algoritmo vai aprender
- Alto: A convergência é rápida, mas pode perder o mínimo global
- Baixo: Será mais lento, mas tem mais chances de chegar no mínimo global
- Momento (momentum)
- Escapar de mínimos locais (nem sempre funciona)
- Define o quão confiável é a última alteração
- Alto: Aumenta a velocidade da convergência
- Baixo: Pode evitar mínimos locais
- Bias adiciona umm atributo a mais, em cada uma das camadas. Se a rede tem 2 inputs, com bias, ela vai passar a ter 3 inputs, e +1 neurônio na camada oculta.
- Bias geralmente é usado quando temos 2 inputs de valor zero, com step function.
- Nas explicações, usamos somente o algoritmo simples:
resposta_correta - resposta_calculada
- Média da diferença entre o esperado e o que foi previsto pela rede
- Erros maiores contam mais que erros menores
- Penaliza erros maiores
- Tem como valor de erro o resultado dessa fórmula:
- Exemplo:
- Tem como valor de erro a raíz quadrada do MSE
- Deep learning, é quando temos duas ou mais camadas ocultas
- Utiliza outras técnicas para trabalhar com elas, as técnicas ensinadas neste curso não se aplicam
- Vanish gradient problem
- Utiliza outras funções de ativação, além da step e a sigmóide vistas neste curso
- Utiliza GPU