반응형

Transformer 5

ViT (Vision Transformer) — 이미지를 단어처럼 처리하는 딥러닝의 진화

지난 시간까지 우리는 CNN을 비롯하여 RNN, Seq2Seq, Attention, 그리고 자연어 처리의 패러다임을 바꾼 Transformer까지 딥러닝의 핵심 아키텍처들을 단계별로 살펴보았습니다. 자연어 처리 분야에서 Transformer가 거둔 압도적인 성공은 많은 연구자들에게 한 가지 흥미로운 질문을 던졌습니다. 텍스트를 처리하는 이 강력한 구조를 컴퓨터 비전 분야에도 그대로 적용할 수 없을까 하는 의문이었습니다.CNN 편에서 다룬 합성곱은 이미지에 관한 몇 가지 가정을 연산 구조 자체에 새겨 넣은 도구입니다. 가까운 픽셀끼리 관계가 깊다는 가정, 그리고 같은 무늬는 이미지의 어느 위치에 있어도 같은 필터로 잡아낼 수 있다는 가정입니다. 이 가정들이 대체로 맞기 때문에 합성곱은 30년 가까이 이미지..

GPT와 BERT는 어디서 갈라졌을까 — Transformer 계보

앞 글에서 만든 모델을 다시 떠올려 보겠습니다. 6층짜리 블록을 쌓고, 어텐션에 causal 마스크를 걸고, 다음 문자를 맞히게 학습시켰습니다. 잘 돌아갔고, 생성한 문장도 문법 검사기를 통과했습니다.그런데 그 모델은 원 논문의 구조에서 꽤 많은 것을 떼어 낸 것입니다. 원 논문의 Transformer는 번역기였습니다. 원문을 읽는 인코더와 번역문을 쓰는 디코더가 짝을 이루고, 그 둘을 교차 어텐션이 이어 주는 구조였습니다. 앞 글의 모델에는 인코더가 없고 교차 어텐션도 없습니다. 절반만 남긴 셈인데도 문장이 만들어졌습니다.이상한 일이 아닙니다. 오늘날 이름이 알려진 모델들도 사정이 비슷합니다. GPT는 디코더 쪽만 남겼고, BERT는 인코더 쪽만 남겼고, T5는 둘 다 남겼습니다. 셋 다 같은 블록을 ..

Transformer 학습 가이드: BPE와 워밍업부터 KV 캐시까지

Transformer 편에서는 Self-attention부터 인코더·디코더 블록까지 부품을 하나씩 뜯어봤습니다. 그런데 그 글에는 빠진 것이 하나 있습니다. 학습된 모델이 한 번도 등장하지 않았다는 점입니다. 어텐션 가중치를 손으로 계산해 보고, 스케일링을 빼면 분포가 어떻게 무너지는지 확인하고, 블록을 쌓았을 때 기울기가 어떻게 전달되는지까지 봤지만, 그 모든 실험의 가중치는 무작위였거나 초기화 직후 상태였습니다.부품을 다 만들었으니 이제 돌려 볼 차례입니다. 이 글에서는 실제로 동작하는 언어 모델 하나를 처음부터 끝까지 만들어 봅니다. 입력을 토큰으로 쪼개는 일에서 시작해, 학습이 무너지지 않게 붙잡아 주는 장치들을 살펴보고, 학습이 끝난 모델의 어텐션이 실제로 무엇을 보고 있는지 재 본 다음, 그 ..

패러다임을 바꾼 트랜스포머(Transformer): Self-Attention부터 인코더-디코더까지

지난 글에서 어텐션을 다루면서, 디코더가 매 시점 원문 전체를 훑어보고 필요한 곳에 가중치를 몰아주는 과정을 살펴보았습니다. 고정 길이 벡터 하나에 문장을 밀어 넣던 seq2seq의 병목이 사라졌고, 학습된 정렬 행렬도 눈으로 확인했습니다.그런데 그 구조에는 어색한 구석이 남아 있었습니다. 어텐션은 문장의 어느 위치든 한 번에 접근할 수 있는데, 정작 그 어텐션이 얹혀 있는 토대는 여전히 RNN이었습니다. RNN은 t번째 은닉 상태를 계산하려면 t-1번째를 먼저 알아야 합니다. 문장이 길어지면 그만큼 순서대로 기다려야 하고, GPU가 아무리 많은 연산을 동시에 처리할 수 있어도 이 사슬은 풀리지 않습니다. 어텐션이 성능을 끌어올릴수록 "그럼 밑에 깔린 순환은 왜 필요한가"라는 질문이 선명해졌습니다.201..

어텐션(Attention) 메커니즘의 원리: Query·Key·Value와 정렬 행렬

이전 강의들에서 우리는 CNN, RNN 그리고 Seq2Seq 모델에 이르기까지 딥러닝이 이미지와 시계열 데이터를 다루는 발전 과정을 순차적으로 살펴보았습니다. 특히 Seq2Seq 모델은 기계 번역과 같은 분야에서 훌륭한 성과를 보여주었습니다. 다만 지난 글 말미에 한 가지 질문을 남겨두었습니다. 인코더는 소스 문장을 끝까지 읽어 벡터 하나로 압축하고, 디코더는 그 벡터 하나만 보고 번역문을 만들어 냅니다. 그런데 문장이 열 단어일 때나 쉰 단어일 때나 그 벡터의 크기는 똑같습니다. 이래도 괜찮을까요.동시통역사를 떠올려 보면 이 설계가 얼마나 가혹한지 짐작할 수 있습니다. 연사가 긴 문장을 말하는 동안 통역사가 받아 적을 수 있는 것이 메모지 한 줄뿐이고, 말이 끝나는 순간 메모지를 덮은 뒤 그 한 줄에 ..

반응형