Aprendizagem profunda
Observação
Consulte a guia Texto e imagens para obter mais detalhes!
A aprendizagem profunda é uma forma avançada de aprendizagem automática que tenta emular a forma como o cérebro humano aprende. A chave para a aprendizagem profunda é a criação de uma rede neural artificial que simula a atividade eletroquímica em neurônios biológicos usando funções matemáticas, como mostrado aqui.
| Rede neural biológica | Rede neural artificial |
|---|---|
|
|
| Os neurónios disparam em resposta a estímulos eletroquímicos. Quando disparado, o sinal é passado para os neurônios conectados. | Cada neurônio é uma função que opera em um valor de entrada (x) e um peso (w). A função está envolvida por uma função de ativação que determina se a saída deve ser transmitida. |
As redes neurais artificiais são compostas por várias camadas de neurônios - essencialmente definindo uma função profundamente aninhada. Esta arquitetura é a razão pela qual a técnica é referida como aprendizagem profunda e os modelos produzidos por ela são muitas vezes referidos como redes neurais profundas (DNNs). Você pode usar redes neurais profundas para muitos tipos de problemas de aprendizado de máquina, incluindo regressão e classificação, bem como modelos mais especializados para processamento de linguagem natural e visão computacional.
Assim como outras técnicas de aprendizado de máquina discutidas neste módulo, o deep learning envolve ajustar dados de treinamento a uma função que pode prever um rótulo (y) com base no valor de um ou mais recursos (x). A função (f(x)) é a camada externa de uma função aninhada na qual cada camada da rede neural encapsula funções que operam em x e os valores de peso (w) associados a elas. O algoritmo usado para treinar o modelo envolve alimentar iterativamente os valores de características (x) nos dados de treino através das camadas para calcular os valores de saída de ŷ, validando o modelo para avaliar quão distantes os valores calculados ŷ estão dos valores y conhecidos (quantificando o nível de erro, ou perda, no modelo) e, em seguida, modificar os pesos (w) para reduzir a perda. O modelo treinado inclui os valores de peso final que resultam nas previsões mais precisas.
Exemplo - Usando deep learning para classificação
Para entender melhor como funciona um modelo de rede neural profunda, vamos explorar um exemplo em que uma rede neural é usada para definir um modelo de classificação para espécies de pinguins.
Os dados da característica (x) consistem em algumas medidas de um pinguim. Especificamente, as medidas são:
- O comprimento do bico do pinguim.
- A profundidade do bico do pinguim.
- O comprimento das barbatanas do pinguim.
- O peso do pinguim.
Neste caso, x é um vetor de quatro valores, ou matematicamente, x=[x1,x2,x3,x4].
O rótulo que estamos tentando prever (y) é a espécie do pinguim, sendo que há três espécies possíveis:
- Adélia
- Gentoo
- Chinstrap
Este é um exemplo de um problema de classificação, no qual o modelo de aprendizado de máquina deve prever a classe mais provável à qual uma observação pertence. Um modelo de classificação consegue isso prevendo um rótulo que consiste na probabilidade para cada classe. Em outras palavras, y é um vetor de três valores de probabilidade; um para cada uma das classes possíveis: [P(y=0|x), P(y=1|x), P(y=2|x)].
O processo para inferir uma classe de pinguim prevista usando esta rede é:
- O vetor de características para uma observação de pinguim é introduzido na camada de entrada da rede neural, que é composta por um neurónio para cada valor x. Neste exemplo, o seguinte vetor x é usado como entrada: [37.3, 16.8, 19.2, 30.0]
- As funções para a primeira camada de neurônios calculam uma soma ponderada combinando o valor x e o peso w , e passam-na para uma função de ativação que determina se ela atende ao limite a ser passado para a próxima camada.
- Cada neurônio em uma camada é conectado a todos os neurônios na próxima camada (uma arquitetura às vezes chamada de rede totalmente conectada) para que os resultados de cada camada sejam alimentados através da rede até chegarem à camada de saída.
- A camada de saída produz um vetor de valores; neste caso, usando uma função softmax ou similar para calcular a distribuição de probabilidade para as três classes possíveis de pinguim. Neste exemplo, o vetor de saída é: [0.2, 0.7, 0.1]
- Os elementos do vetor representam as probabilidades para as classes 0, 1 e 2. O segundo valor é o mais alto, por isso o modelo prevê que a espécie do pinguim é 1 (Gentoo).
Como uma rede neural aprende?
Os pesos em uma rede neural são fundamentais para como ela calcula os valores previstos para rótulos. Durante o processo de treinamento, o modelo aprende os pesos que resultarão nas previsões mais precisas. Vamos explorar o processo de formação com um pouco mais de detalhe para entender como se dá essa aprendizagem.
- Os conjuntos de dados de treinamento e validação são definidos e os recursos de treinamento são alimentados na camada de entrada.
- Os neurónios em cada camada da rede aplicam os seus pesos (que são inicialmente atribuídos aleatoriamente) e alimentam os dados através da rede.
- A camada de saída produz um vetor contendo os valores calculados para ŷ. Por exemplo, uma saída para uma previsão de classe de pinguim pode ser [0,3. 0.1. 0.6].
- Uma função de perda é usada para comparar os valores previstos de ŷ com os valores y conhecidos e agregar a diferença (que é conhecida como a perda). Por exemplo, se a classe conhecida para o caso que retornou a saída na etapa anterior for Chinstrap, o valor y deverá ser [0,0, 0,0, 1,0]. A diferença absoluta entre este e o vetor ŷ é [0.3, 0.1, 0.4]. Na realidade, a função de perda calcula a variância agregada para vários casos e resume-a como um único valor de perda .
- Como toda a rede é essencialmente uma grande função aninhada, uma função de otimização pode usar o cálculo diferencial para avaliar a influência de cada peso na rede na perda e determinar como eles podem ser ajustados (para cima ou para baixo) para reduzir a quantidade de perda global. A técnica de otimização específica pode variar, mas geralmente envolve uma abordagem de descida de gradiente em que cada peso é aumentado ou diminuído para minimizar a perda.
- As alterações nos pesos são retropropagadas para as camadas na rede, substituindo os valores usados anteriormente.
- O processo é repetido ao longo de várias iterações (conhecidas como épocas) até que a perda seja minimizada e o modelo preveja com precisão aceitável.
Observação
Embora seja mais fácil pensar em cada caso nos dados de treinamento que estão sendo passados pela rede um de cada vez, na realidade os dados são agrupados em matrizes e processados usando cálculos algébricos lineares. Por esse motivo, o treinamento de redes neurais é melhor realizado em computadores com unidades de processamento gráfico (GPUs) otimizadas para manipulação vetorial e matricial.