1편에서는 Whisper모델의 개요와 특징을 중심으로, 해당 모델이 무엇인가에 대해서 알아보았습니다.
2편에서는 Whisper의 내부 구조에 초점을 맞추어, 음성 입력이 텍스트로 변환되기까지의 전체 아키텍처 흐름을 살펴보고자 합니다.
전체 구조를 입력 처리 및 Encoder 영역과 출력 생성 및 Decoder 영역으로 나누어 분석하며, 이번 글에서는 먼저 입력 처리부터 Encoder Block까지의 구조를 다룹니다.
OpenAI Whisper(1) - Whisper란 무엇일까?
Whisper를 접하게 된 이유오늘은 졸업작품 주제로 선정한 Mina 프로젝트에서 사용한 OpenAI의 Whisper에 대해 소개하려고 합니다. 먼저 졸업작품 주제를 간단히 설명드리자면, Mina는 Meeting Intelligence & No
dev-adventure.tistory.com
Whisper 아키텍처
먼저 간단하게 위스퍼 아키텍처에 대해 설명을 드리자면, 위스퍼(Whisper) 아키텍처는 인코더-디코더 트랜스포머로 구현된 간단한 엔드투엔드 접근 방식입니다.
위 그림은 Whisper 공식 사이트에 나온 *아키텍처로 입력부터 출력까지 Whisper 내부에서 정보가 어떻게 이동하는지를
Encoder-Decoder 관점에서 명확하게 보여줍니다.
* 위 아키텍처는 인코더-디코더 트랜스포머 아키텍처로 약지도 심층 학습 음향 모델입니다.
이 그림은 왼쪽에서 오른쪽으로 흐름을 살펴보면 됩니다.
1. 입력
Whisper의 입력단계는 음성 파형을 시작으로, 이를 Log-Mel Spectrogram으로 변환하고, Conv1D를 통해 Encoder가 처리할 수 있는 특징 표현으로 만드는 과정이다.
여기서 제가 궁금했던 것은 Log-Mel Spectrogram이 무엇이며, 왜 음성을 바로 Transformer로 넣지 않는가라는 점이었습니다.
Log-Mel Spectrogram은 무엇일까?
Whisper 입력 단계에서 중간에 처리되는 Log-Mel Spectrogram은 음성을 시간에 따른 주파수 에너지로 변화로 표현한 2차원 데이터입니다.
쉽게 말하자면 소리를 단순한 파형이 아니라 "어느 시점에 어떤 주파수 대역이 얼마나 강했는가"라는 형태로 나타낸 것입니다.
먼저 Mel Spectrogram을 제대로 알기전에 Spectrogram에 대해서 자세히 알아봅시다.
Spectrogram은 음성 파형(wavefrom) 시간축으로만 표현된 1차원 신호입니다.
하지만 실제 발음의 차이는 주파수 구성에 따라 결정됩니다.
그래서 음성을 아주 짧은 구간으로 나누고, 각 구간마다 주파수 성분을 계산한 뒤 이를 시간축으로 이어 붙입니다.
이렇게 만들어진 것이 Spectrogram이라는 것입니다.
가로축 - 시간, 세로축 - 주파수, 값(색) - 해당 주파수의 에너지 크기
즉 Spectrogram은 시간에 따라 소리 성분이 어떻게 바뀌는지를 한눈에 볼 수 있는 지도입니다.

우리는 Whisper에서 스펙트로그램을 어떻게 사용했는가에 대해서를 알아보는 것이기 때문에 더 자세한 개념을 알고 싶으면 따로 찾아보는 걸 권장드립니다.
그래서 Mel Spectrogram은 무엇일까?
Mel Spectrogram은 사람의 귀 기준으로 주파수를 재배치 합니다.
일반 Spectrogram은 주파수 축이 선형입니다.
하지만 사람의 청각은 주파수를 선형으로 인식하지 않습니다.
사람은 어떻게 소리를 듣는가?

사람의 귀에서 소리를 인식하는 핵심 기관은 달팽이관입니다.
달팽이관 내부에는 기저막(basilar membrane)이 있고, 이 기저막은 소리의 주파수에 따라 서로 다른 위치에서 진동합니다.
- 낮은 주파수 → 달팽이관 안쪽 깊은 부분
- 높은 주파수 → 입구 쪽
이 반응은 선형적으로 분포하지 않으며, 이 특성을 수학적으로 근사한 것이 Mel Scale입니다.
즉, Mel Spectrogram은 사람이 실제로 소리를 인식하는 방식에 더 가까운 주파수 표현이라고 볼 수 있습니다.
Whisper에서 사용되는 Log-Mel Spectrogram 의미
Whisper에서는 Mel Spectrogram에 로그(log) 스케일을 추가로 적용합니다.
음성 신호의 에너지 값은 작은 소리부터 큰 소리까지 범위가 매우 넓기 때문에, 그대로 학습에 사용하면 특정 구간이 과도하게 영향을 미칠 수 있습니다.
따라서 여기에 로그 스케일을 적용하면 작은 발화도 상대적으로 잘 드러나고, 전체 에너지 분포가 안정됩니다.
그래서 Whisper의 입력은 Log-Mel Spectrogram 형태가 됩니다.
그런데 Whisper는 이미 정리된 Log-Mel Spectrogram을 왜 다시 2x Conv1D + GELU로 처리를 하는가??
앞서 살펴본 것처럼 Whisper는 음성 파형을 사람의 청각 특성을 반영한 Log-Mel Spectrogram 형태로 변환합니다.
이 단계까지만 놓고 보면, 이미 음성은 시간–주파수 축에서 충분히 정리된 것처럼 보입니다.
그런데 Whisper 아키텍처를 자세히 보면, 이 Log-Mel Spectrogram도 마찬가지로 곧바로 Transformer Encoder로 전달되지 않습니다. 대신, Conv1D + GELU 블록을 한 번 더 거친 뒤 Encoder로 입력됩니다.
여기서 자연스럽게 이런 의문이 생깁니다.
이미 사람의 청각 구조를 반영해 정리한 Log-Mel Spectrogram을 왜 다시 합성곱(Conv1D)으로 처리하는 걸까?
이 질문에 답하기 위해서는, Log-Mel Spectrogram과 Conv1D가 서로 다른 역할을 담당한다는 점을 먼저 분리해서 이해할 필요가 있습니다.
- Log-Mel Spectrogram의 역할 : 음성을 언어 인식에 유리한 형태로 ‘해석 가능한 재료’로 만드는 것입니다.
- Conv1D의 역할 : Log-Mel Spectrogram을 Transformer가 이해할 수 있는 입력 토큰으로 바꾸는 역할을 한다.
그렇다면 이제 Whisper 입력 단계에서 사용되는 2x Conv1D + GELU 블록이 Log-Mel Spectrogram을 어떻게 변환하는지를 살펴보겠습니다.
1. Conv1D는 Log-Mel Spectrogram을 “토큰”으로 바꾼다
Log-Mel Spectrogram은 각 시간 프레임이 80개의 Mel bin으로 구성된 연속적인 벡터입니다.
하지만 Transformer Encoder는 각 입력이 고정된 차원의 토큰 시퀀스 형태로 들어오기를 전제로 설계되어 있습니다.
Whisper의 첫 번째 Conv1D는 이 문제를 해결하기 위해 사용됩니다.
- 입력: 80차원 Mel 프레임
- 출력: 모델 내부 차원(n_state)의 특징 벡터
즉, 이 Conv1D는 Log-Mel Spectrogram의 각 시간 프레임을 Transformer가 처리할 수 있는 토큰 형태로 변환하는 역할을 수행합니다. 이는 텍스트 모델에서 단어 ID를 임베딩 벡터로 변환하는 과정과 유사한 위치에 있습니다.

2. 두 번째 Conv1D는 시간 축을 정리한다
Whisper는 최대 30초 길이의 음성을 처리하며, Log-Mel Spectrogram 기준으로 약 3000개의 시간 프레임이 생성됩니다.
이 정도 길이의 시퀀스를 Transformer의 Self-Attention 구조로 그대로 처리하는 것은 계산량과 메모리 측면에서 부담이 됩니다.
이를 완화하기 위해, Whisper의 두 번째 Conv1D는 stride를 사용해 시간 축을 절반으로 줄입니다.
- 프레임 수 감소
- 연산량 감소
- 대신 각 토큰이 더 넓은 시간 구간을 대표
이 과정은 단순한 축소가 아니라, 음성 인식에 필요한 시간 해상도를 유지하면서 Encoder Block에 전달하기 적절한 길이로 입력을 재구성하는 단계입니다.
3. Conv1D는 로컬 음성 패턴을 미리 정리한다
음성은 텍스트와 달리, 아주 짧은 시간 구간에서 중요한 변화가 발생하는 연속 신호입니다.
- 발음의 시작과 끝
- 음소 간 전이
- 짧은 억양 변화
이러한 로컬한 시간 패턴은 전역적인 문맥을 학습하는 Transformer보다 국소 영역에 강한 합성곱 구조가 더 효율적으로 포착할 수 있습니다.
Conv1D는 인접한 시간 프레임을 묶어 이미 의미 있는 패턴으로 정리된 특징을 만들어 줍니다.
그 결과 Encoder Block은 잡음에 가까운 미세 변화가 아니라, 보다 안정적인 음성 특징을 기반으로 문맥을 학습할 수 있게 됩니다.
4. GELU 활성화 함수가 함께 사용되는 이유
각 Conv1D 뒤에는 GELU 활성화 함수가 사용됩니다. 음성 신호는 연속적인 값의 변화로 구성되기 때문에, 작은 값이라고 해서 항상 의미가 없다고 보기는 어렵습니다. GELU는 값을 강제로 잘라내지 않고, 부드럽게 반영함으로써 비선형성을 부여합니다.
이는 Whisper가 다양한 발화 환경과 억양에서도 안정적으로 특징을 학습하는 데 도움을 줍니다.

Encoder Block: 음성 토큰을 ‘문맥 표현’으로 바꾸는 단계
다시 한번 위의 과정을 정리해 보면, 앞선 입력 처리 과정을 통해 Whisper의 음성 입력은 단순한 파형(waveform)이나 주파수 표현을 넘어, 모델이 직접 다룰 수 있는 형태로 정리되었습니다. 음성 파형은 Log-Mel Spectrogram으로 변환되며 사람의 청각 특성을 반영한 시간–주파수 에너지 표현으로 재구성되고, 이후 2x Conv1D + GELU 블록을 거치면서 Transformer가 처리할 수 있는 토큰 시퀀스 형태로 변환되었습니다.
Whisper의 Encoder는 여러 개의 Encoder Block이 층층이 쌓인 Transformer Encoder 구조로 이루어져 있습니다.
각 Encoder Block은 크게 두 가지 구성 요소로 이루어져 있습니다.
- Self-Attention
- Feed Forward Network(MLP)
이 두 구성 요소는 “토큰 간의 관계를 학습하는 단계”와 “그 결과를 토큰 표현으로 정제하는 단계”로 역할이 분리되어 있으며, 이 구조가 반복되면서 음성은 점점 더 추상적인 문맥 표현으로 변환됩니다.
아래에서는 이 Encoder Block이 실제로 어떤 계산을 수행하는지를 구조적으로 나누어 살펴보겠습니다.
1. Self-Attention: 모든 시간 프레임을 서로 참고하게 만드는 장치
Conv stem을 통과한 입력을 X라고 하겠습니다. X는 시간축으로 나열된 오디오 토큰 시퀀스이며, 각 토큰은 모델 폭 d 차원의 벡터입니다.
Self-Attention은 이 로부터 Query, Key, Value라는 세 가지 표현을 생성합니다. 이 과정의 핵심은 간단합니다.
- Query는 “지금 이 토큰이 어떤 정보를 필요로 하는지”
- Key는 “각 토큰이 어떤 특징을 가지고 있는지”
- Value는 “실제로 전달할 정보가 무엇인지”
Attention 연산을 통해 각 토큰은 다른 모든 토큰을 동시에 참고하며, “어떤 시점의 정보를 얼마나 반영해야 하는지”를 결정합니다.
이 구조가 음성 인식에서 특히 중요한 이유는, 음성이 시간적으로 강하게 의존적인 신호이기 때문입니다.
- 모음은 여러 프레임에 걸쳐 길게 이어지고
- 자음은 짧은 구간에서만 강하게 나타나며
- 억양과 강세는 긴 시간 패턴으로 드러나고
- 잡음이 섞여도 주변 문맥을 통해 복원되는 경우가 많습니다
Self-Attention은 이러한 특성을 “모든 시간 프레임이 서로를 참고”하는 방식으로 처리합니다.
즉, 한 시점의 소리를 해석할 때 앞뒤 전체 구간의 정보를 동시에 고려할 수 있게 만듭니다.
2. Feed Forward Network(MLP): 문맥이 반영된 토큰을 다시 정제하는 단계
Self-Attention을 거친 토큰은 이미 전체 시간 축의 정보가 반영된 문맥 기반 표현이 됩니다.
하지만 이 상태의 토큰은 아직 “정보가 섞인 상태”에 가깝습니다.
Encoder Block 내부의 Feed Forward Network(MLP) 는 이 토큰들을 하나씩 독립적으로 변환하며, Self-Attention을 통해 모아진 정보를 바탕으로 각 토큰의 표현을 한 번 더 정제합니다.
Self-Attention이 “어떤 토큰을 얼마나 참고할지”를 결정했다면 MLP는 “그 결과 중 어떤 특징을 강조하고 유지할지”를 결정합니다
즉, Attention이 관계 중심 연산이라면, MLP는 표현 중심 연산입니다.
이 두 단계가 결합되면서 Encoder Block은 단순히 토큰을 섞는 데서 끝나지 않고, 각 토큰을 점점 더 의미 있는 음성 표현으로 변환할 수 있습니다.
Encoder Block이 여러 층 쌓이는 이유와 그 출력의 의미
Whisper의 Encoder는 하나의 Encoder Block으로 끝나지 않고, 여러 개의 Block이 반복적으로 쌓인 구조를 가집니다.
이는 음성을 한 번의 연산으로 이해하기 어렵기 때문입니다.
얕은 Encoder 층에서는 발음의 미세한 차이, 에너지 변화, 짧은 음향 패턴과 같은 저수준 음성 특징이 주로 강조됩니다.
반면, Encoder가 깊어질수록 발화 단위, 억양, 시간적 흐름과 같은 고수준 문맥 정보가 점점 더 두드러지게 학습됩니다.
즉, Whisper의 Encoder는 음성을 한 번에 해석하는 것이 아니라, 여러 Encoder Block을 거치며 점진적으로 추상화된 표현으로 변환하는 구조를 가집니다.
이 과정이 끝난 Encoder의 출력은 여전히 텍스트가 아닙니다. Whisper의 Encoder는 음성을 바로 문자로 변환하지 않고,
음성의 시간적 구조, 발음 간의 관계, 그리고 억양과 흐름이 반영된 정보를 하나의 연속된 벡터 시퀀스로 정리합니다.
이 출력은 “정답 텍스트”가 아니라, 이후 Decoder가 텍스트 토큰을 생성할 때 참고하는 음성 문맥 표현(latent representation) 이라고 볼 수 있습니다.
입력 아키텍처 관점에서의 최종 정리
지금까지 살펴본 Whisper의 입력 아키텍처 흐름을 정리하면 다음과 같습니다.
- 음성 파형은 Log-Mel Spectrogram을 통해 사람의 청각 특성을 반영한 시간–주파수 표현으로 변환됩니다.
- 2× Conv1D + GELU 블록을 거치며 이 표현은 Transformer가 처리할 수 있는 토큰 시퀀스로 정리됩니다.
- Encoder Block에서는 Self-Attention을 통해 토큰 간의 시간적 관계를 학습하고, MLP를 통해 문맥이 반영된 토큰 표현을 정제합니다.
출처
- OpenAI Whisper 논문
Radford et al., Robust Speech Recognition via Large-Scale Weak Supervision, 2022
(https://arxiv.org/abs/2212.04356)
→ Whisper의 Encoder–Decoder 구조, Log-Mel Spectrogram 입력, 2× Conv1D + GELU, Encoder 동작 근거 - 나무위키 – 스펙트로그램 / 멜 척도
https://namu.wiki/w/스펙트로그램
→ Spectrogram 시간–주파수 표현, 인간 청각 특성 설명 - Stevens et al., 1937
A Scale for the Measurement of the Psychological Magnitude Pitch
→ Mel Scale의 청각학적 근거 - Rabiner & Schafer
Digital Processing of Speech Signals
→ Log scale 적용 이유, 음성 에너지 분포 안정화 - O’Shaughnessy, Speech Communication
→ 음성의 로컬 시간 패턴과 합성곱 기반 처리의 유효성
이 글은 Whisper를 깊이 있게 분석하고 싶은 분들을 위한 내용으로 구성되었습니다.
입력 처리부터 Encoder까지의 흐름을 차근히 따라가며, Whisper의 동작 원리를 함께 정리해보고자 합니다.
이제 다음편으로는 Encoder 출력을 바탕으로 Decoder가 어떻게 텍스트를 생성하는지 살펴보겠습니다.
'나의 기술 탐험 > A.I' 카테고리의 다른 글
| OpenAI Whisper(3) - Whisper 아키텍처 분석[출력] (0) | 2026.03.06 |
|---|---|
| OpenAI Whisper(1) - Whisper란 무엇일까? (0) | 2026.01.10 |