데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      고등학생도 이해하는 Transformer (Deep Learning) #1

      fromDK 24.09.24
      9,956 14 0
      DEVOTEE 요약
      내적은 벡터의 각 성분을 곱하고 더한 값으로, 두 벡터가 얼마나 유사한지 또는 얼마나 영향을 주는지를 나타낸다. 내적 값은 벡터의 방향이 동일할 때 가장 크고, 직각일 때 0, 반대 방향일 때 음의 값이 된다. GPU는 그래픽 연산에서 내적을 사용해 3D 객체의 회전, 반사, 변환 을 빠르게 처리하며, 내적의 의미를 이해하면 심층 학습 모델을 더 쉽게 이해할 수 있다.
      DEVOTEE 추천 블로그

      예전에 "고등학생도 이해할 수 있는 Transformer"의 제목으로 세미나를 한적이 있다.

      제목이 너무 도발적이여서 그런지 이거 이해 못하면 고등학생보다 못하냐? 나는 질문을 많이 받았다


      아래에서 이야기 하려는 것은 내적, Inner product에 관한 이야기이다.


      내적은 2000년 이전 이과 고등학생들이 벡터와 함께 배우는 연산이었다. (2000년 이후에는 교과과정 개편으로 더이상 배우지 않는다고 한다.

      이제는 고등학교에서 배우지 않으므로, 내적을 이해 못해도 다행히 고등학생 보다 못한다고 말하지 못할 듯) 내적은 벡터의 각 성분을 곱하고 더한 값이다.

      사실 나도 고등학교때는 이게 무슨 의미인지 모르고 그냥 산수만 했었던것 같은데 대학원을 진학 하면서 지도교수님께서 나에게 처음으로 한 질문이 바로

      "내적의 의미가 무엇인지 알고 있니?"

      "내적은 그냥 곱한다음에 더하면 되요" ㅡ,.ㅡ

      "연산 방법이 아니라 내적 값과 내적 연산의 의미가 무엇인지 아니?"

      사실 내적은 너무 간단한? 연산이라, 고등학교에서 의미를 크게 설명하지도 않았나 싶기도 하고, 의미를 단순하지만 딱 떨어지는 한 단어로 정의하기가 어려운 것 같기도 하다.

      그러나, 내적의 의미를 알면 Deep Learning 많은 모델들을 이해하는데 많은 도움이 된다. 그리고 왜 GPU를 이용해서 Deep Learning을 수행하는지를 이해 할 수 있게 된다.


      따라서 앞으로 이야기 할 내용은 내적(Inner Product, Dot Product, Projection Product)에 관한 것이다.

      image.png

      image.png

      내적은 위의 공식처럼(공식이 나오니깐 머리 아프다) 각 벡터의 요소끼리 곱하고 더하여 나오는 스칼라 값이다.

      한 문장으로 설명을 해도 쉽지만 의미를 이해하기는 어려운 내용이다.

      벡터는 방향과 크기를 나타내는 방법인데, 두 벡터를 내적을 수행하면 숫자(스칼라)값이 출력된다.

      또 다른 내적 공식으로는 아래와 같다.

      image.png

      두 벡터간의 Cosθ) 코사인 각도(θ )에다가 벡터의 크기를 곱한 값이다. 참 쉽지 않은가? 사실, 무슨 의미인지는 아직 모르겠다. ^^;;


      만약 위에 벡터의 크기가 1이라고 가정하면 (Normalized Vector) 내적 공식은 Cosθ) 만 남게 된다.

      Cosine은 두 벡터의 방향이 0도 일때 가장 큰 값인 1이고, 90도와 270도 일때 0, 그리고 180도일때 -1이 된다.

      vector_1.png

      따라서, 내적은 (Normalized 벡터인 경우) 두 벡터의 각도의 Cosine 값이라고 생각하면 된다. Cosine은 각도에 따라 값이 달라지는 주기 함수이다.

      vector_2.png


      다들 잘 알겟지만, 위 그림에서 Cosine A는 b/c 이다. 여기서 b, c는 각 벡터의 크기이고 A각도는 두 b, c 벡터의 사이각(끼인각)을 의미한다.

      image.png

      해석을 해보면 두 벡터가 같은 방향일때 가장 큰 값, 반대 방향일때 가장 작은 값, 직각일때 0인 값을 나타내는 특징이 있다.

      같은 방향이면 유사한 방향이니, 값이 크고, 직각이면 유사하지 않은 방향이니 값이 0에 가깝고, 반대 방향인경우 음의 크기고 가장 작은 값이 된다.


      내적의 정의에 대해서 사전에서 찾아보면 아래와 같다

      • The dot product between two vectors is based on the projection of one vector onto another.

      • 두 벡터의 각 성분끼리의 곱의 합한 값

      • 내적은 각 벡터의 (크기의 곱에) 끼인각의 값 (Normalized Vector의 경우 크기가 1이므로 각 벡터의 크기는 무시할 수 있음)

      • 두 개의 벡터가 있을때 한 벡터의 방향으로 나머지 하나를 Projection(투영) 시킨 것과 다른 한 벡터의 크기의 곱

      • 내적은 벡터의 방향이 얼마나 일치하는지를 알기 위한 용도로 사용

      잠깐! 여기서 중요한 단어가 나왔다. Projection(투영)은 무슨 뜻일까?


      투영投影

      1. 어떤 물체의 그림자가 지면이나 수면 따위에 비침

      2. 어떤 일이나 생각 따위를 다른 것에 반영시켜 나타내는 것을 비유적으로 이르는 말

      3. 평면 도형 또는 입체에 평행 광선을 보내어, 그 그림자가 평면 위에 생기게 함

      두 벡터를 내적하면(투영하면) 아래 그림의 파란색의 길이만큼의 크기의 스칼라 값이 나온다.

      B벡터의 수직 방향에 태양이 있다고 가정하고 빛을 비추어 보면(투영해보면) A벡터 그림자의 크기가 나온다.

      만약, 두 벡터의 방향이 같다면(방향이 유사하다면 또는 서로 영향을 많이 준다면) 큰 값(벡터의 크기)만큼 스칼라 값이 나올것이고,

      두 벡터가 직각이면(서로 영향이 없으면 서로 방향이 닯지 않으면) 작은 값의 스칼라가 나온다.

      (벡터는 방향을 나타내므로 수평은 같은 방향으로 유사한것으로 보고, 수직은 유사하지 않은 것으로 본다)

      image.png

      태양이 이동함에 따라 나무의 그림자의 길이가 바뀌게 된다. 이 또한 내적으로 태양광선을 Object에 투영한 결과인 그림자의 크기로 표시 할 수 있다.

      image.png

      즉, 정리를 하면 내적은 두 벡터간의 얼마나

      • 닮았는지

      • 유사한지

      • 영향있는지

      • 투영(Projection)

      를 나타낸다.


      이중 가장 강조하고 싶은 말은 "내적은 두 벡터가 얼마나 유사한지를 나태내는 값"으로 기억했으면 좋겠다.

      뒤에서 설명할 Embedding, Fully Connected Layer, CNN, Attention, Cosine Similarity 등에서 설명할때 유사도로 설명하면 쉽게 이해가 될것으로 생각된다.

      그리고 투영을 잘 기억해 놓자, 가끔 논문에서 Fully Connected Layer 를 Projection Layer로 설명하는 경우가 있다.


      참고 : https://mathinsight.org/dot_product 링크 사이트에 가면 벡터의 방향에 따른 내적의 값을 바로 확인 할 수 있다.


      참고로 Sine과 Cosine은 서로 90도 각도의 차이를 두고 있다.

      이를 이용한 "세상에서 가장 아름다운 공식"인 오일러 공식(항등식)이 있다.

      왜 Sine과 Cosine은 90도 각도를 이룰까? -> 왜 X축과 Y축은 90도를 이룰까?

      image.png


      자, 이제 내적의 의미를 조금이나마 알았으니, 이제 GPU가 원래 하는 연산인 그래픽스에 대해 알아볼까?

      이미 위에서 태양의 이동에 따른 그림자의 크기(투영)를 잠깐 이야기 했었다.

      GPU(Graphic Processing Unit)는 모두 알고 있다시피 3D Object를 회전, 반사, 변환 등을 수행할 때 빠른 연산을 수행하는 Coprocessor 이다.

      실제로 이러한 연산이 모두 내적으로 구현이 되어 있다.


      3D는 기껏해야 벡터가 3차원공간밖에 안되기 때문에 머리로 연산이 가능하다.

      그러나 DL 모델같은 경우 벡터가 512차원 2048차원 등, 차원이 너무 많이 증가하게 되므로 의미를 먼저 이해하고 접근하는게 이해하는데 많은 도움이 될것이다.

      따라서 먼저 3차원 공간에서 내적을 이용한 회전, 반사, 변환 등이 어떻게 구현되는지 알아 보도록 하자.

      다시 한번 말하지만 내적의 의미는 두 벡터가 얼마나 유사한지, 영향을 주는지, 닮았는지를 나타내는 연산이다.

      위의 수식들은 다 잊어 먹더라도 이것만 기억해 주셨으면 한다.

      이것을 이해/기억하면 DL 모델 및 Transformer 모델은 이해가 쉽게(?) 할 수도 있다.

      참고 : 세상에서 가장 아름다운 수식

      참고 : 내적의 의미

      벡터의 내적과 외적의 물리적 의미

      내적은 "닮은 정도" 다

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      fromDK 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기