Leia - quando a transferência de aprendizado é desvantajosa? (Graças a @media)
(parece muito informativo para mim, então foi adicionado aqui para tornar essa resposta completa ...)
Responda à sua pergunta .. (começa aqui)
Transfer Learning é o que você está procurando ..
Quando recebemos uma tarefa de Aprendizado Profundo, digamos, que envolve o treinamento de uma Rede Neural Convolucional (Covnet) em um conjunto de dados de imagens, nosso primeiro instinto seria treinar a rede do zero. No entanto, na prática, redes neurais profundas como a Covnet têm um grande número de parâmetros, geralmente na faixa de milhões. O treinamento de um Covnet em um pequeno conjunto de dados (um que seja menor que o número de parâmetros) afeta muito a capacidade de generalização do Covnet, geralmente resultando em super adaptação.
Portanto, mais frequentemente na prática, seria possível ajustar as redes existentes que são treinadas em um grande conjunto de dados como o ImageNet (imagens com a etiqueta 1.2M), continuando a treiná-lo (ou seja, executando a propagação de retorno) no conjunto de dados menor que temos. Desde que nosso conjunto de dados não seja drasticamente diferente no contexto do conjunto de dados original (por exemplo, ImageNet), o modelo pré-treinado já terá recursos aprendidos que são relevantes para o nosso próprio problema de classificação.
Quando ajustar os modelos?
Em geral, se nosso conjunto de dados não é drasticamente diferente no contexto do conjunto de dados em que o modelo pré-treinado é treinado, devemos fazer o ajuste fino. A rede pré-treinada em um conjunto de dados grande e diversificado como o ImageNet captura recursos universais como curvas e arestas em suas primeiras camadas, que são relevantes e úteis para a maioria dos problemas de classificação.
Obviamente, se nosso conjunto de dados representar algum domínio muito específico, por exemplo, imagens médicas ou caracteres manuscritos chineses, e que nenhuma rede pré-treinada nesse domínio possa ser encontrada, devemos considerar o treinamento da rede a partir do zero.
Uma outra preocupação é que, se nosso conjunto de dados for pequeno, o ajuste fino da rede pré-treinada em um pequeno conjunto de dados poderá levar à super adaptação, especialmente se as últimas camadas da rede forem totalmente conectadas, como no caso da rede VGG. Falando da minha experiência, se tivermos alguns milhares de amostras brutas, com as estratégias comuns de aumento de dados implementadas (tradução, rotação, inversão etc.), o ajuste fino geralmente nos proporcionará um resultado melhor.
Se nosso conjunto de dados for realmente pequeno, digamos menos de mil amostras, uma abordagem melhor é pegar a saída da camada intermediária antes das camadas totalmente conectadas como recursos (recursos de gargalo) e treinar um classificador linear (por exemplo, SVM) em cima de isto. O SVM é particularmente bom em desenhar limites de decisão em um pequeno conjunto de dados.
Técnicas de ajuste fino
Abaixo estão algumas diretrizes gerais para a implementação de ajuste fino:
A prática comum é truncar a última camada (camada softmax) da rede pré-treinada e substituí-la por nossa nova camada softmax relevante para o nosso próprio problema. Por exemplo, a rede pré-treinada no ImageNet vem com uma camada softmax com 1000 categorias.
Se a nossa tarefa for uma classificação em 10 categorias, a nova camada softmax da rede será de 10 categorias em vez de 1000 categorias. Em seguida, executamos novamente a propagação na rede para ajustar os pesos pré-treinados. Verifique se a validação cruzada é realizada para que a rede possa generalizar bem.
Use uma taxa de aprendizado menor para treinar a rede. Como esperamos que os pesos pré-treinados já sejam bastante bons em comparação com pesos inicializados aleatoriamente, não queremos distorcê-los muito rapidamente e demais. Uma prática comum é fazer com que a taxa de aprendizado inicial seja 10 vezes menor do que a usada para o treinamento de scratch.
Também é uma prática comum congelar os pesos das primeiras camadas da rede pré-treinada. Isso ocorre porque as primeiras camadas capturam recursos universais, como curvas e arestas, que também são relevantes para o nosso novo problema. Queremos manter intactos esses pesos. Em vez disso, faremos com que a rede se concentre no aprendizado de recursos específicos do conjunto de dados nas camadas subseqüentes.
Você precisa treiná-los novamente neste caso, como se eu não estivesse errado. Os papéis de parede não são uma classe de modelos da Image-net. Não será difícil criar um modelo do zero para fazer isso (de preferência, um modelo mais raso também faz aqui ..)
A fonte da minha resposta é a tradução desses cursos incríveis.
Para leituras adicionais,