Path: blob/master/site/pt-br/addons/tutorials/optimizers_cyclicallearningrate.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Otimizadores do TensorFlow Addons: CyclicalLearningRate
Visão geral
Este tutorial demonstra o uso do Cyclical Learning Rate do pacote do Addons.
Cyclical Learning Rates
Mostrou-se vantajoso ajustar a taxa de aprendizado conforme o treinamento avança para uma rede neural. Isso tem inúmeros benefícios, desde a recuperação de ponto de sela até a prevenção de instabilidades numéricas que podem surgir durante a retropropagação. Mas como alguém sabe quanto ajustar em relação a um timestamp de treinamento específico? Em 2015, Leslie Smith percebeu que você deve aumentar a taxa de aprendizado para atravessar mais rápido o cenário de perda, mas também reduzir a taxa de aprendizado ao se aproximar da convergência. Para concretizar essa ideia, ele propôs as Cyclical Learning Rates (CLR), em que você ajusta a taxa de aprendizado em relação aos ciclos de uma função. Para uma demonstração visual, confira este blog. A CLR está agora disponível como uma API do TensorFlow. Para mais detalhes, confira o artigo original aqui.
Configuração
Carregue e prepare o dataset
Defina hiperparâmetros
Defina os utilitários de criação e treinamento do modelo
Considerando a reprodutibilidade, os pesos iniciais do modelo são serializados e serão usados para conduzir nossos experimentos.
Treine um modelo sem CLR
Defina a programação da CLR
O módulo tfa.optimizers.CyclicalLearningRate
retorna uma programação direta que pode ser passada para um otimizador. A programação aceita um passo como entrada e gera um valor calculado usando a fórmula CLR conforme descrita no artigo.
Aqui, você especifica os limites inferior e superior da taxa de aprendizado, e a programação oscilará entre esse intervalo ([1e-4, 1e-2] nesse caso). scale_fn
é usado para definir a função que ampliaria e reduziria a taxa de aprendizado em um determinado ciclo. step_size
define a duração de um único ciclo. Um step_size
de 2 significa que você precisa de um total de 4 iterações para concluir um ciclo. O valor recomendado para step_size
é o seguinte:
factor * steps_per_epoch
, em que o fator está dentro do intervalo [2, 8].
No mesmo artigo da CLR, Leslie também apresentou um método simples e elegante para escolher os limites da taxa de aprendizado. Recomendamos que você o confira também. Esta postagem de blog fornece uma ótima introdução ao método.
Abaixo, visualize a programação clr
.
Para visualizar melhor o efeito da CLR, você pode plotar a programação com um número maior de passos.
A função que você está usando neste tutorial se refere ao método triangular2
no artigo CLR. Há outras duas funções que foram exploradas, especificamente triangular
e exp
(abreviação de exponencial).
Treine um modelo com CLR
Conforme esperado, a perda começa mais alta do que o normal e depois estabiliza com o avanço dos ciclos. Você pode confirmar isso visualmente com os plots abaixo.
Visualize as perdas
Embora você não tenha visto muito os efeitos da CLR neste exemplo de brinquedo, é um dos principais ingredientes por trás da Superconvergência e pode ter um impacto excelente ao treinar em cenários de grande escala.