AI Engineering/이론

Attention 레이어와 MLP 레이어

마늘냄새폴폴 2026. 5. 17. 22:42

안녕하세요! 이번 포스팅에서는 MLP레이어에 대해서 공부한 내용을 정리해보려고합니다. LLM에서 MLP레이어는 핵심축 중에서도 핵심축인데요. 이제 천천히 이 레이어에 대해서 알아보며 끝으로 갔을 때는 MLP레이어의 진수에 대해서 맛보게 될 것입니다. 

 

레이어들

Attention 레이어, MLP 레이어

LLM에는 크게 두 개의 레이어가 있다고 표현합니다. Attention 레이어와 MLP 레이어 이렇게 두 개인데요. Attention 레이어는 기본적으로 Attention 연산을 수행하는 레이어로서 단어와 단어 사이의 맥락을 파악하는 용도로써 사용됩니다. 

 

그에 비해 MLP 레이어는 맥락이 파악된 토큰을 입력받아서 그 토큰이 가진 정보에 '데이터'를 입힙니다. 예를 들어서 "프랑스의 수도는?"이라는 맥락이 완성되면 MLP는 훈련 과정에서 학습한 "파리"라는 정보를 꺼내옵니다. 

 

이 때문에 트랜스포머에서는 MLP를 일종의 Key Value Memory로 보는 시각이 있습니다. 그 이유가 MLP는 항상 두 개의 선형 레이어가 각각 키와 값의 역할을 하기 때문입니다. 첫 번째 선형 레이어는 패턴을 감지하고 활성화 함수를 거쳐 두 번째 선형 레이어에서 선택된 패턴에 대응하는 실제 정보를 결괏값에 더해줍니다. 

 

잔차 연결

Gemma 3 모델의 경우 MLP레이어가 48개가 존재하는데 각각의 레이어를 지날 때마다 "잔차 연결"을 하면서 지나가게 됩니다. 여기서 "잔차"란 아주 조금의 차이라는 뜻으로 아주 조금의 차이만큼 레이어에서 계속 더해가면서 연결을 하여 의미를 확장해나간다는 의미입니다. 

 

예를 들어서 "자기소개 부탁해"라는 입력을 받으면 초반 MLP 레이어에선 어떤 언어로 질문이 들어왔는지, 문장 구조는 어떻게 되어있는지와 같은 기본적인 분석을 마치고 중간 레이어에서는 자기소개를 해야한다는 맥락을 파악하고 마지막 레이어에선 자기소개를 준비하는 식입니다. 

 

이 때문에 MLP 레이어가 많다는 것은 곧 모델의 사고의 깊이가 얼마나 깊어지느냐를 판단하는 기준이 되기도 합니다. 이것이 큰 모델들이 복잡한 논리 구조나 비유를 이해하면서 고차원적인 표현이 가능한 것을 설명해줍니다. 

 

인덕션 헤드와 MLP 레이어와의 관계

레이어가 수십개가 되는 순간 아무리 성능이 좋아도 수십 번의 행렬 곱셈을 거치게 되면서 초기 입력 정보가 희석되거나 왜곡될 수 밖에 없습니다. 그래서 잔차 연결은 아무것도 안해도 입력이 그대로 전달되고 출력물이 입력 정보를 그대로 뱉어낸다는 점에서 모델의 왜곡을 방어하고 이 덕분에 하위 레이어의 정보가 상위 레이어까지 손실 없이 전달되는 것입니다. 

 

또한, 잔차 연결은 딥러닝의 고질병인 기울기 소실 문제를 해결하는 핵심이 되기도 합니다. 역전파 시 미분 값이 잔차 연결을 타고 처음부터 끝까지 끊김없이 전달이 되어 모델을 학습시키는 리스크가 줄어들게 되었기 때문입니다. 이 덕분에 레이어가 수십, 수백개가 되어도 모델을 안정적으로 학습시킬 수 있게 된 것이죠. 

 

이전에 공부한 것에서 인덕션 헤드와 잔차 스트림이라는 개념을 공부했었습니다. 자세한 내용은 아래의 링크를 확인해주세요!!

https://coding-review.tistory.com/618

 

특명: 학습하지 않은 패턴을 학습해라 (Few Shot의 동작 방식)

안녕하세요! 거의 3주만에 블로그 포스팅으로 돌아왔습니다. 요즘 블로그 글 쓰는게 뜸해졌는데 별로 바쁘지 않았던거같은데 공부할 틈이 안나서 이제서야 글을 쓰는 것 같네요. 오늘은 few shot (

coding-review.tistory.com

 

간략하게 위의 포스팅을 정리하자면, 인덕션 헤드는 잔차 스트림에 올라가 있는 데이터를 보고 다음에 선택될 단어를 이전의 맥락에서 찾아내어 어떤 단어가 높은 확률로 선택되는지를 설명하는 개념입니다. 이때 특정 레이어의 인덕션 헤드가 잔차 스트림의 정보를 읽어서 다음 단어를 스트림에 덧붙이는 과정이었죠. 

 

이 과정 자체가 MLP 레이어에서의 잔차 연결이었던 것입니다. 

 

트랜스포머 아키텍처를 보면 항상 Add & Norm 이라고 되어있는 부분을 찾을 수 있을 것인데 여기서 Add가 바로 잔차 연결이고 Norm은 더해진 결괏값이 너무 커지거나 튀지 않도록 평균과 분산을 조정해서 깔끔하게 다듬는 과정이라고 생각해주시면 됩니다. 

 

잔차 스트림과 정규화

잔차 스트림이라는 거대한 정보의 고속도로가 잘 작동하기 위해서는 두 가지 핵심 장치가 필요한데 바로 무엇을 강조할지 결정하는 스위치인 "활성화 함수"와 신호가 너무 커지거나 작아지지 않게 조정하는 조절기인 "정규화"입니다. 

 

활성화 함수

활성화 함수는 이 지식이 지금 맥락에서 중요한가?를 판단하여 다음 단계로 보낼지 말지를 결정하는 의사결정 스위치입니다. 이것이 필요한 이유는 만약 활성화 함수가 없다면 아무리 레이어를 겹겹이 쌓아도 결국 하나의 거대한 선형 연산에 불과해집니다. 활성화 함수는 계산 결과에 비선형의 성질을 주어 복잡한 논리와 패턴을 학습할 수 있게 만들어줍니다. 

 

과거에는 관련이 없으면 차단, 관련이 높으면 통과시키는 아주 간단한 스위치를 썼지만 시간이 지나면서 끊기지 않게 부드럽게 작동시키는 동작이 추가되었습니다. 최근 모델들은 두 개의 연산 결과를 곱하는 방식으로 지식 추출의 효율을 극대화합니다. 

 

정규화

정규화는 레이어를 통과하면서 들쭉날쭉해진 벡터들을 일정한 범위 안에 들어오도록 강제로 다듬는 작업입니다. 평균이 0이고 분산이 1인 정규분포의 형태를 따르도록 하기 때문에 만약 양자화를 거치게 되면 매끄럽던 정규화 값에 노이즈가 생기고 이것이 양자화된 모델들의 답변 품질이 급격하게 떨어지는 원인이 되는 것입니다. 

 

이 내용이 아래의 링크와 연결됩니다!

https://coding-review.tistory.com/607

 

양자화란 무엇인가

4개월만에 블로그 포스팅을 재개하게 되었네요. 이런저런 난관도 있었고 새로운 직장에 안착해서 자리잡아야 했고 새로운 프로젝트에 투입되어 AIOps를 위해 개발하느라 포스팅이 늦어졌습니다.

coding-review.tistory.com

 

차원의 마법

딥러닝 아키텍처에서 지식을 정교하게 분리하고 저장하는 핵심 전략으로 불리는 이 방법은 차원을 뻥튀기 했다가 다시 줄여서 어떤 지식이 필요한 지식이고 어떤 지식이 필요없는 지식인지 정교하게 걸러낼 수 있습니다. 

 

입력 벡터의 차원을 늘리는 이유는 복잡하게 얽힌 정보를 선형적으로 분리하기 위해서입니다. 쉽게 얘기해서 차원을 늘린다는 것은 복잡하게 꼬여있는 실타래를 2차원에서 바라보는 것과 3차원에서 바라보는 것의 차이라고 할 수 있는데 2차원에서의 실타레는 위아래가 없어 어디가 어디인지 잘 보이지 않지만 3차원에서 바라보는 실타레는 어떤 부분을 풀면 되는지 확실하게 보이는 이치인 것이죠. 

 

또한, 이는 물방울 하나는 눈으로 봤을 때는 별 차이 없어보이지만 현미경으로 봤을 때는 그 안에 수많은 미생물들이 살고 있는 것과 비슷합니다. 

 

낮은 차원에서는 데이터들이 서로 너무 가까이 붙어있어 "사과"와 "배"를 구분하기 어렵지만 차원을 확 늘리면 데이터 사이에 빈 공간이 생기고 이렇게 되면 데이터 간 미세한 특징들이 뚜렷하게 드러나 활성화 함수가 어떤 정보를 선택할지 결정하기 훨씬 쉬워집니다. 

 

차원을 늘려놓은 상태에서 활성화 함수에 집어넣으면 지금 맥락에서 정말 필요한 유의미한 특징만 골라서 뽑아낼 수 있게 됩니다. 

 

이제 고차원에서 필요한 정보를 모두 추출했다면 다시 원래의 차원으로 줄여야하는데 이유는 뽑은 지식을 잔차스트림과 합류시켜야하는데 잔차스트림은 일정한 폭을 가지고 있기 때문에 다시 합류하기 위해서는 차원이 줄어들 수 밖에 없는 것이죠. 

 

마치며

이로써 MLP의 정의와 어떻게 동작하는지 한 바퀴를 쭉 돌아봤습니다. 이번 MLP 레이어는 공부를 한건지 안한건지 머리속에 잘 안남는 개념이라 여러번 본 내용인데도 이해가 잘 안되고 남한테 명확하게 설명하기 쉽지않네요.. 

 

시간이 날 때마다 계속 보고있는데 머리속에 잘 입력이 안되는 것을 보아하니 계속 수련이 더 필요할 것 같습니다... 일단은 기록을 위해 블로그에 포스팅으로 남겨놓기는 하지만 조금 더 정리가 끝나면 조금 더 쉬운 버전으로 포스팅을 한 번 더 쓸 것 같습니다. 

 

그럼 여기서 포스팅을 마치도록 하겠습니다. 긴 글 읽어주셔서 감사합니다. 오늘도 화이팅입니다!