AINLPTransformer

쉽게푼_Transformer(자연어 처리 모델)

·8 min read
Transformer 왜 등장한 거지?

대부분의 기술은 과거의 방식에 문제가 있기에 새로운 방식이 생긴다.

Transformer 이전에는 RNN이라는 기술이 있었는데 애는 기억력이 안 좋았다.

RNN(Recurrent Neural Network, 순환 신경망)

이름에 '순환'이 들어가 있는데 애는 처리 할 때마다 출력이 다음 처리의 입력으로 쓰인다.

입력을 하나 주고 자연어를 생성해보자.

"원숭이 엉덩이는 빨개" -> "원숭이 엉덩이는 빨개~ 빨가면 사과~"

이제 생성된 출력은 다시 입력으로 쓰인다.

"원숭이 엉덩이는 빨개~ 빨가면 사과~" -> " "원숭이 엉덩이는 빨개~ 빨가면 사과~ 사과는 맛있어~"

이게 반복된다.

노래 부르는데 1절 부르고 다시 1절 부르고 2절 부르고 다시 1절 부르고 2절 부르고 3절 부르고

정신이 나갈 것 같다.

그래서 RNN은 치매에 걸렸다. 즉 장기기억능력이 오락가락한다는 거다.(기울기 소실/폭주)

바로 직전에 처리한 데이터만 기억하려 해서 "비행기는 높아~ 높으면 백두산" 까지 부르고

"원숭이 엉덩이는 어때?" 라고 질문하면 애는 기억도 못 한다. 분명 1절을 8번이나 불렀는데 까먹었다.

이 문제를 부분적으로 완화하려고 LSTM/GRU 이런 애들도 있지만 다루지는 않겠다.

RNN등의 순차 처리 모델은 단기적인 예측에는 유용했으나, 대규모 언어 모델에는 부적합했다.

치매걸린 사람과 채팅한다고 생각하면 이해가 빠를 것이다.

Transformer는 뭐가 달라?

이전 애들이 순환하면서 과거부터 현재까지 처리 상태를 계속 끌고 갈 때

Transformer는 입력 처리시 그냥 전체 내용을 한 번에 다 본다.

순차처리 방식을 버렸기 때문에 RNN과 다르게 병렬 처리도 가능하다.

처리량은 늘어났지만, 병렬로 처리하니깐 오히려 실제 처리 시간이 줄어들었다.

즉 많은 양의 연산을 빠르게 가능한 것이다.

여기서 전체 내용을 한번에 본다는 거에 주목해야하는데

"원숭이 엉덩이는 빨개~ 빨가면 ~~~ 맛있으면 바나나"를 처리할 때

RNN이 치매 걸려서 첫 단어(원숭이)랑 마지막(바나나)의 상관관계를 분석 못할 때

Transformer는 원숭이와 바나나에 대한 연관성을 계산할 수 있다는 점이다.

모든 단어가 서로를 직접적으로 참조하도록 계산하기 때문이다.

Attention Is All You Need

Attention이 뭐냐 집중이다.

처리할 때 중요한거에 집중하겠다는 개념이다.

새로운 개념은 아니고 기존 RNN도 Attention을 사용한다.

번역을 한다고 예시를 들어보자

"나는 오늘 학교에 갔다."를 영어로 번역할 때 RNN은 순차적으로 처리를 할 것이다.

I를 번역하고 다음에 나올 단어를 예측하기 위해 "I"를 다시 입력으로 넣고, 다음에 나올 단어와 [나는, 오늘, 학교에, 갔다]를 각각 비교하며 연산을 돌린다.

연산을 하고 나니 [갔다]가 나온다. '갔다'를 번역한 결과인 'went' 가 결과로 나와서 'I went'가 됬고 다시 다음 단어를 예측한다.

이번에는 'I went'가 입력이고, 다음에 나올 단어와 [나는, 오늘, 학교에, 갔다]를 다시 각각 비교하면 연산을 돌린다.

이 과정을 매번 반복하는 것이다.

즉 매 단계별 디코더 상태와 인코더 상태간의 Attention을 계산해야 하고 병렬 처리가 어려웠기 때문에 메모리 부하가 걸린다.

만약 번역 대상 언어가 [제가 1994년에 LA에 있었을 때⋯]가 된다면 연산 비용이 매우 커질 것이다.

Self Attention

Transformer 모델의 가장 핵심적인 개념이다.

기존에 Attention 연산에서 비교 대상인 [나는, 오늘, 학교에, 갔다]와 질의 대상이었던 [I, I went, I wnet to] 항목은 서로 다르다

Self Attention에서는 나 자신을 기준으로 집중도를 비교하기 때문에 비교 대상과 질의 대상이 같다.

즉,

'나는'을 기준으로 [나는, 오늘, 학교에, 갔다] 각각 비교하고

'오늘'을 기준으로 [나는, 오늘, 학교에, 갔다]와 각각 비교하고

각 단어(토큰)만큼 반복하는 것이다.

나(Self)를 기준으로 관련 있는 항목에 대한 가중치를 계산할 수 있는 것이다.

나를 기준으로 하기에 동음이의어 처리에 능숙한데

예시를 들자면

"사과를 먹어 배부른 선장의 배가 섬으로 간다"

여기서 배는 2가지 의미를 가진다.

  1. 선장에 신체 부위

  2. 바다를 건너는 배

1번의 배는 자기 자신을 중심으로 관련 항목을 계산한다면 [사과, 먹다, 선장]이 높은 점수로 나올 것이다.

2번의 배는 자기 자신을 중심으로 관련 항목을 계산한다면 [선장, 섬]이 높은 점수로 나올 것이다.

여기서 한가지 알아야 할 것이 단어의 위치다.

1번의 배와, 2번의 배를 어떻게 구분 할 것인가.

RNN의 순차적인 처리와는 다르게 Transformer는 전체 내용을 한번에 처리한다.

즉, 병렬로 처리한다면 각 단어의 위치 정보를 인지하고 있어야 하는데,

이때 사용되는 것이 Positional encoding이다.

← Previous
쉽게푼_MCP
Next →
쉽게푼_RAG