Fundamentos de IA

O que é Aprendizado de Transferência?

mm
Adicione Unite.AI às suas fontes preferidas no Google

O que é Aprendizado de Transferência?

Quando se pratica aprendizado de máquina, treinar um modelo pode levar muito tempo. Criar uma arquitetura de modelo do zero, treinar o modelo e, em seguida, ajustar o modelo é uma quantidade massiva de tempo e esforço. Uma forma muito mais eficiente de treinar um modelo de aprendizado de máquina é usar uma arquitetura que já foi definida, potencialmente com pesos que já foram calculados. Essa é a ideia principal por trás do aprendizado de transferência, que consiste em pegar um modelo que já foi usado e reutilizá-lo para uma nova tarefa.

Antes de mergulhar nas diferentes maneiras pelas quais o aprendizado de transferência pode ser usado, vamos entender por que o aprendizado de transferência é uma técnica tão poderosa e útil.

Resolvendo um Problema de Aprendizado Profundo

Quando você está tentando resolver um problema de aprendizado profundo, como construir um classificador de imagens, você precisa criar uma arquitetura de modelo e, em seguida, treinar o modelo em seus dados. Treinar o classificador de modelo envolve ajustar os pesos da rede, um processo que pode levar horas ou até dias, dependendo da complexidade do modelo e do conjunto de dados. O tempo de treinamento será escalonado de acordo com o tamanho do conjunto de dados e a complexidade da arquitetura do modelo.

Se o modelo não atingir a precisão necessária para a tarefa, é provável que ajustes no modelo precisem ser feitos e, em seguida, o modelo precisará ser retreinado. Isso significa mais horas de treinamento até que uma arquitetura ótima, duração de treinamento e partição do conjunto de dados sejam encontradas. Quando se considera quantas variáveis precisam ser alinhadas entre si para que um classificador seja útil, faz sentido que os engenheiros de aprendizado de máquina estejam sempre procurando maneiras mais fáceis e eficientes de treinar e implementar modelos. Por esse motivo, a técnica de aprendizado de transferência foi criada.

Depois de projetar e testar um modelo, se o modelo se mostrou útil, ele pode ser salvo e reutilizado mais tarde para problemas semelhantes.

Tipos de Aprendizado de Transferência

Em geral, existem dois tipos diferentes de aprendizado de transferência: desenvolver um modelo do zero e usar um modelo pré-treinado.

Quando você desenvolve um modelo do zero, você precisará criar uma arquitetura de modelo capaz de interpretar seus dados de treinamento e extrair padrões deles. Depois que o modelo é treinado pela primeira vez, você provavelmente precisará fazer alterações nele para obter o desempenho ótimo do modelo. Você pode, então, salvar a arquitetura do modelo e usá-la como ponto de partida para um modelo que será usado em uma tarefa semelhante.

No segundo caso – o uso de um modelo pré-treinado – você simplesmente precisa selecionar um modelo pré-treinado para usar. Muitas universidades e equipes de pesquisa tornam as especificações de seus modelos disponíveis para uso geral. A arquitetura do modelo pode ser baixada junto com os pesos.

Quando se realiza o aprendizado de transferência, a arquitetura completa do modelo e os pesos podem ser usados para a tarefa em questão, ou apenas certas partes/camadas do modelo podem ser usadas. Usar apenas parte do modelo pré-treinado e treinar o restante do modelo é chamado de ajuste fino.

Ajuste Fino de uma Rede

Ajuste fino de uma rede descreve o processo de treinar apenas algumas das camadas da rede. Se um novo conjunto de dados de treinamento for muito semelhante ao conjunto de dados usado para treinar o modelo original, muitos dos mesmos pesos podem ser usados.

O número de camadas da rede que devem ser desbloqueadas e retreinadas deve ser escalonado de acordo com o tamanho do novo conjunto de dados. Se o conjunto de dados que está sendo treinado for pequeno, é uma boa prática manter a maioria das camadas como estão e treinar apenas as últimas camadas. Isso é para evitar que a rede sofra sobreajuste. Alternativamente, as camadas finais da rede pré-treinada podem ser removidas e novas camadas podem ser adicionadas, que são então treinadas. Em contraste, se o conjunto de dados for um conjunto de dados grande, potencialmente maior do que o conjunto de dados original, a rede inteira deve ser retreinada. Para usar a rede como um extrator de recursos fixo, a maioria da rede pode ser usada para extrair os recursos, enquanto apenas a camada final da rede pode ser desbloqueada e treinada.

Quando você está ajustando fino uma rede, lembre-se de que as camadas iniciais da ConvNet são as que contêm as informações que representam os recursos mais genéricos das imagens. Esses são recursos como bordos e cores. Em contraste, as camadas finais da ConvNet contêm os detalhes que são mais específicos das classes individuais contidas no conjunto de dados em que o modelo foi inicialmente treinado. Se você estiver treinando um modelo em um conjunto de dados que é muito diferente do conjunto de dados original, você provavelmente precisará usar as camadas iniciais do modelo para extrair os recursos e apenas retreinar o restante do modelo.

Exemplos de Aprendizado de Transferência

As aplicações mais comuns de aprendizado de transferência são provavelmente aquelas que usam dados de imagem como entradas. Essas são frequentemente tarefas de previsão/classificação. A forma como as Redes Neurais Convolucionais interpretam os dados de imagem se presta à reutilização de aspectos de modelos, pois as camadas convolucionais frequentemente distinguem recursos muito semelhantes. Um exemplo de um problema comum de aprendizado de transferência é a tarefa ImageNet 1000, um conjunto de dados massive com 1000 classes diferentes de objetos. Empresas que desenvolvem modelos que alcançam alto desempenho nesse conjunto de dados frequentemente liberam seus modelos sob licenças que permitem que outros os reutilizem. Alguns dos modelos que resultaram desse processo incluem o modelo ResNet da Microsoft (MSFT ), o modelo Inception do Google (GOOGL ) e o grupo de modelos VGG da Oxford.

Blogueiro e programador com especialidades em Machine Learning e Deep Learning tópicos. Daniel espera ajudar os outros a usar o poder da IA para o bem social.