Aprendizado profundo com Keras - Aprendizado profundo

Como dito na introdução, o aprendizado profundo é um processo de treinamento de uma rede neural artificial com uma grande quantidade de dados. Depois de treinada, a rede será capaz de nos dar as previsões sobre dados não vistos. Antes de prosseguir na explicação do que é aprendizado profundo, vamos examinar rapidamente alguns termos usados ​​no treinamento de uma rede neural.

Redes neurais

A ideia de rede neural artificial foi derivada de redes neurais em nosso cérebro. Uma rede neural típica consiste em três camadas - entrada, saída e camada oculta, conforme mostrado na imagem abaixo.

Isso também é chamado de shallowrede neural, pois contém apenas uma camada oculta. Você adiciona mais camadas ocultas na arquitetura acima para criar uma arquitetura mais complexa.

Deep Networks

O diagrama a seguir mostra uma rede profunda que consiste em quatro camadas ocultas, uma camada de entrada e uma camada de saída.

À medida que o número de camadas ocultas é adicionado à rede, seu treinamento torna-se mais complexo em termos de recursos necessários e o tempo que leva para treinar totalmente a rede.

Treinamento de rede

Depois de definir a arquitetura de rede, você a treina para fazer certos tipos de previsões. Treinar uma rede é o processo de encontrar os pesos adequados para cada link na rede. Durante o treinamento, os dados fluem das camadas de entrada para saída por meio de várias camadas ocultas. Como os dados sempre se movem em uma direção da entrada para a saída, chamamos essa rede de Rede Feed-forward e chamamos a propagação de dados de Propagação Forward.

Função de Ativação

Em cada camada, calculamos a soma ponderada das entradas e a alimentamos para uma função de ativação. A função de ativação traz não linearidade para a rede. É simplesmente alguma função matemática que discretiza a saída. Algumas das funções de ativação mais comumente usadas são sigmóide, hiperbólica, tangente (tanh), ReLU e Softmax.

Retropropagação

A retropropagação é um algoritmo para aprendizagem supervisionada. Na retropropagação, os erros se propagam da saída para a camada de entrada. Dada uma função de erro, calculamos o gradiente da função de erro em relação aos pesos atribuídos em cada conexão. O cálculo do gradiente ocorre de trás para frente na rede. O gradiente da camada final de pesos é calculado primeiro e o gradiente da primeira camada de pesos é calculado por último.

Em cada camada, os cálculos parciais do gradiente são reutilizados no cálculo do gradiente da camada anterior. Isso é chamado de Gradient Descent.

Neste tutorial baseado em projeto, você definirá uma rede neural profunda feed-forward e a treinará com técnicas de retropropagação e gradiente descendente. Felizmente, Keras nos fornece todas as APIs de alto nível para definir a arquitetura de rede e treiná-la usando gradiente descendente. A seguir, você aprenderá como fazer isso no Keras.

Sistema de reconhecimento de dígitos manuscritos

Neste mini projeto, você aplicará as técnicas descritas anteriormente. Você criará uma rede neural de aprendizado profundo que será treinada para reconhecer dígitos escritos à mão. Em qualquer projeto de aprendizado de máquina, o primeiro desafio é coletar os dados. Especialmente, para redes de aprendizagem profunda, você precisa de dados enormes. Felizmente, para o problema que estamos tentando resolver, alguém já criou um conjunto de dados para treinamento. Isso é chamado de mnist, que está disponível como parte das bibliotecas Keras. O conjunto de dados consiste em várias imagens de 28x28 pixels de dígitos escritos à mão. Você treinará seu modelo na maior parte deste conjunto de dados e o restante dos dados será usado para validar seu modelo treinado.

Descrição do Projeto

o mnistO conjunto de dados consiste em 70000 imagens de dígitos manuscritos. Algumas imagens de amostra são reproduzidas aqui para sua referência

Cada imagem tem o tamanho de 28 x 28 pixels, perfazendo um total de 768 pixels de vários níveis de escala de cinza. A maioria dos pixels tende para o tom preto, enquanto apenas alguns deles são para o branco. Colocaremos a distribuição desses pixels em um array ou vetor. Por exemplo, a distribuição de pixels para uma imagem típica de dígitos 4 e 5 é mostrada na figura abaixo.

Cada imagem tem o tamanho de 28 x 28 pixels, perfazendo um total de 768 pixels de vários níveis de escala de cinza. A maioria dos pixels tende para o tom preto, enquanto apenas alguns deles são para o branco. Colocaremos a distribuição desses pixels em um array ou vetor. Por exemplo, a distribuição de pixels para uma imagem típica de dígitos 4 e 5 é mostrada na figura abaixo.

Claramente, você pode ver que a distribuição dos pixels (especialmente aqueles que tendem para o tom branco) difere, isso distingue os dígitos que eles representam. Alimentaremos essa distribuição de 784 pixels em nossa rede como sua entrada. A saída da rede consistirá em 10 categorias que representam um dígito entre 0 e 9.

Nossa rede consistirá em 4 camadas - uma camada de entrada, uma camada de saída e duas camadas ocultas. Cada camada oculta conterá 512 nós. Cada camada está totalmente conectada à próxima camada. Quando treinarmos a rede, estaremos computando os pesos para cada conexão. Treinamos a rede aplicando retropropagação e gradiente descendente que discutimos anteriormente.