Redes neurais recorrentes / séries temporais
Até agora, cada palavra virou um número inteiro.
O problema disso é que esses números inteiros representam categorias e não têm as principais características de serem números.
Não faz sentido fazer operações matemáticas como multiplicação e adição com esses números.
Não existe uma noção de proximidade entre as palavras.
O problema de fazer ‘one-hot encoding’ é principalmente computacional.
Imagine um vocabulário de 20k palavras, faz com que a matriz tenha 20k colunas, a maioria dos valores sendo 0, sem trazer muita informação.
A distância entre todas as palavras é igual.
Para transformar cada texto em uma linha da base de dados, podemos tomar a média de cada coluna.
Tirar as médias perde a noção de sequências, o que pode ser problemático.
Existem redes neurais que conseguem manter a noção de sequência.
Os valores de \(S_0\), \(S_1\), \(S_2\) e \(S_3\) são os valores de saída da rede neural para cada palavra. Chamamos esses valores de hidden states.
\[ S_t = f(S_{t-1}, X_t) = \sigma(S_{t-1}W_s + X_tW_x + b) \]
torch
para essa operação é dada por\[ h_t = \text{tanh}(W_{i\text{_}h}S_{t-1} + b_{i\text{_}h} + W_{h\text{_}h}X_t + b_{h\text{_}h}) \]
Obs: Também existe o problema do exploding gradient, mas isso é fácilmente resolvido utilizando uma técnica chamada clipping.
Long Short Term Memory. É uma arquitetura que lida com o problema dos gradientes que somem.
Textos podem ser transformados em vetores numéricos, que podem ser transformados em um embedding, que simplificam os textos sem perder suas características.
Redes neurais recorrentes (RNNs) são úteis para trabalhar dados sequenciais, como textos e séries de tempo.
LSTM é uma arquitetura de redes neurais recorrentes capaz de lidar com problemas numéricos das RNNs.
Outra técnica que ajuda bastante a ajustar modelos em deep lerning.
Consiste em normalizar os valores das ‘hidden units’.
Em geral usamos Batch Norm antes da ativação.
Ver: https://www.youtube.com/watch?v=tNIpEZLv_eg e https://www.youtube.com/watch?v=nUUqwaxLnWs
Reutilizar a parte ‘feature learning’ em outros bancos de dados.
O conceito não vale apenas para imagens, mas para qualquer modelo em deep learning.
Conceito:
Um modelo inteiro é treinado em um banco de dados X.
Salvamos apenas a parte ‘feature learning’.
Em um outro banco de dados usamos as ‘features’ que foram aprendidas no banco de dados X e apenas ajustamos a parte de classificar para um outro banco de dados.
Vantagens:
Reduz muito o tempo para treinar um modelo.
Faz com que seja possível treinar modelos em bases menores.
Desvantagens:
Image Segmentation: segmentar a imagem em diversos objetos. U-Net é um dos principais representantes.
Object detection: encontrar objetos nas imagens e marcá-los. YOLO
Ao invés de inicializar a matriz de embeddings de forma aleatória, usamos os pesos obtidos em outros modelos.
Um dos mais famosos é o GLOVE: um método não supervisionado para obtenção desses pesos: https://nlp.stanford.edu/projects/glove/
Outro muito famoso é o BERT, que tem até sua versão para português, o Bertimbau.
Atualmente, também temos o embedding ADA, da OpenAI.
2024