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.

Now answer the exercise about the content:

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

You are right! Congratulations, now go to the next page

You missed! Try again.

Next page of the Free Ebook:

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

Earn your Certificate for this Course for Free! by downloading the Cursa app and reading the ebook there. Available on Google Play or App Store!

Get it on Google Play Get it on App Store

+ 6.5 million
students

Free and Valid
Certificate with QR Code

48 thousand free
exercises

4.8/5 rating in
app stores

Free courses in
video, audio and text