[카테고리:] 노트

노트

  • 멜 스펙트로그램: 소리를 이미지로 바꾸는 방법

    도입

    음악이나 음성을 이미지 처럼 다루려면 어떻게 해야 할까요? 이미지는 픽셀 값이 2차원 격자 형태로 배열되지만, 오디오는 시간에 따라 변하는 1차원 신호 입니다.

    오디오 입력 표현에는 원시 파형을 그대로 쓰는 접근과, 시간-주파수 표현으로 변환해 2차원 격자 입력으로 다루는 접근이 있습니다.

    멜 스펙트로그램(Mel Spectrogram)은 오디오 신호를 시간-주파수의 2차원 표현으로 변환합니다. 이 변환을 거치면 CNN이나 Vision Transformer 등 이미지 기반 모델을 오디오 분석에 활용할 수 있습니다.

    이 글에서는 멜 스펙트로그램이 어떻게 만들어지는지, 왜 “멜” 스케일을 사용하는지, 그리고 모델 입력으로 쓰기 위해 어떤 후처리가 필요한지 다루고, librosa로 직접 구현해봅니다.

    시각화에서는 librosa에서 제공하는 트럼펫 샘플을 사용했으며, 글 마지막에 파라미터를 직접 바꿔가며 실험해볼 수 있는 실습 코드 레포지토리도 준비했습니다.


    1. 배경: 소리와 주파수

    파형: 시간 영역의 표현

    소리는 공기의 진동입니다. 마이크는 이 진동을 전기 신호로 바꾸고, 컴퓨터는 이를 일정 간격으로 샘플링하여 숫자의 나열로 저장합니다. 이것이 파형(waveform)입니다.

    CD 품질 오디오는 초당 44,100개의 샘플을 기록합니다(44.1kHz\text{44.1kHz}). 1분짜리 모노 오디오는 약 265만 개(44,100×6044,100\times60)의 숫자로 이루어집니다. 스테레오는 채널이 2개이므로 그 두 배입니다. 이 글의 예시는 22,050Hz\text{22,050Hz}를 사용합니다. librosa.load는 기본적으로 이 값으로 리샘플링을 하며, 원본 샘프레이트를 유지하려면 sr=None\text{sr=None}을 지정합니다. 파형은 시간에 따른 진폭 변화를 보여주지만, 어떤 높낮이의 소리가 섞여 있는지는 직접 알려주지 않습니다.

    아래는 이 글에서 사용할 트럼펫 샘플의 음원과 그 파형입니다.

    Trumpet sample by Mihai Sorohan (sorohanro) / Freesound.org / CC BY
    [그림 1] 트럼펫 샘플의 파형 (sr=22,050Hz\text{sr=22,050Hz}). 상단은 약 5초 분량의 전체 오디오, 하단은 앞부분을 확대하여 개별 샘플의 진동을 살펴볼 수 있다.


    주파수: 소리의 높낮이

    소리의 높낮이는 주파수로 결정됩니다. 주파수는 1초에 진동하는 횟수이고, 단위는 Hz\text{Hz}(헤르츠)입니다. 피아노 가운데 ‘라’음은 약 440Hz\text{440Hz}, 즉 1초에 440번 진동합니다. 주파수가 높을수록 높은 음으로 들립니다.

    실제 소리는 단일 주파수가 아니라 여러 주파수의 조합입니다. 바이올린과 플루트가 같은 음을 연주해도 다르게 들리는 이유는, 기본 주파수는 같지만 함께 섞인 배음(overtone)의 구성이 다르기 때문입니다.

    파형만 보고는 어떤 주파수들이 얼마나 강하게 섞여 있는지 파악하기 어렵습니다. 이를 분석하는 도구가 푸리에 변환입니다.

    푸리에 변환: 시간에서 주파수로

    푸리에 변환(Fourier Transform)은 시간 영역의 신호를 주파수 영역으로 바꿔주는 수학적 도구입니다. 복잡하게 생긴 파형을 “이 신호는 100Hz\text{100Hz} 성분이 이만큼, 200Hz\text{200Hz} 성분이 이만큼, …” 하는 식으로 분해합니다.

    연속 신호에 대한 푸리에 변환은 다음과 같이 정의됩니다.

    X(f)=x(t)ei2πftdtX(f) = \int_{-\infty}^{\infty} x(t) \cdot e^{-i2\pi ft} \, dt


    여기서 x(t)x(t)는 시간 영역 신호, X(f)X(f)는 주파수 ff에서의 성분입니다. ei2πfte^{-i2\pi ft}는 주파수 ff의 복소 정현파로, 신호에서 해당 주파수 성분을 추출하는 역할을 합니다.

    디지털 오디오는 이산 신호이므로, 이산 푸리에 변환(DFT)을 사용합니다. 길이 NN 인 신호에 대한 DFT는 다음과 같습니다.

    X[k]=n=0N1x[n]ei2πkn/N,k=0,1,,N1X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-i2\pi kn/N}, \quad k = 0, 1, \ldots, N-1


    X[k]X[k]의 절댓값 |X[k]||X[k]|가 해당 주파수 성분의 크기(magnitude)입니다. 이를 제곱한 |X[k]|2|X[k]|^2를 파워 스펙트럼(power spectrum)이라고 부릅니다.

    예를 들어, 440Hz\text{440Hz} 기본음과 그 배음(880Hz\text{880Hz}, 1320Hz\text{1320Hz})을 합성한 신호를 생각해봅시다. 이 신호에 DFT를 적용하면, 세 주파수 지점에서 높은 크기(magnitude)가 나타나고, 이를 제곱하면 파워 스펙트럼이 됩니다. [그림 2]의 좌측은 세 사인파를 합성한 복잡한 파형이고, 우측은 푸리에 변환 결과로 440Hz\text{440Hz}, 880Hz\text{880Hz}, 1320Hz\text{1320Hz}에서 피크가 나타납니다.

    [그림 2] 푸리에 변환 예시. 좌측은 440Hz\text{440Hz}, 880Hz\text{880Hz}, 1320Hz\text{1320Hz}세 사인파를 합성한 신호, 우측은 푸리에 변환 결과로 세 주파수에서 피크가 나타난다.


    참고로, DFT(이산 푸리에 변환)는 변환의 정의이고, FFT(Fast Fourier Transform)는 DFT를 효율적으로 계산하는 알고리즘입니다.1 실무에서는 DFT를 FFT로 계산하는 것이 일반적입니다.

    푸리에 변환의 결과는 신호 전체에 대한 평균적인 주파수 구성입니다. 음악처럼 시간에 따라 주파수 구성이 변하는 신호를 분석하려면, “언제 어떤 주파수가 강했는지”를 알아야 합니다. 이를 위해 STFT가 등장합니다.


    2. STFT: 시간-주파수 분석

    짧은 구간씩 나눠서 분석하기

    STFT(Short-Time Fourier Transform, 단시간 푸리에 변환)는 신호를 짧은 구간(프레임)으로 나누고, 각 구간에 푸리에 변환을 적용하는 방법입니다. 이렇게 하면 시간에 따른 주파수 변화를 추적할 수 있습니다.

    [그림 3] STFT 기본 개념: 신호를 짧은 구간으로 나누고 각 구간에 FFT를 적용


    윈도우 함수

    신호를 자를 때 그냥 뚝 자르면 문제가 생깁니다. 유한 길이로 자르면 경계의 불연속으로 인해 에너지가 인접 주파수로 퍼지는 현상이 발생합니다. 이를 스펙트럼 누설(spectral leakage)이라고 합니다.

    이 문제를 완화하기 위해 윈도우 함수(window fuction)를 사용합니다. 윈도우 함수는 구간의 중앙은 그대로 두고 양 끝을 부드럽게 00으로 줄여주는 함수입니다. 가장 많이 쓰이는 것은 한(Hann) 윈도우 입니다.

    w[n]=0.5(1cos(2πnN1)),n=0,1,,N1w[n] = 0.5 \left(1 – \cos\left(\frac{2\pi n}{N-1}\right)\right), \quad n = 0, 1, \ldots, N-1


    [그림 4] 윈도우 함수 비교: 사각 윈도우 vs 한 윈도우


    홉 길이와 겹침

    윈도우를 얼마나 이동시키며 분석할지를 결정하는 것이 홉 길이(hop length)입니다. 윈도우 크기가 1024 샘플이고 홉 길이가 512 샘플이면, 인접한 두 프레임은 절반이 겹칩니다. 홉 길이가 작을수록 시간 해상도가 높아지지만 계산량이 늘어납니다.

    시간-주파수 해상도 트레이드오프

    윈도우 크기(n_fft)는 한 프레임의 샘플 수 입니다. 클수록 주파수 해상도가 높아지지만 시간 해상도는 낮아집니다. 시간 해상도와 주파수 해상도를 동시에 높일수는 없습니다.

    이것이 시간-주파수 해상도의 트레이드오프입니다. 시간 해상도와 주파수 해상도를 동시에 높일 수는 없습니다. 구체적으로, 시간 간격은 hop_length/sr\text{hop\_length}/sr 초, 주파수 간격은 sr/nfftsr/n_\text{fft} Hz\text{Hz}입니다.

    STFT 전체 흐름

    지금까지 설명한 개념들이 실제로 어떻게 결합되는지 살펴봅시다. 샘플레이트 22,050Hz\text{22,050Hz} 기준으로 n_fft=2048\text{n\_fft=2048}, hop_length=512\text{hop\_length=512}를 사용한다고 가정하겠습니다. 이 값은 librosa의 기본값으로, 문서에서 음악 신호 분석에 적합하다고 안내합니다.2

    • 각 프레임은 약 93ms (2048/22050)\text{93ms (2048/22050)} 길이의 신호를 분석합니다
    • 프레임은 약 23ms (512/22050)\text{23ms (512/22050)} 간격으로 이동하며, 인접 프레임과 75%\text{75\%} 겹칩니다
    • 한(Hann) 윈도우를 적용하여 경계를 부드럽게 처리한 뒤 FFT를 수행합니다
    • 각 프레임마다 주파수 스펙트럼이 산출되고, 이를 시간 순서로 나열하면 스펙트로그램이 됩니다
    [그림 5] STFT 개념: 윈도우(n_fft=2048\text{n\_fft=2048})를 hop_length=512\text{hop\_length=512} 씩 이동시키며 각 구간에 FFT 적용 (75% 겹침)


    STFT 수식

    윈도우 함수 w[n]w[n]을 적용한 STFT는 다음과 같이 정의됩니다.

    X[m,k]=n=0N1x[n+mH]ei2πkn/NX[m, k] = \sum_{n=0}^{N-1} x[n+mH] \cdot e^{-i2\pi kn/N}


    각 기호의 의미는 다음과 같습니다.

    • m:m:프레임 인덱스 (시간 축)
    • k:k:주파수 빈(FFT의 각 인덱스가 대응하는 주파수 구간) 인데스 (주파수 축)
    • H:H:홉 길이
    • N:N:윈도우 크기 (n_fft)

    샘플링 레이트가 srsr이고 FFT 크기가 nfftn_\text{fft} 일 때, kk번째 주파수 빈은 fk=ksr/nfftf_k=k \cdot sr / n_\text{fft} Hz\text{Hz}에 대응합니다.

    이 글에서는 단순화를 위해 N=win_length=n_fftN = \text{win\_length} = \text{n\_fft}인 경우를 가정합니다. 일반 구현에서는win_lengthn_fft\text{win\_length} \;\le \; \text{n\_fft}로 두고, 윈도우 함수를 적용한 뒤 00 패딩하여 FFT를 계산하기도 합니다.

    |X[m,k]|2|X[m,k]|^2를 모든 mm, kk에 대해 계산하면, 시간-주파수 평면 위에 에너지 분포가 그려집니다. 이것이 스펙트로그램(spectrogram)입니다.

    이하에서는 파워 스펙트로그램을 𝐏d×t\mathbf{P} \in \mathbb{R}^{d \times t} 로 표기합니다. 여기서 d=1+nfft/2d = 1 + \lfloor n_{\text{fft}} /2 \rfloor는 실수 입력 STFT의 주파수 빈 수이고, tt는 시간 프레임 수입니다. 행은 주파수 축, 열은 시간 축에 대응합니다.

    [그림 6] 스펙트로그램 예시: 가로축 시간, 세로축 주파수, 밝기가 에너지



    3. 멜 스케일: 사람처럼 듣기

    청각심리학적 배경

    스펙트로그램의 주파수 축은 선형입니다. 0Hz\text{0Hz}, 100Hz\text{100Hz}, 200Hz\text{200Hz}, … 같은 간격으로 나뉘어 있습니다. 하지만 사람의 귀는 주파수를 선형으로 인식하지 않습니다.

    1000Hz\text{1000Hz}에서 1100Hz\text{1100Hz}로 바뀌는 것과 100Hz\text{100Hz} 에서 200Hz\text{200Hz}로 바뀌는 것은 비교해보면, 물리적으로는 둘 다 100Hz\text{100Hz} 차이이지만 실제로 느끼는 음높이 변화는 후자가 훨씬 큽니다. 저주파 영역에서는 작은 주파수 차이도 크게 느껴지고, 고주파 영역에서는 큰 차이도 잘 구분하지 못합니다.

    이러한 청각 특성을 반영한 것이 멜 스케일(Mel scale)입니다. 멜 스케일에서 동일한 간격은 사람에게 동일한 음높이 차이로 지각됩니다.

    멜 변환 공식

    주파수를 멜로 변환하는 공식은 여러 버전이 있습니다. 대표적으로 HTK 스타일과 Slaney 스타일이 있으며, 라이브러리마다 기본값이 다릅니다. 이 글에서는 수식과 코드의 일관성을 위해 HTK 스타일을 사용합니다.3

    주파수 f(Hz)f(Hz)를 멜 mm으로 변환하는 HTK 공식은 다음과 같습니다.

    m=2595log10(1+f700)m = 2595 \cdot \log_{10}\left(1 + \frac{f}{700}\right)


    역변환은 다음과 같습니다.

    f=700(10m/25951)f = 700 \cdot \left(10^{m/2595} – 1\right)


    [그림 7] 선형 주파수 vs 멜 주파수: 저주파에서 촘촘, 고주파에서 넓어짐


    이 공식을 그래프로 그리면, 저주파 영역은 촘촘하게, 고주파 영역은 넓게 펼쳐지는 것을 볼 수 있습니다. 사람의 귀가 저주파를 더 세밀하게 구분하는 특성을 반영합니다.

    멜 필터 뱅크

    스펙트로그램을 멜 스케일로 바꾸려면 멜 필터 뱅크(Mel filter bank)를 사용합니다. 필터 뱅크는 여러 개의 삼각형 필터로 구성됩니다.

    1. 멜 스케일 위에서 등간격으로 중심 주파수를 정합니다. (예:128개).
    2. 각 중심 주파수에 삼각형 필터를 배치합니다.
    3. 이 필터들을 원래 주파수 축으로 역변환하면, 저주파에는 좁은 필터가, 고주파에는 넓은 필터가 배치됩니다.

    [그림 8] 멜 필터 뱅크: 저주파는 좁고 촘촘, 고주파는 넓고 듬성 (시각화를 위해 32개로 표시)


    멜 밴드 수 n_mels 는 라이브러리 기본값이 128\text{128}인 경우가 많고, n_mels가 커질수록 멜 축의 해상도가 높아지는 대신 입력 차원과 계산량도 증가합니다.

    주파수 빈(frequency bin)은 FFT 결과의 각 인덱스가 대응하는 주파수 구간입니다. 멜 빈은 이와 달리 멜 필터 뱅크의 각 밴드가 여러 주파수 빈을 가중합하여 만든 출력입니다.

    스펙트로그램의 각 프레임에 이 필터들을 적용하면, 기존의 수천 개 주파수 빈이 수십~수백 개의 멜 빈으로 압축됩니다. 이 과정에서 사람이 잘 구분하지 못하는 고주파의 세부 정보는 뭉쳐지고, 민감하게 반응하는 저주파 정보는 보존됩니다.

    [그림 9] 같은 오디오의 선형 스펙트로그램 vs 멜 스펙트로그램 비교


    수식으로 표현하면, 필터 뱅크 행렬을 𝐌nmels×d\mathbf{M} \in \mathbb{R}^{n_{\text{mels}} \times d}, 파워 스펙트로그램을 𝐏d×t\mathbf{P} \in \mathbb{R}^{d \times t}라고 할 때, 멜 스펙트로그램 𝐒melnmels×t\mathbf{S}_{\text{mel}} \in \mathbb{R}^{n_{\text{mels}} \times t}은 다음과 같이 계산됩니다.

    𝐒mel=𝐌𝐏\mathbf{S}_\text{mel} = \mathbf{M} \cdot \mathbf{P}


    여기서 d=1+nfft/2d = 1 + \lfloor n_{\text{fft}}/2 \rfloor는 주파수 빈 수, tt는 시간 프레임 수, nmelsn_{\text{mels}}는 멜 빈 수입니다.


    4. 멜 스펙트로그램 생성

    전체 파이프라인

    이 글과 이후의 코드 예시는 파워 스펙트럼(power spectrum, 진폭의 제곱)을 기준으로 멜 스펙트로그램을 구성합니다. 진폭(amplitude) 기반으로 작업할 경우 dB 변환 공식이 달라지므로(20 log10\text{20 log}_{10} 계열) 주의가 필요합니다. 또한 파워 스펙트럼의 스케일 상수(윈도우 보정, 정규화 등)는 구현마다 다를 수 있습니다.

    멜 스펙트로그램을 만드는 전체 과정을 정리하면 다음과 같습니다.

    [그림 10] 멜 스펙트로그램 생성 파이프라인


    dB 변환의 이유

    마지막 단계에서 dB(데시벨) 변환을 하는 이유는 무엇일까요?

    데시벨은 두 값의 비율을 로그 스케일로 표현하는 단위입니다. 원래 전력(power) 비율을 다루기 위해 만들어졌으며, 큰 동적 범위를 압축하여 다루기 쉽게 만들어줍니다.

    첫째, 사람의 청각은 소리의 세기를 대략 로그 스케일에 가깝게 인식합니다. dB 변환은 이러한 청각 특성과 방향이 맞아, 지각적으로 의미 있는 차이를 더 잘 반영합니다.

    둘째, 오디오 신호의 에너지는 범위가 매우 넓습니다. 가장 큰 값과 작은 값의 차이가 수백만 배에 이를 수 있습니다. dB 변환을 거치면 이 범위가 압축되어, 신경망이 학습하기 쉬운 형태가 됩니다.

    파워 스펙트럼에 대한 dB 변환은 다음과 같이 정의됩니다. 실제 구현에서는 수치 안정성을 위해 입력에 하한(amina_{min})을 적용합니다.

    𝐒mel, dB=10log10(max(𝐒mel,amin)ref)\mathbf{S}_{\text{mel, dB}} = 10 \cdot \log_{10}\left(\frac{\max(\mathbf{S}_{\text{mel}}, a_{\min})}{\text{ref}}\right)


    librosa의 power_to_db 는 이 공식을 구현하며, 추가로 top_db 파라미터로 출력의 동적 범위를 제한합니다.

    여기서 ref는 기준값입니다. ref=np.max 를 사용하면 각 샘플의 최대값이 0dB\text{0dB}가 되는 상대 스케일로 변환됩니다. 이 경우 모든 값은 00이하의 음수가 되며, top_db=80(기본 값)이면 바닥값은 -80dB\text{-80dB}근처로 제한됩니다.

    [그림 11] dB 변환 전/후 비교: 동적 범위가 압축되어 세부 정보가 드러남



    5. CNN 입력용 후처리

    멜 스펙트로그램을 이미지 기반 모델에 넣으려면 몇 가지 추가 처리가 필요합니다. 이 글에서는 CNN을 예로 들어 설명하며, dB 멜 스펙트로그램 𝐒mel, dB\mathbf{S}_{\text{mel, dB}}를 사용한다고 가정합니다.

    크기 고정

    CNN은 보통 고정된 입력 크기를 기대합니다. 하지만 오디오 파일의 길이는 제각각이므로, 멜 스펙트로그램의 시간 축 길이도 다릅니다.

    해결 방법은 여러 가지가 있습니다.

    • 자르기(crop): 긴 오디오는 일정 길이로 자름
    • 패딩(padding): 짧은 오디오는 특정 값으로 채움
    • 리사이즈(resize): 보간(interpolation)으로 크기 조정. 단, 시간 축이 왜곡될 수 있어 해석 관점에서 주의가 필요합니다. 분류 성능만을 목적으로 할 때 주로 사용됩니다.

    연구에 따라 다르지만, 많은 경우 오디오를 일정 길이(예:3초)로 자른 뒤 멜 스펙트로그램을 생성합니다. 이렇게 하면 모든 입력의 크기가 동일해집니다. 일반적으로 crop이나 padding을 우선 고려하고, resize는 필요한 경우에 한해 사용합니다.

    패딩을 사용할 경우, 파형 또는 파워 스펙트럼 단계에서 수행하는 것이 안전합니다. dB\text{dB}멜 스펙트로그램에서는 00 패딩을 피해야 합니다.4

    채널 처리

    멜 스펙트로그램은 기본적으로 단일 채널(흑백 이미지와 유사)입니다. 하지만 ImageNet 등에서 사전 학습된 CNN 모델들은 3채널(RGB) 입력을 기대합니다.

    흔한 해결책은 같은 dB\text{dB} 멜 스펙트로그램을 3번 복제하여 3채널로 만드는 것입니다. 또한 델타 및 델타-델타처럼 시간 변화 정보를 담은 특징을 별도 채널로 구성하는 방법도 있습니다.5

    𝐗3ch=[𝐒mel, dB,𝐒mel,dB,𝐒mel,dB]\mathbf{X}_\text{3ch} = [\mathbf{S}_{\text{mel, dB}}, \mathbf{S}_{\text{mel,dB}}, \mathbf{S}_{\text{mel,dB}}]
    [그림 12] 1채널 멜 스펙트로그램을 3채널로 복제하여 CNN입력 형태로 변환


    값 정규화

    신경망 학습을 안정화하려면 입력 값의 범위를 조정해야 합니다.

    Min-Max 정규화: 값을 0~1\text{0\textasciitilde1} 범위로 조정

    xnorm=xxminxmaxxminx_\text{norm} = \frac{x – x_\text{min}}{x_\text{max} – x_\text{min}}


    표준화(Standardization): 평균 00, 표준편차 11로 조정

    xstd=xμσx_\text{std} = \frac{x-\mu}{\sigma}


    데이터 누수를 피하려면 xmin,xmaxx_{\min}, x_{\max} 또는 μ\mu, σ\sigma는, 학습(train) 세트에서만 추정하고, 검증 및 테스트에는 동일 값을 적용해야 합니다.

    정규화와 패딩의 상호작용 주의: 패딩값이 정규화 통계에 포함되면 유효 데이터의 대비(contrast)가 무너질 수 있습니다. 정규화 통계는 패딩 영역을 제외하고 계산(마스크)하거나, 정규화를 먼저 수행한 뒤 패딩하는 방식을 권장합니다.

    사전 학습된 모델을 사용할 때는 해당 모델의 입력 전처리를 맞추는 것이 기본 전략입니다(예:ImageNet 평균/표준편차). 다만 스펙트로그램은 자연 이미지와 분포가 다르기 때문에, 별도의 정규화가 더 안정적인 경우도 있습니다. 실험을 통해 검증하는 것을 권장합니다.


    6. 코드 예시 (librosa)

    Python의 librosa 라이브러리를 사용하면 멜 스펙트로그램을 쉽게 생성할 수 있습니다. 아래 코드는 재현성을 위해 기본값을 포함한 주요 파라미터를 명시적으로 지정합니다.

    import librosa
    import librosa.display
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 오디오 로드
    y, sr = librosa.load('audio.wav', sr=22050)  # sr: 샘플링 레이트 (일반: 16000, 22050, 44100)
    
    # 멜 스펙트로그램 생성
    mel_spec = librosa.feature.melspectrogram(
        y=y,
        sr=sr,
        # STFT 파라미터
        n_fft=2048,          # FFT 크기 — 주파수 해상도 결정 (일반: 1024, 2048)
        hop_length=512,      # 홉 길이 — 시간 해상도 결정 (일반: n_fft/4)
        win_length=None,     # 윈도우 길이 — None이면 n_fft와 동일
        window='hann',       # 윈도우 함수 — 스펙트럼 누설 방지
        center=True,         # 프레임 중앙 정렬 (각주 참조)
        pad_mode='constant',
        # 스펙트럼 설정
        power=2.0,           # 2.0=파워, 1.0=진폭 — dB 공식에 영향 (10 vs 20 log)
        # 멜 필터 뱅크 파라미터
        n_mels=128,          # 멜 빈 수 (일반: 64, 128, 256)
        fmin=0,              # 최소 주파수 (Hz)
        fmax=None,           # 최대 주파수 — None이면 sr/2
        htk=True,            # HTK 멜 스케일 — 본문 수식과 일치 (librosa 기본값은 False)
        norm='slaney'        # 필터 정규화 방식
    )
    
    # dB 변환
    mel_db = librosa.power_to_db(
        mel_spec,
        ref=np.max,          # 상대 스케일 — 최대값이 0dB (패딩 시 주의, 각주 참조)
        amin=1e-10,          # 로그 클리핑 — log(0) 방지
        top_db=80            # 동적 범위 제한 — 바닥값 = 최대값 - 80dB
    )
    
    # 시각화
    plt.figure(figsize=(10, 4))
    librosa.display.specshow(
        mel_db,
        sr=sr,
        hop_length=512,
        x_axis='time',
        y_axis='mel',
        htk=True             # 시각화에서도 HTK 스케일 사용
    )
    plt.colorbar(format='%+2.0f dB')
    plt.title('Mel Spectrogram (dB)')
    plt.tight_layout()
    plt.show()

    power_to_db 함수 설명

    librosa.power_to_db 는 파워 스펙트로그램을 dB\text{dB} 스케일로 변환합니다. 내부적으로 10 * log10(max(S, amin) / ref 형태의 계산을 수행합니다.

    • ref=np.max: 각 입력의 최대값을 기준으로 상대 dB\text{dB}를 계산합니다. 최대값이 0dB\text{0dB}가 되고, 나머지는 음수값이 됩니다.
    • ref=1.0: 절대 기준을 사용합니다. 입력 스케일에 따라 값의 범위가 달라집니다.
    • amin: 입력의 하한값. np.maximum(amin, S) 형태로 클리핑하여 로그의 00 입력을 방지합니다.
    • top_db: 출력의 동적 범위 제한. 기본값이 8080이면 최대값에서 -80dB\text{-80dB} 이하는 잘립니다.

    데이터셋 간 비교가 필요하거나 절대적인 음량 정보가 중요한 경우, ref 설정에 주의해야 합니다.

    [그림 13] 실제 음악의 dB\text{dB} 멜 스펙트로그램 예시



    마무리

    멜 스펙트로그램은 오디오 신호를 CNN이나 Vision Transformer 등 이미지 기반 모델이 처리할 수 있는 2차원 이미지로 변환하는 표현입니다. 생성 과정을 요약하면 다음과 같습니다.

    1. STFT: 시간-주파수 분석으로 스펙트로그램 생성
    2. 멜 필터 뱅크: 사람의 청각 특성을 반영한 주파수 축 변환
    3. dB\text{dB} 변환: 에너지의 동적 범위 압축 (10 log10\text{10 log}_{10} 스케일)
    4. 후처리: 크기 고정, 채널 복제, 정규화

    이 글의 모든 수식과 코드는 파워 스펙트럼(진폭의 제곱) 기준이며, 멜 스케일은 HTK 스타일(htk=True)을 따릅니다. 진폭 기반으로 작업할 경우 dB\text{dB} 공식이 달라지고(20 log10\text{20 log}_{10}), Slaney\text{Slaney} 스타일 멜 스케일을 사용할 경우 변환 공식이 달라지므로 참고 바랍니다.

    이렇게 만들어진 멜 스펙트로그램은 AI 생성 음악 탐지, 음성 인식, 음악 장르 분류 등 다양한 오디오 딥러닝 태스크에서 가장 널리 쓰이는 입력 표현 중 하나입니다.

    실습 코드

    아래 레포지토리에서 본문의 각 단계를 직접 실행해볼 수 있습니다. 푸리에 변환, STFT, 멜 필터 뱅크, dB 변환, CNN 전처리까지 6개 모듈로 구성되어 있고, config.yaml에서 파라미터를 바꿔가며 결과 차이를 눈으로 확인할 수 있습니다.

    https://github.com/ToleranceKim/mel-spectrogram-tutorial


    참고문헌

    Stevens, S. S., Volkmann, J., & Newman, E. B. (1937). A scale for the measurement of the psychological magnitude pitch. The Journal of the Acoustical Society of America, 8(3), 185-190. (멜 개념의 심리음향적 기원)

    Slaney, M. (1998). Auditory Toolbox. Version 2. Technical Report #1998-010, Interval Research Corporation. https://engineering.purdue.edu/~malcolm/interval/1998-010/ (Slaney 스타일 멜 필터뱅크)

    Young, S., Evermann, G., Gales, M., Hain, T., Kershaw, D., Liu, X., Moore, G., Odell, J., Ollason, D., Povey, D., Valtchev, V., & Woodland, P. (2006). The HTK Book (Version 3.4). Cambridge University Engineering Department. (HTK식 멜 변환 공식, 델타/가속도 계수)

    Oppenheim, A. V., & Schafer, R. W. (2009). Discrete-Time Signal Processing (3rd ed.). Pearson. (DFT/STFT 수식, 파워 스펙트럼 정의)

    Harris, F. J. (1978). On the use of windows for harmonic analysis with the discrete Fourier transform. Proceedings of the IEEE, 66(1), 51-83. (스펙트럼 누설, 윈도우 함수, Hann 윈도우 수식)

    librosa.stft: https://librosa.org/doc/latest/generated/librosa.stft.html

    librosa.feature.melspectrogram: https://librosa.org/doc/latest/generated/librosa.feature.melspectrogram.html

    librosa.feature.delta: https://librosa.org/doc/latest/generated/librosa.feature.delta.html

    librosa.power_to_db: https://librosa.org/doc/latest/generated/librosa.power_to_db.html

    librosa.filters.mel: https://librosa.org/doc/latest/generated/librosa.filters.mel.html


    1. DFT를 정의대로 계산하면 연산량이 샘플 수의 제곱에 비례( O(N2)O(N^{2}) )이지만, FFT는 이를 샘플 수×log\text{샘플 수}\times log 수준( O(N log N)O(N\ log\ N) )으로 줄입니다. ↩︎
    2. librosa.stft 문서 원문: “The default value, n_fft=2048 samples, corresponds to a physical duration of 93 milliseconds at a sample rate of 22050 Hz. This value is well adapted for music signals. However, in speech processing, the recommended value is 512.” (https://librosa.org/doc/0.10.2/generated/librosa.stft.html) ↩︎
    3. HTK 스타일은 멜 주파수 변환 공식 선택(htk=True)을 의미합니다. 필터 가중치 정규화(norm)는 별도 설정이며, 이 글의 코드에서는 librosa 기본값(norm='slaney')을 따릅니다. melspectrogram은 내부적으로 librosa.filters.mel을 호출하여 필터 뱅크를 생성합니다. librosa의 기본값은 Slaney 스타일(htk=False)이며, Slaney 계열은 저주파 구간(대략 1kHz\text{1kHz} 이하)을 선형에 가깝게 매핑하는 방식으로 HTK의 완전 로그형과 미세한 차이가 있습니다. 재현성이 중요한 경우 옵션을 명시하는 것이 좋습니다. ↩︎
    4. 파형에서는 00 패딩이 가능합니다(00은 무음). 파워 멜 스펙트로그램에서도 00 패딩이 가능합니다(00은 에너지 없음, dB\text{dB} 변환 시 amin 으로 클리핑). dB\text{dB} 멜 스펙트로그램에서는 ref=np.max 처럼 0dB\text{0dB}가 최대 에너지로 정의되는 설정에서 0\text{0} 패딩을 피해야 합니다. dB\text{dB} 스케일 에서 00은 ‘무음’이 아니라 ‘기준 대비 동일 에너지’를 의미하므로, 00으로 채우면 패딩 구간이 최대값처럼 해석될 수 있습니다. 대신 -top_db 수준(예:-80dB\text{-80dB})이나 mel_db.min()을 사용하세요. 또한 librosa는 기본적으로 center=True로 동작하여 프레임 중앙 정렬을 위해 입력에 패딩을 추가합니다. 프레임의 시간 기준을 샘플 인덱스와 맞춰야 하는 경우(onset 검출 등)에는 center=False 를 검토하세요. ↩︎
    5. 멜 스펙트로그램(정적 특징), 델타(시간 축 1차 변화율 근사), 델타-델타(시간 축 2차 변화율 근사, 가속도)를 각 채널에 배치하는 방식입니다. 전통적인 음성 인식 파이프라인에서는 MFCC에 델타 및 델타-델타 계수를 추가하는 구성이 관행적으로 널리 사용되어 왔습니다. librosa에서는 librosa.feature.delta() 로 계산할 수 있으며, 이 함수는 단순 차분이 아닌 Savitzky-Golay\text{Savitzky-Golay} 필터 기반으로 변화량을 근사합니다. ↩︎

  • AI 생성 음악 탐지를 위한 CNN 기초

    도입

    AI 생성 음악 탐지를 다루는 논문을 읽다 보면, CNN이라는 이름이 자주 등장합니다. 오디오를 이미지처럼 생긴 2차원 표현(스펙트로그램)으로 변환하고 CNN을 적용하는 방식은, 오디오 딥페이크 탐지에서 오랫동안 기본 접근법으로 사용되어 왔습니다.

    CNN은 Convolution Neural Network의 줄임말로, 한국어로는 합성곱 신경망이라고 부릅니다. 일종의 인공 신경망으로, 이미지처럼 격자 형태로 배열된 데이터를 다루는 데 특화된 구조입니다. 이미지 분류, 객체 탐지 같은 시각 관련 작업에서 널리 쓰이고, 오디오를 격자 형태로 변환하면 음향 분석에도 쓸 수 있습니다.

    CNN의 핵심 아이디어는 입력 전체를 한꺼번에 보지 않고, 작은 영역씩 훑으면서 패턴을 찾는다는 것입니다. 이 “작은 영역씩 훑는 계산”이 바로 합성곱(convolution)입니다.

    이 글에서는 CNN을 두 부분으로 나눠 살펴봅니다. 전반부에서는 합성곱 층이 실제로 무엇을 계산하는지, 출력 크기는 어떻게 결정되는지 알아봅니다. 후반부에서는 층을 쌓으면 무슨 일이 생기는지, 비선형성과 풀링은 무엇인지 살펴봅니다.’


    1. 왜 CNN인가

    신경망에 대해 조금이라도 들어본 적이 있다면, 입력과 출력을 연결하는 구조를 떠올릴 수 있습니다. 가장 단순한 형태는 입력의 모든 값이 다음 층의 모든 값과 연결되는 구조인데, 이를 완전연결층(fully connected layer)이라고 부릅니다.

    문제는 이미지나 스펙트로그램처럼 크기가 큰 격자 데이터를 완전연결층에 그대로 넣으면, 연결해야 할 숫자(파라미터)가 폭발적으로 늘어난다는 점입니다. 예를 들어 224×224224\times224 크기의 컬러 이미지는 값이 약 15만 개인데, 이걸 전부 다음 층의 수천 개 뉴런과 일일이 연결하면 계산량도 많고, 학습도 어려워집니다.

    CNN은 이 문제를 다른 방식으로 접근합니다. 입력 전체를 한꺼번에 연결하는 대신 작은 영역만 보는 필터를 정의하고, 그 필터를 입력 위로 이동시키면서 같은 계산을 반복합니다. 이렇게 하면 파라미터 수가 훨씬 적어지고, 동시에 “가까운 위치의 값들이 함께 의미를 가진다”는 격자 데이터의 특성을 살릴 수 있습니다.

    정리하면, CNN은 격자 데이터에서 국소적인 패턴을 효율적으로 찾기 위해 설계된 구조입니다. 이제 그 핵심 계산인 합성곱이 구체적으로 무엇인지 살펴보겠습니다.


    2. CNN이 보는 입력: 격자

    CNN은 입력을 격자로 봅니다. 격자라는 말은 값들이 가로, 세로 좌표 위에 규칙적으로 배열되어 있다는 뜻입니다. 이미지가 대표적입니다. 가로 224칸, 세로 224칸의 격자에 각 칸마다 밝기나 색상 값이 들어 있는 구조입니다.

    오디오는 원래 시간에 따른 1차원 신호입니다. 하지만 이를 스펙트로그램으로 변환하면, 가로축은 시간, 세로축은 주파수인 2차원 격자가 됩니다. 각 칸에는 해당 시간대에 해당 주파수가 얼마나 강한지를 나타내는 값이 들어갑니다.

    AI 생성 음악 탐지 연구에서 특히 자주 쓰이는 것은 멜 스펙트로그램(Mel Spectrogram)입니다. 일반 스펙트로그램의 주파수 축을 사람의 청각 특성에 맞게 변환한 것으로, 사람 귀가 저주파 영역의 변화에 더 민감하다는 점을 반영합니다. 앞으로 다룰 기존의 논문들도 대부분 오디오를 멜 스펙트로그램으로 변환한 뒤 CNN에 입력하는 방식을 사용합니다.

    [그림 1] 오디오 파형(1차원)을 멜 스펙트로그램(2차원 격자)으로 변환하면 CNN이 처리할 수 있다


    이렇게 변환하면 오디오도 이미지처럼 다룰 수 있고, CNN을 적용할 수 있습니다. AI 생성 음악 탐지에서 CNN을 쓸 수 있는 이유가 여기에 있습니다.

    격자에 색상 정보처럼 여러 종류의 값이 있으면, 채널이라는 차원이 추가됩니다. 컬러 이미지는 빨강, 초록, 파랑의 3개 채널을 가집니다. 이 경우 입력은 채널 ×\times 높이 ×\times 너비의 3차원 구조가 됩니다. 채널이 계산에 어떤 영향을 주는지는 뒤에서 다시 다루겠습니다.


    3. 합성곱이란

    합성곱 층에는 필터(filter)라는 작은 격자가 있습니다. 커널(kernel)이라고도 부르지만, 이 글에서는 필터로 통일하겠습니다. 필터는 보통 3×33\times3이나 5×55\times5처럼 입력보다 훨씬 작은 크기입니다.

    계산은 다음과 같이 진행됩니다.

    1. 필터를 입력 격자의 왼쪽 위 구석에 올려놓습니다.
    2. 필터와 겹치는 입력 영역에서, 같은 위치끼리 값을 곱합니다.
    3. 곱한 값들을 모두 더해서 하나의 숫자를 만듭니다.
    4. 이 숫자가 출력 격자의 한 칸이 됩니다.
    5. 필터를 오른쪽으로 한 칸 옮기고, 같은 계산을 반복합니다.
    6. 오른쪽 끝에 도달하면 아래로 한 줄 내려가서 다시 왼쪽부터 시작합니다.
    7. 입력 전체를 훑을 때까지 반복합니다.

    이렇게 해서 만들어진 출력 격자를 특징맵(feature map)이라고 부릅니다. “특징”이라는 이름이 붙은 이유는, 필터가 입력에서 특정 패턴에 반응하도록 학습되기 때문입니다.

    핵심을 다시 정리하면 이렇습니다. 출력의 한 칸은 입력 전체가 아니라, 필터 크기만큼의 작은 영역만 보고 만들어집니다. 이것이 CNN에서 말하는 국소(local) 연산입니다.

    [그림 2] 필터가 입력 위를 이동하며 출력을 한 칸씩 만드는 과정. 3×33\times3 필터 사용


    수식으로 정리

    수식으로 살펴보면 더 정확해집니다. 입력을 XX, 필터를 WW, 출력을 YY 라고 하겠습니다. 필터 크기가
    KK ×\times KK 이고, 필터가 한 칸씩 이동한다고 하면, 출력의 한 칸은 다음과 같습니다.

    Y[i,j]=u=0K1v=0K1W[u,v]X[i+u,j+v]Y[i,j] = \sum_{u=0}^{K-1}\sum_{v=0}^{K-1} W[u,v] \cdot X[i+u, j+v]


    이 수식을 말로 풀면 이렇습니다. 입력에서 위치 (i,j)(i,j)를 시작점으로 KK ×\times KK 영역을 잡습니다. 그 영역과 필터를 같은 위치끼리 곱하고, 전부 더한 값이 Y[i,j]Y[i,j] 가 됩니다. iijj 를 바꿔가며 이 계산을 반복하면 특징맵 전체가 완성됩니다.1

    실제 구현에서는 여기에 편향(bias) bb 가 더해져서 Y[i,j]=WX+bY[i, j] = \sum W\cdot X + b 형태가 됩니다. 편향은 필터당 하나씩 있고, 출력의 모든 위치에 같은 값이 더해집니다. 이 글에서는 핵심 연산에 집중하기 위해 편향을 생략했지만, 코드나 논문에서는 대부분 포함되어 있습니다.

    숫자 예시로 직접 계산해보기

    실제 숫자로 한 번 계산해보겠습니다.

    입력의 한 부분이 다음과 같다고 가정합니다.

    Xpatch=[120013211]X_{patch}= \begin{bmatrix} 1 & 2 & 0 \\ 0 & 1 & 3 \\ 2 & 1 & 1 \end{bmatrix}


    필터가 다음과 같다고 가정합니다.

    W=[101101101]W= \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \end{bmatrix}


    이 필터는 왼쪽 열은 +1\text{+1}, 오른쪽 열은 -1\text{-1}로 되어 있습니다. 직관적으로 보면, 왼쪽이 밝고 오른쪽이 어두운 패턴(세로 경계)에 크게 반응하도록 설계된 필터입니다.

    출력 한 칸을 계산해 보겠습니다. 같은 위치끼리 곱하고 더합니다.

    Y=(1×1)+(2×0)+(0×1)Y = (1 \times 1) + (2 \times 0) + (0 \times -1)
    +(0×1)+(1×0)+(3×1)\quad + (0 \times 1) + (1 \times 0) + (3 \times -1)
    +(2×1)+(1×0)+(1×1)\quad + (2 \times 1) + (1 \times 0) + (1 \times -1)
    Y=1+0+0+0+03+2+01=1Y = 1 + 0 + 0 + 0 + 0 – 3 + 2 + 0 – 1 = -1


    결과는 1-1입니다. 중요한 것은 이 값 자체가 아니라, 입력 패치의 값 배치가 바뀌면 출력도 달라진다는 점입니다. 만약 입력이 왼쪽은 밝고 오른쪽은 어두운 패턴이었다면, 이 필터는 큰 양수를 출력했을 것입니다.

    [그림 3] 입력 패턴에 따른 필터 반응. 위: 본문 예시(1-1 출력). 아래: 왼쪽이 밝고 오른쪽이 어두운 입력(+9+9 출력).
    같은 필터라도 입력 패턴에 따라 출력이 달라진다.


    CNN은 학습 과정에서 데이터에 맞게 필터의 값을 조정합니다. 멜 스펙트로그램에서 특정 시간-주파수 패턴을 잡아내는 것도 결국 이 원리입니다. 따라서 합성곱 층을 국소 패턴에 반응하는 계산 단위로 이해하는 것이 출발점이 됩니다.


    4. 출력 크기는 어떻게 결정되는가

    지금까지는 필터가 한 칸씩 이동한다고 가정했습니다. 하지만 실제로는 이동 간격을 조절하거나, 입력 가장자리에 값을 덧붙이는 경우가 많습니다. 이 두 가지 개념을 알아야 출력 크기를 계산할 수 있습니다.

    스트라이드(stride): 필더가 한 번에 몇 칸씩 이동하는지를 나타냅니다. 스트라이드가 11이면 한 칸씩, 22이면 두 칸씩 이동합니다. 스트라이드가 크면 출력 격자가 작아집니다.

    패딩(padding): 입력 가장자리에 00같은 값을 덧붙여서 입력을 인위적으로 키우는 것입니다. 패딩을 넣으면 필터가 가장자리까지 충분히 훑을 수 있어서, 출력 크기가 덜 줄어들거나 유지됩니다.

    [그림 4] 패딩 비교. 패딩이 없으면 출력이 줄어들고, 패딩 11이면 출력 크기가 유지된다. 필터 3×33\times3, 스트라이드 11


    [그림 5] 스트라이드 비교. 스트라이드가 클수록 출력이 작아진다. 필터 3×33\times3


    출력 크기를 구하는 공식은 다음과 같습니다. 입력 높이를 HH, 너비를 WW, 필터 크기를 KK, 패딩을 PP, 스트라이드를 SS 라고 하면:

    Hout=H+2PKS+1H_{out} = \left\lfloor \frac{H + 2P – K}{S} \right\rfloor +1
    Wout=W+2pKS+1W_{out} = \left\lfloor \frac{W + 2p – K}{S} \right\rfloor + 1


    \left\lfloor \right\rfloor기호는 바닥함수로, 해당 값을 넘지 않는 가장 큰 정수를 뜻합니다. 이 공식은 dilation=1\text{dilation=1}인 표준 합성곱을 가정합니다.2

    숫자를 대입해 보겠습니다.

    예시 1: 크기 유지

    입력 높이가 224224, 필터가 3×33\times3, 패딩이 11, 스트라이드가 11이면 다음과 같습니다.


    Hout=224+2×131+1=2231+1=224H_{out} = \left\lfloor \frac{224 + 2 \times 1 – 3}{1} \right\rfloor + 1 = \left\lfloor \frac{223}{1} \right\rfloor + 1 = 224


    3×33\times3 필터에 패딩 11, 스트라이드 11이면 출력 크기가 입력과 같습니다. 이 조합은 실제 모델에서 아주 자주 등장합니다.

    예시 2: 크기를 절반으로 줄이기

    같은 조건에서 스트라이드를 2로 바꾸면 다음과 같습니다.

    Hout=224+2×132+1=2232+1=111+1=112H_{out} = \left\lfloor \frac{224 + 2 \times 1 – 3}{2} \right\rfloor + 1 = \left\lfloor \frac{223}{2} \right\rfloor + 1 = 111 + 1 = 112


    출력이 절반으로 줄어듭니다. 스트라이드가 크면 필터가 넓은 간격으로 이동하므로 출력이 작아집니다.


    5. 채널이 있을 때는 어떻게 되는가

    지금까지는 입력이 2차원(높이 ×\times 너비)이라고 가정했습니다. 하지만 실제 입력은 채널을 가지는 경우가 많습니다.

    컬러 이미지는 빨강, 초록, 파랑 3개 채널을 가집니다. 멜 스펙트로그램도 여러 표현을 함께 사용하면 채널이 여러 개가 될 수 있습니다. 예를 들어 기본 멜 스펙트로그램에 시간에 따른 변화량(델타 특징)을 추가하면 채널이 늘어납니다. 그리고 CNN의 중간 층에서는 이전층의 출력이 입력이 되는데, 이때 채널이 수십에서 수백 개일 수도 있습니다.

    입력 형태를 채널 ×\times 높이 ×\times 너비, 즉 (C,H,WC, H, W)로 쓰겠습니다. 참고로 이 표기는 PyTorch의 관례를 따른 것입니다. TensorFlow나 일부 데이터 형식에서는 (H,W,CH, W, C)순서를 쓰기도 합니다.

    채널이 있으면 필터도 같은 채널 수를 가집니다. 그리고 출력 한 칸을 계산할 때, 모든 채널에서 곱하고 더한 값을 다시 채널 방향으로 합칩니다.

    Y[i,j]=c=0C1u=0K1v=0K1W[c,u,v]X[c,i+u,j+v]Y[i,j] = \sum_{c=0}^{C-1}\sum_{u=0}^{K-1}\sum_{v=0}^{K-1} W[c,u,v] \cdot X[c, i+u, j+v]


    즉, 채널이 늘어나면 합산 범위가 채널 방향으로 확장됩니다. 결과적으로 필터 하나는 모든 채널의 정보를 종합해서 출력 한 칸을 만듭니다.

    [그림 6] 다채널 합성곱에서 출력 한 칸이 계산되는 과정. 필터는 입력과 같은 채널 수를 가지며, 모든 채널에서 곱하고 더한 값을 다시 합산한다


    필터 개수와 출력 채널

    여기서 중요한 규칙이 하나 있습니다. 필터 1개는 특징맵 1개를 만듭니다.

    필터를 여러 개 사용하면, 각 필터가 하나씩 특징맵을 만들고, 이 특징맵들이 쌓여서 출력의 채널이 됩니다. 따라서 출력 채널 수는 필터 개수로 결정됩니다.

    예를 들어 입력이 (3,224,224)(3, 224, 224)이고 3×33\times3 필터 64개를 사용하면, 출력은 (64,224,224)(64, 224, 224)이 됩니다(패딩과 스트라이드에 따라 높이와 너비는 달라질 수 있습니다). 번째 차원이 필터 개수이고, 이것이 곧 출력 채널 수가 됩니다.3


    중간 정리

    여기까지 합성곱 한 층이 무엇을 계산하는지 살펴봤습니다. 정리하면 다음과 같습니다.

    • CNN은 격자 형태의 데이터에서 국소 패턴을 효율적으로 찾기 위한 신경망이다.
    • 핵심 계산인 합성곱은 작은 필터를 입력 위로 이동시키면서, 겹치는 영역의 값을 곱하고 더해 특징맵을 만드는 연산이다.
    • 출력의 한 칸은 입력 전체가 아니라 필터 크기만큼의 작은 영역만 본다.

    이제 이 계산을 층으로 쌓으면 무슨 일이 생기는지 알아봅니다.


    6. 특징맵 다시 보기

    합성곱의 출력을 특징맵(feature map)이라고 부른다고 했습니다. 이 이름이 붙은 이유를 조금 더 생각해 봅니다.

    특징맵의 각 칸에는 숫자가 들어 있습니다. 이 숫자는 해당 위치의 입력 패치와 필터의 가중합(내적)에 가까운 반응값이며, 직관적으로는 ‘비슷할수록 크게 반응한다’고 이해할 수 있습니다. 다만 이는 정규화된 유사도가 아니라 가중합 값이어서, 값의 크기는 대체로 입력 스케일이나 학습 상태에 따라 달라질 수 있습니다. 일반적으로 값의 절댓값이 클수록 반응이 강합니다. 대체로 양수는 필터가 기대하는 패턴 방향과 비슷한 것이 있고, 음수는 반대 방향인 것입니다. 예를 들어 세로 경계를 찾는 필터가 있을 때, “왼쪽이 밝고 오른쪽이 어두운”경계에서는 큰 양수가, “왼쪽이 어둡고 오른쪽이 밝은”경계에서는 큰 음수가 나올 수 있습니다. ReLU\text{ReLU} 활성화 함수를 적용하면 음수 반응은 00으로 제거됩니다(활성화 함수에 대해서는 7장에서 다룹니다).

    따라서 특징맵은 일종의 지도입니다. “이 패턴이 입력의 어디에 있는가”를 위치별로 기록한 결과물입니다. 필터가 세로 경계를 찾도록 학습되었다면, 특징맵에서 값이 큰 위치는 입력에서 세로 경계가 있는 곳입니다.

    [그림 7] 특징맵은 패턴의 위치 지도. 입력에서 세로 경계가 있는 위치(빨간 선)가 특징맵에서 큰 값(빨간 테두리 영역)으로 나타난다.


    CNN에서 필터는 여러 개 사용됩니다. 필터마다 다른 패턴을 찾고, 필터마다 특징맵이 하나씩 만들어집니다. 결과적으로 한 층의 출력은 여러 장의 특징맵이 쌓인 형태가 됩니다.


    7. 비선형성: 왜 활성화 함수가 필요한가

    합성곱은 곱하고 더하는 연산입니다. 수학적으로 이런 연산을 선형(linear) 연산이라고 부릅니다. 선형 연산에는 한 가지 특성이 있습니다. 선형 연산을 여러 번 연속으로 적용해도, 결과는 한 번의 선형 연산으로 표현할 수 있다는 것입니다.

    이게 왜 문제일까요? 합성곱 층을 10개 쌓아도, 전체가 하나의 선형 변환과 같다면 층을 쌓는 의미가 없습니다. 복잡한 패턴을 표현하려면 층을 쌓을수록 표현력이 늘어나야 하는데, 선형 연산만으로는 그렇게 되지 않습니다.

    이 문제를 해결하는 방법이 활성화 함수(activation function)입니다. 합성곱 출력에 비선형 함수를 적용하면, 층을 쌓을수록 표현할 수 있는 패턴의 복잡도가 실제로 늘어납니다.

    가장 널리 쓰이는 활성화 함수는 ReLU(Rectified Linear Unit)\text{ReLU(Rectified Linear Unit)}입니다. 계산은 단순합니다.

    ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0,x)


    입력이 양수면 그대로 내보내고, 음수면 00으로 바꿉니다. 이 간단한 연산이 비선형성을 만들어내고, 층을 깊게 쌓을 수 있게 해줍니다.

    [그림 8] ReLU\text{ReLU} 활성화 함수. 음수는 00으로, 양수는 그대로 출력한다


    ReLU\text{ReLU} 외에도 Sigmoid\text{Sigmoid}, Tanh\text{Tanh}, Leaky ReLU\text{Leaky ReLU} 같은 활성화 함수들이 있습니다. 각각 특성이 다르지만, 핵심 역할은 같습니다. 선형 연산 사이에 비선형성을 넣어서 층을 쌓는 효과를 만드는 것입니다.


    8. 풀링: 해상도를 줄이면서 요약하기

    풀링(pooling)은 특징맵의 크기를 줄이는 연산입니다. 작은 영역을 하나의 값으로 요약합니다.

    가장 흔한 것은 최대 풀링(max pooling)입니다. 예를 들어 2×22\times2 최대 풀링은 2×22\times2 영역에서 가장 큰 값 하나만 남기고 나머지는 버립니다. 이렇게 하면 특징맵의 높이와 너비가 절반으로 줄어듭니다.

    [그림 9] 2×22\times2 최대 풀링. 각 영역에서 가장 큰 값만 남기고 출력 크기가 절반으로 줄어든다


    풀링을 쓰는 이유는 몇 가지가 있습니다.

    첫째, 계산량을 줄입니다. 특징맵이 작아지면 다음 층에서 처리할 데이터가 줄어듭니다.

    둘째, 위치 변화에 덜 민감해집니다. 패턴이 정확히 같은 위치에 없어도, 근처에 있으면 최대 풀링이 잡아냅니다. 다만 이것이 완전한 위치 불변성을 보장하는 것은 아니고, 작은 평행이동에 덜 민감해지는 정도로 이해하는 것이 정확합니다.

    셋째, 다음 층이 더 넓은 범위를 보게 됩니다. 이 부분은 바로 다음에 다룹니다.

    풀링 대신 스트라이드가 2 이상인 합성곱을 써서 크기를 줄이는 방법도 있습니다. 풀링은 단순히 값을 선택하지만, 스트라이드 합성곱은 학습 가능한 필터로 다운샘플링을 합니다.


    9. 수용 영역: 층을 쌓으면 더 넓은 범위를 본다

    수용 영역(receptive field)은 출력의 한 칸이 입력에서 참조하는 영역의 크기입니다. 앞에서 합성곱 출력 한 칸은 필터 크기만큼의 입력 영역을 본다고 했습니다. 3×33\times3 필터라면 수용 영역은 3×33\times3 입니다.

    그런데 층을 쌓으면 상황이 달라집니다.

    첫 번째 층의 출력 한 칸은 입력의 3×33\times3 영역을 봅니다. 두 번째 층은 첫 번째 층의 출력을 입력으로 받습니다. 두 번째 층의 출력 한 칸은 첫 번째 층 출력의 3×33\times3 영역을 봅니다. 그런데 첫 번째 층 출력의 각 칸은 이미 원본 입력의 3×33\times3을 보고 있었습니다.

    결과적으로 두 번째 층의 출력 한 칸은 원본 입력의 5×55\times5 영역을 간접적으로 참조합니다. 세 번째 층까지 가면 7×77\times7이 됩니다.

    [그림 10] 수용 영역 확대. 3×33\times3 필터, 스트라이드 11일 때 층을 쌓을수록 수용 영역이 커진다. 공식: RF=1+L×(K1)RF = 1 + L × (K-1) (stride=1\text{stride=1}, dilation=1\text{dilation=1}, 풀링 없음\text{풀링 없음}인 단순 경우)


    3×33\times3 필터를 사용하고 스트라이드가 11이면, 층을 하나 쌓을 때마다 수용 영역의 한 변이 22씩 늘어납니다.

    아래 식은 stride=1\text{stride=1}, dilation=1\text{dilation=1} 풀링 없이 동일한 K×KK\times K 합성곱을 LL번 연속 적용하는 단순한 경우를 가정합니다.

    =1+L×(K1)수용 영역 = 1 + L \times (K – 1)


    여기서 LL은 층의 개수, KK는 필터 크기입니다. 3×33\times3필터로 5개 층을 쌓으면 수용 영역은 1+5×2=111 + 5 \times2=11이 됩니다.

    풀링이나 스트라이드 합성곱이 있으면 수용 영역은 더 빠르게 커집니다. 해상도가 줄어들 때마다, 다음 층의 한 칸이 원본 입력에서 더 넓은 영역에 대응하기 때문입니다.


    10. 계층적 특징: 작은 패턴에서 큰 패턴으로

    수용 영역이 커진다는 것은 단순히 “더 넓은 영역을 본다”는 의미만 있는 게 아닙니다. CNN이 복잡한 패턴을 인식하는 방식과 직결됩니다.

    얕은 층은 수용 영역이 작습니다. 작은 영역만 보기 때문에, 찾을 수 있는 패턴도 단순합니다. 경계선, 질감, 색상 변화 같은 저수준 특징입니다.

    깊은 층은 수용 영역이 큽니다. 넓은 영역을 보기 때문에, 앞 층들이 찾아낸 저수준 특징들의 조합을 볼 수 있습니다. 이런 조합이 더 복잡한 고수준 특징이 됩니다.

    이미지에서 예를 들면, 얕은 층은 윤곽선을 찾고, 중간 층은 윤곽선들의 조합으로 눈이나 코 같은 부분을 찾고, 깊은 층은 그런 부분들의 배치로 얼굴 전체를 인식합니다.

    멜 스펙트로그램에서도 비슷한 일이 일어납니다. 얕은 층은 특정 주파수 대역의 에너지 변화나 짧은 시간 패턴을 찾습니다. 깊은 층은 이런 패턴들의 조합으로 음색이나 리듬 같은 더 추상적인 특징을 찾습니다.

    [그림 11] 계층적 특징 학습. 얕은 층은 단순한 패턴, 깊은 층은 복잡한 패턴을 인식한다



    마무리

    CNN이 입력을 처리하는 흐름을 정리하면 다음과 같습니다.

    1. 격자 입력: 이미지나 멜 스펙트로그램 같은 2차원 격자 데이터가 들어옴
    2. 합성곱: 작은 필터로 국소 패턴을 찾아 특징맵 생성
    3. 활성화 함수: ReLU\text{ReLU} 등으로 비선형성 부여
    4. 풀링: 특징맵 크기를 줄이며 정보 요약
    5. 층 반복: 2~4를 반복하며 수용 영역 확대, 계층적 특징 학습

    이 과정을 통해 얕은 층은 경계선 같은 단순한 패턴을, 깊은 층은 복잡한 고수준 패턴을 학습합니다. 실제 모델에서는 여기에 정규화(BatchNorm\text{BatchNorm}), 규제(Dropout\text{Dropout}), 분류기(전역 평균 풀링, 완전연결층 등)가 결합되는 경우가 많습니다. 멜 스펙트로그램으로 변환된 오디오에 CNN을 적용하면, 시간-주파수 평면에서 저수준 음향 패턴부터 고수준의 음악적 특징까지 계층적으로 추출할 수 있습니다. 인간 음악과 AI 생성 음악의 차이가 이런 계층적 특징에서 포착될 가능성이 있기 때문에, CNN이 AI 생성 음악을 포함한 오디오 딥페이크 탐지에 활용되어 왔습니다.


    참고문헌

    Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. (CNN 전반, 합성곱, 비선형성, 풀링)

    LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-Based Learning Applied to Document Recognition. Proceedings of the IEEE, 86(11), 2278–2324. (CNN 기본 구조)

    Nair, V. & Hinton, G. E. (2010). Rectified Linear Units Improve Restricted Boltzmann Machines. Proceedings of the 27th International Conference on Machine Learning (ICML-10), 807–814. (ReLU 활성화 함수)

    Hershey, S. et al. (2017). CNN Architectures for Large-Scale Audio Classification. IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 131–135. (오디오 CNN) (preprint: arXiv:1609.09430)

    Dumoulin, V. & Visin, F. (2016). A guide to convolution arithmetic for deep learning. arXiv:1603.07285. (출력 크기 공식, 패딩, 스트라이드)


    1. 엄밀한 신호처리에서 convolution\text{convolution}은 필터를 뒤집어서 계산하는 연산입니다. 반면 본문의 수식처럼 필터를 뒤집지 않고 그대로 쓰는 연산은 cross-correlation\text{cross-correlation}이라고 부릅니다. 딥러닝 프레임워크들은 대부분 cross-correlation\text{cross-correlation}을 구현하면서 “convolution”\text{“convolution”}이라고 부릅니다. 필터 값은 학습으로 결정되기 때문에, 뒤집든 안 뒤집든 결과적으로 같은 패턴을 찾을 수 있습니다. 이 글에서도 관례를 따라 이 연산을 합성곱이라고 부릅니다. ↩︎
    2. Dilation\text{Dilation}(팽창)은 필터 원소 사이에 빈 칸을 삽입하는 기법입니다. 기본값 dilation=1\text{dilation=1}은 간격이 없는 일반 합성곱입니다. dilation=2\text{dilation=2}이면 필터 원소 사이에 1칸씩 간격이 생겨서, 3×33×3 필터가 5×55×5 영역을 커버하게 됩니다. 필터 크기(가중치 수)는 그대로이면서 수용 영역만 넓어지는 효과가 있습니다. ↩︎
    3. PyTorch\text{PyTorch}에서 Conv2d\text{Conv2d} 가중치 텐서는 (out_channels, in_channels/groups, kH, kW) 형태입니다. groups\text{groups}는 입력 채널을 여러 묶음으로 나눠 각각 독립적으로 합성곱하는 옵션이며, 기본값은 11입니다. 기본 설정(groups=1\text{groups=1}) 에서는 (out_channels, in_channels, kH, kW) 로 이해해도 됩니다. 첫 번째 차원이 필터 개수이고, 이것이 곧 출력 채널 수가 됩니다. ↩︎

  • 왜 우리는 AI 음악에 거부감을 느끼는가

    2023년 컬럼비아대학교 연구팀이 Scientific Reports에 발표한 연구는 주목할 만한 현상을 보여주었습니다. 2,965명의 참가자를 대상으로 한 6개의 실험에서, 사람들은 완전히 동일한 예술 작품이라도 ‘AI가 만들었다’는 라벨이 붙으면 그 가치를 62%나 낮게 평가했습니다. 특히 ‘기술(skill)’과 ‘금전적 가치’ 차원에서 평가 하락이 두드러졌습니다. 더 눈에 띄는 점은, 대다수의 참가자들(70% 이상)이 라벨 없이는 AI 작품과 인간 작품을 구별하지 못한다고 인정했다는 것입니다.

    이 연구는 시각 예술에 관한 것이지만, 음악이라고 다르지 않을 것입니다. AI 음악은 이미 인간의 귀로 구별할 수 없을 정도로 정교해졌습니다. 그러나 ‘구별할 수 없음’과 ‘같은 가치를 느끼는가’는 다른 차원의 문제입니다. 이 연구가 시사하는 것은, 인간이 예술에서 찾는 것이 단순한 감각적 자극 이상이라는 점입니다.

    그렇다면 그 ‘이상’은 무엇일까요? 오래된 질문이지만, AI 예술 앞에서 더 날카로워졌습니다.


    작품 뒤에 아무도 없다

    예술이 소통이라는 관점은 새롭지 않습니다. 그러나 소통의 상대방 없이 생성된 예술이 등장하면서, 이 익숙한 전제가 다시 시험대에 올랐습니다.

    톨스토이는 1897년 『예술이란 무엇인가』에서 예술을 이렇게 정의했습니다. “한 사람이 자신이 경험한 감정을 외적 기호를 통해 의도적으로 다른 사람에게 전달하여, 그들도 그 감정을 경험하게 만드는 활동.”

    그에게 예술의 핵심 기능은 ‘감염(infectiousness)’이었습니다. 창작자의 감정이 수용자에게 전이되어 “영적 합일(spiritual union)”의 감정을 불러일으키는 것입니다. 톨스토이에 따르면, 예술에 감염되는 능력이 없다면 사람들은 더 야만적이고, 더 분리되고, 서로에게 더 적대적일 것입니다.

    이 관점에서 예술은 단순한 감각적 쾌락의 생산이 아닙니다. 예술은 소통입니다. 한 인간이 다른 인간에게 자신의 내면을 전달하고, 받는 이가 그것을 경험함으로써 둘 사이에 연결이 생기는 행위입니다.

    현대 심리학 연구는 톨스토이의 직관을 뒷받침하면서, 다른 층위를 조명합니다. 예일 대학의 George Newman과 Paul Bloom은 2012년 연구에서 사람들이 원본 예술 작품에 특별한 가치를 부여하는 두 가지 핵심 메커니즘을 밝혔습니다.

    첫째, 작품을 고유한 창작 행위(‘퍼포먼스’)로 평가하는 것입니다. 우리는 작품 자체만이 아니라, 그것을 만들어낸 행위에 가치를 둡니다. 같은 결과물이라도 더 많은 시간과 노력이 들어간 것으로 알려지면 품질과 가치를 더 높게 평가합니다. Kruger 등의 연구(2004)는 이를 ‘노력 휴리스틱(effort heuristic)’이라고 명명했습니다.

    둘째, 원작자와의 물리적 접촉(‘전염, contagion’)이 전달하는 본질에 대한 믿음입니다. Newman과 Bloom에 따르면, 사람들은 사물이 창작자의 본질을 담고 있다고 믿으며, 이 믿음을 통해 창작자와 수용자 사이의 연결을 경험합니다. 이것이 원본에 진정성을 부여합니다.

    톨스토이는 무엇이 전달되는가에 주목했습니다. 감정입니다. Newman과 Bloom은 누구로부터 전달되는가에 주목합니다. 창작자의 본질, 그 사람 자체입니다. AI 음악은 전자를 모방할 수 있습니다. 슬픈 멜로디, 격렬한 리듬, 그리움을 자아내는 화성. 그러나 후자는 원천적으로 불가능합니다. 전달할 ‘누군가’가 없기 때문입니다.

    우리가 원본 작품에 특별한 가치를 느끼는 이유는 그것이 더 아름다워서가 아닙니다. 그 작품이 누군가의 손을 거쳤고, 그 과정에서 그 사람의 무언가가 작품에 남았다고 느끼기 때문입니다.

    그러나 연결에는 또 다른 축이 있습니다. 창작자와 수용자 사이의 연결만이 아니라, 수용자들 사이의 연결입니다.

    옥스퍼드 대학의 Robin Dunbar는 음악이 사회적 유대(social bonding)를 형성하는 핵심 메커니즘이라고 설명합니다. 그의 연구에 따르면, 음악 활동은 엔도르핀 방출을 통해 집단 구성원 간의 친밀감을 형성하고 강화하는 데 핵심적인 역할을 해왔습니다. 우리가 콘서트장에서 수천 명과 함께 노래를 부를 때, 장례식에서 조용히 음악을 들을 때, 친구들과 함께 좋아하는 곡을 공유할 때 느끼는 것은 작곡가와의 연결만이 아닙니다. 그것은 함께 듣는 사람들과의 연결이기도 합니다.

    음악의 진화적 가치는 단순히 청각적 쾌락이 아닙니다. 감정을 동기화하고, 공유된 경험을 통해 개인들을 연결하는 능력에 있습니다. 이 연결은 두 가지 축으로 작동합니다. 창작자에서 수용자로 흐르는 수직적 연결, 그리고 수용자들 사이에서 형성되는 수평적 연결입니다.

    이러한 관점에서 보면, AI 음악에 대한 거부감의 핵심이 드러납니다.

    AI 생성 음악 뒤에는 아무도 없습니다. 고뇌도, 경험도, 전달하고자 하는 이야기도 없습니다. 수천 시간의 연습도, 수십 번의 수정도, 완성까지의 여정도 없이, 신경망이 패턴을 조합하여 뇌를 자극하는 음향 신호를 출력한 것입니다.

    발터 벤야민이 “아우라(aura)”라고 불렀던 것, “시간과 공간에서의 독특한 현존, 그것이 존재하는 장소에서의 유일한 실존”이 결여되어 있습니다. 톨스토이가 말한 ‘감염’이 일어나려면 먼저 감염시킬 누군가가 있어야 하는데, AI 음악에는 그 누군가가 없습니다.

    AI가 생성한 음향 신호가 우리의 청각 시스템을 자극하고, 즐거움이나 슬픔 같은 감정 반응을 유발할 수는 있습니다. 그러나 그것은 소통이 아닙니다. 아무도 우리에게 말을 걸고 있지 않습니다.

    반론이 있을 수 있습니다. 우리는 작곡가에 대해 아무것도 모른 채 음악을 듣고도 감동받습니다. 라디오에서 흘러나온 낯선 곡에 눈물 흘린 경험이 누구에게나 있습니다. 이것은 연결 없이도 예술이 작동한다는 증거 아닐까요?

    그러나 이 경험을 자세히 들여다보면, 우리는 누군가가 있다고 가정하며 듣습니다. 이름을 모를 뿐, 이 멜로디를 만든 사람이 있고, 그가 무언가를 전하려 했다고 무의식적으로 전제합니다. 컬럼비아대 연구가 보여준 것이 정확히 이것입니다. 동일한 작품도 ‘AI가 만들었다’는 정보가 주어지면 가치 평가가 달라집니다. 연결의 실제 존재가 아니라 연결의 가능성에 대한 믿음이 경험을 구성합니다.


    AI 예술이 받아들여지는 순간들

    그러나 연결이 불가능한 것은 아닙니다. AI 예술이 긍정적으로 받아들여지는 경우, 연결의 두 축은 각각 어떻게 형성되는 것일까요?

    2019년, 전자음악 작곡가 Holly Herndon은 PROTO라는 앨범을 발표했습니다. 스탠퍼드에서 머신러닝과 음악을 연구한 그녀는 ‘Spawn’이라는 AI를 직접 개발했습니다. 사람의 목소리를 학습해 새로운 보컬을 생성하는 시스템입니다. Herndon은 Spawn을 “도구”가 아닌 “아기”라고 불렀습니다. 앙상블과 함께 노래하게 하고, 전 세계 5만 명의 목소리를 들려주며 훈련시켰습니다. 앨범에는 인간 합창단과 AI의 목소리가 섞여 있고, 어느 부분이 AI인지 구별하기 어렵습니다. 하지만 Herndon에게 구별 여부는 중요하지 않았습니다. 그녀가 전하고 싶었던 건 AI가 인간을 대체하는 위협이 아니라 함께 창작하는 협력자가 될 수 있다는 것이었습니다. 앨범은 Pitchfork 선정 2019년 최고의 앨범 50에 올랐고, CNN은 Herndon을 “AI의 미래를 형성하는 인물” 중 한 명으로 소개했습니다. 이 사례에서 청자들이 연결된 대상은 AI의 출력물이 아닙니다. 그 뒤에서 비전을 제시하고 실현한 인간이었습니다. 창작자와 수용자 사이의 연결, 첫 번째 축입니다.

    두 번째 축은 수용자들 사이의 연결입니다. 유튜브에서 현대 곡을 1950년대 재즈나 올드팝 스타일로 바꾼 AI 커버가 퍼지고, K-pop 아이돌 목소리로 팝송을 부르게 한 AI 커버가 수백만 조회수를 기록하며 인기를 끄는 현상이 나타납니다. “이 노래가 그 시대에 있었다면?”, “내가 좋아하는 아이돌이 이 곡을 불렀다면?”이라는 상상을 함께 즐기는 경험입니다. 여기에는 특정 예술가의 고뇌나 철학이 없습니다. 그러나 공유된 맥락 속에서 수용자들이 서로 연결되는 AI 음악의 사례입니다.

    2024년 5월 발매된 컨트리 레전드 Randy Travis의 Where That Came From에서는 두 축이 함께 나타납니다. 2013년 뇌졸중으로 노래할 수 없게 된 그를 대신해, AI가 과거 녹음을 학습하여 그의 목소리로 새 노래를 불렀습니다. 시사회에서 곡을 들은 이들은 눈물을 흘렸고, 그는 약 20년 만에 빌보드 컨트리 차트에 복귀했습니다. 이 곡이 받아들여진 이유는 명확합니다. “빼앗긴 목소리를 되찾았다”는 서사와 본인의 참여가 창작자와의 연결을 형성합니다. 그리고 그의 복귀를 기다려온 팬들이 공유하는 감동의 맥락 속에서 수용자들 사이의 연결이 형성됩니다.

    공통점이 보입니다. 받아들여지는 AI 예술에는 창작자와의 연결이든, 수용자들 사이의 연결이든, 적어도 하나의 축이 살아 있습니다. 반면 스트리밍 플랫폼에 범람하는 익명의 AI 생성 트랙들, AI가 만들었음을 숨긴 채 인간의 창작물로 위장된 사례들이 거부감을 일으키는 이유는, 두 축 모두가 부재하기 때문입니다.


    신뢰의 문제

    AI 음악인지 사람의 음악인지 구분할 수 없게 되는 현상은 저작권이나 로열티의 문제를 넘어섭니다.

    음악이 수행해온 사회적 기능, 소통과 관계의 창구로서의 역할이 흔들릴 수 있습니다. 우리가 음악을 들을 때 무의식적으로 기대하는 것은 단순한 청각적 자극이 아니라, 그 뒤에 있는 누군가와의 연결입니다. 그 연결이 허구일 수 있다는 불신이 퍼지면, 음악이라는 매개체 자체에 대한 신뢰가 손상됩니다.

    이것이 AI 생성 음악이 제기하는 가장 근본적인 질문입니다. 기술적으로 구별할 수 없는 음향 신호가 있을 때, 그것이 인간의 창작물인지 아닌지가 왜 중요한가? 우리가 예술에서 찾는 것이 정말로 감각적 쾌락뿐이라면, 그 구별은 중요하지 않을 것입니다. 하지만 예술이 소통이라면, 그 구별은 본질적입니다.


    마치며: 건반 앞에서

    AI가 작곡을 한다는 소식을 처음 들은 건 2016년 무렵이었습니다. AIVA, AI 작곡가라는 이름을 달고 나온 심볼릭 음악 생성 도구였습니다. 그 무렵부터 등장한 도구들(AIVA, Musia 같은)을 저는 작곡에 활용하며 관심 있게 지켜봤습니다. 주변 아티스트들 사이에서 거부감의 목소리가 들려왔지만, 저는 그것을 기술 수용의 자연스러운 과정이라고 생각했습니다. 새로운 도구는 늘 저항을 받다가 결국 받아들여지니까요.

    2023년 말 Suno가, 이듬해 4월 Udio가 공개되었을 때 저는 열광했습니다. 텍스트 몇 줄로 보컬과 편곡이 완성된 곡이 쏟아져 나오는 경험. 직접 생성해서 듣고, 웃고, 감탄했습니다.

    그러다 어느 순간, 범람하는 AI 생성물들을 보며 저도 거부감을 느끼고 있었습니다. 왜일까요. 여러 설명을 떠올려봤지만 어느 것도 충분하지 않았습니다.

    삶에는 견딜 수 없을 정도로 무너질 것 같을 때, 그러나 누구에게도 털어놓을 수 없이 홀로 마주해야 하는 시기가 있습니다. 저에게는 2025년이 그랬습니다.

    그 시기에 저는 건반 앞에 자주 앉았습니다. 아무 분석도 없이 무의식적으로 건반을 두드려도, 그 시기의 무게가 나를 담은 정교한 구조를 완성시켰습니다. 그렇게 쌓인 작품들을 듣고, 또 다른 작품으로 뻗어나갔습니다. 나 자신을, 그리고 세상을 있는 그대로 인식하게 되는 명상의 시간이었습니다. 그 끝에는 조금 더 단단해진 내가 있었습니다.

    그 작품들을, 어떤 인정도 바라지 않은 채, 그저 조용히 어딘가에 남기고 싶어졌습니다. 그 순간 직관이 찾아왔습니다.

    아무 스토리도 없는 AI 생성물은 마치 말도 통하지 않는 외계 존재의 문물과 같습니다. 경이롭지만, 그것과 직접 소통할 수는 없습니다. 그래서 이 새로운 존재 앞에서, 인간이 고뇌 속에서 빚어낸 것들의 가치가 더 선명해집니다. 결국 우리가 예술에서 찾는 것은 소리가 아니라 연결이었습니다.

    이 글은 그 직관을 검증하고 정리한 기록입니다.

    2025년 12월 17일, 김관용(Tolerance Kim)


    참고문헌

    학술 연구

    • Benjamin, W. (1936). Das Kunstwerk im Zeitalter seiner technischen Reproduzierbarkeit [The Work of Art in the Age of Mechanical Reproduction].
    • Kruger, J., Wirtz, D., Van Boven, L., & Altermatt, T. W. (2004). The effort heuristic. Journal of Experimental Social Psychology, 40(1), 91–98.
    • Newman, G. E., & Bloom, P. (2012). Art and authenticity: The importance of originals in judgments of value. Journal of Experimental Psychology: General, 141(3), 558–569.
    • Horton Jr, C. B., White, M. W., & Iyengar, S. S. (2023). Bias against AI art can enhance perceptions of human creativity. Scientific Reports, 13, 19001.
    • Dunbar, R. I. M. (2023). The origins and function of musical performance. Frontiers in Psychology, 14, 1257390.
    • Tolstoy, L. (1897). Что такое искусство? [What Is Art?]. Moscow.

    미디어 및 보도자료

  • [여는 글] AI 생성 음악의 현황과 과제

    2023년 4월, “Heart on My Sleeve”라는 곡이 TikTok과 Spotify에서 빠르게 퍼져나갔습니다. Drake와 The Weeknd가 부른 것처럼 들리는 힙합 트랙이었지만, 두 아티스트는 이 곡에 전혀 관여하지 않았습니다. 익명의 제작자 ‘Ghostwriter’가 AI로 두 아티스트의 보컬을 합성해 자신의 곡에 얹은 것이었습니다. 삭제되기 전까지 TikTok에서 1,500만 회, Spotify에서 60만 회 이상 재생되며 AI 생성 음악에 대한 논의가 본격화되었습니다.

    그러나 Heart on My Sleeve는 보컬만 AI로 합성한 사례였습니다. 2024년 4월, AI 음악 생성 서비스 Udio로 만들어진 “BBL Drizzy”는 보컬, 멜로디, 화성, 편곡까지 모두 AI가 생성한 곡이었습니다. 이 곡은 빠르게 퍼져나갔고, 한 달여 뒤 Drake가 공식 발매곡에 샘플로 사용했습니다. AI가 만든 음악이 메이저 아티스트의 공식 발매곡에 사용된 최초의 사례였습니다.

    2025년에는 한 걸음 더 나아갔습니다. 6월, 브라질 출신 아티스트 Vinih Pray의 “A Million Colors”가 TikTok Viral 50 차트 44위에 올랐습니다. Suno가 처음부터 끝까지 생성한 이 곡은 Spotify에서 80만 회 이상 스트리밍되었고, 많은 청취자들이 AI 곡임을 알아채지 못했습니다. 빌보드는 이를 “AI 생성 곡이 TikTok 차트에 진입한 최초의 사례”로 보도했습니다.

    한국에서도 상황은 다르지 않습니다. HYBE는 2021년 AI 오디오 기업 수퍼톤에 첫 투자를 단행한 뒤, 2023년 1월 약 450억 원 규모의 인수를 완료했습니다. 그해 소속 가수 미드낫의 트랙을 6개 국어로 제작하는 데 AI 음성 기술을 활용했습니다. 2024년에는 대한민국 글로컬 미래교육박람회 주제곡 공모전에서 AI로 제작된 곡이 최우수상을 수상했습니다. 심사위원이었던 작곡가 김형석은 수상곡을 직접 편곡한 뒤 “AI가 만들어 내는 창작물과 공존하는 시대에 작곡의 방향에 대한 고민이 깊어졌다”라고 말했습니다.

    AI 생성 음악은 이미 실험적 단계를 넘어 실제 창작 생태계에 진입했습니다. 목소리 복제를 넘어, 이제 AI는 멜로디와 화성, 리듬과 편곡까지, 음악 그 자체를 만들어내고 있습니다.


    도구인가, 위협인가

    저는 AI 음악 생성 기술을 본질적으로 ‘위험한 기술’이라고 보지 않습니다. 텍스트 프롬프트만으로 데모를 뽑아보거나 사운드 이미지를 빠르게 확인하는 식으로, 이미 여러 창작 현장에서 생성형 음악 모델을 활용하고 있습니다. 영상 제작자가 배경음악 초안을 잡을 때, 작곡가가 편곡의 방향성을 테스트할 때, 게임 개발자가 프로토타입에 임시 사운드트랙을 붙일 때가 대표적입니다. 이런 맥락에서 Suno나 Udio 같은 서비스는 창작 도구로 기능할 수 있습니다.

    그러나 도구로서의 잠재력과 현재 벌어지고 있는 현실 사이에는 괴리가 있습니다.


    저작권 분쟁 현황

    2024년 6월, Sony Music, Universal Music Group, Warner Records는 Suno와 Udio를 상대로 저작권 침해 소송을 제기했습니다. 핵심 주장은 다음과 같습니다. 두 회사가 수백만 곡의 저작권 보호 음원을 무단으로 학습 데이터로 사용해, “인간 아티스트의 창작물과 직접 경쟁하고, 그 가치를 떨어뜨리며, 궁극적으로 진정한 음악을 잠식하는” 콘텐츠를 생성했다는 것이었습니다.

    그러나 1년여 만에 상황은 달라졌습니다. 2025년 10월 Universal이 Udio와 합의한 것을 시작으로, 11월에는 Warner가 Suno, Udio와 각각 라이선스 계약을 체결했습니다. 아티스트가 자신의 창작물이 AI 학습에 사용되는 것에 동의권을 행사할 수 있는 방향입니다. 다만 Universal과 Suno 간, Sony와 Suno 및 Udio 간 소송은 여전히 진행 중입니다.

    이 일련의 사건들은 질문을 남깁니다. 라이선스 계약이 체결되면 문제가 해결되는 것일까요?

    저는 그렇게 단순하지 않다고 봅니다. 메이저 레이블과의 합의는 거대 기업들 간의 비즈니스 조정일 뿐입니다. 인디 아티스트, 청취자의 신뢰, 창작의 가치 같은 문제는 여전히 남습니다.


    범람하는 스트리밍 플랫폼

    2025년 4월, 스트리밍 플랫폼 Deezer는 자사에 매일 업로드되는 콘텐츠의 18%가 AI로 생성된 것으로 추정된다고 발표했습니다. Spotify 커뮤니티 포럼에는 “Release Radar 플레이리스트가 AI 음악으로 가득 찼다”는 불만이 이어지고 있습니다. 일부 가상의 ‘아티스트’들은 수백만 회의 스트리밍을 기록하며 로열티 풀에서 수익을 챙기고, 실제 뮤지션들은 알고리즘 추천에서 밀려나고 있습니다.

    다른 문제도 있습니다. AI로 생성된 음악이 실제 아티스트에게 거짓으로 귀속되거나, 존재하지 않는 가상의 페르소나가 실제 뮤지션인 것처럼 포장되는 사례가 늘고 있습니다. Music Business Worldwide에 따르면, Spotify에서 200만 회 이상 스트리밍된 한 아웃로 컨트리 아티스트는 사실 AI가 만든 목소리와 이미지를 가진 가상의 존재였습니다. 이런 상황에서 “내가 듣는 이 음악이 실제 사람이 만든 것인가?”라는 질문이 제기되는 것은 자연스럽습니다.

    AI 개입을 숨긴 채 생성 음악을 자신의 창작물처럼 판매하는 행위는 예술 시장의 신뢰를 떨어뜨리고 저작권과 크레딧 체계에 대한 불신을 키웁니다. Spotify는 2025년 가을 AI 보호 정책을 강화하며 스팸 필터와 AI 공개 권장 기준을 도입했지만, 이것만으로 충분할지는 아직 알 수 없습니다.


    모델 붕괴

    단기적인 신뢰 문제를 넘어, 더 구조적인 우려도 있습니다. AI가 생성한 데이터를 다시 AI가 반복적으로 학습할 때 성능이 서서히 붕괴되는 현상, 이른바 ‘모델 붕괴(model collapse)’입니다.

    2024년 Nature에 발표된 Shumailov 등의 연구는 이 현상을 실증했습니다. 생성 모델이 합성 데이터로 반복 학습되면, 처음에는 드물지만 중요한 데이터부터 정보를 잃기 시작합니다. 이후 전체적인 다양성이 급격히 감소하고, 결국 원본 데이터와 전혀 다른 분포로 수렴합니다.

    물론 반론도 있습니다. Stanford, MIT 등의 연구진은 합성 데이터가 실제 데이터와 함께 축적되면 붕괴를 피할 수 있다고 주장합니다. 그러나 논쟁의 결론과 무관하게 한 가지는 분명합니다. 고품질의 인간 창작물은 생성 모델의 성능을 유지하는 데 필수적입니다. AI 생성 음악이 범람하면서 인간 아티스트의 창작 동기가 약해지고 고유한 창작물이 희소해진다면, 역설적으로 생성 모델 자체의 질적 저하로 이어질 수 있습니다.


    소통과 관계의 창구로서의 예술

    지금까지 다룬 문제들(저작권 분쟁, 플랫폼 범람, 모델 붕괴)은 모두 중요합니다. 그러나 저는 이 문제들이 표면에 드러난 현상일 뿐이라고 생각합니다. 더 근본적인 층위에서 무슨 일이 벌어지고 있는지 묻지 않으면, 기술적 해법도 방향을 잃습니다.

    사람들은 왜 AI가 만든 예술을 즐기면서도 동시에 거부감을 느끼는 것일까요?

    저는 예술이 단순한 감각 자극이 아니라 소통이라고 생각합니다. 창작자가 수용자에게 전하는 연결, 그리고 같은 작품을 경험하는 사람들 사이에서 형성되는 연결. 우리가 음악을 들을 때 무의식적으로 기대하는 것은 청각적 자극만이 아니라, 이 연결들입니다. AI 음악에는 그 소통의 상대방이 없습니다. 그 연결이 허구일 수 있다는 불신이 퍼지면, 음악이라는 매개체 자체에 대한 신뢰가 손상됩니다.

    이 질문은 이 블로그를 시작하게 된 출발점이기도 합니다. 별도의 글 ‘왜 우리는 AI 음악에 거부감을 느끼는가’에서 더 깊이 다루겠습니다.


    이 블로그의 방향

    이 블로그는 “AI 생성 음악을 없애야 하는가”라는 질문을 다루지 않습니다. 기술의 흐름을 거스르는 것은 현실적이지도, 바람직하지도 않습니다. 대신, AI가 만든 음악과 사람이 만든 음악이 공존하려면 무엇이 필요한지 묻습니다.

    사회적 합의에는 오랜 시행착오와 집단적 고민이 필요합니다. 그리고 그 시행착오의 바탕에는 기술적 안전장치가 있어야 한다고 생각합니다. 무엇이 AI이고 무엇이 사람인지, 내 창작물이 언제 어떻게 학습될지 알 수 없는 혼란 속에서는 시행착오도 고민도 시작할 수 없기 때문입니다.

    안전장치에도 여러 접근법이 있습니다. 워터마킹이나 콘텐츠 출처 인증(C2PA 등)처럼, 생성형 AI 공급자가 출력물의 출처를 자체적으로 명시하는 선언적 방식이 있습니다. 그러나 저는 다른 접근법이 더 중요하다고 생각합니다. 예술가, 소비자, 유통 플랫폼이 주도할 수 있는 방어적 안전장치입니다. 이미 생성되어 유통되는 AI 음악을 탐지하고 식별하는 기술, 그리고 인간의 창작물이 무단으로 학습되는 것을 방어하는 기술이 그것입니다.

    이 블로그는 그 기술들을 다룹니다.

    관련 연구들을 크게 두 축으로 나누어 살펴볼 예정입니다.

    탐지(AI Music Detection).

    이미 유통되고 있는 AI 음악을 식별하는 기술입니다. 오디오 딥페이크 탐지 분야의 방법론이 음악 도메인으로 확장되고 있으며, 높은 테스트 정확도가 실제 환경에서의 견고함을 보장하지 않는다는 점이 핵심 도전 과제입니다.

    사전 방어(Unlearnable Data / Defensive Data Poisoning).

    사후 탐지가 아닌 사전 방어에 초점을 맞춥니다. 사람 귀에는 들리지 않지만 AI 학습을 방해하는 섭동을 데이터에 삽입하는 기술입니다. 이미지 도메인의 Glaze, Nightshade에 이어 음악 도메인에서도 연구가 시작되고 있습니다.

    두 접근법은 상호 보완적입니다. 탐지는 이미 유통 중인 콘텐츠에 대응하고, 방어는 미래의 무단 학습을 억제합니다.


    마치며

    이 블로그는 무엇보다 저 자신의 학문적 탐구를 위한 기록입니다. 하지만 같은 문제를 고민하는 연구자, 엔지니어, 예술가들에게도 작은 보탬이 될 수 있기를 바랍니다.

    2025년 12월 17일, 김관용(Tolerance Kim)


    참고문헌

    학술 연구

    • Shumailov, I., et al. (2024). AI models collapse when trained on recursively generated data. Nature, 631, 755–759.
    • Gerstgrasser, M., et al. (2024). Is Model Collapse Inevitable? Breaking the Curse of Recursion by Accumulating Real and Synthetic Data. arXiv preprint arXiv:2404.01413.

    산업 및 법적 동향