eBook

딥러닝 실용 안내서: 데이터부터 시작해 배포까지

챕터 3

데이터 전처리


심층 신경망에 대한 데이터를 세심하게 준비하면 모델의 정확도가 훨씬 높아질 수 있습니다. 이 챕터에서는 전처리가 특히 딥러닝에 왜 중요한지 알아보고, 다양한 신경망과 데이터형에 대한 고려사항을 살펴봅니다.

섹션

전처리가 필요한 이유

데이터 전처리는 상당히 넓은 개념입니다. 기본적으로는 원시 데이터를 특정 머신러닝 작업에 입력하기 전에 수행하는 모든 작업을 의미하고, 적어도 두 가지 이유에서 중요합니다.

  • 전처리는 데이터의 차원을 축소하고 패턴을 더욱 뚜렷하게 드러낼 수 있습니다.
  • 전처리는 데이터를 신경망 아키텍처에 적합한 형태로 변환할 수 있습니다.

데이터의 차원 축소

딥러닝은 데이터의 패턴을 인식하기 위해 신경망을 훈련합니다. 따라서 전체적인 분류에 영향을 미치지 않고 사용자가 원하는 패턴 인식에 필요하지 않은 모든 데이터를 제거할 수 있습니다. 

dl-engineers-ebook-ch3-mug-comparison

무관한 데이터는 불필요할 뿐만 아니라, 이를 제거하면 나머지 패턴이 더욱 뚜렷하게 드러나게 됩니다. 일반적으로 패턴이 사람에게 더욱 두드러지게 보이면 딥러닝 알고리즘에게도 더욱 두드러지게 보이고, 이는 훈련 과정에 도움이 됩니다.

데이터의 차원을 축소하는 또 다른 이유는 소위 '차원의 저주' 때문입니다. 차원이 높은 데이터는 특징이 많고 특징들 간에 편차가 크며, 따라서 해 공간에서 가능한 모든 조합을 포괄하려면 더욱 많은 훈련 데이터가 필요합니다. 따라서 차원이 높으면 데이터 자체가 클 뿐만 아니라 신경망을 훈련하기 위해 더 많은 데이터가 필요하고, 전체적으로 신경망의 복잡도가 높아지고 데이터 저장량이 많아지며 훈련 시간이 길어지게 됩니다.

차원 축소를 제대로 하려면 데이터를 잘 이해해야 한다는 점이 차원 축소의 단점입니다. 효과적으로 차원을 축소할 수 있으면서도 중요한 정보를 데이터셋에서 우발적으로 제거하지 않을 수 있다는 것을 알고 있어야 합니다. 그래서 딥러닝 응용 분야에서는 특정 분야 지식이 여전히 중요합니다.

예를 들면, 육각 너트의 제조 결함을 시각적으로 식별할 수 있는 신경망을 훈련하는 경우 찾고 있는 결함이 무엇인지, 그 결함이 데이터에 어떻게 나타날지 이해하고 있어야 할 것입니다. 아래의 데이터 영상의 경우 단순히 영상을 축소해서 크기를 줄이는 것은 좋은 생각이 아닐 것입니다. 찾고자 하는 결함 또는 패턴이 상당히 작기 때문에 그것들을 구분하는 세부 정보를 잃게 될 수 있습니다. 이 경우에는 영상을 자르는 방식이 더 나은 차원 축소 접근법일 것입니다.

dl-engineers-ebook-ch3-hex-nut-images

신경망 아키텍처에 맞는 데이터 준비

원시 데이터를 신경망 아키텍처에 사용하기 위해서는 대개 수정이 필요합니다. 이는 크기, 단위, 신호 유형 측면에서 신경망에 필요한 형태의 데이터로 만들어야 한다는 의미입니다. 다음의 예에서는 어떠한 신경망 및 데이터형이 있는지를 소개하며 이들이 요구하는 서로 다른 데이터 전처리의 종류를 보여줍니다.

널리 쓰이는 신경망 아키텍처는 CNN(컨벌루션 신경망)과 LSTM(장단기 기억) 신경망 등 두 가지가 있습니다.

CNN

CNN의 핵심 구성요소는 컨벌루션 계층입니다. 컨벌루션 계층은 입력 볼륨에 걸쳐서 필터 또는 커널을 밀고, 어떤 영역이 활성화되는지 찾는 방식으로 작동합니다. 이렇게 활성화된 영역에서 CNN은 어떤 특징이 존재하며, 데이터 내 어떤 영역에 존재하는지 학습하게 됩니다. 이러한 특징들을 조합하여 신경망은 가장 확률이 높은 분류 범주를 판별할 수 있습니다.

LSTM

LSTM 신경망은 시퀀스 데이터의 시간 스텝 간의 장기 종속성을 학습할 수 있는 일종의 RNN(순환 신경망)입니다. LSTM 신경망의 핵심 구성요소는 시퀀스 입력 계층과 LSTM 계층입니다. 시퀀스 입력 계층은 텍스트나 시계열 데이터 같은 시퀀스를 신경망에 전달합니다. LSTM 계층은 시퀀스 데이터의 시간 스텝 간의 장기 종속성을 학습합니다.

이 두 신경망(또한 대부분의 다른 신경망들)의 경우, 입력은 신경망에 전달되는 요소의 개수 및 데이터가 표현하는 대상이라는 측면에서 고정되어 있습니다. 이는 만일 수집하는 데이터의 크기나 데이터형이 일관되지 않으면 신경망에 필요한 형태로 전처리를 해야 한다는 뜻입니다.

데이터형

데이터를 전처리하는 방법은 다루는 데이터형에 따라 달라집니다. 여기에 몇 가지 예가 있습니다.

테이블 형식 데이터: 딥러닝 응용 분야에는 테이블 형식 데이터가 그다지 흔치는 않지만 일부 사용되고 있습니다. 원 핫 인코딩으로 테이블 형식 데이터의 목록을 희소 행렬로 변환하거나, 엔터티 임베딩으로 조밀 행렬로 변환해야 할 수 있습니다.

영상 및 비디오: 신경망에 전달하는 각 영상은 너비, 높이, 색상 레이어가 모두 동일한 크기여야 합니다. 따라서 전처리 과정에서 정확한 규격이 아닌 영상을 자르거나, 채우거나, 크기 조정해야 할 수 있습니다.

dl-engineers-ebook-ch3-mug-raw-data-crop-pad-resize

신호: 신호의 길이와 샘플 레이트가 일관되어야 하며, 그렇지 않으면 마찬가지로 자르기, 채우기, 리샘플링이 필요합니다. 

dl-engineers-ebook-ch3-graph-raw-data-crop-pad-resize
섹션

예제: 단시간 푸리에 변환을 사용하여 오디오 신호 전처리하기

아래는 'allow'라는 단어를 말하는 사람의 오디오 파형입니다. 44.1kHz로 녹음되었고 길이는 약 0.8초입니다. 분류 신경망은 길이가 1초인 오디오 신호가 필요합니다. 그래서 이 경우 전처리의 첫 번째 단계는 신호의 시작과 끝 부분을 0으로 채우는 작업입니다.

dl-engineers-ebook-ch3-raw-padded-audio-signals

사람 음성에서 중요한 오디오 성분의 대부분은 8kHz 미만의 주파수에서 생성되며, 따라서 이 오디오 신호는 정보 손실 없이 16kHz로 리샘플링할 수 있습니다.

단시간 푸리에 변환을 사용하여 시간에 따라 오디오 신호 안의 주파수 성분이 어떻게 변화하는지 시각화할 수 있습니다. 전체 신호보다 작은 윈도우 크기를 선택하고, 전체 신호에 걸쳐 그 윈도우를 움직이면서 데이터의 서브셋에 대해 FFT(고속 푸리에 변환)을 실행하면 됩니다.

dl-engineers-ebook-ch3-graph-1st-2nd-3rd-window

0에서 시작하고 끝나도록 윈도우 적용 함수에 윈도우 적용된 데이터를 곱합니다. 이렇게 하면, 불연속 신호의 FFT를 반복적으로 취했을 때 발생할 수 있는 인공적인 고주파수 정보가 제거됩니다.

dl-engineers-ebook-ch3-graph-scaled-windows

각각의 FFT는 전체 스펙트럼에 걸쳐 수천 개의 값을 생성합니다. 오디오 데이터에 있는 개별 단어를 인식할 때는 이러한 수준의 조밀도가 필요하지 않습니다. 주파수 정보의 양을 줄이기 위해 가장 널리 사용되는 방법은 스펙트럼을 여러 개의 bin으로 나눈 후, 멜 필터 뱅크로 각각의 bin에 있는 주파수를 스케일링하고 합산하는 방법입니다. 멜 필터 뱅크는 삼각 대역통과 필터의 집합이며, 필터들은 저주파수에서 조밀하게 모여 있고 주파수가 증가할수록 점차 넓어지고 퍼지는 양상을 보입니다. 이러한 유형의 필터 뱅크는 고주파보다 저주파에 민감한 사람의 귀를 모방하게 됩니다.

각각의 윈도우 스펙트럼에 멜 필터 뱅크를 적용하면 삼각 bin마다 해당 bin의 주파수 성분을 나타내는 하나의 값이 산출됩니다. 아래 그림을 보면 값에 따라 색상이 다른 사각형 마커로 bin 주파수 성분이 플로팅되어 있습니다.

dl-engineers-ebook-ch3-mel-filter-bank-applied

주파수 bin과 시간 윈도우로 구분된 이 모든 정보가 하나의 영상인 스펙트로그램으로 조합됩니다. 스펙트로그램은 시계열 데이터를 컨벌루션 신경망에 대한 입력으로 사용할 수 있는 영상으로 전처리하는 한 가지 방법입니다.

dl-engineers-ebook-ch3-spectrogram
섹션

전처리 및 키워드 검출에 대해 자세히 알아보기

패널 내비게이션