Validation Data
Os dados de validação são uma divisão reservada, avaliada durante o desenvolvimento para ajustar hiperparâmetros, escolher checkpoints e detectar sobreajuste antes do teste final.
Os dados de validação são uma parte dos dados anotados que não é usada no treino e é avaliada repetidamente durante o desenvolvimento para comparar modelos, ajustar hiperparâmetros, escolher checkpoints e detetar o sobreajuste. O modelo nunca atualiza os seus pesos com base nesses dados, pelo que a pontuação de validação mostra até que ponto o que aprendeu com os dados de treino se aplica a imagens que ainda não viu. «Conjunto de validação» e «conjunto de desenvolvimento» (dev) são sinónimos. Cada decisão baseada nas pontuações de validação ajusta um pouco mais o modelo a essa divisão específica; por isso, reserva-se um conjunto de teste separado para a estimativa final e imparcial.
Divisões de treinamento, validação e teste#
Um conjunto de dados anotados costuma ser dividido em três partes:
- Conjunto de treino: Os exemplos aos quais o otimizador ajusta os pesos, normalmente 70 a 80 por cento dos dados.
- Conjunto de validação: Avaliado após cada execução de treino ou época para orientar decisões como a taxa de aprendizagem, o tamanho do modelo, a intensidade do aumento de dados e o momento de parar.
- Conjunto de teste: Avaliado uma vez, depois de todas as decisões estarem definidas, para comunicar o desempenho esperado no mundo real.
As divisões 70/15/15 ou 80/10/10 são comuns em conjuntos de dados com milhares de imagens. Conjuntos de dados muito grandes precisam de uma proporção menor para obter estimativas fiáveis: o ImageNet-1k reserva 50.000 imagens para validação face a 1.281.167 imagens de treino. Como os rótulos de teste não são públicos, a precisão no ImageNet é convencionalmente comunicada com base nesse conjunto de validação, que passa assim a servir de conjunto de teste.
Um conjunto de validação útil corresponde aos dados que o modelo encontrará na implantação e não compartilha nenhum dado com o conjunto de treinamento. Divisões aleatórias no nível da imagem causam vazamento de informações quando várias imagens vêm do mesmo vídeo, paciente ou local, pois o modelo pode reconhecer a cena em vez do objeto. A divisão por grupos, como por paciente ou sessão de gravação, evita esse vazamento de dados.
Ajuste de hiperparâmetros e seleção de modelos#
Os pesos são aprendidos por descida do gradiente, enquanto os hiperparâmetros são escolhidos treinando vários candidatos e selecionando aquele com a melhor pontuação de validação. As pontuações de treino não permitem fazer esta escolha, porque os modelos maiores e treinados durante mais tempo quase sempre se ajustam melhor aos dados de treino. O script de scikit-learn abaixo ajusta a profundidade de uma árvore de decisão no conjunto de dados de dígitos incluído:
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Split 1,797 digit images 60/20/20 into training, validation, and test sets
X, y = load_digits(return_X_y=True)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, test_size=0.4, random_state=0, stratify=y)
X_val, X_test, y_val, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=0, stratify=y_rest)
# Fit one model per candidate tree depth and score each on the validation set
val_scores = {}
for depth in (2, 4, 8, 16):
model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
val_scores[depth] = model.score(X_val, y_val)
print(f"depth {depth}: train {model.score(X_train, y_train):.3f}, validation {val_scores[depth]:.3f}")
# Refit the winner and score the test set exactly once
best = max(val_scores, key=val_scores.get)
final = DecisionTreeClassifier(max_depth=best, random_state=0).fit(X_train, y_train)
print(f"Chosen depth {best}: test accuracy {final.score(X_test, y_test):.3f}")A precisão no treino continua a aumentar com a profundidade e chega a 1.000 na profundidade 16, enquanto a precisão na validação atinge um máximo de 0.836 na profundidade 8 e desce para 0.825 na profundidade 16, quando a árvore começa a memorizar os dados. A validação seleciona a profundidade 8, que obtém uma pontuação de 0.853 no conjunto de teste não utilizado.
Paragem antecipada e seleção de checkpoints#
Os ciclos de treino de aprendizagem profunda costumam avaliar o conjunto de validação após cada época. A perda de treino continua a diminuir à medida que a rede se ajusta cada vez mais aos dados de treino, mas a perda ou a precisão na validação acaba por estabilizar e depois piorar. A paragem antecipada termina o treino quando a pontuação de validação deixa de melhorar durante um número definido de épocas, chamado paciência, e mantém os pesos da melhor época.
Por predefinição, o treino do YOLO26 no Ultralytics executa este ciclo: avalia a divisão val do YAML do conjunto de dados após cada época, guarda a época com a melhor pontuação de validação (mAP50-95 para deteção) como best.pt e para após patience épocas sem melhorias, 100 por predefinição.
from ultralytics import YOLO
# Carrega um detector nano YOLO26 pré-treinado
model = YOLO("yolo26n.pt")
# Validar na divisão val após cada época e parar após 10 épocas sem melhorias
results = model.train(data="coco8.yaml", epochs=50, patience=10)Validação cruzada para conjuntos de dados pequenos#
Quando há poucos dados, uma única divisão reservada desperdiça exemplos e produz uma pontuação variável. A validação cruzada K-fold divide os dados em K partições, treina K modelos, cada um com uma partição diferente reservada para validação, e calcula a média das K pontuações, pelo que cada exemplo é usado tanto no treino como na validação. Cinco e dez partições são comuns, e as variantes estratificadas e agrupadas mantêm as proporções das classes equilibradas ou as imagens relacionadas juntas em cada partição. Um conjunto de teste continua a ficar fora de todas as partições.
Dados de validação e termos relacionados#
- Dados de teste: Avaliados uma vez, no final. Reutilizá-los para tomar decisões transforma-os num segundo conjunto de validação, e a respetiva pontuação deixa de ser uma estimativa imparcial.
- Dados de treino: A única divisão a partir da qual o otimizador aprende os pesos.
- Validação cruzada: Um procedimento que alterna os exemplos usados como dados de validação, produzindo K pontuações de validação a partir de um único conjunto de dados.
- Validação em textos clínicos e regulamentares: Na medicina e em setores regulamentados, validar um modelo significa muitas vezes avaliar o modelo final com dados externos independentes, o que corresponde ao conjunto de teste na terminologia da aprendizagem automática.










