☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta backpropagation. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta backpropagation. Mostrar todas as mensagens

quinta-feira, 3 de setembro de 2026

O Dia em que o Perceptron Entrou no CPD, Aprendeu com os Próprios Erros e Virou uma IA Generativa sem Pedir COMMIT

 

Bellacosa Mainframe e uma introducao a redes neurais

☕ Um Café no Bellacosa Mainframe

O Dia em que o Perceptron Entrou no CPD, Aprendeu com os Próprios Erros e Virou uma IA Generativa sem Pedir COMMIT

Ou: como saímos das regras escritas à mão, atravessamos redes neurais, deep learning e Transformers e chegamos às máquinas capazes de escrever COBOL perfeitamente convincente — inclusive quando o programa não compila



Prólogo — “Computador, aprenda sozinho”, disse o humano sem preparar os dados

Durante décadas, programar significou explicar ao computador, com uma paciência quase religiosa, exatamente o que ele deveria fazer. O desenvolvedor recebia uma regra de negócio, transformava-a em decisões e escrevia uma sequência de instruções. Se o cliente estivesse inadimplente, bloqueava-se a operação. Se o saldo fosse insuficiente, recusava-se o débito. Se o retorno do programa fosse diferente de zero, alguém recebia uma mensagem capaz de arruinar o café da manhã.

Era um mundo de regras explícitas:

IF WS-SALDO < WS-VALOR-DA-COMPRA
    MOVE 'COMPRA RECUSADA' TO WS-MENSAGEM
ELSE
    MOVE 'COMPRA APROVADA' TO WS-MENSAGEM
END-IF

O computador não precisava compreender o cliente, a compra ou o significado filosófico de ficar sem dinheiro no dia 27. Bastava obedecer.

Então surgiu uma pergunta perturbadora: e se, em vez de escrevermos todas as regras, mostrássemos milhares de exemplos ao computador e permitíssemos que ele ajustasse internamente uma função capaz de reconhecer os padrões?

É nesse ponto que entram as redes neurais.

Não são cérebros digitais, não acordam durante a madrugada pensando em sua própria existência e não possuem um pequeno neurônio chamado Igor escondido atrás da CPU. São modelos matemáticos formados por operações relativamente simples, repetidas muitas vezes e organizadas em camadas.

O encanto está justamente nisso: multiplicações, somas e ajustes de números, quando combinados em escala suficiente, conseguem reconhecer imagens, transcrever voz, prever falhas, traduzir idiomas e gerar texto. O perigo também está nisso: como o resultado parece inteligente, o ser humano pode esquecer que por baixo da conversa elegante existe uma máquina calculando probabilidades.



1. Antes das redes neurais: o reino das regras

Antes de uma rede aprender com dados, o conhecimento normalmente precisava ser colocado no sistema por seres humanos.

Programação tradicional

Na programação convencional, temos os dados e conhecemos as regras. O programa aplica essas regras e produz uma resposta:

Dados + regras escritas pelo programador → resultado

Esse modelo continua sendo excelente quando o problema é determinístico. Para somar lançamentos contábeis, calcular juros definidos em contrato ou validar o tamanho de um campo, uma rede neural seria uma extravagância digna de alguém que contratou uma orquestra para tocar o som de uma notificação.

Sistemas especialistas

Entre as décadas de 1970 e 1980, ganharam destaque os sistemas especialistas. Eles tentavam reproduzir decisões de profissionais por meio de uma base de conhecimento e um mecanismo de inferência.

SE a temperatura está alta
E a pressão está baixa
ENTÃO verificar o sistema de refrigeração

Esses sistemas foram úteis, mas tinham um custo: alguém precisava entrevistar os especialistas, descobrir as regras, eliminar contradições e manter a base atualizada. Quando o ambiente mudava, a elegante inteligência podia virar rapidamente um museu de certezas antigas.

Estatística e machine learning clássico

Também existiam — e continuam existindo — regressão linear, regressão logística, árvores de decisão, Naive Bayes, KNN, máquinas de vetores de suporte e vários outros algoritmos.

Eles não foram aposentados pela IA generativa. Em dados tabulares pequenos ou médios, uma árvore ou regressão frequentemente custa menos, é mais explicável e funciona tão bem quanto uma rede neural. O desenvolvedor maduro não pergunta “onde posso colocar IA?”, mas “qual é a solução mais simples, verificável e econômica para este problema?”.



2. O perceptron bate à porta do CPD

O ancestral histórico das redes atuais é o perceptron, desenvolvido por Frank Rosenblatt no fim dos anos 1950. Ele era um classificador capaz de ajustar os pesos das entradas durante o aprendizado. Embora limitado a problemas linearmente separáveis, estabeleceu uma ideia fundamental: uma máquina poderia melhorar sua decisão modificando seus próprios parâmetros a partir de exemplos.

Um neurônio artificial recebe valores de entrada:

  • uso de CPU;

  • memória consumida;

  • quantidade de erros anteriores;

  • crescimento do volume processado.

Cada entrada é multiplicada por um peso. Depois, os resultados são somados com um valor adicional chamado bias:

[
z = x_1w_1+x_2w_2+x_3w_3+x_4w_4+b
]

Em seguida, o valor passa por uma função de ativação:

[
y=f(z)
]

Essa função permite que o modelo represente relações não lineares. Sem ela, empilhar várias camadas equivaleria, em essência, a fazer uma única grande transformação linear: muita arquitetura para continuar morando no mesmo apartamento matemático.

Se a saída usar uma função sigmoide, obteremos um valor entre zero e um:

0,04 → risco muito baixo
0,51 → situação incerta
0,97 → risco muito alto

O neurônio não “sabe” o que é um ABEND. Apenas aprendeu que determinadas combinações numéricas costumam aparecer antes de registros classificados como falha.



3. Por que uma rede precisa de camadas?

Um neurônio isolado resolve apenas relações simples. Uma rede reúne muitos neurônios em camadas:

  1. Camada de entrada: recebe os dados.

  2. Camadas ocultas: transformam e combinam os sinais.

  3. Camada de saída: produz a previsão ou classificação.

Em visão computacional, camadas iniciais podem responder a contornos, cores e texturas. Camadas posteriores combinam esses elementos em formas mais complexas. Em linguagem, representações iniciais de tokens são transformadas considerando posição, contexto e relações com outros tokens.

Quando existem muitas camadas, falamos em deep learning, ou aprendizagem profunda. A profundidade não concede consciência ao modelo; apenas cria uma função com enorme capacidade de representar padrões.

É importante evitar uma analogia enganosa. Redes neurais foram inspiradas vagamente na ideia de neurônios interconectados, mas um neurônio biológico é imensamente mais complexo. Dizer que uma rede artificial funciona como o cérebro é semelhante a dizer que um avião funciona como um pássaro: ambos voam, mas ninguém espera encontrar penas dentro da turbina.



4. Como a rede aprende: o treinamento

O treinamento pode ser entendido como um ciclo em cinco atos.

Ato 1 — Pesos iniciais

Os pesos começam com pequenos valores, geralmente aleatórios. A rede ainda não aprendeu o padrão e suas respostas são pouco úteis.

Ato 2 — Propagação para frente

Um exemplo atravessa a rede da entrada até a saída. Isso é chamado de forward pass.

CPU: 92%
Memória: 90%
Erros anteriores: 7
Crescimento do volume: 65%

Previsão inicial: 18% de risco de ABEND
Resultado real: houve ABEND

Ato 3 — Função de perda

A função de perda mede a distância entre a previsão e a resposta correta. Ela não diz apenas “errou”; fornece um número que pode orientar os ajustes.

Ato 4 — Backpropagation

O algoritmo calcula como cada peso contribuiu para o erro. Essa informação é propagada da saída em direção às camadas anteriores. É o famoso backpropagation.

Ato 5 — Otimização

Um otimizador, como o gradiente descendente ou Adam, altera os pesos na direção que tende a reduzir a perda.

O ciclo se repete. Cada passagem completa pelo conjunto de treinamento recebe o nome de época.

Época 1   → a rede tropeça no cabo de força
Época 10  → começa a reconhecer alguns padrões
Época 50  → melhora suas previsões
Época 500 → talvez esteja aprendendo o problema
             ou apenas decorando o laboratório

Quando o modelo decora demais os exemplos de treinamento e perde a capacidade de funcionar com dados novos, temos o overfitting. Ele é o aluno que tirou dez porque memorizou o gabarito, mas entra em S0C7 quando a prova muda duas palavras.

5. Laboratório: uma pequena sentinela de jobs batch

Vamos construir um exemplo didático em Python. A rede receberá quatro características de um job:

  • percentual de CPU;

  • percentual de memória utilizada;

  • quantidade de erros anteriores;

  • crescimento percentual do volume de entrada.

Ela tentará classificar o resultado:

  • 0: execução normal;

  • 1: risco de ABEND.

Passo 1 — Preparar o ambiente

python -m pip install tensorflow numpy scikit-learn

Passo 2 — Importar as bibliotecas

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow import keras
from tensorflow.keras import layers

O NumPy manipula os números, o scikit-learn ajuda a preparar os dados e o Keras oferece blocos de construção para a rede.

Passo 3 — Criar os exemplos

X = np.array([
    [35, 40, 0, 5],
    [42, 48, 0, 8],
    [50, 55, 1, 10],
    [58, 60, 1, 12],
    [65, 68, 2, 18],
    [72, 75, 3, 25],
    [78, 82, 4, 35],
    [85, 88, 5, 45],
    [91, 94, 7, 60],
    [96, 97, 9, 80],
    [45, 85, 1, 12],
    [88, 50, 2, 20],
    [76, 91, 6, 50],
    [93, 86, 8, 65],
    [55, 52, 0, 5],
    [82, 89, 5, 55]
], dtype=float)

y = np.array([
    0, 0, 0, 0,
    0, 0, 1, 1,
    1, 1, 0, 0,
    1, 1, 0, 1
])

X contém as características e y contém o resultado conhecido. Em um projeto real, esses registros poderiam vir de métricas operacionais, SMF, logs, históricos do scheduler e ocorrências devidamente classificadas.

Passo 4 — Separar treino e teste

X_treino, X_teste, y_treino, y_teste = train_test_split(
    X,
    y,
    test_size=0.25,
    random_state=42,
    stratify=y
)

O modelo aprende com uma parte dos registros e é avaliado com outra. Testá-lo com o mesmo material usado no treinamento seria entregar a prova com o gabarito e depois publicar no LinkedIn que o aluno alcançou 100% de inteligência artificial.

Passo 5 — Normalizar

normalizador = StandardScaler()

X_treino = normalizador.fit_transform(X_treino)
X_teste = normalizador.transform(X_teste)

As variáveis possuem escalas diferentes. CPU pode variar de zero a cem, enquanto erros anteriores talvez variem de zero a dez. A normalização impede que o tamanho numérico seja confundido com importância.

Há um detalhe essencial: usamos fit_transform somente no treino. No teste, usamos apenas transform. Caso o normalizador aprendesse também com o conjunto de teste, informações do futuro vazariam para o treinamento.

Passo 6 — Construir a rede

modelo = keras.Sequential([
    layers.Input(shape=(4,)),
    layers.Dense(8, activation="relu"),
    layers.Dense(4, activation="relu"),
    layers.Dense(1, activation="sigmoid")
])

A primeira camada oculta possui oito neurônios; a segunda possui quatro. A saída possui um neurônio com sigmoide, produzindo um valor entre zero e um.

O número de camadas e neurônios não veio gravado numa tábua sagrada. Arquitetura, taxa de aprendizado, tamanho do lote e quantidade de épocas são hiperparâmetros: escolhas feitas e testadas pela equipe.

Passo 7 — Compilar e treinar

modelo.compile(
    optimizer="adam",
    loss="binary_crossentropy",
    metrics=["accuracy"]
)

modelo.fit(
    X_treino,
    y_treino,
    epochs=100,
    verbose=0
)

A entropia cruzada binária é adequada a uma classificação com duas classes. Adam realiza os ajustes dos pesos. epochs=100 manda o modelo percorrer o conjunto de treinamento cem vezes.

Passo 8 — Avaliar

perda, acuracia = modelo.evaluate(
    X_teste,
    y_teste,
    verbose=0
)

print(f"Acurácia de teste: {acuracia:.2%}")

A acurácia, sozinha, pode enganar. Se apenas 1% dos jobs falha, um modelo que sempre responde “normal” terá 99% de acurácia e a utilidade operacional de um alarme que permanece silencioso durante o incêndio.

Em produção, também examinaríamos precision, recall, F1-score, matriz de confusão, falsos positivos e falsos negativos. O custo do erro precisa ser discutido com o negócio e com a operação.

Passo 9 — Fazer uma previsão

novo_job = np.array([
    [89, 92, 6, 58]
], dtype=float)

novo_job_normalizado = normalizador.transform(novo_job)

probabilidade = modelo.predict(
    novo_job_normalizado,
    verbose=0
)[0][0]

print(f"Risco estimado de ABEND: {probabilidade:.2%}")

if probabilidade >= 0.70:
    print("Risco alto: solicitar análise humana.")
elif probabilidade >= 0.40:
    print("Risco intermediário: monitorar a execução.")
else:
    print("Risco baixo.")

A rede produz uma probabilidade. A política ao redor dela decide o que fazer. O modelo pode recomendar uma análise; não precisa receber autoridade para cancelar sozinho a folha de pagamento porque encontrou uma vibração negativa no dataset.

6. Por que este laboratório ainda não pode entrar em produção?

Nosso conjunto contém apenas dezesseis registros sintéticos. Serve para compreender o fluxo, não para comandar uma operação real.

Uma implementação séria precisaria investigar:

  • qualidade e representatividade dos dados;

  • registros ausentes ou incorretos;

  • desbalanceamento entre classes;

  • diferença entre correlação e causalidade;

  • vazamento de informações do futuro;

  • custo dos falsos alarmes;

  • explicabilidade;

  • segurança e privacidade;

  • mudanças no ambiente ao longo do tempo;

  • comparação com regras e algoritmos mais simples.

Imagine que todos os ABENDs do histórico ocorreram às sextas-feiras porque uma versão defeituosa foi implantada durante quatro semanas. A rede pode aprender que sexta-feira é perigosa, em vez de descobrir a verdadeira causa. Ela não mentiu; apenas encontrou o atalho estatístico permitido pelos dados.

O dataset é o professor. Se o professor carrega erros, preconceitos, lacunas ou classificações ruins, o aluno aprende tudo com notável eficiência.

7. Para que servem as redes neurais?

Redes neurais são úteis quando há muitos exemplos e relações difíceis de transformar em regras explícitas:

  • reconhecimento de imagens e objetos;

  • transcrição e síntese de voz;

  • tradução automática;

  • classificação de documentos;

  • manutenção preditiva;

  • detecção de fraude e anomalias;

  • análise de sentimento;

  • recomendação de conteúdo;

  • processamento de linguagem;

  • geração de texto, imagem, áudio e vídeo.

Mas não são a solução universal. Uma regra é preferível quando precisa ser cumprida exatamente. Uma árvore pode ser melhor quando a explicação da decisão é indispensável. Uma consulta SQL pode resolver o que alguém tentou transformar num projeto de seis meses com GPUs, consultores e uma apresentação cujo título contém a palavra “disruptivo”.

8. O inverno das redes e o renascimento do deep learning

Redes neurais não caminharam em linha reta até a glória. Houve períodos de entusiasmo, limitações e perda de interesse.

Modelos iniciais tinham capacidade limitada. Treinar redes profundas era difícil, os computadores eram lentos e grandes conjuntos de dados digitalizados ainda não existiam. Críticas às limitações dos perceptrons também contribuíram para reduzir o entusiasmo.

O renascimento ganhou força entre o fim dos anos 2000 e o início dos anos 2010 graças à combinação de:

  • mais dados disponíveis;

  • GPUs capazes de executar cálculos em paralelo;

  • técnicas melhores de treinamento;

  • funções de ativação mais adequadas;

  • arquiteturas profundas;

  • avanços em visão computacional e reconhecimento de voz.

A rede neural não foi sucedida por uma espécie completamente diferente. Ela cresceu, aprofundou-se e ganhou arquiteturas especializadas.

9. CNNs, RNNs e a longa fila antes do Transformer

As redes convolucionais, ou CNNs, tornaram-se especialmente importantes para imagens. Elas aplicam filtros que ajudam a identificar padrões espaciais.

As redes recorrentes, ou RNNs, foram projetadas para sequências. Elas mantinham uma forma de estado interno, permitindo considerar elementos anteriores. Variantes como LSTM e GRU melhoraram o tratamento de dependências mais longas.

Entretanto, o processamento recorrente é sequencial: para compreender determinada posição, o modelo atravessa estados anteriores. Isso dificulta a paralelização e pode prejudicar relações muito distantes.

Em 2017, o artigo Attention Is All You Need, de Vaswani e colaboradores, apresentou o Transformer: uma arquitetura baseada em mecanismos de atenção, sem depender da recorrência ou convolução usadas pelas arquiteturas dominantes de tradução daquela época.

O Transformer podia relacionar elementos do contexto e realizar grande parte do treinamento de maneira paralela. Isso não tornou o custo pequeno; tornou possível utilizar muito mais computação com eficiência suficiente para escalar.

E aqui está a correção histórica essencial:

O Transformer não substituiu a rede neural. O Transformer é uma arquitetura de rede neural.

10. Atenção: quem deve olhar para quem?

Considere a frase:

O programa tentou abrir o arquivo, mas ele não estava catalogado.

Ao representar a palavra “ele”, o modelo precisa relacioná-la a outras partes da sequência. O mecanismo de atenção calcula quanto cada elemento deve considerar os demais naquele contexto.

No Transformer, cada token gera representações geralmente chamadas de:

  • Query: o que estou procurando;

  • Key: que tipo de informação ofereço;

  • Value: qual conteúdo carrego.

O modelo compara queries e keys para determinar a atenção e combina os values de acordo com esses resultados.

Isso acontece por meio de álgebra linear, não por uma pequena reunião de palavras conscientes discutindo quem merece protagonismo.

11. Do texto aos números: tokens e embeddings

Uma rede não recebe palavras como um ser humano. O texto é quebrado em tokens, que podem ser palavras, partes de palavras, sinais ou outros fragmentos.

"O job terminou com ABEND"

Pode ser transformado conceitualmente em algo parecido com:

["O", " job", " terminou", " com", " AB", "END"]

Cada token é convertido em um vetor numérico chamado embedding. Durante o treinamento, o modelo aprende representações em que elementos usados em contextos relacionados desenvolvem relações matemáticas.

O embedding não é um verbete de dicionário e tampouco uma fotografia do significado. É uma representação útil para a tarefa aprendida.

Posições também importam. “O operador cancelou o job” não significa o mesmo que “o job cancelou o operador”, embora a segunda frase descreva com precisão emocional algumas madrugadas de produção.

12. Como um modelo de linguagem aprende a escrever?

Um grande modelo de linguagem recebe sequências e aprende a prever tokens. Diante de:

IDENTIFICATION DIVISION.
PROGRAM-ID.

ele calcula probabilidades para possíveis continuações:

CLIENTE     31%
PROCESSA    24%
CALCULO     18%
TESTE       11%
outros      16%

Um token é escolhido, acrescentado ao contexto e o processo se repete. Em escala enorme, esse treinamento permite ao modelo aprender regularidades de linguagem, estilos, estruturas de código e associações entre conceitos.

Da previsão sucessiva surgem capacidades como:

  • completar texto;

  • responder perguntas;

  • traduzir;

  • resumir;

  • escrever código;

  • reorganizar informações;

  • adaptar o estilo de uma explicação.

Mas o objetivo fundamental continua sendo produzir uma continuação provável. O modelo não possui, por natureza, um compromisso automático com a verdade. Se uma informação falsa combinar muito bem com o padrão linguístico, ele poderá apresentá-la com a segurança de um consultor que acabou de aprender três siglas durante o almoço.

13. Rede neural, LLM, RAG, chatbot e agente

Esses termos aparecem misturados, mas representam coisas diferentes.

ConceitoO que significa
Rede neuralEstrutura matemática com parâmetros ajustáveis
Deep learningAprendizado com redes neurais profundas
TransformerArquitetura neural centrada em atenção
LLMGrande modelo treinado para trabalhar com linguagem
IA generativaCategoria de sistemas capazes de gerar conteúdo
ChatbotInterface conversacional, com ou sem LLM
RAGRecuperação de fontes para fornecer contexto ao modelo
AgenteSistema que usa modelos, estado, regras e ferramentas para executar etapas

Um LLM sozinho responde a partir dos padrões aprendidos e do contexto recebido.

Um sistema com RAG, ou geração aumentada por recuperação, procura documentos relevantes e os coloca no contexto da solicitação. Isso não torna o modelo infalível, mas permite fundamentar a resposta em manuais, políticas ou bases atuais.

Um agente pode receber uma meta, selecionar ferramentas e executar várias etapas:

  1. localizar o job;

  2. consultar o log;

  3. identificar mensagens relevantes;

  4. pesquisar o manual autorizado;

  5. preparar um diagnóstico;

  6. abrir um chamado após autorização.

O LLM pode ser o motor de raciocínio linguístico, mas o agente completo inclui permissões, ferramentas, memória, controles, validação e auditoria.

14. A IA generativa atual não surgiu do nada

A IA generativa é resultado de uma pilha de avanços:

Álgebra e estatística
        ↓
Perceptrons e redes neurais
        ↓
Backpropagation e melhores técnicas de treinamento
        ↓
Deep learning, grandes datasets e GPUs
        ↓
CNNs, RNNs, LSTMs e atenção
        ↓
Transformers
        ↓
Modelos fundacionais e LLMs
        ↓
RAG, multimodalidade, ferramentas e agentes

Os modelos fundacionais são treinados de maneira ampla e depois adaptados ou orientados para várias tarefas. Em vez de construir um modelo totalmente separado para cada pequena função, aproveita-se uma base geral capaz de trabalhar com múltiplos domínios e modalidades.

Hoje, sistemas generativos podem processar combinações de texto, imagem, áudio e vídeo. Também podem usar busca, executar código e interagir com sistemas externos. Entretanto, cada capacidade adicional amplia a superfície de risco.

Um modelo que apenas sugere uma resposta pode estar errado. Um agente com acesso produtivo pode estar errado e executar o erro.

15. Mais autonomia exige mais controle

Se a rede apenas estima o risco de um job, sua saída pode ser revisada por um operador. Se um agente puder cancelar jobs, alterar datasets ou liberar acessos, serão necessários controles muito mais fortes.

Entre eles:

  • menor privilégio possível;

  • identidade individual e credenciais protegidas;

  • separação entre recomendação e execução;

  • confirmação humana para operações críticas;

  • logs completos e auditáveis;

  • limites de custo, tempo e volume;

  • validação das entradas e saídas;

  • fontes autorizadas;

  • possibilidade de interrupção;

  • testes contra manipulação e instruções maliciosas.

Não devemos entregar RACF SPECIAL a um modelo porque ele escreveu um poema bonito sobre segurança de acesso.

Uma resposta convincente não é uma autorização. Uma probabilidade alta não é uma certeza. Uma demonstração de laboratório não é um controle de produção.

16. Como desenvolver um projeto real de rede neural

1. Defina o problema

Evite “precisamos usar IA”. Prefira:

Queremos identificar jobs com alto risco de falha até uma hora antes da execução para que a operação possa investigá-los.

2. Defina o alvo

O que o modelo deverá prever? Falha ou sucesso? Código do ABEND? Tempo restante? Severidade? Cada formulação produz um projeto diferente.

3. Obtenha dados representativos

Inclua períodos, aplicações e condições variadas. Documente origem, autorização e significado de cada campo.

4. Crie um baseline simples

Compare a rede com uma regra, regressão logística ou árvore de decisão. Sem baseline, qualquer resultado parece uma vitória.

5. Separe os conjuntos corretamente

Treino ensina. Validação ajuda a escolher hiperparâmetros. Teste mede o resultado final. Em séries temporais, preserve a ordem do tempo para evitar que o futuro ensine o passado.

6. Treine e registre os experimentos

Guarde versão dos dados, código, arquitetura, parâmetros e métricas. “Funcionou ontem no notebook do Carlos” não é governança.

7. Avalie o impacto dos erros

Um falso positivo apenas gera uma inspeção desnecessária ou paralisa um processo crítico? Um falso negativo representa atraso ou perda financeira? A métrica deve refletir o risco real.

8. Implante gradualmente

Comece em modo observador. Compare previsões e realidade antes de automatizar decisões.

9. Monitore o modelo

Aplicações, volumes e comportamento operacional mudam. Quando a distribuição dos dados muda, ocorre data drift. Quando muda a relação entre entradas e resultado, podemos ter concept drift.

10. Mantenha um responsável humano

Todo modelo precisa de proprietário, processo de revisão, critério de retirada e plano de contingência.

17. O que um dev júnior realmente precisa aprender?

O iniciante não precisa começar calculando derivadas matriciais numa lousa durante uma tempestade. Precisa compreender progressivamente:

  1. Python básico;

  2. arrays e manipulação de dados;

  3. estatística e probabilidade elementares;

  4. treino, validação e teste;

  5. classificação e regressão;

  6. métricas;

  7. normalização e preparação de dados;

  8. neurônio, pesos, bias e ativação;

  9. loss, gradiente e backpropagation;

  10. overfitting e regularização;

  11. uso de uma biblioteca como Keras ou PyTorch;

  12. implantação, monitoramento e governança.

Depois disso, faz sentido avançar para embeddings, atenção, Transformers, fine-tuning, RAG e agentes.

Programar o laboratório é importante, mas saber questioná-lo é ainda mais valioso:

  • De onde vieram os dados?

  • O que exatamente significa o rótulo?

  • Qual erro é mais perigoso?

  • O modelo está melhor que uma regra simples?

  • Ele continuará funcionando depois de uma mudança?

  • Quem poderá usar a previsão?

  • Quem responde quando ela estiver errada?

18. A explicação de um minuto

Se o café estiver acabando e o gerente pedir uma definição rápida, diga:

Uma rede neural é um modelo matemático formado por camadas de operações com parâmetros ajustáveis. Durante o treinamento, ela recebe exemplos, calcula previsões, mede os erros e modifica seus pesos para melhorar. Redes profundas conseguem aprender representações complexas. Transformers são redes neurais que usam atenção para relacionar partes de um contexto. Grandes modelos generativos usam essa arquitetura e enormes conjuntos de dados para prever sucessivamente tokens, produzindo texto, código e outros conteúdos. Eles não consultam automaticamente a verdade: geram respostas prováveis e, por isso, precisam de fontes, validação, governança e supervisão humana.

Epílogo — O modelo terminou o treinamento, mas ninguém abriu a mudança

A história da inteligência artificial não é a substituição completa de uma tecnologia por outra. É uma pilha arqueológica.

As regras tradicionais continuam sustentando sistemas críticos. A estatística continua explicando relações. O machine learning clássico continua resolvendo problemas com eficiência. As redes neurais ampliaram nossa capacidade de aprender padrões. O deep learning levou essa ideia à escala. O Transformer tornou o contexto e a paralelização protagonistas. A IA generativa colocou tudo isso diante do usuário numa caixa de diálogo aparentemente simples.

Mas simplicidade na interface não significa simplicidade por dentro.

Quando pedimos a um modelo que escreva, resuma ou programe, acionamos uma cadeia construída com dados, vetores, matrizes, pesos, atenção, probabilidades, infraestrutura e escolhas humanas. A resposta pode parecer nova, criativa e até espirituosa, mas continua sendo produzida por um sistema que aprendeu regularidades e calcula continuações.

Esse sistema pode ser extraordinariamente útil. Pode ajudar o dev júnior a compreender uma mensagem, comparar alternativas, criar testes e explorar código. Também pode inventar comandos, confundir versões, ignorar uma exceção e declarar com admirável elegância que o programa inexistente foi compilado com sucesso.

Por isso, a melhor relação com a IA generativa não é submissão nem desprezo. É colaboração supervisionada.

O modelo sugere. O profissional verifica.

O modelo encontra padrões. O profissional interpreta o contexto.

O modelo acelera. O profissional assume a responsabilidade.

E, antes que a rede neural seja promovida de estagiária matemática a operadora autônoma do datacenter, alguém precisa perguntar quem aprovou a mudança, onde está o plano de retorno e por que aquela criatura probabilística está solicitando RACF SPECIAL às três horas da manhã.

Referências para continuar a viagem



sábado, 9 de janeiro de 2021

Redes Neurais: Quando um Programador Descobre que a Inteligência Artificial Não Mora em Python

 

Bellacosa Mainframe em introducao a redes neurais

☕ Um Café no Bellacosa Mainframe

Redes Neurais sem Mistérios para Programadores COBOL

Quando um Programador Descobre que a Inteligência Artificial Não Mora em Python — Ela Está Submersa em um Oceano de Matrizes, Gradientes e Pesos que Ninguém Documentou no COPYBOOK

Existe uma antiga lenda nos corredores refrigerados dos data centers.

Ela afirma que redes neurais são criaturas mágicas criadas por programadores de Python, alimentadas com placas de vídeo, café artesanal e bibliotecas cujo nome muda a cada quinze minutos.

Segundo essa lenda, basta escrever:

model.fit(x, y)

Depois disso, luzes piscam, ventiladores entram em rotação de emergência, a conta da nuvem sobe até a estratosfera e uma inteligência artificial nasce completamente formada, como uma deusa tecnológica saindo de uma concha de silício.

Naturalmente, isso é uma bobagem.

Redes neurais não são fundamentalmente sobre Python, TensorFlow, PyTorch, notebooks, APIs ou data scientists usando moletons em ambientes climatizados.

Redes neurais são, antes de tudo, matemática executada muitas vezes.

Muitas mesmo.

Milhões, bilhões ou trilhões de vezes.

O código apenas organiza o mergulho. A matemática é o oceano.

Nesta expedição do Bellacosa Mainframe ao Fundo do Mar, vamos embarcar em um submarino experimental, descer pelas camadas abissais da inteligência artificial e investigar seis estruturas fundamentais:

  1. Transformações lineares

  2. Funções de ativação

  3. Funções de custo

  4. Retropropagação

  5. Métodos de otimização

  6. Matrizes e vetores

Também encontraremos probabilidades, gradientes, redes profundas, neurônios artificiais, parâmetros perdidos e talvez um programador COBOL aposentado vivendo dentro de uma LPAR esquecida desde 1987.

Prepare o terminal 3270.

Verifique a pressão do casco.

E, por segurança, não execute nada diretamente em produção.


Capítulo 1 — Descendo Além da Superfície do Código

Na superfície, uma rede neural parece um programa.

Ela recebe dados, processa informações e produz uma resposta.

Por exemplo:

ENTRADA:
Imagem de um animal

PROCESSAMENTO:
Rede neural

SAÍDA:
92% de probabilidade de ser um gato

Para quem olha de longe, parece apenas mais um sistema.

Entrada, processamento e saída.

Nada que um programador COBOL não tenha visto desde que os discos eram grandes como mesas de jantar e os operadores usavam jalecos brancos para trocar fitas magnéticas.

A diferença está no modo como as regras são construídas.

Em um programa tradicional, alguém escreve explicitamente:

IF ORELHAS-PONTUDAS
   AND TEM-BIGODES
   AND MIA
       MOVE 'GATO' TO TIPO-ANIMAL
END-IF

Em uma rede neural, ninguém escreve diretamente essas regras.

A rede recebe muitos exemplos de gatos e outros animais. Durante o treinamento, ela ajusta milhões de valores numéricos até encontrar combinações que permitam separar gatos, cachorros, capivaras e, em casos mais sofisticados, gerentes de projeto pedindo estimativas para ontem.

Esses valores numéricos são chamados de pesos.

Treinar uma rede neural significa encontrar pesos adequados.

Portanto, a inteligência não está em uma sequência de IF, ELSE ou EVALUATE.

Ela está distribuída por uma grande coleção de números.

Em termos de mainframe, seria como se as regras de negócio não estivessem claramente escritas no PROCEDURE DIVISION, mas espalhadas por bilhões de campos COMP-1, COMP-2 e matrizes carregadas em memória.

Um cenário que faria qualquer auditor pedir transferência imediata para o departamento de patrimônio.


Capítulo 2 — O Neurônio Artificial e a Transformação Linear

O componente básico de uma rede neural é o neurônio artificial.

Apesar do nome grandioso, ele começa com uma operação bastante simples:

z = Wx + b

Onde:

  • x representa os valores de entrada;

  • W representa os pesos;

  • b representa o bias, ou viés;

  • z representa o resultado da transformação.

Vamos traduzir isso para uma linguagem compreensível por um programador COBOL iniciante.

Imagine um sistema que tenta estimar o preço de uma casa.

Temos três entradas:

Área:        120 m²
Quartos:       3
Garagens:      2

A rede atribui um peso para cada característica:

Peso da área:       2.000
Peso dos quartos:  15.000
Peso da garagem:    8.000

O cálculo seria aproximadamente:

120 × 2.000 = 240.000
  3 × 15.000 = 45.000
  2 × 8.000 = 16.000

Somando:

240.000 + 45.000 + 16.000 = 301.000

Depois acrescentamos o bias:

301.000 + 12.000 = 313.000

A previsão da rede seria:

R$ 313.000

Em COBOL conceitual:

COMPUTE PRECO-ESTIMADO =
       (AREA       * PESO-AREA)
     + (QUARTOS    * PESO-QUARTOS)
     + (GARAGENS   * PESO-GARAGENS)
     + BIAS
END-COMPUTE.

Nada sobrenatural aconteceu.

A rede apenas realizou uma soma ponderada.

A palavra “ponderada” significa que cada entrada tem uma importância diferente.

Se o peso da área for grande, a área influencia bastante o resultado.

Se o peso da garagem for próximo de zero, a garagem praticamente não importa.

Se o peso for negativo, determinada característica pode reduzir o valor previsto.

O grande mistério não está no cálculo.

Está em descobrir os pesos corretos.


Capítulo 3 — O Bias: O Pequeno Parâmetro que Move Montanhas

O bias costuma ser tratado como um detalhe, mas é fundamental.

Sem ele, temos:

z = Wx

Com ele:

z = Wx + b

Geometricamente, o bias permite deslocar uma reta, um plano ou uma fronteira de decisão.

Imagine uma reta que obrigatoriamente passa pelo ponto zero.

Sem bias, a rede fica presa a essa restrição.

Com bias, ela pode mover a reta para cima, para baixo ou para outra região do espaço.

Uma analogia para o mundo COBOL seria um valor padrão ou ajuste operacional que não depende diretamente do registro de entrada.

Por exemplo:

COMPUTE VALOR-FINAL =
       VALOR-BASE
     + TAXA-FIXA
END-COMPUTE.

A TAXA-FIXA não nasceu dos dados do cliente. Ela é um deslocamento adicional do cálculo.

O bias faz algo semelhante.

Curiosidade: em muitas redes modernas, existem milhões ou bilhões de pesos, mas os biases continuam discretamente trabalhando, como aquele programa utilitário de 1979 que ninguém menciona, mas cuja remoção derruba o fechamento contábil de três países.


Capítulo 4 — Por Que Uma Rede Precisa de Funções de Ativação?

Se uma rede usasse apenas transformações lineares, ela teria um problema grave.

Imagine várias camadas:

Camada 1: z1 = W1x + b1
Camada 2: z2 = W2z1 + b2
Camada 3: z3 = W3z2 + b3

Mesmo empilhando muitas dessas operações, o resultado final ainda poderia ser reduzido a uma única transformação linear.

Seria como escrever mil programas COBOL que apenas movem campos de uma área para outra e esperar que, por algum milagre, eles desenvolvam consciência.

Não desenvolverão.

Talvez produzam um arquivo de saída com LRECL incorreto, mas consciência não.

Para aprender padrões complexos, a rede precisa de não linearidade.

É aí que entram as funções de ativação.


Capítulo 5 — ReLU: A Portinhola do Submarino

A função ReLU é definida assim:

f(x) = max(0, x)

Na prática:

-10 vira 0
 -3 vira 0
  0 vira 0
  4 vira 4
 15 vira 15

Ela corta valores negativos e mantém os positivos.

É simples, rápida e eficiente.

Em pseudocódigo COBOL:

IF VALOR-ENTRADA > 0
    MOVE VALOR-ENTRADA TO VALOR-SAIDA
ELSE
    MOVE ZERO TO VALOR-SAIDA
END-IF.

A ReLU permite que diferentes neurônios sejam ativados para diferentes tipos de entrada.

Alguns podem reagir a linhas verticais em uma imagem.

Outros, a bordas.

Outros, a formas mais complexas.

Em uma rede profunda, as primeiras camadas detectam padrões simples. As camadas posteriores combinam esses padrões.

Em reconhecimento de imagens, poderíamos ter:

Camada inicial:
Detecta bordas

Camada intermediária:
Detecta olhos, orelhas e texturas

Camada profunda:
Detecta um rosto ou um animal

Camada final:
Classifica como gato, cachorro ou entidade fiscalizadora

A não linearidade permite que a rede construa fronteiras complexas.

Sem ela, o submarino só poderia navegar em linha reta.

E todos sabemos que navegar em linha reta no fundo do oceano é uma ótima maneira de conhecer pessoalmente uma montanha submarina.


Capítulo 6 — Sigmoid: O Medidor de Probabilidade

A função sigmoid transforma qualquer número em um valor entre zero e um.

Sua fórmula é:

          1
f(x) = --------
       1 + e⁻ˣ

O resultado pode ser interpretado como probabilidade.

Por exemplo:

0,01 = probabilidade muito baixa
0,50 = incerteza
0,99 = probabilidade muito alta

Em um sistema de detecção de fraude:

0,03 = provavelmente legítimo
0,91 = fortemente suspeito

Em um sistema médico:

0,87 = alta probabilidade da condição analisada

Atenção: uma probabilidade produzida por um modelo não é uma verdade absoluta.

Um valor de 0,95 não significa que a máquina possui certeza metafísica.

Significa que, segundo os parâmetros, os dados e o treinamento, aquele resultado recebeu uma pontuação elevada.

Modelos podem estar mal calibrados.

Podem ter recebido dados tendenciosos.

Podem falhar fora do cenário em que foram treinados.

Uma rede neural pode estar 99% confiante e completamente errada.

Exatamente como um analista júnior executando DELETE sem WHERE.


Capítulo 7 — Tanh: O Oceano Entre -1 e 1

A função tangente hiperbólica, ou tanh, produz valores entre -1 e 1.

-1 ≤ tanh(x) ≤ 1

Ela foi bastante usada em redes neurais recorrentes e ainda aparece em diversas arquiteturas.

Diferentemente da sigmoid, cujo centro está próximo de 0,5, a tanh é centrada em zero.

Isso pode facilitar certos tipos de otimização.

Exemplo:

Entrada negativa forte → próximo de -1
Entrada neutra         → próximo de 0
Entrada positiva forte → próximo de 1

Ela funciona como uma espécie de indicador de direção.

Negativo, neutro ou positivo.

Talvez fosse útil em reuniões de projeto:

-1 = prazo impossível
 0 = ninguém entendeu o requisito
 1 = o gerente já anunciou a entrega ao cliente

Capítulo 8 — A Função de Custo: O Sonar do Erro

Uma rede neural precisa saber se sua previsão foi boa ou ruim.

Para isso existe a função de custo, também chamada de:

  • função de perda;

  • loss function;

  • objective function.

A função de custo compara a previsão do modelo com a resposta correta.

Ela produz um número.

Quanto menor esse número, melhor o desempenho.

O treinamento busca reduzir a perda.

Em outras palavras, a função de custo é o sonar do submarino.

Ela informa se estamos nos aproximando do objetivo ou indo diretamente para uma fossa oceânica sem retorno.


Capítulo 9 — Mean Squared Error

O erro quadrático médio, conhecido como MSE, é muito usado em problemas de regressão.

Regressão é quando queremos prever um valor contínuo, como:

  • preço;

  • temperatura;

  • consumo;

  • demanda;

  • tempo;

  • faturamento.

A fórmula é:

        1
MSE = ----- Σ(ŷᵢ - yᵢ)²
        n

Onde:

  • ŷ é a previsão;

  • y é o valor verdadeiro;

  • n é a quantidade de exemplos.

Imagine:

Valor real: 80
Previsão:   70
Erro:       -10
Erro²:      100

Outro exemplo:

Valor real: 80
Previsão:   78
Erro:        -2
Erro²:        4

O segundo resultado é muito melhor.

Por que elevar o erro ao quadrado?

Primeiro, porque erros negativos e positivos não se anulam.

Sem o quadrado:

Erro 1: +10
Erro 2: -10
Soma:    0

Pareceria que o modelo está perfeito, embora tenha errado duas vezes.

Segundo, porque o quadrado pune erros grandes com mais severidade.

Erro 2  → 4
Erro 10 → 100
Erro 20 → 400

Isso é útil quando grandes desvios são especialmente prejudiciais.

Mas existe uma consequência: o MSE é sensível a valores extremos.

Um único erro gigantesco pode dominar a função de custo.

Portanto, escolher uma loss não é um detalhe decorativo.

É uma decisão de projeto.


Capítulo 10 — Cross-Entropy: O Tribunal da Classificação

Para classificação, uma função muito usada é a entropia cruzada.

Imagine que a rede analise uma imagem e produza:

Gato:      0,80
Cachorro:  0,15
Capivara:  0,05

Se a resposta correta for gato, a perda será relativamente baixa.

Agora imagine:

Gato:      0,01
Cachorro:  0,04
Capivara:  0,95

Se a imagem for de um gato, a perda será enorme.

A cross-entropy pune especialmente situações em que o modelo está muito confiante na resposta errada.

Isso é importante.

Errar com dúvida é ruim.

Errar com arrogância estatística é pior.

Em linguagem corporativa:

“Não tenho certeza, mas talvez seja um gato.”

produz menos preocupação do que:

“Com absoluta certeza é uma capivara.”

quando o animal está miando em cima do teclado.


Capítulo 11 — Forward Pass: O Mergulho de Ida

Quando os dados entram na rede e percorrem todas as camadas até gerar uma previsão, ocorre o forward pass.

Exemplo:

Entrada
   ↓
Transformação linear
   ↓
Ativação
   ↓
Transformação linear
   ↓
Ativação
   ↓
Saída
   ↓
Cálculo da perda

Esse é o caminho de ida.

Em uma rede de classificação de imagens:

Pixels
   ↓
Características simples
   ↓
Formas intermediárias
   ↓
Padrões complexos
   ↓
Probabilidades das classes

No treinamento, o forward pass gera a previsão e permite calcular o erro.

Mas ainda falta responder à pergunta mais difícil:

quais pesos causaram esse erro?

É aqui que encontramos a criatura mais temida das profundezas.

A retropropagação.


Capítulo 12 — Backpropagation: A Investigação do ABEND Matemático

A retropropagação, ou backpropagation, calcula quanto cada peso contribuiu para o erro.

Imagine uma rede com cem milhões de parâmetros.

Ela gera uma previsão incorreta.

Quem foi o culpado?

Um peso?

Uma camada?

Um bias?

Todos?

A resposta correta é: muitos parâmetros contribuíram em diferentes proporções.

O backpropagation percorre a rede de trás para frente, usando a regra da cadeia do cálculo diferencial.

Ele calcula derivadas como:

∂L
───
∂W

Isso significa:

Quanto a perda L muda quando o peso W sofre uma pequena alteração?

Se uma pequena mudança em determinado peso provoca uma grande mudança na perda, esse peso tem forte influência.

Se quase nada muda, o peso tem pouca influência naquele exemplo.

Para um programador COBOL, pense em uma análise de causa de ABEND.

O erro aparece no final:

S0C7

Mas a origem pode estar em:

  • um campo lido incorretamente;

  • uma redefinição inadequada;

  • um arquivo com layout diferente;

  • um sinal inválido;

  • um movimento alfanumérico para campo numérico;

  • um registro criado por um programa de 1992 que ninguém ousa recompilar.

O backpropagation faz algo conceitualmente semelhante.

Ele parte do erro final e investiga o caminho inverso.

Loss
  ↑
Saída
  ↑
Camada final
  ↑
Camada intermediária
  ↑
Camada inicial
  ↑
Pesos

Só que, em vez de abrir um dump, ele usa derivadas.


Capítulo 13 — A Regra da Cadeia

A regra da cadeia permite calcular derivadas de funções compostas.

Se:

x → a → b → c → perda

então a influência de x sobre a perda depende de todas as etapas intermediárias.

De forma simplificada:

∂L   ∂L   ∂c   ∂b   ∂a
── = ── × ── × ── × ──
∂x   ∂c   ∂b   ∂a   ∂x

A rede é uma composição de funções.

Cada camada transforma a saída da camada anterior.

A regra da cadeia permite decompor o impacto de cada transformação.

É como rastrear um dado em um sistema legado:

Arquivo de entrada
   ↓
Programa A
   ↓
Arquivo temporário
   ↓
Programa B
   ↓
Tabela Db2
   ↓
Programa C
   ↓
Relatório incorreto

Para descobrir a causa, percorremos o fluxo de trás para frente.

No mundo neural, cada ligação do fluxo possui uma derivada.


Capítulo 14 — Gradiente: A Direção da Montanha Submarina

O gradiente reúne as derivadas de todos os parâmetros.

Ele aponta para a direção em que a perda cresce mais rapidamente.

Se queremos reduzir a perda, caminhamos na direção oposta.

Imagine uma paisagem montanhosa no fundo do oceano.

O submarino está em uma região elevada.

O objetivo é encontrar o vale mais profundo.

O gradiente informa onde fica a subida mais inclinada.

Então seguimos no sentido contrário.

Esse é o princípio do gradient descent, ou descida do gradiente.


Capítulo 15 — Gradient Descent: Corrigindo os Pesos

A atualização básica é:

θₜ₊₁ = θₜ - η∇L(θₜ)

Onde:

  • θ representa os parâmetros;

  • η representa a taxa de aprendizado;

  • ∇L representa o gradiente da perda.

Em palavras:

Novo parâmetro =
Parâmetro atual
-
Taxa de aprendizado
×
Gradiente

Em pseudocódigo COBOL:

COMPUTE NOVO-PESO =
        PESO-ATUAL
      - (TAXA-APRENDIZADO * GRADIENTE)
END-COMPUTE.

O processo se repete:

1. Faz previsão
2. Calcula erro
3. Calcula gradientes
4. Atualiza pesos
5. Faz nova previsão
6. Calcula novo erro
7. Repete

Depois de muitas repetições, os pesos tendem a produzir previsões melhores.

Isso é aprender.

Não existe uma pequena entidade consciente dentro da GPU dizendo:

“Agora finalmente compreendi a essência filosófica dos gatos.”

Existe apenas um processo iterativo de redução de erro.

O que não deixa de ser impressionante.


Capítulo 16 — Learning Rate: O Controle de Profundidade

A taxa de aprendizado define o tamanho do passo usado para atualizar os pesos.

Se for pequena demais:

Aprendizado lento
Treinamento caro
Muitas iterações

Se for grande demais:

Oscilações
Instabilidade
Perda divergente
Treinamento fracassado

Imagine tentar chegar ao fundo de um vale.

Com passos de um centímetro, talvez você chegue, mas a empresa encerra o orçamento antes.

Com saltos de cem metros, você atravessa o vale e bate no paredão oposto.

A taxa de aprendizado precisa ser adequada.

Em treinamentos modernos, ela frequentemente muda ao longo do processo.

Pode começar maior e diminuir depois.

Isso permite avançar rapidamente no início e fazer ajustes delicados no final.

É como aproximar um submarino de uma estação submersa:

  • velocidade alta em mar aberto;

  • velocidade moderada perto dos recifes;

  • movimento lento na hora de atracar;

  • desespero absoluto quando alguém percebe que o manual está em japonês.


Capítulo 17 — Momentum, RMSProp e Adam

O gradient descent básico funciona, mas pode ser lento ou instável.

Por isso surgiram variantes.

Momentum

O momentum mantém parte da direção das atualizações anteriores.

É semelhante a uma bola descendo uma encosta.

Ela acumula velocidade.

Se o gradiente continua apontando na mesma direção, o movimento acelera.

Isso ajuda a atravessar regiões planas e reduz certas oscilações.

RMSProp

O RMSProp ajusta o tamanho do passo para cada parâmetro com base no histórico recente dos gradientes.

Parâmetros com gradientes grandes podem receber passos menores.

Parâmetros com gradientes pequenos podem receber passos maiores.

Adam

O Adam combina ideias de momentum e adaptação individual da taxa de aprendizado.

Ele mantém estimativas de:

  • média dos gradientes;

  • média dos quadrados dos gradientes.

É um dos otimizadores mais populares.

O AdamW é uma variante muito usada em Transformers e modelos de linguagem porque trata melhor a regularização por decaimento de pesos.

Em termos marítimos:

  • gradient descent é um barco com remo;

  • momentum adiciona correnteza;

  • RMSProp adiciona controle automático de estabilidade;

  • Adam instala sonar, piloto automático e um comandante excessivamente confiante.


Capítulo 18 — Matrizes: O Verdadeiro Motor da IA

Até agora falamos de neurônios individualmente.

Mas uma rede moderna não calcula um neurônio por vez.

Ela processa milhares ou milhões de valores simultaneamente.

É aí que entram as matrizes.

Considere vários exemplos organizados em uma matriz X.

Os pesos formam outra matriz W.

A operação:

Z = WX + b

pode calcular as saídas de muitos neurônios para muitos exemplos de uma só vez.

Imagine um lote com 1.000 imagens.

Em vez de processar:

Imagem 1
Imagem 2
Imagem 3
...
Imagem 1000

uma por uma, podemos organizá-las em uma estrutura matricial e executar grandes multiplicações em paralelo.

Isso é chamado de processamento em batch.

Para um programador COBOL, seria como substituir um fluxo puramente registro a registro por uma operação vetorizada capaz de processar grandes blocos de dados simultaneamente.

O mainframe tradicional se destaca em alto volume transacional, I/O, confiabilidade e processamento batch.

As GPUs se destacam em cálculos paralelos repetitivos, especialmente multiplicações de matrizes.

São especializações diferentes.

A GPU não é “mais inteligente” que a CPU.

Ela foi desenhada para realizar muitas operações semelhantes ao mesmo tempo.

Uma rede neural moderna precisa exatamente disso.


Capítulo 19 — Vetores, Matrizes e Tensores

Um vetor é uma sequência de números.

[1, 2, 3]

Uma matriz é uma grade de números.

[1 2 3]
[4 5 6]

Um tensor é uma generalização para mais dimensões.

Uma imagem colorida pode ser representada como um tensor:

Altura × Largura × Canais

Por exemplo:

640 × 480 × 3

Os três canais normalmente representam vermelho, verde e azul.

Um lote de imagens adiciona outra dimensão:

Batch × Altura × Largura × Canais

Um modelo de linguagem trabalha com tensores contendo:

  • lotes de frases;

  • posições dos tokens;

  • dimensões dos embeddings;

  • cabeças de atenção;

  • camadas;

  • estados intermediários.

Quando alguém diz que um LLM está “pensando”, dentro do hardware há matrizes e tensores sendo multiplicados, normalizados, transformados e reutilizados.

É uma festa matemática sem música, sem comida e com consumo elétrico suficiente para assustar o setor de infraestrutura.


Capítulo 20 — CNNs, Transformers e LLMs Continuam Usando os Mesmos Pilares

As arquiteturas mudam, mas os fundamentos permanecem.

CNNs

Redes convolucionais são especializadas em dados espaciais, principalmente imagens.

Elas utilizam filtros que percorrem regiões da imagem.

Esses filtros aprendem a detectar:

  • bordas;

  • texturas;

  • formas;

  • padrões visuais.

RNNs

Redes recorrentes processam sequências mantendo um estado interno.

Foram muito usadas em:

  • texto;

  • fala;

  • séries temporais.

Elas enfrentam dificuldades com sequências longas, incluindo gradientes que desaparecem ou explodem.

Transformers

Transformers usam mecanismos de atenção.

A atenção permite que cada elemento de uma sequência avalie sua relação com outros elementos.

Em uma frase, uma palavra pode “olhar” para palavras anteriores e posteriores para construir contexto.

LLMs

Grandes modelos de linguagem são, em essência, Transformers de grande escala treinados com enormes volumes de texto.

Eles aprendem a prever tokens.

Exemplo:

“O programador abriu o terminal e executou o...”

O modelo calcula probabilidades:

programa      32%
comando       25%
job           18%
JCL           12%
submarino      3%

Dependendo do contexto do Bellacosa Mainframe, “submarino” pode subir perigosamente no ranking.

Mesmo em um LLM gigantesco, continuam presentes:

  • transformações lineares;

  • matrizes;

  • ativações;

  • funções de perda;

  • backpropagation;

  • otimização.

A escala muda.

Os princípios não.


Capítulo 21 — O Sétimo Pilar: Probabilidade

A imagem original apresenta seis blocos fundamentais, mas existe um sétimo elemento atravessando quase toda a inteligência artificial: a probabilidade.

Modelos frequentemente não produzem certezas.

Produzem distribuições.

Em uma classificação:

Classe A: 0,70
Classe B: 0,20
Classe C: 0,10

Em um modelo de linguagem:

Próximo token:
“sistema”    0,28
“programa”   0,21
“arquivo”    0,14
“oceano”     0,05

A escolha do próximo token pode depender de parâmetros como:

  • temperatura;

  • top-k;

  • top-p;

  • amostragem;

  • penalidade por repetição.

Temperatura baixa produz respostas mais previsíveis.

Temperatura alta produz maior variedade e também maior risco de a embarcação matemática aparecer em um porto que não constava no mapa.


Capítulo 22 — Por Que Modelos Falham?

Compreender a matemática ajuda a entender as falhas.

Dados ruins

Se os dados de treinamento estiverem incorretos, incompletos ou enviesados, o modelo aprenderá padrões problemáticos.

Overfitting

O modelo pode decorar os dados de treinamento em vez de aprender padrões generalizáveis.

É como um programador que memoriza um JCL específico, mas não entende DISP, DCB, COND ou catálogo.

Quando o nome do dataset muda, ele entra em colapso emocional.

Underfitting

O modelo pode ser simples demais ou insuficientemente treinado.

Ele não consegue capturar o padrão.

Gradiente desaparecendo

Em redes muito profundas, os gradientes podem ficar progressivamente pequenos.

As primeiras camadas praticamente deixam de aprender.

Gradiente explodindo

Os gradientes podem crescer demais e causar instabilidade numérica.

Distribuição diferente

Um modelo treinado em determinado tipo de dado pode falhar quando encontra dados muito diferentes.

Um classificador treinado apenas com gatos domésticos pode confundir um felino selvagem, uma escultura ou um chinelo peludo.

Objetivo mal definido

O modelo otimiza aquilo que a função de custo mede.

Se a função mede a coisa errada, o modelo pode melhorar matematicamente e piorar operacionalmente.

Esta é uma lição importante:

A rede não conhece a intenção humana. Ela apenas otimiza o objetivo fornecido.


Capítulo 23 — Passo a Passo de um Treinamento Completo

Vamos organizar toda a operação.

Etapa 1 — Preparar os dados

Os dados precisam ser:

  • coletados;

  • limpos;

  • organizados;

  • normalizados;

  • separados em treinamento, validação e teste.

Etapa 2 — Inicializar os pesos

Os pesos começam com valores pequenos, normalmente aleatórios.

Não se costuma inicializar tudo com zero, pois isso pode fazer muitos neurônios aprenderem exatamente a mesma coisa.

Etapa 3 — Executar o forward pass

A entrada atravessa as camadas.

x → Wx+b → ativação → próxima camada → saída

Etapa 4 — Calcular a loss

A previsão é comparada com o valor correto.

Etapa 5 — Executar backpropagation

As derivadas são calculadas de trás para frente.

Etapa 6 — Atualizar os pesos

O otimizador aplica as correções.

Etapa 7 — Repetir

O processo ocorre para muitos lotes.

Uma passagem completa por todos os dados é chamada de época, ou epoch.

Etapa 8 — Validar

O modelo é testado em dados que não estão sendo usados diretamente para atualizar os pesos.

Etapa 9 — Testar

Ao final, o desempenho é avaliado em um conjunto separado.

Etapa 10 — Colocar em produção

Aqui surge a parte que os diagramas acadêmicos frequentemente omitem:

  • monitoramento;

  • versionamento;

  • custo;

  • segurança;

  • privacidade;

  • mudança de dados;

  • latência;

  • explicabilidade;

  • governança;

  • usuários tentando enviar arquivos de 18 GB por uma tela projetada para 5 MB.


Capítulo 24 — Dicas para o Programador COBOL que Quer Entender IA

Não tente aprender tudo de uma vez.

Comece por vetores e matrizes.

Depois estude funções.

Em seguida, derivadas e gradientes.

Aprenda o significado antes de decorar fórmulas.

Implemente uma regressão linear simples.

Depois crie um neurônio.

Em seguida, monte uma rede pequena.

Faça cálculos manualmente com poucos valores.

Use planilhas ou programas curtos para observar cada etapa.

Compare previsão, erro, gradiente e atualização.

Um bom exercício é construir um modelo que aprenda uma relação simples:

y = 2x + 1

Comece com peso e bias aleatórios.

Calcule a previsão.

Calcule o erro.

Atualize os parâmetros.

Observe o peso se aproximar de 2 e o bias de 1.

Esse pequeno experimento ensina mais do que executar uma biblioteca gigantesca sem compreender o que acontece.


Easter Egg — O Programa COBOL que Aprendeu a Mentir

Diz a lenda que, em um laboratório submarino do Atlântico Sul, um programador decidiu implementar uma rede neural em COBOL.

O sistema deveria prever falhas em jobs batch.

Após meses de treinamento, o modelo começou a produzir:

JOB NORMAL
NENHUM RISCO DETECTADO

Poucos segundos antes de cada S0C7.

Os cientistas ficaram perplexos.

Investigaram os pesos.

Revisaram a loss.

Analisaram os gradientes.

Finalmente descobriram o problema.

Durante o treinamento, sempre que o modelo indicava risco, o gerente cancelava a execução para evitar incidentes.

Como consequência, o dataset registrava:

Previsão de risco → nenhum ABEND observado
Previsão segura   → ABEND observado

O modelo concluiu que avisar sobre riscos estava associado a alarmes falsos.

Assim, aprendeu a permanecer otimista.

A rede não estava mentindo.

Estava apenas otimizando fielmente um processo mal documentado.

Moral da história:

antes de culpar a inteligência artificial, verifique o dataset, a regra de negócio e o gerente que alterou o fluxo sem atualizar a documentação.


Conclusão — O Que Existe no Fundo do Oceano Neural?

Depois de descer pelas camadas da inteligência artificial, encontramos algo curioso.

Não havia magia.

Não havia consciência escondida entre as placas de vídeo.

Não havia um pequeno matemático operando alavancas dentro do data center.

Encontramos:

  • somas;

  • multiplicações;

  • vetores;

  • matrizes;

  • funções;

  • derivadas;

  • probabilidades;

  • erros;

  • ajustes;

  • repetições.

Uma rede neural é uma enorme composição de funções matemáticas.

Ela recebe números, transforma esses números, compara resultados, calcula erros e ajusta seus parâmetros.

O poder surge da escala.

Uma transformação linear é simples.

Uma função de ativação é simples.

Uma derivada isolada é simples.

Uma atualização de peso é simples.

Mas quando bilhões dessas operações são organizadas em muitas camadas, executadas sobre grandes volumes de dados e repetidas milhares de vezes, padrões complexos começam a emergir.

A rede aprende a reconhecer imagens, traduzir idiomas, prever sequências, gerar textos, sintetizar vozes e produzir imagens.

Para o programador COBOL, talvez a maior revelação seja esta:

Redes neurais não pertencem a uma linguagem de programação.

Elas pertencem à matemática.

Python é apenas uma interface popular.

A GPU é apenas uma máquina especializada.

O framework é apenas uma camada operacional.

No fundo do oceano, abaixo de todo o marketing, dos nomes impressionantes e das promessas de inteligência artificial geral, continua existindo a mesma equação:

z = Wx + b

Depois vem a ativação.

Depois o erro.

Depois o gradiente.

Depois a correção.

Depois tudo se repete.

É uma viagem longa, profunda e fascinante.

E, como em todo sistema legado realmente importante, quanto mais você mergulha, mais percebe que a parte visível era apenas a superfície.

Em algum lugar abaixo da última camada, uma matriz gigantesca continua sendo multiplicada.

Um gradiente percorre o caminho inverso.

Um peso sofre uma pequena correção.

E um modelo se torna, por uma fração microscópica, um pouco menos errado.

O que, convenhamos, já é mais progresso do que muitas reuniões de alinhamento conseguem produzir em uma tarde inteira.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...