|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OwnFramework.ipynb | ||
| README.md | ||
README.md
Introdução às Redes Neurais. Perceptron Multicamadas
Na seção anterior, você aprendeu sobre o modelo de rede neural mais simples - o perceptron de uma camada, um modelo linear de classificação de duas classes.
Nesta seção, vamos expandir esse modelo para um framework mais flexível, permitindo:
- realizar classificação multiclasse além de classificação de duas classes
- resolver problemas de regressão além de classificação
- separar classes que não são linearmente separáveis
Também desenvolveremos nosso próprio framework modular em Python que nos permitirá construir diferentes arquiteturas de redes neurais.
Quiz pré-aula
Formalização de Aprendizado de Máquina
Vamos começar formalizando o problema de Aprendizado de Máquina. Suponha que temos um conjunto de dados de treinamento X com rótulos Y, e precisamos construir um modelo f que faça previsões mais precisas. A qualidade das previsões é medida pela função de perda ℒ. As seguintes funções de perda são frequentemente usadas:
- Para problemas de regressão, quando precisamos prever um número, podemos usar erro absoluto ∑i|f(x(i))-y(i)|, ou erro quadrático ∑i(f(x(i))-y(i))2
- Para classificação, usamos perda 0-1 (que é essencialmente o mesmo que acurácia do modelo), ou perda logística.
Para o perceptron de uma camada, a função f foi definida como uma função linear f(x)=wx+b (aqui w é a matriz de pesos, x é o vetor de características de entrada, e b é o vetor de viés). Para diferentes arquiteturas de redes neurais, essa função pode assumir uma forma mais complexa.
No caso de classificação, muitas vezes é desejável obter probabilidades das classes correspondentes como saída da rede. Para converter números arbitrários em probabilidades (por exemplo, para normalizar a saída), frequentemente usamos a função softmax σ, e a função f torna-se f(x)=σ(wx+b)
Na definição de f acima, w e b são chamados de parâmetros θ=⟨w,b⟩. Dado o conjunto de dados ⟨X,Y⟩, podemos calcular um erro geral em todo o conjunto de dados como uma função dos parâmetros θ.
✅ O objetivo do treinamento de redes neurais é minimizar o erro variando os parâmetros θ
Otimização por Gradiente Descendente
Existe um método bem conhecido de otimização de funções chamado gradiente descendente. A ideia é que podemos calcular uma derivada (no caso multidimensional chamada de gradiente) da função de perda em relação aos parâmetros e variar os parâmetros de forma que o erro diminua. Isso pode ser formalizado da seguinte maneira:
- Inicializar os parâmetros com alguns valores aleatórios w(0), b(0)
- Repetir o seguinte passo várias vezes:
- w(i+1) = w(i)-η∂ℒ/∂w
- b(i+1) = b(i)-η∂ℒ/∂b
Durante o treinamento, os passos de otimização devem ser calculados considerando todo o conjunto de dados (lembre-se de que a perda é calculada como uma soma de todas as amostras de treinamento). No entanto, na prática, usamos pequenas porções do conjunto de dados chamadas minibatches, e calculamos os gradientes com base em um subconjunto de dados. Como o subconjunto é escolhido aleatoriamente a cada vez, esse método é chamado de gradiente descendente estocástico (SGD).
Perceptrons Multicamadas e Retropropagação
A rede de uma camada, como vimos acima, é capaz de classificar classes linearmente separáveis. Para construir um modelo mais rico, podemos combinar várias camadas da rede. Matematicamente, isso significaria que a função f teria uma forma mais complexa e seria calculada em várias etapas:
- z1=w1x+b1
- z2=w2α(z1)+b2
- f = σ(z2)
Aqui, α é uma função de ativação não linear, σ é uma função softmax, e os parâmetros θ=<w1,b1,w2,b2>.
O algoritmo de gradiente descendente permaneceria o mesmo, mas seria mais difícil calcular os gradientes. Dado o princípio da regra da cadeia de diferenciação, podemos calcular as derivadas como:
- ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2)
- ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1)
✅ A regra da cadeia de diferenciação é usada para calcular as derivadas da função de perda em relação aos parâmetros.
Note que a parte mais à esquerda de todas essas expressões é a mesma, e assim podemos calcular as derivadas de forma eficiente começando pela função de perda e indo "para trás" através do grafo computacional. Assim, o método de treinamento de um perceptron multicamadas é chamado de retropropagação, ou 'backprop'.
TODO: citação da imagem
✅ Vamos abordar a retropropagação com muito mais detalhes em nosso exemplo no notebook.
Conclusão
Nesta lição, construímos nossa própria biblioteca de redes neurais e a usamos para uma tarefa simples de classificação bidimensional.
🚀 Desafio
No notebook que acompanha, você implementará seu próprio framework para construir e treinar perceptrons multicamadas. Você poderá ver em detalhes como as redes neurais modernas operam.
Acesse o notebook OwnFramework e trabalhe nele.
Quiz pós-aula
Revisão e Autoestudo
Retropropagação é um algoritmo comum usado em IA e ML, vale a pena estudar em mais detalhes
Tarefa
Neste laboratório, você será solicitado a usar o framework que construiu nesta lição para resolver a classificação de dígitos manuscritos do MNIST.