로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!'''트랜스포머'''({{영어|Transformer}})는 [[인공신경망]] 아키텍처의 한 종류로, [[자연어 처리]] 분야에서 많이 쓰인다. [[2017년]] [[구글]]에서 나온 논문 [https://arxiv.org/abs/1706.03762 Attention Is All You Need]에서 처음 소개되었다. == 배경 == 자연어와 같은 시퀀스 데이터를 처리하기 위해 기존에는 [[Recurrent Neural Network]] (RNN)이 많이 사용되었는데, 이 모델은 재귀적, 순차적인 구조로 되어 있어 [[GPU]] 활용이 나빠 학습 및 추론에 많은 시간이 소모되며 long-term dependency를 잘 학습하지 못한다는 단점이 있었다. 즉 RNN으로 학습한 언어 모델의 경우 [[문법]] 등의, 비교적 짧은 거리의 의존 관계는 잘 학습하지만 내용적인 일관성이 떨어지는 편이다. 이런 long-term dependency 문제를 해결하기 위해 LSTM 등의 Gated RNN이 많이 사용되었지만 결국 문제가 완전히 해결된 것은 아니었으며, 역시 순차적인 계산으로 인해 발생하는 병렬처리의 어려움은 해결할 수 없었다. Long-term dependency 문제의 해결을 위해 attention이라는 기법이 개발되었다. 이 메커니즘은 RNN 모델이 지금 단계에서 어디를 봐야 하는지 결정하고 그 부분의 encoding을 직접 가져와 참조한다. 예를 들어 어떤 [[프랑스어]] 문장을 [[영어]]로 번역하는 모델의 경우, 영어의 주어를 생성할 때 프랑스어의 주어 부분에 높은 attention 점수가 부여되어 그 부분을 직접적으로 참조하게 된다. 기존의 sequence-to-sequence (seq2seq) 구조는 입력 문장을 하나의 벡터로 인코딩해 사용했지만, attention을 통해 입력 문장의 각 단어를 직접 연결하게 되면서 long-term dependency 문제가 많이 해결되었고, 상당한 성능 향상을 보였다. Attention이 long-term dependency를 해결해주었지만, 아직 병렬 처리 문제가 남았다. 이 문제는 RNN의 순차적인 구조에서 발생하는데, 트랜스포머는 여기서 RNN을 없애고, attention만으로 시퀀스 데이터를 처리하도록 만들어 효과적인 병렬처리가 가능하도록 만들었다. 2010년대 후반 자연어처리 분야에서 놀라운 성능향상이 계속해서 보고되고 있는데, 그중 가장 큰 이유는 트랜스포머를 통해 효율적인 계산이 가능해지면서 모델의 매개변수 개수를 늘리면서도 어마어마한 양의 데이터를 때려넣어 학습할 수 있게 되었기 때문이다. == 구조 == [[파일:Transformer architecture.png|섬네일|트랜스포머 구조]] 원래 논문에서 제안된 구조는 기존의 seq2seq 모델과 같은 인코더-디코더 구조이다. 이후 나온 모델인 BERT나 GPT는 여기서 각각 인코더, 디코더만 떼어 사용하는데, 주어진 태스크에 맞게 응용하면 된다. Attention이 이 모델의 가장 핵심적인 부분이라고 할 수 있다. 인코더의 attention 레이어는 입력 시퀀스의 모든 토큰의 임베딩에 대해 attention 스코어를 계산한다. Scaled dot-product attention이라는 attention 메커니즘을 활용하는데, 간단하게 설명하면 자신의 입력('''Q'''uery)과, attention 할 다른 토큰의 입력('''K'''ey)을 내적(dot-product)한 값을 attention 스코어로 활용하는 방식이다. 이렇게 내적한 값을 Key의 차원(<math>d_k</math>)의 제곱근으로 나누어 쓰기 때문에 scaled가 붙었다. 이 결과를 softmax 함수를 거쳐 0에서 1 사이의 값으로 만들고, 대상 토큰 값('''V'''alue)에 곱해 출력한다. 행렬 표기를 이용해 식으로 쓰면 다음과 같다. 여기서 Q, K, V는 동일한 행렬로, 단어 수만큼의 행, 입력 차원(<math>d_k</math>)만큼의 열을 가진다. <math>\operatorname{Attention}(Q,K,V) = \operatorname{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V</math> 다만 이 attention을 하나만 사용하면 모델이 너무 단순해지기 때문에, 입력을 복수의 linear projection을 통해 여러 개로 늘려 각각에 대해 scaled dot-product attention을 수행하고 그 결과를 합치는데, 이를 multi-head attention이라고 부른다. 이를 통해 다양한 관계를 학습할 수 있게 된다. 디코더 부분에선 인코더와 유사하게 우선 self-attention을 통해 현재 decoding중인 문장의 attention 결과를 계산한다. 다만 아직 디코딩이 되지 않은, 자기 뒷부분을 가리고(masking) 앞부분에만 attention할 수 있게 만들기 때문에 masked multi-head attention이라고 부른다. 여기서 나온 결과를 다시 multi-head attention 레이어에 통과시키는데, 이전과 다른 점은 Key와 Value가 인코더의 출력이라는 점이다. Positional encoding도 중요한 요소인데, 각 위치의 사인이나 코사인 값을 토큰 임베딩에 더해주는 것이다. 이를 통해 RNN과 같은 순차적 구조 없이도 각 토큰의 순서나 위치 정보를 활용할 수 있게 된다. [[분류:기계 학습]] 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 틀:영어 (원본 보기) (준보호됨)틀:영어= (원본 보기) (준보호됨)이 문서는 다음의 숨은 분류 1개에 속해 있습니다: 분류:영어 표기를 포함한 문서