다시 살펴보는 딥러닝 주요 개념 3편 – 성능 향상을 위한 딥러닝 알고리즘

주요 딥러닝 개념들을 요약·정리해뒀습니다. 딥러닝 이론을 기초부터 차근히 설명하려는 목적이 ‘아니므로’ 정독하실 필요는 없습니 다. 궁금한 개념이 있다면 가볍게 살펴본 후 바로 다음 장의 경진대회에 도전하시기 바랍니다. 경진대회 문제를 풀다가 언뜻 떠오르지 않는 개념이 있을 때 이 번 장을 참고해주세요.

 

학습 순서

 

1. 드롭아웃

드롭아웃(Dropout)은 과대적합을 방지하기 위하여 신경망 훈련 과정에서 무작위로 일부 뉴런을 제외하는 기법입니다.

 

▼ 일반적인 신경망 구조와 드롭아웃을 적용한 신경망 구조 비교

 

왼쪽 그림은 일반적인 신경망 구조입니다. 모든 뉴런이 서로 연결되어 있습니다. 오른쪽 그림은 드롭아웃을 적용한 신경망 구조입니다. 무작위로 일부 뉴런을 제외했죠.

드롭아웃은 매 훈련 이터레이션마다 새롭게 적용됩니다. 즉, 첫 번째 이터레이션에서 제외한 뉴런을 두 번째 이터레이션에서는 포함할 수 있고, 반대도 가능합니다. 바꿔 말해, 매번 신경망의 뉴런 조합이 달라지므로 훈련 이터레이션마다 서로 다른 신경망을 훈련하는 꼴입니다. 서로 다른 신경망을 훈련하여 결과를 취합하는 기법인 앙상블 학습과 유사합니다. 즉, 드롭아웃을 적용하면 앙상블 효과가 나서 과대적합을 막을 수 있고 성능 향상에도 도움이 됩니다.

얼마나 많은 뉴런을 드롭아웃할지는 하이퍼파라미터로 설정할 수 있습니다. 드롭아웃 비율을 0.2로 설정하면 전체 뉴런의 20%를 제외합니다.

한편, 드롭아웃은 훈련 단계에서만 적용합니다. 검증이나 예측 단계에서는 훈련된 뉴런을 모두 사용해야 하기 때문에 적용하지 않습니다.

 

2. 배치 정규화

배치 정규화(Batch Normalization)는 과대적합 방지와 훈련 속도 향상을 위한 기법입니다. 더 구체적으로는 내부 공변량 변화 현상을 해결하기 위한 기법입니다. 내부 공변량 변화(Internal Covariate Shift)는 신경망 계층마다 입력 데이터 분포가 다른 현상을 의미합니다.6 신경망 계층마다 입력 데이터 분포가 다르면 훈련 속도가 느려집니다. 그래서 ‘계층 간 데이터 분포의 편차를 줄이는 작업’이 필요한데, 이를 배치 정규화라고 합니다.

배치 정규화는 이름에서 알 수 있듯이 ‘배치’ 단위로 ‘정규화’합니다. 이때 배치는 미니배치이며, 정규화(Normalization)는 데이터가 정규분포(평균 0, 분산 1)를 따르도록 분포를 변환하는 작업입니다. 추가로 이렇게 정규화한 데이터를 확대/축소scale하고 이동shift 변환까지 수행합니다. 정리하면 다음 작업을 수행하는 것입니다.

  1. 입력 데이터 미니배치를 평균이 0, 분산이 1이 되게 정규화합니다.
  2. 정규화한 데이터의 스케일을 조정하고, 이동시킵니다.

각 단계를 조금 더 자세하게 알아보겠습니다.

 

2.1 정규화

미니배치를 평균이 0, 분산이 1이 되게 정규화해야 합니다. 수식으로는 다음과 같습니다.

 

 

𝝁𝐵는 미니배치 B의 평균이고, 𝝈2𝐵은 분산입니다. 미니배치의 평균과 분산을 활용해 입력 데이터를 정규화할 수 있습니다. x̂𝔦는 평균이 0, 분산이 1이 되게 정규화한 데이터입니다. 즉, 정규분포를 따르게 변환한 겁니다. 평균과 분산을 구하는 수식은 다음과 같습니다.

 

 

여기서 𝓂𝐵는 미니배치에 있는 데이터 개수입니다.

 

2.2 스케일 조정 및 이동

정규화한 데이터의 스케일을 조정하고 이동시켜야 합니다. 수식으로는 다음과 같습니다.

 

 

𝛾는 스케일 파라미터로, 데이터를 확대하거나 축소하는 값입니다. 𝛽는 이동 파라미터로, 데이터를 이동시키는 값입니다.

정규화를 하면 대부분 값이 0 근처로 몰립니다. 스케일 조정 및 이동 없이 정규화한 값을 그대로 활성화 함수에 입력하면 선형성에 빠질 수 있습니다. 활성화 함수 중 하나인 시그모이드 함수는 0근처에서 거의 선형성을 보이기 때문입니다. 활성화 함수는 비선형적이어야 합니다. 선형성을 보이면 안 됩니다. 이 문제를 해결하려고 정규화 후에 스케일 조정과 이동을 합니다.

이렇게 데이터를 정규화하고 스케일 및 이동 변환을 적용하면 계층 간 데이터 분포가 비슷해집니다.

경우에 따라 다르지만 보통은 배치 정규화를 활성화 함수 이전에 수행합니다.

 

3. 옵티마이저

신경망의 최적 가중치를 찾아주는 알고리즘을 옵티마이저(Optimizer)라고 합니다. 확률적 경사 하강법(SGD)이 대표적인 예이며, 그 외에도 다양한 옵티마이저가 있습니다. 주요 옵티마이저인 모멘텀, Adagrad, RMSProp, Adam의 개념을 간략히 알아보겠습니다.

 

3.1 모멘텀

SGD 옵티마이저는 최적 파라미터를 찾아가는 경로가 지그재그입니다. 상당히 비효율적이죠.

 

▼ SGD 옵티마이저로 최적 파라미터를 찾는 경로

 

SGD의 문제를 개선해 최적 파라미터를 더 빠르게 찾는 방법이 필요하겠군요. 그 방법이 바로 모멘텀입니다. 모멘텀(Momentum)은 SGD에 물리학의 관성 개념을 추가한 옵티마이저라고 이해하면 됩니다. 이전 단계의 진행 방향을 기억하여 일정 비율로 현 단계에 반영하므로 지그재그가 줄어드는 효과가 있습니다.

 

3.2 Adagrad

모델을 훈련할 때 학습률이 너무 크면 최적 파라미터를 찾지 못하고 지나칠 수 있습니다. 반대로 학습률이 너무 작으면 훈련 시간이 오래 걸립니다. 그렇다면 학습률이 상황에 따라 변하는 게 좋겠군요. Adagrad는 최적 파라미터에 도달할수록 학습률을 낮추도록 한 옵티마이저입니다. 최적점에서 멀 때는 학습률을 크게 잡아 빠르게 수렴하도록 하고, 최적점에 가까워졌을 때는 학습률을 낮춰 최적점을 지나치지 않도록 하는 방법입니다. 이런 학습률을 적응적 학습률(Adaptive learning rate)이라고 합니다. Adagrad는 개별 파라마터에 적응하며 학습률을 갱신하는 옵티마이저입니다.

 

▼ Adagrad 옵티마이저로 최적 파라미터를 찾는 경로

 

3.3 Adam

Adam은 딥러닝 모델을 설계할 때 가장 많이 사용하는 옵티마이저로, 모멘텀과 RMSProp의 장점을 결합한 방법입니다. 모멘텀처럼 관성을 이용하면서 RMSProp처럼 적응적 학습률을 적용합니다.

 

💡 TIP: 캐글에서는 기본적으로 Adam을 많이 사용합니다.

 

4. 전이 학습

전이 학습(Transfer Learning)이란 한 영역에서 사전 훈련된 모델(Pretrained Model)에 약간의 추가 학습을 더해 유사한 다른 영역에서도 활용하는 기법입니다. 예를 들어, 16년간 축구만 해온 국가대표 축구선수가 있다고 합시다. 이 사람이 족구도 잘할까요? 적어도 공을 다루는 데 익숙하니 기본기를 알려줄 것도 거의 없고, 족구 규칙에 맞춰 약간만 훈련하면 순식간에 족구 좀 하는 사람이 될 겁니다. 재능이 비슷하더라도 운동과 담쌓고 살던 사람이 비슷한 수준에 올라서는 기간과 비교하면 거의 ‘눈 떠보니 고수’라고 느껴질 것입니다. 전이 학습은 이러한 개념입니다. 한 영역에서 이미 훈련을 마친 모델을 유사한 다른 영역에 적응시키는 거죠. 처음부터 훈련하는 것보다 적은 데이터로 훨씬 빠르게 높은 성능치에 도달할 수 있습니다.

돌고래와 상어 이미지를 분류하는 모델을 만든다고 합시다. 다음 예시 그림처럼 아무런 훈련이 안된 모델은 시간도 오래 걸리고 예측 점수(ROC AUC)도 상대적으로 낮습니다. 반면 사전 훈련된 모델은 훈련 시간도 단축되고 성능도 더 뛰어납니다.

 

▼ 전이 학습 시 성능 비교(예시)

 

물론 훈련 데이터가 풍부하고 충분히 오래 훈련할 수 있다면 사전 훈련 여부는 크게 중요하지 않을 수 있습니다. 하지만 현실에서는 양질의 훈련 데이터를 다량으로 확보하기가 어려울 때가 많고, 복잡한 딥러닝 모델이라면 한 번 훈련하는 데만 수 시간에서 수 일 이상 걸리기도 합니다. 따라서 일반적인 상황이라면 전이 학습할 때 성능이 더 좋다고 볼 수 있습니다. 이렇듯 시간을 절약하면서 더 좋은 성능을 얻기 위해 사전 훈련 모델을 이용하는 경우가 많습니다.

 

4.1 전이 학습의 종류

전이 학습 방법은 사전 훈련 모델을 구성하는 신경망 전체를 다시 훈련할지(파인 튜닝; Fine Tuning), 일부 계층만 다시 훈련할지에 따라 두 가지로 나뉩니다.

 

▼ 전이 학습 종류

 

2번 그림은 일부 계층만 다시 훈련하는 예로, 특히 마지막의 전결합 계층만 새로운 데이터로 훈련하는 모습을 보여주고 있습니다. 이렇게 일부만 다시 훈련시켜도 유용한 이유는 신경망의 각 계층이 고유한 역할을 담당할 수 있기 때문입니다.

예를 들어 앞단 계층부터 차례로 이미지의 선 → 패턴 → 형상 → 분류 순서로 진행되는 ‘고양이 vs. 개 분류’용 딥러닝 모델이 있다고 해보죠. 이 모델을 ‘말 vs. 낙타 분류’용으로 전이시키려 합니다. 직관적으로 생각해봐도 이미지에서 선, 패턴, 형상을 추출하는 일은 대상이 어떤 동물이든 크게 상관이 없을 것입니다. 따라서 형상 추출까지는 그대로 두고, 분류 부분만 말과 낙타 데이터로 다시 훈련시키면 훨씬 빠르게 성능 좋은 모델을 얻을 수 있을 것입니다.

 

신백균
KAIST 산업및시스템공학과 졸업 후 한국생산성본부에서 직무교육 기획 및 운영을 담당하는 전문위원입니다. 세계 랭킹 0.18%의 캐글 노트북 엑스퍼트(Expert)이며, 월 평균 6만여 명이 방문하는 데이터 분석/머신러닝 관련 기술 블로그를 운영하고 있습니다. 참여자 1,200명 이상인 머신러닝 관련 오픈 채팅방의 운영진이기도 합니다.

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내