Skip to main content

Keras로 배우는 딥러닝: 고양이를 알기 전에 포유류부터 구분하기

식물과 동물 야생 데이터셋에 맞게 각색한 Keras 튜토리얼 이 글은 AI 번역본입니다. 오번역이 의심되면 댓글로 알려 주세요
Created on September 15|Last edited on September 15
머신러닝이 눈부신 발전을 이루었지만, 인간이 주도하는 학습은 특히 일반화와 실제 환경의 능동 학습 설정에서 여전히 더 효과적이다. 두 접근법의 큰 차이점 하나는 학습 내용의 배열 방식이다. 기계에게 자연 세계를 가르칠 때 우리는 보통 가능한 한 많은 예시를 무작위 순서로 투입하고, 종종 여러 레이블을 함께 제공한다(예: 달마시안은 개이자, 갯과, 포유류, 동물이다). 우리는 카메라 설정과 사진 품질의 수많은 차이(종횡비, 초점, 조명, 픽셀 밀도, 원근, 거리, 색 균형, 대비 등)는 말할 것도 없고, 장면 구성(대상이 중앙에 있는가? 전체가 보이는가 아니면 가려졌는가? 배경에 어떤 다른 물체/패턴이 있는가?)의 차이를 보완하기 위해 학습 이미지를 전처리하고 정규화한다. 그런 다음 우리는 쌓인 행렬들이 제 역할을 해 주기를 바라며, 방대한 데이터 양이 잡음이 아니라 의미 있는 고수준 특성을 학습하게 해 줄 것이라고 기대한다(신경망이 대부분拾 텍스처의 모음).
아이에게 자연 세계를 가르칠 때 우리는 먼저 개, 나무, 새처럼 단순하고 포괄적인 개념을 가리키고, 점차 더 미묘하고 구체적인 것으로 나아간다. 바늘 같은 잎을 가진 나무는 소나무일 가능성이 크고, 검은 반점이 있는 흰 개는 달마시안일 수 있다고 설명하는 식이다. 우리는 시각적 예시의 맥락은 크게 신경 쓰지 않는다. 달마시안은 그림책에 있을 수도, 영화에 나올 수도, 바로 옆 공원에서 놀고 있을 수도 있다. 물론 아이의 학습은 대개 비구조적이며 여러 해에 걸친 경험에 분산되어 이루어진다. 성인이 되어 새로운 언어나 온톨로지를 배우려 할 때는 오히려 무작위 플래시카드와 암기에 의존하기도 한다. 사람에게 학습 순서가 중요한 더 직관적인 예로는, 미적분에 앞서 대수를, 대수에 앞서 기초 산술을 배우는 과정을 들 수 있다. 다만 기계에서조차 그 첫 수업에 해당하는 것을 구현하는 일은 훨씬 더 복잡하다[1]. 점차 구체성이나 난이도를 높여 가며 학습하는 인간의 전략, 즉 커리큘럼 러닝[2]이 신경망에도 도움이 될까?

이 직관을 검증하기 위해, 나는 다음과 같이 각색했다 이 Keras 튜토리얼 소규모 데이터셋으로 파인튜닝하기 위해 iNaturalist 2017이며, 5천 종이 넘는 생물 종의 사진 67만 5천 장 이상을 포함한다(참고" 이전 블로그 글 자세한 내용은 해당 글을 참고). 2017 버전에는 결정적으로 더 높은 수준의 범주 또는 분류군—각 종마다 상위 분류 계급인 계(식물, 동물), 문(예: 연체동물), 또는 강(포유류, 파충류). 예를 들어 곰의 한 종인 Ursus arctos의 상위 강은 포유류다.
여기에는 조류(Aves/새)부터 원생생물(Protozoa)까지 13개의 분류군이 있으며, 조류는 964개 종과 23만 5천 장이 넘는 이미지를 포함하는 반면, 원생생물은 고작 4개 종과 381장만 있다. 이런 롱테일 분포와 진화생물학적 사전 지식을 고려하면, 올바른 분류군(예: 곤충, 포유류, 버섯)을 예측하는 일은 정확한 종을 맞히는 것보다 훨씬 단순하고 일반적인 문제다. 아래의 서로 다른 여섯 종의 캐스틸레하를 구분해 보라.

종 식별을 위한 한 가지 커리큘럼은 먼저 분류군을 가르치고, 그다음 구성 종을 가르치는 것이다. 학습 자료의 순서가 중요하다면—특히 기계도 인간처럼 난이도가 점진적으로 높아지는 환경에서 더 효과적으로 학습한다면—먼저 분류군으로 학습한 뒤 종으로 학습한 모델이, 다른 조건(네트워크 아키텍처, 예시의 개수와 분포, 에포크 수 등)이 동일할 때 종에 바로 학습한 모델보다 더 나은 성능을 보일 것으로 예상할 수 있다. 이 글에서는 이 가설을 구체화하는 몇 가지 방법을 제시하고, 다음을 사용해 결과를 살펴본다 Weights & Biases (Weights & Biases). Keras 코드는 여기 python adv_finetune.py로 실행할 수 있다. 전체 iNaturalist 데이터셋은 186GB이므로, 편리한 하위 집합을 다운로드하는 것이 좋다. 여기 [3].

문제 공간 축소로서의 커리큘럼 설계

커리큘럼을 표준화하기 위해, 내부 종들의 변이를 제한하고자 동일한 계층 깊이의 분류군으로 데이터셋을 축소했다. 예를 들어 “식물”에는 레드우드부터 장미, 라플레시아까지 포함되는데, 이는 거의 항상 깃털, 날개, 부리를 갖는 “조류”보다 훨씬 더 크고 일반적이며 시각적으로 다양한 범주의 생물이다. 따라서 이 하위 집합에 포함된 분류군은 원본 데이터셋처럼 계·문·강이 뒤섞인 것이 아니라, 엄격한 생물학적 강(class)으로만 구성된다. 생물다양성의 영향을 추가로 통제하기 위해, 각 강이 동일한 수의 구성 종을 갖고 총 이미지 수도 같도록 데이터셋을 균형 있게 맞췄다. 그 결과, 양서류, 조류, 곤충, 포유류, 파충류의 5개 강 각각에 속한 25개 종마다 720장의 이미지를 확보했다. 이는 물론 원본의 675K장 이상과 비교하면 매우 작지만, 이 실험을 시작하기에는 가장 깔끔한 방식이다. 커리큘럼 설계 패러다임 아래에서 더 정돈된 이 데이터로 풀고 있는 문제는 이제 원래 과제보다 훨씬 쉽고, 전체 데이터셋에는 잘 일반화되지 않을 수도 있다. 앞으로는 이미지 수 균형과 유도 편향을 띤 생물다양성 제약을 완화하고, 우주의 쓰디쓴 롱테일 현실과 마주할 가능성이 크다. 원 저자들은 그렇게 한다 [4]. 현재 이 토이 데이터는 각 종마다 620개 학습/100개 검증으로 분할되어 있다(각 강마다 3100/500, 전체 합계 15,500/2500). 그리고 두 가지 학습 패러다임에서 학습/검증 할당은 고정으로 유지된다.
가장 성능이 좋은 7‑레이어 컨브넷을 사용했다 이전 글에서 각 이미지에 대해 다섯 개 생물학적 강 레이블 중 하나를 예측하는 클래스 기준선과, 25개 종 레이블 중 하나를 예측하는 종 기준선을 학습한다. 그런 다음 스위치 에폭을 설정해, 강에 대해 학습 중인 모델이 해당 에폭에 도달하면 강 예측 레이어(크기 5)를 잘라내고, 종 예측을 위한 새 레이어(크기 25)로 교체한다. 파란색으로 표시된 클래스 기준선이 훨씬 높게 나타나는데, 초기 문제가 훨씬 쉽기 때문이다. 다섯 개 강 중 하나를 맞히는 것은(무작위 기대 정확도 20%) 25개 종 중 하나를 맞히는 것(4%)보다 수월하다.

커리큘럼 러닝에 유리한 근거가 조금 있다. 특히 에폭 5에서 생물학적 강에서 종으로 전환하면 종 기준선보다 약간 높은 정확도를 보였고, 에폭 3과 10에서의 전환도 이후 에폭에서 종 기준선을 상회했다. 검증 정확도 곡선은 잡음이 더 크지만, 3·5·10 에폭 전환이 종 기준선과 비슷하거나 때로는 앞서는 양상을 보인다. 다만 이는 단순한 잡음일 수 있으며 유의미한 효과가 아닐 수도 있다. 네트워크가 종 예측 설정에 빠르게 적응하기 때문이다. 특정 설정에서, 혹은 1단계 학습 내용의 유지율을 높여서, 강 수준 사전 학습의 이 미미한 긍정적 영향을 증폭할 수 있을까?


학습률과 사전 학습된 네트워�� 탐구

학습 내용의 상대적 유지율 차이를 유도하는 한 가지 방법은 최적화 알고리즘과 학습률(LR)을 달리하는 것이다. 아래는 보라색으로 표시한 종 단일 기준선과 비교하여 sgd와 adam으로 수행한 몇 가지 실험이다. 다른 어떤 방법도 기준선을 넘어서지는 않았지만, 클래스 단계에서 sgd와 LR = 0.05, 종 단계에서 LR = 0.005를 사용해 에폭 5에서 전환하면 놀라울 정도로 빠르게 학습하며, 마치 처음 다섯 에폭을 건너뛰지 않은 것처럼 기준선으로 수렴한다. 이러한 하이퍼파라미터—최적화 알고리즘, 학습률, 전환 에폭의 다양한 조합—를 더 탐색해 보는 것은 유망해 보인다.

전반적으로, 종당 예시 수와 이 모델의 학습 용량이 사전 학습의 유의미한 효과를 보여 주기에는 너무 작을 수 있다. 모델이 기초 학습 내용을 오래 유지하지 못하기 때문이다. ImageNet으로 사전 학습된 더 크고 표현력이 높은 모델(인셉션/ResNet 계열)을 미세 조정하는 편이 더 대표적일 수 있다. 전체 데이터의 10%만으로 종을 예측하는 초기 시험에서, Inception V3가 가장 유망했다. 유사한 정확도의 Inception‑ResNet‑v2 대비 파라미터와 메모리가 절반 수준이면서도 Xception과 ResNet‑50을 능가했기 때문이다.

5에서 25로 출력 레이블을 전환하는 과정은 학습을 교란하며, 초기 학습의 일부를 필연적으로 무효화한다. 단순히 학습률을 조정하거나 베이스 레이어를 일부 동결하는 것만으로는 이 손실을 충분히 완화하지 못할 수 있다. 단일 상위 생물학적 강 예측에서 가지를 쳐, 다섯 구성 종 중 하나에 대한 더 미세한 예측으로 이어지는 분기형 레이어 아키텍처가 도움이 될 수 있다. 마지막으로, 커리큘럼 러닝의 효과는 정확도 자체보다 수렴 속도에서 더 뚜렷하게 나타날 수 있다. 이후 글에서는 이러한 가설과 커리큘럼 러닝을 적용하는 다른 방법을 탐구하고, 강별 정확도를 추적하며(왜 파충류가 다른 분류군보다 식별이 더 어려울까?), 더 현실적인(불균형한) 데이터 분포를 다루어 볼 것이다. 확인해 보시라 여기 상시 업데이트되는 리포트.
[1] Zaremba, Wojciech, Sutskever, Ilya. 실행 학습. arXiv 예비논문 arXiv:1410.4615, 2014.
[2] Bengio, Yoshua, Louradour, Jerome, Collobert, Ronan, Weston, Jason. 커리큘럼 러닝. 제26회 회의 논문집(Proceedings of the 26th)에서. 국제기계학습연례학회, 41–48쪽. ACM, 2009
[3] 실제로는 필요할 때마다 전체 데이터셋을 가리키는 심볼릭 링크들로 디렉터리 트리를 생성합니다. 루트 디렉터리에는 train과 validation 폴더가 있고, 각 폴더 안에는 A 클래스의 모든 예시를 A라는 이름의 폴더에 넣습니다. 이는 다음과 같이 응용할 수 있습니다 data_symlink.py 심볼릭 링크 트리를 직접 생성하려면.
[4] Horn, G.V., Aodha, O.M., Song, Y., Cui, Y., Sun, C., Shepard, A., Adam, H., Perona, P., Belongie, S. iNaturalist 종 분류 및 검출 데이터셋. CVPR, 2018.




이 글은 AI가 번역한 기사입니다. 오역이 의심되는 부분은 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기