출력 클래스가 처음부터 정의되지 않은 신경망을 훈련하고 싶습니다. 들어오는 데이터를 기반으로 점점 더 많은 클래스가 소개 될 예정입니다. 이것은 새로운 수업을 소개 할 때마다 NN을 재교육시켜야한다는 것을 의미합니다.
이전 교육 단계에서 이전에 획득 한 정보를 잊지 않고 어떻게 NN을 증분 교육 할 수 있습니까?
출력 클래스가 처음부터 정의되지 않은 신경망을 훈련하고 싶습니다. 들어오는 데이터를 기반으로 점점 더 많은 클래스가 소개 될 예정입니다. 이것은 새로운 수업을 소개 할 때마다 NN을 재교육시켜야한다는 것을 의미합니다.
이전 교육 단계에서 이전에 획득 한 정보를 잊지 않고 어떻게 NN을 증분 교육 할 수 있습니까?
답변:
나는 당신의 질문이 머신 러닝의 전이 학습 이라는 중요한 개념에 영향을 미친다는 것을 이미 말하고 싶습니다 . 실제로, 시간이 많이 걸리고 충분한 크기의 데이터 세트를 갖는 것이 상대적으로 드물기 때문에 (임의의 초기화로) 처음부터 전체 회선 네트워크를 훈련시키는 사람은 거의 없습니다.
최신 ConvNet은 ImageNet에서 여러 GPU를 학습하는 데 2-3 주가 걸립니다. 따라서 사람들이 네트워크를 미세 조정하기 위해 사용할 수있는 다른 사람들의 이익을 위해 최종 ConvNet 체크 포인트를 공개하는 것이 일반적입니다. 예를 들어 Caffe 라이브러리에는 사람들이 네트워크 가중치를 공유 하는 모델 동물원 이 있습니다.
이미지 인식을 위해 ConvNet이 필요한 경우 응용 프로그램 도메인이 무엇이든 기존 네트워크를 고려해야합니다 (예 : VGGNet 이 일반적 선택).
편입 학습을 수행 할 때 명심해야 할 것이 몇 가지 있습니다 .
사전 훈련 된 모델의 구속 조건. 사전 훈련 된 네트워크를 사용하려는 경우 새 데이터 세트에 사용할 수있는 아키텍처 측면에서 약간 제한 될 수 있습니다. 예를 들어 사전 훈련 된 네트워크에서 임의로 Conv 레이어를 가져올 수 없습니다. 그러나 일부 변경 사항은 간단합니다. 매개 변수 공유로 인해 공간 크기가 다른 이미지에서 사전 훈련 된 네트워크를 쉽게 실행할 수 있습니다. 전진 기능이 입력 볼륨 공간 크기 (보폭이 "적합"하는 한)와 무관하기 때문에 이것은 Conv / Pool 레이어의 경우 분명합니다.
학습률. 새 데이터 세트의 클래스 점수를 계산하는 새 선형 분류기의 (무작위 초기화) 가중치와 비교하여 미세 조정중인 ConvNet 가중치에 대해 더 작은 학습 속도를 사용하는 것이 일반적입니다. 이는 ConvNet 가중치가 상대적으로 양호하기 때문에 너무 빠르고 너무 많이 왜곡하지 않기를 원하기 때문입니다 (특히 그 위에있는 새로운 선형 분류 기가 임의 초기화에서 학습되는 동안).
이 주제에 관심이있는 경우 추가 참조 : 심층 신경망의 기능은 어떻게 전송할 수 있습니까?
여기 당신이 할 수있는 한 가지 방법이 있습니다.
네트워크를 학습 한 후에는 가중치를 디스크에 저장할 수 있습니다. 이를 통해 새 데이터를 사용할 수있을 때이 가중치를로드하고 마지막 교육이 중단 된 시점부터 교육을 계속할 수 있습니다. 그러나이 새로운 데이터에는 추가 클래스가 제공 될 수 있으므로 이제 이전에 저장된 가중치로 네트워크에서 사전 훈련 또는 미세 조정 을 수행합니다. 이 시점에서 수행해야 할 유일한 것은 마지막 레이어에 새 데이터 세트가 도착함에 따라 도입 된 새 클래스를 수용하도록하는 것입니다. 가장 중요한 것은 추가 클래스를 포함하는 것입니다 (예 : 마지막 레이어 처음에는 10 개의 수업이 있었으며 이제 사전 훈련 / 미세 조정의 일부로 2 개의 수업이 더 있습니다. 12 개의 수업으로 교체했습니다. 간단히 말해서이 원을 반복하십시오.