트랜스포머

상솜공방·2025년 4월 23일

비전 언어 모델

목록 보기
3/9

1. 어텐션

문장의 각 단어를 피처 벡터로 인코딩한 후, 이를 중 모델이 주목해야 할 부분에 대한 가중치를 부여하는 과정.

  • 쿼리: 어떤 단어에 집중해야 하는가?
  • 키: 쿼리의 질문에 대한 답이 될 수 있는 단어들
  • 밸류: 키에 해당하는 단어들의 정보가 융합되어 업데이트 된 단어

1.1 크로스 어텐션

두 개의 서로 다른 시퀀스간의 관계를 참조하는 방식.

  • 입력 시퀀스: "나는 어제 학교에 갔다."
  • 출력 시퀀스: "I went to school yesterday."
    에 대해, "went"가 "갔다"와 대응되어야 하므로, 모델은 "went"를 해석할 때 "갔다"에 더 큰 가중치를 준다.

1.2 셀프 어텐션

하나의 문장을 이루는 요소들끼리 서로를 비교한다.
예를 들어 "고양이에게 사료를 주었으나 그것을 먹지 않았다."라는 단어에서 "그것"에 해당하는 것이 무엇인지 파악하는 과정.

1.3 어텐션 스코어 함수

쿼리와 키의 유사성을 바탕으로 점수를 낸 후, 이들을 활용하여 정보가 융합된 새로운 토큰인 밸류를 생성하는 함수이다.

MLP 방식

쿼리가 "나는 집에", 키가 "갔다"일 때, 쿼리와 키를 연결(concat)하여 MLP에 입력한다. 네트워크는 학습을 통해 해당 인풋에 대해 "집에"와 "갔다"의 연관성이 더 높다는 것을 파악하고, 이들간의 관계에 큰 가중치를 준다. 이를 바탕으로 새로 업데이트 된 밸류는 얻는다.

Dot Product 방식

쿼리들로 이루어진 행렬을 전치 행렬로 변환한 후, 이를 키 행렬과 내적한 뒤 소프트맥스 함수를 통과시켜 가중치 행렬로 변환한다. 업데이트 된 가중치는 밸류 행렬에 곱해져 유사한 단어끼리의 정보가 융함된 새로운 토큰이 업데이트 된다.

Scaled Dot Product 방식

쿼리의 전치 행렬과 키 행렬의 내적은 벡터의 차원이 커질수록 그 값 또한 비례하여 커지게 된다. 이로 인해 소프트맥스를 적용할 때 gradient가 지나치게 커지거나 작아질 수 있다. 이를 해결하기 위해 내적 값을 벡터 차원의 제곱근으로 나누어 그 크기를 제한하여 모델의 학습을 안정적으로 유도한다.

Bilinear 방식

쿼리 행렬을 전치한 뒤 바로 키 행렬과 내적하는 것이 아니라, 이 둘 사이에 학습 가능한 파라미터 행렬 W를 두는 것. 두 벡터 사이에 중간 행렬 W가 들어가 보다 유연한 관련성을 얻을 수 있지만 그만큼 연산량이 많아진다.

2. 트랜스포머

트랜스포머는 "Attention is All You Need" 논문에서 제안된 모델로, 행렬 곱셈으로 구현된 어텐션 방식이 빠르고 좋은 성능을 보여 유명해졌다. 이 모델은 인코더와 디코더로 구성되어있으며, 인코더는 입력된 문장의 정보를 압축 및 추출하고, 디코더에서는 번역할 문장을 생성한다.

2.1 트랜스포머의 핵심 모듈

(1) 포지셔널 인코딩

하나의 문장이 통째로 입력되기 때문에, 순서 정보를 추가로 부여하는 과정.

Sinusoidal 함수

  • 각 위치에 대해 사인과 코사인 함수를 태워 절대적으로 고정된 벡터를 생성
    → 절대 위치 기반으로 두 토큰 사이의 거리를 명시적으로 제어하기 어렵다.

  • 사인, 코사인 함수의 파형은 주기가 있기 때문에 긴 시퀀스의 문장이 와도 각각의 값을 차별화할 수 있다.
    → 그러나 매우 긴 시퀀스의 경우 위치 왜곡이 발생하긴 한다.

  • 단순히 삼각함수를 태우면 되기 때문에 연산이 매우 간단함.

  • 위치에 따른 파형의 주기적 반복을 시각화할 경우 직관적인 해석이 가능함.

RoPE 함수

  • 하나의 토큰에 해당하는 쿼리와 키 벡터를 2D 회전 행렬로 변환한 뒤 곱하여, (상대적 위치에 따라 가변적인 어텐션 스코어를 생성.
    → 상대적인 위치가 직접 반영되어 이들간의 학습이 더 쉬움.

  • 상대적인 회전 각도가 누적된다 하여도 360도의 주기를 가지고 있기 때문에, 훈련 데이터 이상의 시퀀스가 들어와도 위치를 모델이 인지할 수 있음.
    → Sinusoidal 함수보다 더 강건한 성능을 보임.

  • 포지션 정보를 학습하기 위한 별도의 파라미터는 없으나, 회전 행렬 계산 로직이 추가됨.

  • 상대적인 회전 각도의 정보로 구성되므로 시각화 했을 때 직관적인 해석이 어려움.

(2) 멀티헤드 어텐션

셀프 어텐션을 하나의 모듈만이 진행하는 것이 아니라, 여러 개의 모듈이 각자 수행한 뒤, 이들의 정보를 모두 합쳐 다음 네트워크로 전달한다. 이로써 과적합을 방지하고 보편적인 성능을 이끌어낼 수 있다.

(3) 마스크드 어텐션

디코더에서 번역할 단어 뒤의 문장은 참조할 수 없도록 이들의 어텐션 스코어를 -∞로 세팅하는 모듈.

(4) 잔차 연결과 레이어 정규화

잔차 연결을 통한 경사 소실 방지

레이어가 깊어지면 gradient가 점차 작아져 역전파를 통한 파라미터 업데이트가 어려워진다. 그러나 잔차연결을 사용하면 입력값 x가 그대로 출력값에 전달되므로, 네트워크가 출력값을 0에 가깝게 학습하더라도 입력값 덕분에 경사를 안정화시킬 수 있다.

레이어 정규화를 통한 학습 안정성 보장

네트워크에 입력될 벡터의 크기가 [100, 200, 300] 등으로 매우 상이한 경우 이들을 [-1.22, 0, 1.22]로 평균이 0, 분산이 1인 정규값으로 변환하여 네트워크의 학습을 안정적으로 유지한다.

  • Post-Layer Norm: 어텐션 모듈과 피드 포워드 층을 통과한 뒤 마지막에 정규화를 진행. (기존의 트랜스포머)
  • Pre-Layer Norm: 어텐션 모듈 전에 미리 정규화를 진행한다. 이렇게 하면 경사가 더욱 안정화된다고 한다.
  • RMSNorm: 레이어 정규화의 간소화된 버전으로, 평균과 편향 항 없이 오직 분산의 제곱근으로 정규화한다. 계산 효율이 높은데 성능 저하 또한 거의 없다.

(5) 피드 포워드 네트워크

어텐션 레이어를 통과한 뒤, 결과값에 비선형성을 부여하고 특징을 추가 추출한다. 여기서 비선형성이라 함은, 신경망의 노드에서 이루어지는 선형적인 연산(입력 값에 가중치와 편향을 주는 것)에 그치지 않고 ReLU 등의 함수를 추가적으로 태워 불필요한 정보는 아주 작은 값으로 만들고, 중요한 정보는 매우 크게 강조하여 다음 레이어로 전달하는 것을 의미한다.

(6) 학습 최적화 과정

트랜스포머는 어텐션 과정에서 매우 높은 연산량을 요구하기 때문에, 32비트(FP32, Floating Point 32-bit) 데이터를 16비트(FP16)의 낮은 정밀도로 변경하면 메모리와 계산 속도를 절반 가까이로 줄일 수 있다.

profile
상어 인형을 좋아하는 사람

0개의 댓글