23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
고등학생도 이해하는 Transformer (Deep Learning) #1
지난 시간에는 내적의 의미를 알아보았다.
항상 강조하지만, 내적의 의미를 알아야 Transformer와 DL(Deep Learning)모델을 이해할 수 있다.
이것만 기억하고 이번에는 그래픽스 처리에서 이용되는 내적연산에 대해 알아 보자.
그래픽스 처리에 내적이 이용되는 것을 설명을 하는 이유는 아래아 같다.
2,3차원 벡터 연산은 현실과 유사하기 때문에 이해하기가 쉽다. (2,3차원이 이해되어야 고차원의 연산이 이해가 됨)
3D 오브젝트는 점, 선, 면(Vertices, Edges, Faces, Polygon, Surfaces)으로 구성되어 있으며, 벡터로 표시하기 용이함
DL연산에 GPU를 이용하는 이유를 이해하게 됨
우리는 현재 X, Y, Z 축인 3차원 공간에 살고 있다. (현실에서는 시간축 포함하여 4차원인가?)
우선 2차원 공간으로 예시를 들어 설명 해 보겠다. 2차원(X, Y) 공간에 어떤 점을 표시 해보면 아래와 같다.
자, 아래 점의 좌표를 말해보자. 한번 스스로 아래 점의 좌표를 생각해보자?
(1, 2)일까? (1,1)일까? (0,0)일까?
사실 기준점과 기준 축(Basis Vector)가 없기 때문에 좌표를 말 할 수 없다.
그럼 기준점과 기준 축을 만들어 볼까?
①번 이외에 나머지는 인성에 문제 있냐고? 사실 3D 오브젝트가 이동, 회전, 확대, 축소 등이 수행될때 GPU에서는 위의 그림과 같이 Basis Vector를 변환하여 수행이 된다.
이 때 내적이 이용된다.
대부분 우리가 생각하는 ①번 그림의 경우 Basis Vector가 (1, 0), (0, 1)을 이용한다. X축과 Y축이며, 90도를 이루고 있다.
각 Basis Vector는 90도를 이루어서 서로 영향을 주지 않는 방향을 가르킨다. (앞에서 이야기한 내적은 두 벡터의 유사함 닮은 꼴, 유사함을 측정하는 연산)
(루트 3/2, 1/2) 좌표에 점이 있는 경우, (삼각함수 특수각인 30도이다) 우선 반시계방향으로 -30도 회전해 보자.
어떻게 구현해야 할까?
사실 위의 (루트 3/2, 1/2)은 Basis Vector가 X, Y 축 (1, 0), (0, 1) 기준으로 나타낸 점이며 이를 벡터로 나타내고, 길이는 1이다.
삼각함수 특수각인 30도의 삼각형이기 때문에 회전하면 (1,0)이 된다는 것을 우리는 답을 이미 알고 있다.
회전을 수행하려면 우선 C 값에 회전을 할 cos(θ) 를 곱하여 회전된 x 축의 값을 계산하고, C 값에 회전을 할 sin(θ) 를 곱하여
회전된 y 축 값을 계산하면 된다. ( C * cos(θ), C * sin(θ) ) 아래 삼각함수의 식을 보면 이해가 된다.
그런데 잠깐 생각해보면 회전이란? Basis Vector(X, Y축)를 회전하면 (즉, 보는 관점을 회전하면) 회전이 된다.
한번 Basis Vector를 30도 회전한 빨간색의 새로운 Basis Vector에서 해당 지점을 확인 해보자.
(참고로, 오브젝트가 반시계방향으로 회전은 +θ, Basis Vector를 반시계방향으로 회전하면 -θ 이다)
위의 그림과 같이 Basis Vector를 변환(회전)하여 기존의 점을 보면 (1, 0) 이 된다. 점(오브젝트)가 회전하거나,
아니면 바라보는 관점(기준점, Basis Vector)가 이동하거나 동일한 결과를 가진다.
어떻게 보면 당연한 이야기로 들리지만, Basis Vector를 변환을 하려면 어떻게 해야 할까?
바로 내적을 이용해서 새로운 Basis Vector를 이용해서 내적을 수행하면
현재 지점을 나타내는 벡터와 새로운 Basis Vector의 각 성분별 유사도, 영향도, 닮은 꼴을 뽑아내서 Basis Vector를 변환할 수 있다.
한번 회전 행렬을 확인해보자
Cosine과 Sine으로 이루어져 있다. 단순히 위의 행렬을 이용하면 회전이 된다고만 설명을 하고 있다. 사실 위의 메트릭스를 벡터로 분해해 보면, 아래와 같다.
회전에 의한 새로운 Basis Vector를 계산하는 수식이다.
이전 지점의 벡터와 새로운 Basis Vector를 내적을 수행하면 해당 새로운 Basis Vector X, Y 부분의 각 유사도, 성분, 영향을 주는 값을 계산 할 수 있다.
위의 30도 회전 경우에 예를 들어 내적 계산해보면 아래와 같다
위의 -30도 Basis Vector로 기존의 벡터와 내적을 수해하면 아래와 같이 (1, 0)이 된다.
Basis Vector의 X 축과 동일한 방향 동일 크기이지 때문에 X축의 유사도는 1이 되고, Y축은 90도 각도이기 때문에 0이 된다.
이는 새로운 Basis Vector로 내적을 수행하여 각 X, Y 성분에 대한 유사도, 닮은 꼴, 영향도를 계산한 값이다.
이와 같이 회전에 대한 각 성분을 계산할 수 있으나, Matrix를 이용하여 내적으로 계산하는 것이 차원이 더 올라가거나, GPU처럼 병렬 처리하는것이 유리한 방법이다.
만약, 새로운 Basis Vector 의 크기가 1이 아니고, 각 성분이 서로 직각이 아닌 경우는 어떻게 될까? 이 경우 변환(Transformation) 으로 확대 되거나 일부는 찌그러지거나 늘어나게 된다.
이러한 방법을 사용하여 3D 오브젝트를 회전, 이동 하거나 Viewport를 변경, 이동 등에 사용 할 수 있다. 또한 3D 객체의 표면테 텍스쳐를 입힐때도 이용가능하다.
아직 새로운 Basis Vector의 내적으로 변환이 되는것이 이해가 잘 안된다면 다음시간에 변환(Transformation)에 대해서 이야기 하면서 다시 이해해 보도록 하자.
위의 점을 시계방향으로 60도 회전해보자! 이때의 좌표는?
PCA (Principal Component Analysis) 주성분 분석에도 내적의 의미를 알면 조금이나마 이해에 도움이 된다.
PCA 관련해서는 아래 영상을 참고 해보며, "Projection" 이야기가 나올때 내적의 의미를 잘 생각 해보자
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.