본문바로가기
[인공지능, 수학으로 타파] 거리를 통한 유사도 측정으로 딥러닝 따라잡기
수학동아 2020.12.29 11:50

 

 

Mathematics for AI #9

거리를 통한 유사도 측정로 딥러닝 따라잡기

 

 

 

 

*출제자의 한 마디*

 

저번 시간에는 머신러닝과 딥러닝 모형은 많은 변수를 가진 함수로 표현되며, 어떻게 하면 최적의 값을 찾을 수 있는지 간단하게 살펴보았습니다. 복잡한 알고리듬 모형에서 최솟값을 구하기 어려울 때, 함수의 기울기를 구하고 기울기가 낮은 쪽으로 조금씩 계속 이동하여 마침내 기울기가 0인 지점에 이를 때까지 반복하는 방법인 '경사하강법'을 사용한다는 것을 알 수 있었습니다. 경사하강법을 사용하면 복잡한 모형에서 정확한 값을 모르는 상황에서도 근삿값을 조금씩 조정하여 최적의 값을 찾을 수 있습니다.   

 

 

이번 시간에는 데이터의 유사도를 측정하는 방법에 대하여 간단히 살펴봅시다.

 

 

 

--------------

 

 

거리로 데이터 분류하기 

 

인공지능이 데이터를 바탕으로 수행하는 주요 업무는 ‘판단’과 ‘예측’입니다. 이미지를 인식해서 사진 속의 사람이 누구인지 판단하거나 바둑을 둘 때 다음 수의 위치에 따라 승률을 예측하는 작업이 대표적인 사례죠.

 

 

인공지능이 판단과 예측 업무를 잘 수행하려면 먼저 주어진 데이터의 특징을 파악한 뒤 유사한 데이터끼리 묶어주는 ‘분류’ 작업이 필요합니다. 이때 서로 다른 두 데이터가 얼마나 유사한지 어떻게 알 수 있을까요? 다양한 방법이 있지만, 이번 시간에는 두 데이터 사이의 거리를 계산해서 유사도를 측정하는 법을 알아봅시다.

 

 

데이터는 순서쌍 또는 벡터로 나타낼 수 있습니다. 예를 들어 A, B, C 세 학생의 키와 몸무게의 유사도를 측정하는 경우, 이를 순서쌍 A(a_{1}, a_{2}), B(b_{1}, b_{2}), C(c_{1}, c_{2}) 또는 벡터 \vec{a}=(a_{1}, a_{2}), \vec{b}=(b_{1}, b_{2}), \vec{c}=(c_{1}, c_{2})로 나타낼 수 있습니다. 순서쌍으로 나타낸 두 점 사이의 거리는 다음과 같이 구합니다.

 

 

dist(A, B) = \sqrt{(a_{1}-b_{1})^{2}+(a_{2}-b_{2})^{2}}

 

 

벡터로도 구해볼까요? 벡터 \vec{a}=(a_{1}, a_{2})의 크기는 원점에서 점 A(a_{1}, a_{2})에 이르는 거리와 같습니다. 이것을 \vec{a}의 ‘노름’ 이라고 하고, 다음과 같이 나타냅니다.

 

 

\left \| \vec{a} \right \|=\sqrt{a_{1}^{2}+a_{2}^{2}}

 

 

 

두 벡터를 이용해 계산한 노름 \left \| \vec{a}-\vec{b} \right \|는 두 점 A(a_{1}, a_{2})와 B(b_{1}, b_{2}) 사이의 거리와 같습니다.

                                         

 

dist(A, B) = \left \| \vec{a}-\vec{b} \right \| = \sqrt{(a_{1}-b_{1})^{2}+(a_{2}-b_{2})^{2}}

 

이 정의는 3차원 데이터 \vec{a}=(a_{1}, a_{2}a_{3})와 같은 고차원 데이터에 대해서도 적용할 수 있습니다. 인공지능은 두 데이터의 거리가 가까우면 유사하다고 판단하고, 거리가 멀면 관계 없다고 판단합니다.

 

 

                                               --------------

 

문제

세 개의 데이터 A(0,1), B(5,2), C(-2,0)에 대해 BAC 중 어느 데이터에 더 가까운지 판단해보자.

 

 

 

 

 

 

 

 

 

풀이에 필요한 SageMath 코딩 명령어

 

 

a = vector([0, 1]) 

b = vector([5, 2])

c = vector([-2, 0])

좌표로 표현된 데이터 A, B, C를 벡터의 형태로 입력한다.

 

 

distAB = (a - b).norm() 

distBC = (b - c).norm()

데이터 A 와 B사이의 거리, 데이터 B와 C사이의 거리를 각각 계산한다.

 

show('A와 B 사이의 거리 = ',distAB,', B와 C 사이의 거리 = ',distBC)

show 명령어를 통해 결과를 출력한다.

 

 

 

 

-끝-

 

 

  • 폴리매스 문제는 2019년도 정부의 재원으로 한국과학창의재단의 지원을 받아 수행된 성과물입니다.

  • ☎문의 02-6749-3911