shopkeeper/korean_wiki_content_only_120125 huggingface dataset:
유기화학에서 브레트 규칙(Bredt's rule)은 고리가 충분히 크지 않은 이상 이중 결합이 다리형 고리 시스템에서 다리목(bridgehead)에 올 수 없다는 경험적 법칙이다. 율리우스 브레트가 1902년에 처음으로 주장했고, 1924년에 성문화했다. 규칙은 주로 탄소-탄소 및 탄소-질소 이중 결합을 가진 다리목을 다룬다.
예를 들어 아래 노보넨의 이성질체들 중 2개는 브레트 규칙을 위반해 생성되기에 너무 불안정하다.
브레트 규칙은 다리목에 이중 결합이 있는 것은 고리에 트랜스 이중 결합이 있는 것과 같다는 사실의 결과이다. 다리목 원자와 인접 원자의 p 오비탈은 직교하므로 파이 결합의 형성을 위해 적절하게 정렬되지 않는다. 포셋은 S를 고리 시스템의 비다리목 원자의 수로 정의함으로써 규칙을 정량화했고, 두고리 시스템에서 S≥9여야 화합물이 안정하다고 주장했다.
브레트 규칙은 다리형 고리 시스템에서 제거 반응으로부터 어떤 이성질체가 생성되는지 예측하는 데 유용하다.
현대 N DECODE(N 디코드)는 아반떼/엘란트라 N 런칭 이후 현대자동차가 N 모델에 적용한 고성능 특화 기술의 일람이다. 일반 모델에서 제작단가의 상승 혹은 차량의 성격상 적용하지 못했던 고성능 및 퍼포먼스 모델에 적용한 새로운 기술로서 이전에 발표된 N 모델에도 이와같은 기능과 기술이 일부 적용되었고 N DECODE 기술을 모두 적용한 모델은 아반떼/엘란트라 N이다.
N DECODE 기술 목록.
제동 중에 발생하는 열을 식히기 위해 아반떼 N에는 에어 가이드가 적용됐다. 에어 가이드는 전방에서 유입되는 공기가 브레이크 쪽으로 직접 향해 제동 시 발생하는 열을 식혀줘 제동 성능을 향상시킨다. 이 에어 가이드는 현대자동차의 모터스포츠 경험에서 비롯된 기술이다.
브레이크 크기를 키워 확실한 제동성능의 향상을 이뤘다. 아반떼/엘란트라 N에는 360mm로 증대된 디스크가 적용됐고 이와 함께 부스터의 크기도 키워 열용량과 제동 성능도 향상시켰다. 더 넓어진 타이어까지 적용돼 아반떼 N의 제동성능은 동급 최고 수준을 달성함과 동시에 별도의 개조나 튜닝이 없어도 서킷 주행이 충분히 이루어 질 수 있는 N-3DNA의 기조를 따르고 있는 부분이다.
지속적인 브레이킹 상황, 혹은 급작스러운 제동 상황은 브레이크 성능의 한계치를 넘어서는 상황을 연출하기도 한다. 이를 보완하고 미연에 방지하기 위해서 아반떼/엘란트라 N에는 브레이크 유압을 미리 채워 제동 응답성을 높여 즉각적인 제동을 가능하도록 구현했다.
변속기 D 모드에서 브레이크를 밟지 않더라도 차량이 움직이지 않도록 동력을 차단하는 기능이며 일반적인 차량에 적용되는 자동화 수동변속기(DCT)임에도 부드러운 발진을 위해 의도적으로 Creep 동작을 구현하는 것과는 반대의 개념이다. 레이스에서 정지 상태 출발 시 브레이크를 밟지 않고도 그리드 대기가 가능하도록 하기 위한 기능이다.
가속 페달과 브레이크 페달을 동시 조작 시 제동이 우선시 되는 브레이크 오버라이드 기능을 해제 시켜서 트랙과 같은 한계 주행이 필요한 상황에서 브레이크와 가속 페달 조작이 동시에 허용되도록 만들어 주는 기능이다. 이는 오조작으로 인한 사고를 방지하기 위한 브레이크 오버라이드 기능이 해제되는 만큼 까다로운 작동 조건이 요구한다. 1. 스포츠 및 N 모드 2. ESC 비활성화 3. 변속레버 수동모드 등 모든 조건이 만족될 시에만 활성화 된다.
스티어링 타각 및 스로틀 개도량을 차량이 파악하여 트랙 주행 여부를 자동으로 감지하여 직선 및 코너 구간에서 최적의 기어와 변속 타이밍을 구현하는 기술로서 회전수를 보상하는 기본적인 개념의 레브 매치에서 벗어나 능동적이고 적극적인 엔진 회전수의 보정 및 가속을 구현하는 기술이다. 이를 통해 불필요한 변속을 최소화 함과 동시에 최적 RPM 주행을 유도하여 트랙 주행시 기록 단축 및 즐거움을 향상하는 기능을 지원한다.
NGS 모드가 활성화되면 엔진 회전수의 가용범위 내의 최저단으로 기어가 즉시 변속됨과 동시에 20초 동안 오버 부스트 모드(0.2bar)가 활성화돼 최고출력이 10마력 더 높아진다. 이 기능은 NPS와 함께 작동되며 기존 3분에서 40초로 크게 낮아진 작동 간격으로 인제 스피디움 기준으로는 매 랩당 최소 1회 이상 NGS 기능 활성화가 가능하다.
정지상태의 가속시 타이어 공전을 방지함과 동시에 가속력 최적 제어와 클러치 제어 최적화를 통하여 최적의 가속력을 발휘하게 만드는 런치 컨트롤 기능을 구현한다. 이를 통해 일반적인 가속보다 0-100km/h의 가속 시간이 0.3초 더 단축되었다.
주행 중 운전자의 변속 조작에 맞추어 엔진 회전수와 변속기 기어의 회전수를 일치시켜 모터스포츠 테크닉중 하나인 힐앤토 기술을 차량이 시스템적으로 구현한다. 이를 통해 변속 충격을 감소시키고 변속 조작에서 발생하는 불필요한 거동도 최소화 한다.
4BE와 마찬가지로 R&amp;H 성능을 극대화하기 위해 H 형태의 빨간색 리어 스티프바가 기본 적용돼 기본 모델보다 29% 더 향상된 비틀림 강성을 확보했다.
WRC 랠리카의 일체형 액슬을 참조한 기술을 접목하여 횡강성 향상 및 한계 주행 성능을 개선했다. 이와 함께 약 1.73kg의 대당 무게 절감(현가하질량) 개선효과와 함께 NVH의 품질도 개선됐다.
극한의 주행시 필요한 성능만 고려한 부시를 적용하면 일상적인 주행영역에서는 불쾌감이 커질 것이다. 이를 해소하기 위해 아반떼/엘란트라 N의 컴파운드 부시에는 두 가지 다른 특성을 적용시켰다. 승차감에 영향을 미치는 전후 방향에는 부드러움을 핸들링에 영향을 미치는 좌우 방향에는 단단함을 부여해 승차감과 핸들링까지 최적화했다.
R-MDPS에 토크 피드백 로직을 새롭게 적용하여 일상영역을 비롯한 스포츠 주행 조건에서 조타 시 일관성과 정밀도를 개선했다. 덕분에 극한의 코너링 상황에서도 정확한 조향이 가능하다.
아반떼/엘란트라 N에는 2세대 ECS가 적용됐다. 이전까지의 ECS의 개념에서 벗어나 2세대 ECS는 속력, 운전자 제어, 노면 상태 또는 주행 모드에 따라 감쇠력을 조정하여 더 나은 주행 성능을 보장한다. 넓은 서스펜션 세팅 범위는 일상부터 서킷까지 주행을 가능하게 한다.
최적의 움직임을 위해 아반떼/엘란트라 N에는 알루미늄 너클이 적용됐다. 덕분에 더욱 정교한 움직임을 선보인다.
날카롭고 정확한 핸들링 성능을 위해 로어 암 부시가 최대 한계치까지 강화됐다. 이는 타이어 폭 증대에 따른 승차감 마진까지 활용한 퍼포먼스 향상 중 일부다.
아반떼/엘란트라 N에는 덕트형 에어가드가 적용돼 라디에이터 냉각 성능이 극대화됐다. 이와 함께 공력, 연비, 최고 속도까지 개선됐다.
고단으로 기어 변속 시 감성적인 만족도를 위해 엔진 부분 기통 연료컷 및 능동가변배기 제어가 적용됐다. 덕분에 모터스포츠에서 들을법한 역동적인 변속 사운드를 아반떼/엘란트라 N에서 경험할 수 있다.
아반떼/엘란트라 N부터 적용되는 N 사운드 이퀄라이저는 가상 엔진 사운드로 운전자는 스포티, 하이 퍼포먼스, TCR 모드 중 원하는 사운드를 선택할 수 있다. 또한 개인 취향대로 음역별 세부 사항 조정이 가능한 이퀄라이저 기능도 함께 적용된 진화된 가상 엔진 사운드다.
N 모델의 배기음은 매 순간 최적의 사운드를 제공하기 위해 기존 벨로스터N의 3단 제어 밸브에서 0에서 100까지 모든 각도로 제어가 가능한 선형 제어 밸브 시스템으로 변경됐다. 노멀 모드에서는 공회전 시 부밍음 저감되고, 동시에 N모델 특유의 압도적인 사운드는 유지시켜 운전자의 즐거움을 극대화 할 수 있다.
아반떼/엘란트라 N에는 윙 타입 스포일러가 적용됐고 이를 통해 기본 모델 대비 1.25배 높은 다운 포스를 형성할 수 있게 됐다. 높아진 다운 포스는 고속 주행 시 안정성과 코너링 시 빠른 코너 탈출을 가능하게 한다.
아반떼/엘란트라 N은 동급 최고의 공간성을 구현해 실용성과 편의성을 확보했다. 특히 N 라이트 버킷 시트 적용 시 시트 백 두께가 50mm 더 축소돼 더 넓은 2열 거주공간 확보가 가능하다.
아반떼/엘란트라 N에 적용된 신규 인포테인먼트 시스템은 다양한 주행 정보를 운전자에게 가독성 있게 보여준다. 트랙에서는 운전자의 위치를 추적해 자동으로 실시간 주행 정보를 기록한다.
현대 N 앱은 속력, 랩타임 G-포스 등 다양한 종류의 주행 데이터를 저장하고 분석한다. 또한 국내 소재 서킷 별 랭킹 시스템을 적용해 다른 사람들과 기록 비교를 게임처럼 할 수 있다. 주행 스킬의 향상도 기대할 수 있다.(대한민국 한정)
다층 퍼셉트론(Multilayer perceptron, MLP)은 퍼셉트론을 여러층 쌓은 순방향의 인공 신경망이다. 입력층(input layer)과 은닉층(hidden layer)과 출력층(output layer)으로 구성된다. 각 층에서는 활성함수를 통해 입력을 처리한다.
MLP는 극단적으로 복잡한 문제를 대략적으로 해결할 수 있도록 확률적으로 문제를 해결하는 능력으로 인해 연구에 유용하다.
시벤코 정리에서 알 수 있듯 MLP는 범용 근사자이므로, 회귀분석을 통해 수학적 모델을 만드는 데에 사용할 수 있다. 반응변수가 이분변인일 때 분류는 회귀분석의 특수한 경우이므로 MLP는 좋은 분류 알고리즘이 된다.
1980년대에 MLP는 아주 유명한 머신러닝의 해결책이 되어 음성 인식, 이미지 인식, 기계 번역 등 다양한 분야에 그 활용처를 찾았다. 그러나 이후 훨씬 간단한 해결책인 서포트 벡터 머신과 강하게 경쟁하게 되었다. 딥 러닝이 성공을 거두면서 역전파 네트워크에 대한 관심이 다시 돌아오기도 했다.
활성화 함수(活性化函數, )는 인공 신경망에서 입력을 변환하는 함수이다. ReLU, 시그모이드 함수, 쌍곡탄젠트 함수 등이 대표적인 활성화 함수이다.
인공 신경망에서 노드의 활성화 함수는 노드의 개별 입력과 가중치를 기반으로 노드의 출력을 계산하는 함수이다. 활성화 함수가 비선형인 경우 몇 개의 노드만 사용하여 사소한 문제를 해결할 수 있다. 최신 활성화 함수에는 ReLU의 한 버전인 2018년 BERT 모델에 사용된 GELU, 힌튼 등이 개발한 2012년 음성 인식 모델에 사용된 로지스틱(시그모이드) 함수, 2012년 AlexNet 컴퓨터에 사용된 ReLU 비전 모델과 2015 ResNet 모델이 포함된다.
시그모이드 함수.
층(層), 층위 또는 레이어(layer)란 인공 신경망에서 데이터를 모아서 보내는 단계와 관련된 개념이다. 순방향 신경망에서는 먼저 나온 층에서 뒤에 나오는 층으로만 신호를 전달할 수 있고, 순환 신경망에서는 그렇지 않다.
계층 유형.
첫 번째 유형의 계층은 완전 연결 계층이라고도 불리는 Dense 계층으로, 입력 데이터의 추상 표현에 사용된다. 이 계층에서 뉴런은 이전 계층의 모든 뉴런에 연결된다. 다층 퍼셉트론 네트워크에서는 이러한 층이 서로 쌓인다.
Convolutional 계층은 일반적으로 이미지 분석 작업에 사용된다. 이 계층에서 네트워크는 가장자리, 텍스처 및 패턴을 감지한다. 그런 다음 이 계층의 출력은 추가 처리를 위해 완전 연결 계층으로 공급된다. (합성곱 신경망 모델 참고)
Pooling 계층은 입력되는 데이터의 크기를 줄이기 위해 사용된다.
Recurrent Layer는 메모리 기능을 이용한 텍스트 처리에 사용된다. Convolutional 계층과 유사하게 순환 계층의 출력은 일반적으로 추가 처리를 위해 완전 연결 계층에 공급된다. RNN 모델도 참조하세요.
Normalization 계층은 이전 계층의 출력 데이터를 조정하여 정규 분포를 얻는다. 그 결과 확장성과 모델 교육이 향상된다.
트랜스포머(transformer)는 멀티 헤드 어텐션 메커니즘을 기반으로 하는 딥 러닝 아키텍처이며, 텍스트가 토큰이라는 수치 표현으로 변환되고 각 토큰은 워드 임베딩 테이블에서 조회를 통해 벡터로 변환된다. 각 레이어에서 각 토큰은 병렬 멀티 헤드 어텐션 메커니즘을 통해 컨텍스트 창 범위 내에서 다른(마스크되지 않은) 토큰과 함께 컨텍스트화되며, 이를 통해 핵심 토큰에 대한 신호가 증폭되고 덜 중요한 토큰은 약화된다.
트랜스포머는 순환 유닛이 없다는 장점이 있어 장단기 메모리 (LSTM)와 같은 이전 순환 신경망 아키텍처 (RNN)보다 훈련 시간이 적게 걸린다. 이후의 변형들은 대규모 (언어) 데이터셋에서 대형 언어 모델 (LLM)을 훈련하는 데 널리 채택되었다.
트랜스포머의 현대 버전은 2017년 구글 연구원들의 논문 "어텐션 이즈 올 유 니드"에서 제안되었다. 트랜스포머는 원래 기계 번역을 위한 이전 아키텍처를 개선하기 위해 개발되었지만, 이후 많은 응용 분야에서 사용되었다. 대규모 자연어 처리, 컴퓨터 비전 (비전 트랜스포머), 강화 학습, 오디오, 멀티모덜 학습, 로봇공학, 심지어 컴퓨터 체스를 두는 데에도 사용된다. 또한 사전 훈련 시스템인 GPT (Generative Pre-trained Transformers) 및 BERT (Bidirectional Encoder Representations from Transformers)의 개발로 이어졌다.
수년 동안 시퀀스 모델링 및 생성은 일반 순환 신경망 (RNN)을 사용하여 수행되었다. 잘 인용된 초기 예는 엘만 네트워크 (1990)였다. 이론적으로 한 토큰의 정보는 시퀀스를 따라 임의로 멀리 전파될 수 있지만, 실제로는 소실 경사 문제로 인해 긴 문장 끝에서 모델의 상태가 이전 토큰에 대한 정확하고 추출 가능한 정보 없이 남게 된다.
주요 돌파구는 LSTM (1995)이었다. LSTM은 소실 경사 문제를 극복하기 위한 다양한 혁신을 사용하여 긴 시퀀스 모델링을 효율적으로 학습할 수 있었다. 한 가지 주요 혁신은 다른 뉴런의 출력을 곱하는 뉴런, 즉 곱셈 단위를 사용하는 어텐션 메커니즘을 사용한 것이었다. 곱셈 단위를 사용하는 신경망은 나중에 시그마-파이 네트워크 또는 고차 네트워크라고 불렸다. LSTM은 2017년 트랜스포머 발표 전까지 장기 시퀀스 모델링을 위한 표준 아키텍처가 되었다.
그러나 LSTM은 대부분의 다른 RNN처럼 순차 처리를 사용했다. 특히 RNN은 한 번에 하나의 토큰을 처음부터 끝까지 처리하며, 시퀀스의 모든 토큰에 대해 병렬로 작동할 수 없다.
현대 트랜스포머는 이 문제를 극복했지만, RNN과 달리 컨텍스트 창의 크기에 대해 이차적으로 계산 시간이 필요하다. 선형적으로 스케일링되는 고속 가중치 컨트롤러 (1992)는 입력에 따라 추가 처리를 위한 가중치 행렬을 계산하는 방법을 학습한다. 두 네트워크 중 하나는 "고속 가중치" 또는 "동적 링크" (1981)를 가지고 있다. 느린 신경망은 경사 하강법을 통해 쿼리에 대한 답변을 계산하는 빠른 신경망의 가중치 변경을 계산하기 위한 키와 값을 생성하는 방법을 학습한다. 이는 나중에 비정규화된 선형 트랜스포머와 동등하다는 것이 입증되었다.
Seq2seq와 어텐션.
인코더-디코더 시퀀스 변환 개념은 2010년대 초에 개발되었다. 일반적으로 seq2seq의 원형으로 인용되는 것은 2014년에 동시에 발표된 두 개의 논문이다.
기계 번역을 위한 3억 8천만 매개변수 모델은 두 개의 장단기 메모리 (LSTM)를 사용한다. 이 아키텍처는 두 부분으로 구성된다. 인코더는 토큰 시퀀스를 입력받아 벡터로 변환하는 LSTM이다. 디코더는 벡터를 토큰 시퀀스로 변환하는 또 다른 LSTM이다. 유사하게, 또 다른 1억 3천만 매개변수 모델은 LSTM 대신 게이트 순환 유닛 (GRU)을 사용했다. 이후 연구에 따르면 GRU는 seq2seq에서 LSTM보다 성능이 더 좋지도 나쁘지도 않다.
이러한 초기 seq2seq 모델에는 어텐션 메커니즘이 없었고, 상태 벡터는 원본 텍스트의 마지막 단어가 처리된 후에만 접근할 수 있었다. 이론적으로 이러한 벡터가 전체 원본 문장에 대한 정보를 유지하지만, 실제로는 정보가 제대로 보존되지 않았다. 이는 입력이 하나의 순환 네트워크에 의해 고정된 크기의 출력 벡터로 순차적으로 처리된 다음, 다른 순환 네트워크에 의해 출력으로 처리되기 때문이다. 입력이 길면 출력 벡터가 모든 관련 정보를 포함할 수 없으므로 출력이 저하된다. 증거로, 입력 문장을 뒤집는 것이 seq2seq 번역을 개선했다.
RNNsearch 모델은 병목 현상 (고정된 크기의 출력 벡터 문제)을 해결하기 위해 기계 번역을 위한 seq2seq에 어텐션 메커니즘을 도입하여 모델이 장거리 의존성을 더 쉽게 처리할 수 있게 했다. 이 이름은 "번역 디코딩 중에 원본 문장을 검색하는 것을 에뮬레이션한다"는 의미이다.
기계 번역을 위한 전역 (RNNsearch의) 및 지역 (슬라이딩 윈도우) 어텐션 모델 아키텍처 간의 상대적 성능을 비교한 결과, 혼합 어텐션이 전역 어텐션보다 품질이 높았고, 지역 어텐션은 번역 시간을 단축했다.
2016년, 구글 번역은 구글 신경망 기계 번역으로 개편되었으며, 이는 이전 통계적 기계 번역 기반 모델을 대체했다. 새로운 모델은 인코더와 디코더 모두 8계층의 양방향 LSTM으로 구성된 seq2seq 모델이었다. 개발에 9개월이 걸렸으며, 10년이 걸린 통계적 접근 방식을 능가했다.
병렬화 어텐션.
어텐션 (자체 어텐션 포함)이 있는 Seq2seq 모델은 여전히 순환 네트워크와 동일한 문제, 즉 병렬화하기 어렵다는 문제로 인해 GPU에서 가속화할 수 없었다. 2016년, 분해 가능한 어텐션은 순방향 네트워크에 자체 어텐션 메커니즘을 적용하여 쉽게 병렬화할 수 있었고, LSTM보다 매개변수를 10배 적게 사용하여 텍스트 추론에서 SOTA 결과를 달성했다. 저자 중 한 명인 야코프 우슈코레이트(Jakob Uszkoreit)는 순환 없이 어텐션만으로도 언어 번역에 충분할 것이라고 예상했으며, 그래서 "어텐션이 필요한 전부"라는 제목이 붙었다. 당시에는 이 가설이 통념에 반하는 것이었으며, 심지어 그의 아버지이자 유명한 전산 언어학자인 한스 우슈코레이트도 회의적이었다. 같은 해, LSTM에 자체 어텐션 (내부 어텐션 또는 문장 내부 어텐션이라 불림)이 제안되었다.
2017년, 원래 (1억 규모의) 인코더-디코더 트랜스포머 모델은 "어텐션 이즈 올 유 니드" 논문에서 제안되었다. 당시 연구의 초점은 기계 번역을 위한 Seq2seq를 개선하는 것이었다. 모든 토큰을 병렬로 처리하기 위해 순환을 제거하면서 텍스트 처리 성능을 유지하기 위해 점곱 어텐션 메커니즘을 유지했다. 이는 독립적인 헤드 사용과 순환 부족으로 인해 병렬화하기 더 쉬운 멀티 헤드 어텐션 모델의 도입으로 이어졌다. 이 모델의 병렬화 가능성은 대규모 신경망에서 널리 사용되는 중요한 요인이었다.
AI 붐 시대.
2017년 봄, "어텐션 이즈 올 유 니드" 초판이 발표되기도 전에 공동 저자 중 한 명은 아키텍처의 "디코더-온리" 변형을 사용하여 가상의 위키백과 기사를 생성했다. 트랜스포머 아키텍처는 현재 진행 중인 AI 붐에 기여하는 많은 생성 모델과 함께 사용된다.
언어 모델링에서 ELMo (2018)는 문맥화된 워드 임베딩을 생성하는 양방향 LSTM으로, 단어 가방 모형 및 Word2vec 연구를 개선했다. 그 뒤를 이어 인코더-온리 트랜스포머 모델인 BERT (2018)가 나왔다. 2019년 10월, 구글은 검색 쿼리 처리에 BERT를 사용하기 시작했다. 2020년, 구글 번역은 이전 RNN-인코더-RNN-디코더 모델을 트랜스포머-인코더-RNN-디코더 모델로 교체했다.
2018년부터 오픈AI의 GPT 시리즈는 디코더-온리 트랜스포머로서 자연어 생성 분야에서 최첨단이 되었다. 2022년, GPT-3 기반 챗봇인 챗GPT가 예상치 못하게 인기를 끌면서 대형 언어 모델에 대한 붐을 일으켰다.
2020년부터 트랜스포머는 텍스트를 넘어선 모달리티에 적용되기 시작했으며, 여기에는 비전 트랜스포머, 음성 인식, 로봇공학, 그리고 멀티모덜이 포함된다. 비전 트랜스포머는 다시 합성곱 신경망의 새로운 발전을 촉진했다. DALL-E (2021), 스테이블 디퓨전 3 (2024), 및 소라 (2024)와 같은 이미지 및 비디오 생성기는 트랜스포머를 사용하여 입력 데이터 (텍스트 프롬프트 등)를 "토큰"으로 분해한 다음 자체 어텐션을 사용하여 각 토큰 간의 관련성을 계산하여 모델이 데이터 내의 컨텍스트와 관계를 이해하도록 돕는다.
훈련 안정화 방법.
일반 트랜스포머 아키텍처는 수렴에 어려움을 겪었다. 원본 논문에서 저자들은 학습률 웜업을 사용할 것을 권장했다. 즉, 학습률은 훈련의 첫 부분 (보통 총 훈련 단계의 2%로 권장됨) 동안 0에서 최대값으로 선형적으로 스케일링된 후 다시 감소해야 한다.
2020년 논문에서는 멀티헤드 어텐션 및 순방향 레이어 전 (후가 아닌) 레이어 정규화를 사용하면 학습률 웜업 없이 훈련이 안정화된다는 사실을 발견했다.
사전 훈련-미세 조정.
트랜스포머는 일반적으로 먼저 대규모 일반 데이터셋에서 자기 지도 학습을 통해 사전 훈련된 다음, 작은 작업별 데이터셋에서 지도 미세 조정된다. 사전 훈련 데이터셋은 일반적으로 더 파일과 같은 레이블이 없는 대규모 코퍼스이다. 사전 훈련 및 미세 조정을 위한 작업은 일반적으로 다음을 포함한다.
T5 트랜스포머 보고서는 수많은 자연어 사전 훈련 작업을 문서화한다. 몇 가지 예는 다음과 같다.
이러한 각 작업은 해당 언어의 원어민에게는 사소하거나 명백한 반면, 이전 세대의 기계 학습 아키텍처에서는 일반적으로 어려움을 겪었다는 점에 유의해야 한다.
일반적으로 언어 모델링 작업은 "마스크드", "자기회귀", 및 "prefixLM"의 3가지 클래스로 나뉜다. 이러한 클래스는 트랜스포머와 같은 특정 모델링 아키텍처와는 독립적이지만, 트랜스포머의 맥락에서 종종 논의된다.
마스크드 작업에서, 하나 이상의 토큰이 마스킹되고 모델은 컨텍스트를 기반으로 마스킹된 토큰이 무엇인지 예측하는 확률 분포를 생성한다. 작업의 손실 함수는 일반적으로 마스킹된 토큰에 대한 로그-퍼플렉시티의 합이다.formula_1그리고 모델은 이 손실 함수를 최소화하도록 훈련된다. BERT 시리즈 모델은 마스크드 토큰 예측 및 다른 작업을 위해 훈련된다.
자기회귀 작업에서, 전체 시퀀스가 처음에는 마스킹되고 모델은 첫 번째 토큰에 대한 확률 분포를 생성한다. 그런 다음 첫 번째 토큰이 드러나고 모델은 두 번째 토큰을 예측하는 식으로 진행된다. 이 작업의 손실 함수는 여전히 일반적으로 동일하다. GPT 시리즈 모델은 자기회귀 작업을 통해 훈련된다.
prefixLM 작업에서, 시퀀스는 두 부분으로 나뉜다. 첫 번째 부분은 컨텍스트로 제공되며, 모델은 두 번째 부분의 첫 번째 토큰을 예측한다. 그런 다음 해당 토큰이 드러나고, 모델은 두 번째 토큰을 예측하는 식으로 진행된다. 이 작업의 손실 함수는 여전히 일반적으로 동일하다. T5 시리즈 모델은 prefixLM 작업을 통해 훈련된다.
"마스크드 언어 모델링"의 "마스크드"는 "마스크드 어텐션"의 "마스크드"와 다르며, "prefixLM" (접두사 언어 모델링)은 "prefixLM" (접두사 언어 모델)과 다르다는 점에 유의해야 한다.
모든 트랜스포머는 동일한 주요 구성 요소를 가지고 있다.
다음 설명은 원본 논문에 기술된 트랜스포머를 정확히 따른다. 다음 섹션에 설명된 변형도 있다.
관례적으로 모든 벡터를 행 벡터로 작성한다. 예를 들어, 벡터를 선형 레이어를 통해 밀어넣는 것은 formula_2와 같이 오른쪽에 가중치 행렬을 곱하는 것을 의미한다.
토큰화.
트랜스포머 아키텍처는 기본적으로 텍스트가 아닌 숫자 데이터를 처리하므로 텍스트와 토큰 간의 변환이 필요하다. 토큰은 문자 또는 짧은 문자 세그먼트를 나타내는 정수이다. 입력 측에서 입력 텍스트는 토큰 시퀀스로 구문 분석된다. 마찬가지로 출력 측에서 출력 토큰은 다시 텍스트로 구문 분석된다. 텍스트와 토큰 시퀀스 간의 변환을 수행하는 모듈은 토크나이저이다.
모든 토큰의 집합은 토크나이저의 어휘이며, 그 크기는 "어휘 크기" formula_3이다. 어휘 외의 토큰에 직면했을 때는 일반적으로 "[UNK]"("알 수 없음")라는 특수 토큰이 사용된다.
일반적으로 사용되는 토크나이저로는 바이트 쌍 인코딩, WordPiece, SentencePiece 등이 있다.
임베딩.
각 토큰은 순람표를 통해 임베딩 벡터로 변환된다. 동등하게 말하자면, 토큰의 원-핫 표현에 임베딩 행렬 formula_4을 곱한다. 예를 들어, 입력 토큰이 formula_5이라면 원-핫 표현은 formula_6이고, 그 임베딩 벡터는 다음과 같다.
토큰 임베딩 벡터는 해당 위치 인코딩 벡터(아래 참조)에 추가되어 입력 벡터 시퀀스를 생성한다.
임베딩 벡터의 차원 수는 "은닉 크기" 또는 "임베딩 크기"라고 불리며 formula_8로 표기된다. 이 크기는 원본 트랜스포머 논문에서 formula_9로 표기된다.
언임베딩.
언임베딩 레이어는 임베딩 레이어의 거의 역이다. 임베딩 레이어가 토큰을 벡터로 변환하는 반면, 언임베딩 레이어는 벡터를 토큰에 대한 확률 분포로 변환한다.
언임베딩 레이어는 선형-소프트맥스 레이어이다.
이 행렬의 형태는 formula_11이다. 임베딩 행렬 formula_4과 언임베딩 행렬 formula_13는 때때로 서로의 전치 행렬이 되도록 요구되는데, 이를 가중치 연결이라고 한다.
위치 인코딩.
위치 인코딩은 시퀀스 내 토큰의 상대적 위치를 고정된 크기의 벡터로 표현한 것이다. 이는 트랜스포머 모델에 입력 시퀀스에서 단어가 "어디에" 있는지에 대한 정보를 제공한다. 이는 입력 시퀀스 "man bites dog"가 "dog bites man"과 다르게 처리되도록 입력 시퀀스의 순서에 대한 편향을 유도한다.
위치 인코딩은 formula_14 유형의 함수로 정의되며, 여기서 formula_15는 양의 짝수 정수이다. 원본 논문에 정의된 전체 위치 인코딩은 다음과 같다.
여기서 formula_17이다.
여기서 formula_18은 위치 인코딩 함수에 입력될 수 있는 가장 큰 formula_19보다 훨씬 커야 하는 자유 매개변수이다. 원본 논문은 formula_20을 사용한다.
이 함수는 formula_21 유형의 복소 함수로 작성될 때 더 간단한 형태를 가진다.
여기서 formula_23이다.
이 위치 인코딩 함수를 사용하는 주된 이유는 이를 사용하면 이동이 선형 변환이 되기 때문이다.
여기서 formula_25는 이동하려는 거리이다. 이를 통해 트랜스포머는 인코딩된 모든 위치를 가져와 행렬 곱셈을 통해 n-단계 앞 또는 n-단계 뒤 위치의 인코딩을 찾을 수 있다.
선형 합을 취하면 모든 합성곱도 선형 변환으로 구현될 수 있다.
어떤 상수 formula_27에 대해서도 마찬가지이다. 이를 통해 트랜스포머는 인코딩된 모든 위치를 가져와 이웃의 인코딩된 위치의 선형 합을 찾을 수 있다. 인코딩된 위치의 이 합은 어텐션 메커니즘에 입력될 때, 합성곱 신경망 언어 모델에서 일어나는 것과 유사하게 이웃에 대한 어텐션 가중치를 생성한다. 저자의 말에 따르면, "이것은 모델이 상대적 위치에 따라 쉽게 어텐션하는 방법을 배울 수 있도록 할 것이라고 가정했다."
일반적인 구현에서는 모든 연산이 복소수가 아닌 실수에 대해 수행되지만, 복소수 곱셈은 실수 2x2 행렬 곱셈으로 구현될 수 있기 때문에 이는 단순한 표기법 차이이다.
인코더-디코더 (개요).
이전 Seq2seq 모델과 마찬가지로, 원래 트랜스포머 모델은 인코더-디코더 아키텍처를 사용했다. 인코더는 모든 입력 토큰을 차례로 처리하는 인코딩 레이어로 구성되는 반면, 디코더는 인코더의 출력과 디코더의 지금까지의 출력 토큰을 반복적으로 처리하는 디코딩 레이어로 구성된다.
각 인코더 레이어의 목적은 토큰의 문맥화된 표현을 생성하는 것이다. 이 표현은 자체 어텐션 메커니즘을 통해 다른 입력 토큰의 정보를 "혼합"하는 토큰에 해당한다. 각 디코더 레이어는 두 개의 어텐션 서브레이어를 포함한다: (1) 인코더의 출력 (문맥화된 입력 토큰 표현)을 통합하기 위한 교차 어텐션, (2) 디코더의 입력 토큰 (즉, 추론 시간 동안 지금까지 생성된 토큰) 사이에서 정보를 "혼합"하기 위한 자체 어텐션.
인코더 및 디코더 레이어 모두 출력의 추가 처리를 위한 순방향 신경망을 가지며, 잔차 연결 및 레이어 정규화 단계를 포함한다. 이러한 순방향 레이어는 트랜스포머 모델의 매개변수 대부분을 포함한다.
순방향 네트워크.
트랜스포머의 순방향 네트워크 (FFN) 모듈은 2계층 다층 퍼셉트론이다.
여기서 formula_29 및 formula_30는 가중치 행렬이고 formula_31 및 formula_32는 편향 벡터이며, formula_33는 활성화 함수이다. 원래 트랜스포머는 ReLU 활성화를 사용했다.
중간 계층의 뉴런 수는 "중간 크기" (GPT), "필터 크기" (BERT), 또는 "순방향 크기" (BERT)라고 불린다. 일반적으로 임베딩 크기보다 크다. 예를 들어, GPT-2 시리즈와 BERT 시리즈 모두에서 모델의 중간 크기는 임베딩 크기의 4배이다. formula_34.
스케일드 점곱 어텐션.
어텐션 헤드.
트랜스포머 아키텍처에서 사용되는 어텐션 메커니즘은 스케일드 점곱 어텐션 유닛이다. 각 유닛에 대해 트랜스포머 모델은 세 가지 가중치 행렬을 학습한다: 쿼리 가중치 formula_35, 키 가중치 formula_36, 값 가중치 formula_37.
이 모듈은 쿼리 시퀀스, 키 시퀀스, 값 시퀀스 세 가지 시퀀스를 입력으로 받는다. 쿼리 시퀀스는 길이 formula_38의 시퀀스이며, 각 항목은 차원 formula_39의 벡터이다. 키 및 값 시퀀스도 마찬가지이다.
쿼리 시퀀스의 각 벡터 formula_40는 행렬 formula_35에 곱해져 쿼리 벡터 formula_42를 생성한다. 모든 쿼리 벡터의 행렬은 쿼리 행렬이다.
마찬가지로 키 행렬 formula_44와 값 행렬 formula_45를 구성한다.
일반적으로 모든 formula_46는 정방 행렬이며, 이는 formula_47 등을 의미한다.
어텐션 가중치는 쿼리 및 키 벡터를 사용하여 계산된다. 토큰 formula_48에서 토큰 formula_49까지의 어텐션 가중치 formula_50는 formula_51와 formula_52 사이의 스칼라곱이다. 어텐션 가중치는 키 벡터의 차원인 formula_53의 제곱근으로 나뉘어 훈련 중 기울기를 안정화하고, 가중치를 정규화하는 소프트맥스를 통해 전달된다. formula_35와 formula_36가 다른 행렬이라는 사실은 어텐션이 비대칭일 수 있도록 한다. 토큰 formula_48가 토큰 formula_49에 어텐션한다면 (즉, formula_58가 크다면), 토큰 formula_49가 토큰 formula_48에 어텐션한다는 것을 반드시 의미하지는 않는다 (즉, formula_61는 작을 수 있다). 토큰 formula_48에 대한 어텐션 단위의 출력은 모든 토큰의 값 벡터를 formula_50 (토큰 formula_48에서 각 토큰으로의 어텐션)로 가중 평균한 값이다.
모든 토큰에 대한 어텐션 계산은 소프트맥스 함수를 사용하여 하나의 큰 행렬 계산으로 표현할 수 있으며, 이는 행렬 연산 최적화를 통해 행렬 연산을 빠르게 계산할 수 있으므로 훈련에 유용하다. 행렬 formula_65, formula_66, formula_67는 각각 formula_51, formula_69, formula_70 벡터를 행으로 하는 행렬로 정의된다. 그러면 어텐션을 다음과 같이 표현할 수 있다.
여기서 소프트맥스는 행렬의 각 행에 적용된다.
쿼리 벡터의 차원 수는 "쿼리 크기" formula_72이고, 마찬가지로 "키 크기" formula_73 및 "값 크기" formula_74이다. 어텐션 헤드의 출력 차원은 "헤드 차원" formula_75이다. 어텐션 메커니즘은 다음 세 가지 등식이 성립해야 한다.
그렇지 않으면 제약이 없다.
어텐션 헤드가 자체 어텐션 방식으로 사용되면 formula_77이다. 어텐션 헤드가 교차 어텐션 방식으로 사용되면 일반적으로 formula_78이다. 이론적으로는 세 가지 모두 다를 수 있지만, 실제로는 거의 그렇지 않다.
멀티헤드 어텐션.
하나의 formula_79 행렬 세트를 "어텐션 헤드"라고 하며, 트랜스포머 모델의 각 계층에는 여러 어텐션 헤드가 있다. 각 어텐션 헤드는 각 토큰과 관련된 토큰에 어텐션하는 반면, 여러 어텐션 헤드는 모델이 "관련성"에 대한 다른 정의에 대해 이를 수행할 수 있도록 한다. 특히, 어텐션 점수 계산에 관여하는 쿼리 및 키 투영 행렬인 formula_35 및 formula_36는 "관련성"을 정의한다. 한편, 값 투영 행렬 formula_37는 출력 투영 행렬 formula_83의 부분과 결합하여 어텐션된 토큰이 후속 계층 및 궁극적으로 출력 로짓으로 전달되는 정보에 어떤 영향을 미치는지 결정한다. 또한, 어텐션의 범위, 즉 각 어텐션 헤드가 포착하는 토큰 관계의 범위는 토큰이 연속적인 계층을 통과함에 따라 확장될 수 있다. 이를 통해 모델은 더 깊은 계층에서 더 복잡하고 장거리 의존성을 포착할 수 있다. 많은 트랜스포머 어텐션 헤드는 인간에게 의미 있는 관련성 관계를 인코딩한다. 예를 들어, 일부 어텐션 헤드는 주로 다음 단어에 어텐션하는 반면, 다른 어텐션 헤드는 주로 동사에서 직접 목적어에 어텐션한다. 각 어텐션 헤드에 대한 계산은 병렬로 수행될 수 있어 빠른 처리가 가능하다. 어텐션 레이어의 출력은 순방향 신경망 레이어로 전달되기 위해 연결된다.
구체적으로, 여러 어텐션 헤드가 formula_48로 인덱싱된다고 하자. 그러면 다음과 같다.
formula_85 여기서 행렬 formula_86는 단어 임베딩의 연결이고, 행렬 formula_87는 개별 어텐션 헤드 formula_48가 소유하는 "투영 행렬"이며, formula_83는 전체 멀티헤드 어텐션 헤드가 소유하는 최종 투영 행렬이다.
이론적으로 각 어텐션 헤드가 다른 헤드 차원 formula_75를 가질 수 있지만, 실제로는 거의 그렇지 않다.
예를 들어, 가장 작은 GPT-2 모델에는 자체 어텐션 메커니즘만 있다. 이 모델은 다음과 같은 차원을 가진다.
formula_92이므로, 출력 투영 행렬 formula_93는 정방 행렬이다.
마스크드 어텐션.
트랜스포머 아키텍처는 출력 토큰을 반복적으로 계산하도록 구성된다. formula_94이 첫 번째 출력 토큰 formula_95의 계산을 나타낸다고 가정하면, 단계 formula_96에서 출력 토큰 formula_95은 상수로 유지되어야 한다. 이는 모델의 속성이 자기회귀 모델과 유사하도록 보장한다. 따라서 모든 시간 단계 formula_98에서 모든 출력 formula_48에 대한 계산은 formula_100인 위치 formula_49의 토큰에 접근할 수 없어야 한다 (시간 단계 formula_102의 경우 토큰 formula_103는 아직 계산되지 않았으므로 당연하다). 이 동작은 소프트맥스 단계 전에 어텐션 링크를 끊어야 하는 항목에는 formula_104를, 다른 항목에는 formula_105을 갖는 마스크 행렬 formula_4을 추가하여 달성할 수 있다.
formula_107 다음 행렬은 디코더 자체 어텐션 모듈에서 일반적으로 사용되며 "인과적 마스킹"이라고 불린다.
다시 말해, 각 토큰은 자신과 그 이전의 모든 토큰에 어텐션할 수 있지만, 그 이후의 토큰에는 어텐션할 수 없다. 마스크되지 않은 어텐션 모듈은 마스크의 모든 항목이 0인 마스크드 어텐션 모듈로 생각할 수 있다. 마스크 행렬의 흔치 않은 사용 예시로, XLNet은 formula_109 형태의 모든 마스크를 고려하는데, 여기서 formula_110는 무작위 치환행렬이다.
인코더.
인코더는 임베딩 레이어와 여러 인코더 레이어로 구성된다.
각 인코더 레이어는 자체 어텐션 메커니즘과 순방향 레이어의 두 가지 주요 구성 요소로 구성된다. 이 레이어는 입력 벡터 시퀀스를 입력으로 받아 자체 어텐션 메커니즘을 적용하여 중간 벡터 시퀀스를 생성한 다음, 각 벡터에 개별적으로 순방향 레이어를 적용한다. 개략적으로 다음과 같다.
여기서 formula_112은 "순방향 네트워크"를 나타낸다. 이를 더 간결하게 다음과 같이 쓸 수 있다.
formula_112은 행렬의 각 행에 개별적으로 적용된다는 암묵적인 관례가 있다.
인코더 레이어는 쌓여 있다. 첫 번째 인코더 레이어는 임베딩 레이어에서 입력 벡터 시퀀스를 받아 벡터 시퀀스를 생성한다. 이 벡터 시퀀스는 두 번째 인코더에 의해 처리되고, 이런 식으로 계속된다. 최종 인코더 레이어의 출력은 디코더에 의해 사용된다.
인코더가 전체 입력을 한 번에 처리하므로 모든 토큰은 다른 모든 토큰에 어텐션할 수 있으므로(모든 대 모든 어텐션) 인과적 마스킹이 필요 없다.
디코더.
디코더는 임베딩 레이어, 여러 디코더 레이어, 그리고 언임베딩 레이어로 구성된다.
각 디코더는 세 가지 주요 구성 요소로 구성된다: 인과적으로 마스킹된 자체 어텐션 메커니즘, 교차 어텐션 메커니즘, 그리고 순방향 신경망이다. 디코더는 인코더와 유사하게 작동하지만, 인코더가 생성한 인코딩에서 관련 정보를 추출하는 추가적인 어텐션 메커니즘이 삽입된다. 이 메커니즘은 "인코더-디코더 어텐션"이라고도 불린다.
첫 번째 인코더와 마찬가지로, 첫 번째 디코더는 인코딩 대신 출력 시퀀스의 위치 정보와 임베딩을 입력으로 받는다. 트랜스포머는 출력을 예측하기 위해 현재 또는 미래의 출력을 사용해서는 안 되므로, 이러한 역방향 정보 흐름을 방지하기 위해 출력 시퀀스를 부분적으로 마스킹해야 한다. 이를 통해 자기회귀 텍스트 생성이 가능하다. 디코딩의 경우, 토큰이 아직 생성되지 않았으므로 토큰이 아직 생성되지 않은 토큰에 어텐션할 수 없기 때문에 모든 대 모든 어텐션은 부적절하다. 따라서 디코더의 자체 어텐션 모듈은 인과적으로 마스킹된다.
대조적으로, 교차 어텐션 메커니즘은 디코더가 디코딩을 시작하기 전에 계산되는 인코더의 출력 벡터에 어텐션한다. 결과적으로 교차 어텐션 메커니즘에서는 마스킹이 필요 없다.
개략적으로 다음과 같다.
여기서 formula_116는 행이 인코더의 출력 벡터인 행렬이다.
마지막 디코더 뒤에는 최종 언임베딩 레이어가 이어져 어휘에 대한 출력 확률을 생성한다. 그런 다음 확률에 따라 토큰 중 하나가 샘플링되고, 디코더를 다시 실행하여 다음 토큰을 생성하는 방식으로 자기회귀적으로 출력 텍스트를 생성할 수 있다.
수정된 아키텍처.
많은 대형 언어 모델은 입력 시퀀스로부터 완전히 새로운 시퀀스를 예측할 필요가 없으므로, 원래 트랜스포머 아키텍처의 인코더 또는 디코더만 사용한다. 초기 GPT 모델은 시퀀스의 다음 토큰을 예측하도록 훈련된 디코더-온리 모델이다. 다른 언어 모델인 BERT는 인코더만 사용하며, 시퀀스에서 무작위로 마스킹된 토큰을 예측하도록 훈련된다.
전체 트랜스포머 아키텍처.
서브레이어.
각 인코더 레이어는 자체 어텐션과 순방향 네트워크의 2개의 서브레이어를 포함한다. 각 디코더 레이어는 인과적으로 마스킹된 자체 어텐션, 교차 어텐션, 순방향 네트워크의 3개의 서브레이어를 포함한다.
마지막 세부 사항은 잔차 연결과 레이어 정규화 (LayerNorm, 또는 LN)인데, 개념적으로는 불필요하지만 수치적 안정성과 수렴을 위해 필요하다.
소실 경사 문제를 피하고 훈련 과정을 안정화하기 위해 도입된 잔차 연결은 y = F(x) + x로 표현될 수 있다. 이 표현은 출력 y가 입력 x의 변환(F(x))과 입력 자체(x)의 합임을 나타낸다. 입력 x를 추가하면 입력 정보를 보존하고 F(x)의 경사가 거의 0에 가까울 때 발생하는 문제를 피할 수 있다.
순방향 네트워크 모듈이 각 벡터에 개별적으로 적용되는 것과 유사하게, 레이어 정규화(LayerNorm)도 각 벡터에 개별적으로 적용된다.
두 가지 일반적인 컨벤션이 사용된다: "Post-LN"과 "Pre-LN" 컨벤션. Post-LN 컨벤션에서 각 서브레이어의 출력은 다음과 같다.
여기서 formula_118는 서브레이어 자체에서 구현된 함수이다.
Pre-LN 컨벤션에서 각 서브레이어의 출력은 다음과 같다.
원래 2017년 트랜스포머는 Post-LN 컨벤션을 사용했다. 이는 훈련하기 어려웠고 신중한 하이퍼파라미터 튜닝과 학습률의 "웜업"이 필요했는데, 이는 학습률이 작게 시작하여 점진적으로 증가하는 방식이었다. 2018년에 여러 차례 제안된 Pre-LN 컨벤션은 웜업이 필요 없이 훈련하기 더 쉽고 더 빠른 수렴을 이끌어낸다는 것이 밝혀졌다.
다음은 표준 Pre-LN 인코더-디코더 트랜스포머의 의사 코드이며에서 발췌했다.
입력: 인코더 입력 t_e
디코더 입력 t_d
출력: 확률 분포 배열 (디코더 어휘 크기 x 디코더 출력 시퀀스 길이)
/* 인코더 */
z_e ← encoder.tokenizer(t_e)
각 t 에 대해 1:length(z_e) 반복
z_e[t] ← encoder.embedding(z_e[t]) + encoder.positional_embedding(t)
각 l 에 대해 1:length(encoder.layers) 반복
layer ← encoder.layers[l]
/* 첫 번째 서브레이어 */
z_e_copy ← copy(z_e)
z_e[t] ← layer.layer_norm(z_e[t])
z_e ← layer.multiheaded_attention(z_e, z_e, z_e)
z_e[t] ← z_e[t] + z_e_copy[t]
/* 두 번째 서브레이어 */
z_e ← layer.feedforward(z_e)
z_e[t] ← encoder.final_layer_norm(z_e[t])
/* 디코더 */
z_d ← decoder.tokenizer(t_d)
각 t 에 대해 1:length(z_d) 반복
z_d[t] ← decoder.embedding(z_d[t]) + decoder.positional_embedding(t)
각 l 에 대해 1:length(decoder.layers) 반복
layer ← decoder.layers[l]
z_d_copy ← copy(z_d)
z_d[t] ← layer.layer_norm(z_d[t])
z_d ← layer.masked_multiheaded_attention(z_d, z_d, z_d)
z_d[t] ← z_d[t] + z_d_copy[t]
z_d ← layer.multiheaded_attention(z_d, z_e, z_e)
각 i 에 대해 1:length(z_d) 반복
/* 세 번째 서브레이어 */
z_d ← layer.feedforward(z_d)
z_d ← decoder.final_layer_norm(z_d)
output_distributions ← []
output_distributions.append(decoder.unembed(z_d[t]))
return output_distributions
트랜스포머 아키텍처는 모듈화되어 다양한 변형을 허용한다. 몇 가지 일반적인 변형이 여기에 설명되어 있다.
"인코더-온리" 트랜스포머는 인코더를 적용하여 입력 텍스트를 입력 텍스트를 나타내는 벡터 시퀀스로 매핑한다. 이는 일반적으로 텍스트 임베딩 및 후속 애플리케이션을 위한 표현 학습에 사용된다. BERT는 인코더-온리이다. 인코더-디코더 트랜스포머를 훈련한 다음 인코더만 사용하는 것보다 훨씬 좋지 않다는 것이 밝혀졌으므로 현재는 덜 사용된다.
"디코더-온리" 트랜스포머는 문자 그대로 디코더-온리가 아니다. 인코더가 없으면 교차 어텐션 메커니즘은 어텐션할 대상이 없다. 따라서 디코더-온리 트랜스포머의 디코더 레이어는 인과적으로 마스킹된 자체 어텐션과 순방향 네트워크라는 두 개의 서브레이어로만 구성된다. 이는 일반적으로 텍스트 생성 및 명령 따르기에 사용된다. GPT 시리즈 및 친칠라 시리즈의 모델은 디코더-온리이다.
"인코더-디코더" 트랜스포머는 일반적으로 원본 트랜스포머와 동일하며, 각 인코더 레이어당 2개의 서브레이어와 각 디코더 레이어당 3개의 서브레이어 등이 있다. 대체 활성화 함수, 정규화 위치 변경 등과 같은 사소한 아키텍처 개선 사항이 있을 수 있다. 이는 일반적으로 텍스트 생성 및 명령 따르기에도 사용된다. T5 시리즈의 모델은 인코더-디코더이다.
"prefixLM" (접두사 언어 모델)은 디코더 전용 아키텍처이지만, 인과적 마스킹과 다른 접두사 마스킹을 사용한다.formula_120
여기서 첫 번째 열은 "접두사"에 해당하고, 이어지는 열은 접두사를 기반으로 자기회귀적으로 생성된 텍스트에 해당한다. 이는 인코더-디코더 모델과 유사하지만 "희소성"이 적다. 이러한 모델은 이론적 가능성 및 벤치마크 비교로 인용되기는 하지만 거의 사용되지 않는다.
혼합형 seq2seq 모델도 있다. 예를 들어, 2020년 구글 번역은 RNN-디코더가 자기회귀적으로 실행될 때 트랜스포머-디코더보다 훨씬 빠르게 실행된다는 주장에 따라 이전 RNN-인코더-RNN-디코더 모델을 트랜스포머-인코더-RNN-디코더 모델로 교체했다.
후속 연구.
대체 활성화 함수.
원래 트랜스포머는 ReLU 활성화 함수를 사용한다. 다른 활성화 함수들이 개발되었다. 라마 시리즈와 PaLM은 SwiGLU를 사용했고; GPT-1과 BERT 모두 GELU를 사용했다.
대체 활성화 함수는 순방향 모듈에서 게이트 선형 단위와 함께 사용되는 경우가 많다.
대체 정규화.
트랜스포머에 사용되는 정규화는 레이어 정규화(LayerNorm)와 다를 수 있다. 한 가지 예는 라마 시리즈에서 사용되는 RMSNorm이다. 다른 예로는 CapsuleNorm ScaleNorm, 또는 FixNorm.
대체 위치 인코딩.
트랜스포머는 사인파형 외에 다른 위치 인코딩 방법을 사용할 수 있다.
원래 트랜스포머 논문에서는 학습된 위치 인코딩을 사용했다고 보고했지만, 사인파형 인코딩보다 우수하지 않다는 것을 발견했다. 이후,는 인과적 마스킹 자체가 트랜스포머 디코더에 충분한 신호를 제공하여 위치 인코딩 모듈 없이도 절대 위치 인코딩을 암시적으로 수행할 수 있음을 발견했다.
RoPE.
RoPE (회전 위치 임베딩)는 2차원 벡터 목록 formula_121를 고려하면 가장 잘 설명된다. 이제 어떤 각도 formula_122를 선택한다. 그러면 RoPE 인코딩은 다음과 같다.
동등하게, 2차원 벡터를 복소수 formula_124로 작성하면, RoPE 인코딩은 단순히 각도 곱셈이다.
formula_126차원 벡터 목록의 경우, RoPE 인코더는 각도 시퀀스 formula_127에 의해 정의된다. 그러면 RoPE 인코딩은 각 좌표 쌍에 적용된다.
RoPE의 이점은 두 벡터 간의 점곱이 상대적 위치에만 의존한다는 것이다.
어떤 정수 formula_19에 대해서도 마찬가지이다.
ALiBi.
ALiBi (Attention with Linear Biases)는 원래 트랜스포머의 위치 인코더를 "대체하는" 것이 아니다. 대신, 어텐션 메커니즘에 직접 연결되는 "추가적인" 위치 인코더이다. 구체적으로, ALiBi 어텐션 메커니즘은 다음과 같다.
여기서 formula_131는 실수("스칼라")이고, formula_132는 다음과 같이 정의되는 "선형 편향" 행렬이다.
다른 말로, formula_134이다. 선형 편향 행렬은 부드러운 마스크라는 아이디어이다. formula_105은 완전한 어텐션을 나타내고, formula_104는 어텐션을 나타내지 않는 것처럼, 선형 편향 행렬은 한 방향으로는 어텐션을 증가시키고 다른 방향으로는 어텐션을 감소시킨다.
ALiBi는 짧은 컨텍스트 창에서 사전 훈련한 다음, 더 긴 컨텍스트 창에서 미세 조정하는 것을 가능하게 한다. 어텐션 메커니즘에 직접 연결되기 때문에 전체 네트워크의 "바닥"에 연결되는 모든 위치 인코더 (원본 트랜스포머의 사인파 인코더, RoPE 및 기타 여러 가지)와 결합할 수 있다.
상대 위치 인코딩.
상대 위치 인코딩은 ALiBi와 유사하지만 더 일반적이다.
여기서 formula_132는 퇴플리츠 행렬이며, 즉 formula_139일 때마다 formula_140이다. 이는 "절대 위치 인코딩"인 원래의 사인파 위치 인코딩과 대조된다.
효율적인 구현.
트랜스포머 모델은 텐서플로 및 PyTorch와 같은 표준 딥 러닝 프레임워크에 구현되었다. "트랜스포머"는 허깅 페이스가 개발한 라이브러리로, 트랜스포머 기반 아키텍처와 사전 훈련된 모델을 제공한다.
KV 캐싱.
자기회귀 트랜스포머가 텍스트 생성과 같은 추론에 사용될 때, 쿼리 벡터는 각 단계에서 다르지만, 이미 계산된 키 및 값 벡터는 항상 동일하다. KV 캐싱 방법은 각 어텐션 블록에서 계산된 키 및 값 벡터를 저장하여 각 새 토큰에서 다시 계산되지 않도록 한다. PagedAttention은 KV 캐싱에 메모리 페이징을 적용한다.
["당신은 고객 지원 상담원입니다..."]와 같이 내장된 프롬프트와 함께 트랜스포머가 사용되는 경우, 프롬프트에 대한 키 및 값 벡터를 계산하고 디스크에 저장할 수 있다. 모델이 온라인 챗봇과 같이 많은 짧은 상호 작용에 사용될 때 계산 절약은 상당하다.
FlashAttention.
FlashAttention는 GPU에서 트랜스포머 어텐션 메커니즘을 효율적으로 구현하는 알고리즘이다. 이는 블록 단위로 행렬 곱셈을 수행하여 각 블록이 GPU의 캐시 내에 맞도록 하고, 블록을 신중하게 관리하여 GPU 캐시 간의 데이터 복사를 최소화하는 (데이터 이동이 느리기 때문에) 통신 회피 알고리즘이다. 자세한 내용은 소프트맥스 페이지를 참조한다.
개선된 버전인 FlashAttention-2는 더 긴 컨텍스트 길이를 처리할 수 있는 언어 모델에 대한 증가하는 수요를 충족시키기 위해 개발되었다. 작업 분할 및 병렬 처리 개선을 제공하여 A100 GPU (FP16/BF16)에서 최대 230 TFLOPs/s를 달성하여 원래 FlashAttention보다 2배 빠른 속도를 제공한다.
FlashAttention-2의 주요 발전 사항은 비-행렬 곱셈 FLOPS 감소, 시퀀스 길이 차원에 대한 병렬 처리 개선, GPU 워프 간의 더 나은 작업 분할, 그리고 최대 256의 헤드 차원과 멀티 쿼리 어텐션(MQA) 및 그룹 쿼리 어텐션(GQA)에 대한 추가 지원을 포함한다.