Inteligência Artificial
André Claudino
André Claudino
https://www.linkedin.com/in/andreclaudino/
https://github.com/andreclaudino
http://t.me/aclaudino
PhD. Física Computacional
(Física Matemática com IA simbólica)
time: IA Front
Interajam!
Inteligência
Inteligência?
- O torna uma pessoa inteligente?
- O que torna um cachorro inteligente?
- O que torna um computador inteligente?
Inteligência
=
habilidade de generalizar
Inteligência Artificial?
Como generalizar artificialmente?
Inteligência Artificial?
Antes
- modelos = funções
- poucos dados
- poder computacional menor
- Armazenamento caro
- Problemas pequenos
- Geral
Hoje
- modelos = resultados
- muitos dados
- mais poder, mas também mais dados
- Armazenamento barato
- Problemas grandes
- Geral ou específico
Do que vamos falar
- Abordagens
- Exemplos simples
- Exemplo complexo
-
Supervisionada
-
Não Supervisionada
-
Reforço
-
Geradores
-
Outros
Abordagens
Supervisionada
Aprende a relacionar características comuns a exemplos
Não Supervisionada
Aprende a relacionar características comuns, apenas
Reforço
Aprende qual ação tomar em busca de recompensa
Reforço
Aprende qual ação tomar em busca de recompensa
Geradores
Aprende a gerar itens parecidos com a entrada
Geradores
Aprende a gerar itens parecidos com a entrada
Exemplo
Criar modelo para inferir grupos semânticos de produtos
Árvore semântica
Árvore semântica
Cluster de frete
Microdados
Projeto
git clone git@github.com:IABrasil/inferir-grupos.git
cd inferir-grupos
python3 -m virtualenv venv
source venv/bin/activation
Supervisionado
Rede neural
Rede neural
Funciona otimizando o comportamento de um conjunto de neurônios organizados numa camada
Neurônio
Camada
Rede neural
Usa os gradientes para otimizar os neurônios
def training_step(model, features, labels, optimizer):
with tf.GradientTape() as tape:
tape.watch(model.trainable_variables)
predicted = model(features, training=True)
loss = sigmoid_loss(predicted, labels)
gradients = tape\
.gradient(loss, model.trainable_variables)
grads_per_vars = zip(gradients, model.trainable_variables)
optimizer.apply_gradients(grads_per_vars)
Rede neural
Repete o processo para os elementos no conjunto de treino
def train(model: ClassifierModel, dataset: tf.data.Dataset,
save_path: str, summary_step: int, save_step: int,
optimizer):
for features, label in dataset:
training_step(model, features, label, optimizer)
last_step = model.last_step.value()
if last_step % summary_step == 0:
model.summary()
if last_step % save_step == 0:
model.save(save_path)
- https://asciinema.org/a/IIGvMiHGRp4WRL7QiUDnHZSOB
- https://asciinema.org/a/RA6gJLGKqFbthZuBr489N8qiU
- https://asciinema.org/a/yS5bDoJjR47P3R4An9t1f3d05
Resultados
Não supervisionado
K-Means
K-Means
- Cria k centroides e mede a distância de cada ponto até o centroide mais próximo.
- Atualiza os centróides até que todos os pontos tenham a menor distância possível até um centróide
K-means
Treina k-means num único lote grande
def input_fn():
tensor = tf.convert_to_tensor(batch, dtype=tf.float32)
return tf.compat.v1.train.limit_epochs(tensor, num_epochs=1)
num_clusters = 2
kmeans = tf.compat.v1.estimator\
.experimental\
.KMeans(num_clusters=num_clusters,
use_mini_batch=False)
for _ in np.arange(num_iterations):
kmeans.train(input_fn)
accuracy = calculate_accuracy(input_fn, kmeans, labels)
print(accuracy.numpy())
Resultado
https://asciinema.org/a/t5WdUP9XFeoFEdYHk36iegbh6
Exercícios
Adicione uma etapa de validação no modelo supervisionado com dados não utilizados em treino
def train(model: ClassifierModel,
train_dataset: tf.data.Dataset,
validation_dataset: tf.data.Dataset,
save_path: str, summary_step: int, save_step: int,
validation_step: int, optimizer):
for features, label in dataset:
training_step(model, features, label, optimizer)
last_step = model.last_step.value()
if last_step % validation_step == 0:
validate_step(model, validation_dataset)
if last_step % summary_step == 0:
model.summary()
if last_step % save_step == 0:
model.save(save_path)
Faça treinos por batches no modelo k-means (terça)
dataset = load_dataset_for_unsupervised(
source_directory, batch_size, repeats=1)
.as_numpy_iterator()
for batch, labels in dataset:
def input_fn():
return tf.compat.v1.train.limit_epochs(
tf.convert_to_tensor(batch, dtype=tf.float32),
num_epochs=1)
kmeans.train(input_fn)
accuracy = calculate_accuracy(input_fn, kmeans, labels)
print(accuracy.numpy())
Pesquise, discuta com seus colegas e responda
- Por que o modelo supervisionado performa tão mal?
- O que significa a taxa de acerto em torno de 50%?
- Considerando o resultado no modelo não supervisionado, o supervisionado poderia ser melhor?
- Se sim, o que pode ser feito para melhorar o modelo supervisionado?
- O que mudou quando alterou o modelo não supervisionado para usar vários lotes?
- Modifique as duas versões do modelo supervisionado para ter uma etapa de teste num dataset de teste com dados não usados em treino
deck
By André Claudino
deck
- 126