23.7. Transfer Learning e Fine-tuning: Congelamento de camadas (Layer Freezing)

Página 91

23.7. Transfer Learning e Fine-tuning: Congelamento de Camadas (Layer Freezing)

O Transfer Learning e o Fine-tuning são técnicas poderosas no campo do Machine Learning e Deep Learning que permitem a transferência de conhecimento de um modelo pré-treinado para uma nova tarefa com o objetivo de melhorar o desempenho e a eficiência do treinamento. A essência do Transfer Learning é utilizar os pesos e as características aprendidas por um modelo em um grande conjunto de dados, geralmente em uma tarefa relacionada, e aplicá-los a uma nova tarefa com menos dados disponíveis.

Uma das estratégias mais eficazes dentro do Transfer Learning é o congelamento de camadas, ou "Layer Freezing". Esta técnica envolve manter os pesos de algumas camadas de um modelo pré-treinado fixos, enquanto apenas algumas camadas são ajustadas ou "afinadas" (fine-tuned) para a nova tarefa. Vamos explorar mais profundamente como essa estratégia funciona e como ela pode ser aplicada com o uso de Python e bibliotecas de Deep Learning como TensorFlow e Keras.

O que é Congelamento de Camadas?

No contexto de redes neurais profundas, o congelamento de camadas é o processo de manter os pesos de certas camadas inalterados durante o treinamento. Isso é feito porque essas camadas já aprenderam características gerais que podem ser úteis para a nova tarefa. Geralmente, as primeiras camadas de uma rede neural convolucional (CNN) aprendem características de baixo nível, como bordas e texturas, enquanto as camadas mais profundas aprendem características de alto nível, mais específicas para a tarefa original.

Ao congelar as primeiras camadas, podemos reutilizar essas características gerais e focar o treinamento nas camadas superiores, que serão ajustadas para capturar as nuances da nova tarefa. Isso não apenas economiza tempo e recursos computacionais, mas também pode melhorar o desempenho em tarefas com conjuntos de dados menores, onde o aprendizado a partir do zero pode levar a um sobreajuste.

Como Congelar Camadas em Python com TensorFlow/Keras?

Com bibliotecas como TensorFlow e Keras, o congelamento de camadas é um processo simples. Ao carregar um modelo pré-treinado, podemos facilmente definir quais camadas devem ser congeladas. Aqui está um exemplo de como fazer isso:

from tensorflow.keras.applications import VGG16
from tensorflow.keras import layers, models

# Carregar o modelo VGG16 pré-treinado com os pesos da ImageNet
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# Congelar todas as camadas do modelo base
for layer in base_model.layers:
    layer.trainable = False

# Adicionar novas camadas personalizadas para a nova tarefa
x = layers.Flatten()(base_model.output)
x = layers.Dense(1024, activation='relu')(x)
predictions = layers.Dense(num_classes, activation='softmax')(x)

# Criar o modelo final
model = models.Model(inputs=base_model.input, outputs=predictions)

# Agora, apenas as camadas adicionadas serão treinadas

No código acima, todas as camadas do modelo VGG16 são congeladas, e novas camadas são adicionadas para a tarefa específica. Durante o treinamento, apenas os pesos das novas camadas serão atualizados.

Quando Usar o Congelamento de Camadas?

O congelamento de camadas é mais eficaz quando o conjunto de dados da nova tarefa é pequeno ou quando as tarefas de origem e destino são semelhantes. Se o novo conjunto de dados for grande e muito diferente do conjunto de dados original, pode ser necessário treinar mais camadas ou até mesmo toda a rede novamente para alcançar um bom desempenho.

Fine-tuning após o Congelamento de Camadas

Após um período inicial de treinamento com as camadas congeladas, muitas vezes é útil realizar um "fine-tuning" de algumas das camadas superiores do modelo pré-treinado. Isso envolve descongelar um pequeno número de camadas superiores e continuar o treinamento para ajustar as características de alto nível ao novo conjunto de dados.

Por exemplo:

# Descongelar as últimas 5 camadas do modelo base
for layer in base_model.layers[-5:]:
    layer.trainable = True

# Continuar o treinamento com um learning rate menor
optimizer = keras.optimizers.Adam(lr=1e-5)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

Ao descongelar camadas, é importante usar um learning rate menor para evitar a destruição das características já aprendidas.

Considerações Finais

O Transfer Learning e o Fine-tuning com congelamento de camadas são técnicas valiosas para aproveitar modelos pré-treinados em novas tarefas. Ao ajustar cuidadosamente quais camadas congelar e descongelar, e ao escolher a estratégia de treinamento correta, é possível obter um modelo altamente eficaz, mesmo com um conjunto de dados limitado. O uso de bibliotecas como TensorFlow e Keras facilita a implementação dessas técnicas em Python, permitindo que os praticantes de Machine Learning e Deep Learning concentrem-se na construção de soluções robustas e inovadoras.

Ahora responde el ejercicio sobre el contenido:

Qual das seguintes afirmações sobre o congelamento de camadas (Layer Freezing) no contexto do Transfer Learning e Fine-tuning em Deep Learning é verdadeira?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

Siguiente página del libro electrónico gratuito:

9223.8. Transfer Learning e Fine-tuning: Adaptação de modelos a novos domínios

¡Obtén tu certificado para este curso gratis! descargando la aplicación Cursa y leyendo el libro electrónico allí. ¡Disponible en Google Play o App Store!

Disponible en Google Play Disponible en App Store

+ 6,5 millones
estudiantes

Certificado gratuito y
válido con código QR

48 mil ejercicios
gratis

Calificación de 4.8/5
en tiendas de aplicaciones

Cursos gratuitos de
vídeo, audio y texto.