Deep Transfer Learning

Aprendendo a utilizar todo o poder do aprendizado

Rodrigo Fill Rangel
Turing Talks
8 min readOct 25, 2020

--

Texto escrito por Rodrigo Fill e Paulo Sestini. Agradecimentos especiais para Felipe Machado.

Mais um Turing Talks sobre visão computacional, hoje vamos aprender sobre o poder do Deep Transfer Learning, a tecnologia que está levando Machine Learning a um novo patamar evolutivo. Vamos começar a tratar um tema tão importante primeiro contextualizando os problemas que o Transfer Learning consegue resolver.

Dificuldade de treino em deep learning

As redes neurais em Deep Learning resolvem problemas complexos e possuem muitas camadas e, com isso, uma enorme quantidade de parâmetros treináveis. O grande problema de termos muitos destes parâmetros está no fato que quanto mais profunda a rede, maior é a demanda computacional de processamento e de quantidade de dados na base para realizar o treinamento. Em poucas palavras, uma rede profunda tem capacidade maior de aprendizado, mas em troca custa muito, é dificilmente acessível com os computadores que temos em casa atualmente e precisa de quantidades realmente grandes de dados para ser treinada.

Dentro deste contexto existem redes deste tipo treinadas por gigantes corporações que detêm recursos financeiros, tecnológicos e de informação, por exemplo a Google, Microsoft e Facebook, para realizar o dispendioso processo de treinamento. Estas redes estão disponíveis online para quem quiser testá-las e utilizá-las para seus próprios projetos, por exemplo: VGG-Face, Detectron2, Openface, entre outras. Surgem a partir destas a ideia de utilizá-las como parte do aprendizado de outras redes que desempenham tarefas diferentes, mas para explicar isso melhor vamos a um exemplo:

O nosso sistema nervoso sabe transferir o aprendizado entre tarefas, afinal de contas não aprendemos sempre do zero, tudo que aprendemos em nossa vida é utilizado como base para a construção de novos aprendizados. Vamos pensar em andar de bicicleta, é importante ter noções básicas de equilíbrio que nos ajudam a aprender como se manter em cima de uma, sem cair, podendo finalmente abrir mão das rodinhas. Imagine agora este mesmo indivíduo que aos 8 anos aprendeu a andar de bicicleta, aos 20 resolve tirar carta e aprender a andar de moto, o cérebro dele não irá começar do zero a aprender como se equilibrar em cima de moto, certo? Ele já sabe andar de bicicleta e, salvas devidas proporções, muito do que ele aprendeu aos 8 anos será utilizado agora para que ele aprenda a andar em uma motocicleta.

Esse é o objetivo do Deep Transfer Learning, proporcionar que um projeto nosso com tarefa ou base de dados parecida com uma rede já treinada possa se aproveitar dos parâmetros já treinados desta. Apropriamos vários destes parâmetros como de nossa rede. Assim é possível realizar o treinamento em casa, sem deter grande quantidade de poder computacional ou uma base de dados enorme, simplesmente pelo fato que daquela grande quantidade de parâmetros treináveis que um modelo de deep learning possui, uma boa parte será importada desta outra rede, deixando para nosso computador e nossa base de dados treinar apenas uma pequena parte restante. Este processo, além de tornar tudo muito mais veloz, é capaz de aumentar significativamente o desempenho do modelo, mesmo com uma quantidade reduzida de dados, como veremos mais à frente. Veja o exemplo na imagem abaixo:

Fonte: A Comprehensive Hands-on Guide to Transfer Learning

Casos de Transfer Learning

A técnica de Transfer Learning é uma técnica geral para modelos de Machine Learning e possui diversos tipos diferentes. É possível reaproveitar dados e conhecimentos de diversas formas no treinamento de um modelo, porém, neste artigo focamos no Deep Transfer Learning, que é a técnica aplicada em redes neurais, como uma aplicação de Model-Based Transfer Learning, que é o tipo de Transfer Learning onde o conhecimento está na forma de parâmetros pré-treinados, que são transferidos entre modelos.

Além de como iremos transferir o conhecimento (nesse caso, por meio de parâmetros), também devemos observar os dados utilizados e as tarefas que os modelos precisam resolver, o que permite levantar diferentes casos de aplicação da técnica.

Vamos abordar alguns dos casos mais importantes e utilizados no cotidiano, mas a imagem abaixo explicita vários outros tipos existentes:

Fonte: A Comprehensive Hands-on Guide to Transfer Learning

Transfer Learning Indutivo: Neste primeiro caso temos que os domínios fonte e alvo são semelhantes, ou pelo menos análogos, enquanto as tarefas são diferentes. Assim o modelo tenta se aproveitar dos vieses presentes na fonte. Um exemplo pode ser de uma rede especializada em identificar cachorros em uma foto que pode ser usada para classificar cachorros a partir de sua raça. O domínio é o mesmo, ou semelhante, cachorro, mas a tarefa de classificação não é. Pela imagem é possível ver que há mais subclassificações, dependendo se o domínio possui ou não labels, multitask e self-taught learning.

Transfer Learning Transdutivo: No segundo caso temos o exato oposto ao primeiro, aqui as tarefas fonte e alvo são iguais, porém os respectivos domínios são diferentes. Este problema se aplica constantemente em desafios de reconhecimento de objetos, por exemplo, imagine uma rede treinada em reconhecer cães, por outro lado nossa tarefa alvo é o reconhecimento de gatos, reconhecimento é o mesmo em ambas as tarefas, mas o domínio é diferente, já que: 𝐶ã𝑜≠𝐺𝑎𝑡𝑜, apesar que…

Transfer Learning Não Supervisionado: Aqui temos um terceiro caso que difere dos outros dois, mas é mais semelhante ao primeiro que ao segundo. Este é o caso quando os labels não estão disponíveis tanto para os domínios alvo e fonte, caracterizando um problema de aprendizado não supervisionado. Mas é semelhante ao primeiro no sentido que aqui também os domínios fonte e alvo são semelhantes, enquanto as tarefas são diferentes.

Estratégias de abordagem

A ideia desta seção é mostrar algumas das abordagens mais utilizadas para treinar seus modelos a partir da transferência de aprendizado. Além disso, como estamos fazendo um texto da série de visão computacional, estas estratégias são baseadas altamente em modelos de redes neurais convolucionais, além de estarem no contexto de deep learning.

Uma rede neural convolucional, CNN, geralmente tem uma estrutura padrão de montagem, claro que existem variações, mas ao abordar um novo problema é comum o desenvolvimento de uma mesma estrutura, que consiste em:

  • Camadas convolucionais, alternadas com camadas de pooling e ativação
  • Camadas totalmente conectadas, com ativação.
  • É possível haver camadas de regularização no meio, mas vamos manter as coisas mais simples por enquanto.

Se o que eu acabei de falar está em grego para você, leitor, por favor procure dar uma lida neste artigo antes de prosseguir. Uma das estratégias consiste em cortar as últimas camadas do modelo, geralmente as fully-connected, todas ou parte delas, de forma a utilizar a arquitetura restante como parte do seu modelo alvo, e treinar novas camadas classificativas. Iremos fazer isso na parte prática mais a frente, mas por enquanto veja a ilustração a seguir:

Fonte: A Comprehensive Hands-on Guide to Transfer Learning

Esta é uma estratégia que faz muito sentido para o primeiro caso exposto anteriormente, ou seja, de Transfer learning indutivo, visto que se os domínios são semelhantes, as features identificadas pela rede fonte são de interesse para o modelo alvo, enquanto que como as tarefas são distintas, a forma de classificação da rede fonte não é algo interessante para a outra. A partir deste ponto podemos criar novas camadas finais e treiná-las com nossos dados para ajustar a rede à tarefa alvo.

Esta estratégia é conhecida como “Off the shelf features”, pelo simples motivo que pegamos as features disponíveis na rede fonte e utilizamos elas diretamente em nossa rede alvo, um questionamento bastante pertinente seria o quão bem tal método consegue performar por si só? Bem, existem várias tarefas diferentes que podem ser analisadas e discutidas, então vamos simplesmente colocar este gráfico aqui que sumariza bastante tudo que temos para falar:

Comparação entre desempenhos de diferentes abordagens de Transfer Learning e uma rede especializada para a tarefa. Fonte: A Comprehensive Hands-on Guide to Transfer Learning

Bem impressionante não é? Em muitas tarefas o desempenho é próximo, se não igual, à redes treinadas especialmente para aquela task, como em Scene Image Retrieval ou em Bird Subcategorization, em alguns casos nem foram treinadas redes específicas, sendo o transfer a única abordagem viável no momento. De cara dá pra perceber e ressaltar a importância deste método atualmente para o progresso em machine learning, estamos falando de desempenhos altíssimos com redes muito simples de serem montadas.

Vamos abordar um outro tema importante, pode ser considerado uma nova estratégia ou apenas uma continuação da anterior, fica a gosto do freguês, enfim, vamos falar sobre Fine Tuning ou ajuste fino, em tradução livre. A ideia aqui é não só se aproveitar de um modelo fonte, extrair suas camadas finais, mas também treinar alguns de seus parâmetros anteriores, para que eles possam se adaptar um pouco melhor à sua tarefa alvo. Uma abordagem seria “congelar” alguns parâmetros mais genéricos, como padrões geométricos, curvas que podem ser identificadas em diversas aplicações, que são referentes às primeiras camadas convolucionais em uma CNN, e ajustar os parâmetros mais específicos, como aqueles que determinam como a rede reconhecerá objetos e formas mais úteis para a aplicação em questão, ou seja, reaproveitamos os parâmetros que reconhecem padrões mais simples comuns à várias aplicações. Sem dúvida é uma abordagem que gera um pouco mais de custo e requer um poder computacional maior, mas ainda nada próximo à treinar uma rede inteira com pesos aleatórios. Necessita de mais dados, mas se estes estão disponíveis, pode valer bastante a pena.

Só uma consideração do que significa “congelar” camadas de uma rede: basicamente é atribuir learning rate igual a zero para essas camadas, de modo que seus parâmetros não serão atualizados e portanto elas não serão treinadas novamente. As camadas que não forem congeladas e possuam parâmetros pré-treinados, irão utilizá-los como parâmetros iniciais para o treinamento, dessa forma, a rede já possui bons pesos em suas conexões neurais, e o fine tuning apenas irá ajustá-los para a nova tarefa.

Conclusão

Assim chegamos ao fim de mais um Turing Talks, esperamos que tenham realmente gostado deste tema que é central no desenvolvimento de aprendizado de máquina atualmente. Se você realmente curtiu este texto, por favor deixe seus claps aqui no Medium e não se esqueça de seguir a página do Turing Talks para não perder os próximos textos que serão postados. Siga também as páginas do Grupo Turing no Facebook e no Instagram, até mais!

--

--