오늘이 11월 26일이니, 매일 1장식 독파하면 챌린지 성공이다.
첫째와 둘째의 방해 속에서 가능할지 모르겠다.
1. 더미 트랜스포머

GPT 모델을 만들면서 파이토치에서 트랜스포머 더미 블록을 가져오는 것을 봤다.
찾아보니 pytorch의 nn 안에는 이미 여러 트랜스포머 모델들이 구현되어 있었다.
이 트랜스포머 모델을 더미(dummy)라고 부르는 건, 모델의 구조는 같지만 아직 학습되지 않았기 때문이다.
2. 정규화
트랜스포머 블록 안으로 들어온 값들 중, 하나의 차원이 너무 크다면 해당 방향으로 데이터가 치중된다.
따라서 평균이 0이고 분산이 1이 되도록 값을 변환해준다.
그리고 Feed Forward Network에서는 Liner로 차원을 확장한 뒤 비선형 변환을 한다.
이때 ReLU나 GELU라는 비선형 활성화 함수를 이용한다.

ReLU보다 GELU가 선형적이기에 파라미터가 더 잘 조정된다고 한다.
그리고 각 블록에서는 Liner 함수를 이용해 차원을 늘렸다가 다시 감소시킨다.
차원을 늘리면 더 풍부한 비선형적 탐색이 가능해진다.
예를들어 사과, 오렌지, 당근이 있다면 해당 요리들을 데치고, 굽고, 다지고, 섞는 등 다양한 방식으로 요리해보는 것이다.
그리고 완성된 요리들을 모아 핵심만 원래 차원에 함께 담아내는 것이다.

3. 숏컷
학습은 손실이 일어난 곳에서부터 일어나기 때문에 역으로 추적해 들어간다.
예를들어 2층에서 물이 떨어진다고 해보자.
그럼 3층, 4층, 5층으로 올라가면서 물이 새는 곳을 역으로 찾아보는 것.
그래서 이 과정을 역전파라고 한다.

하지만 위처럼 만들어진 모델은 선형층을 지날 때 마다 그레디언트의 소실이 일어난다.
그레디언트가 소실된다는 것은, 역전파 과정에서 깊은 층에서는 학습이 사실상 일어나지 않기에 여러 층을 쌓는 의미가 없어진다는 것이다.
따라서 각 선형층에서 입력값과 출력값을 더하면서 gradientdml 소실을 막기 위한 우회 경로를 제공한다.
이건 수학적으로 이해하는게 더 편할 것 같다.
Residual 과정 : y = x + F(x)
backward 과정 : dL/dx = dL/dy * (1 + dF/dx)
최종 gradient : dL/dy * (1 + dF/dx)백워드 과정에서 각 층의 gradient에 더해주는 1의 값이 항상 보장되기에, 각 층의 gradient는 소실되지 않는다.
이에 효과적인 훈련 과정을 도울 수 있다.
4. GPT 모델 만들기
이제 이렇게 만들어진 더미 모델에 어텐션 모델을 연결한다.
마지막으로는 이 어텐션 모델이 여러번 반복할 수 있도록 하고, 출력된 토큰을 다시 디코딩하는 과정을 거치면 된다.

5. 후기
처음에는 가볍게 시작했던 내용이 뒤로 가면 갈수록 벅차다.
코드로 보면 어렵지만, 막상 비유와 상징을 통해서 배우면 그리 어렵지 않기도 했다.
이제 시대가 변해서 내용 자체의 암기 보다는 이해가 더 중요하다.
암기하면 새로운 것을 만들 수 없지만, 이해하면 인공지능의 도움으로 GPT를 완성할 수 있다.
남은 시간이 얼마 없지만, 그래도 최대한 이해할 수 있도록 노력해보려고 한다.
댓글을 불러오는 중...