brunch

You can make anything
by writing

C.S.Lewis

by Forest Writer Jul 24. 2021

세상에서 가장 쉽게 인공지능 아는 척하기 #1

인공지능 인식은 벡터 연산이다.


아는 것이 힘이다, 라는 명언이 있다. 나는 여기에다가 아는 척하는 것도 힘이다,라고 덧붙이고 싶다. 


살다 보면 다양한 사람들과 다양한 주제로 이야기를 해야 할 때가 있는데, 관련 지식을 조금이라도 알고 있다면 관계 맺는 것에 더욱 수월해지고, 대화가 더욱 풍성해지는 효과가 있다. (물론, 어디까지나 대화가 이어지는 것에 목표를 두는 것이기 때문에, 조금 아는 것 가지고 너무 잘난 척을 하면 안 되지만)


예전에 개그콘서트에 '위캔척'이라는 코너가 있었다. 사람들이 하는 얘기가 어려워서 대화에 끼지 못하는 서러움을 피하기 위해 적당히 아는 척 단어 위주로 말하는 방법이다. 예를 들어, 화장품에 대한 이야기가 나올 땐 무조건 하나만 기억해라, 21호냐 23호냐, 이것만 얘기하면 된다, 이런 대사들이 있었다. 


이와 마찬가지로 인공지능에 대한 주제가 나왔을 때, 가장 쉽게 아는 척하는 방법을 제시하려 한다. 하나만 기억하면 된다.


인공지능 인식은 벡터 연산이다.


아래와 같은 '인공 신경망' 그림을 본 적이 있을 것이다. 물론 실체를 표현하는 것은 아니고, 알고리즘 전개도처럼 가상의 데이터 흐름을 나타내는 도표와 같은 역할을 한다. 누가 설명해주는 것도 아니고, 책이나 다른 자료들을 보면 너무 복잡하게 나와 있어서 처음 보는 사람들은 쉽게 이해하기 어렵다. 도대체 동그라미는 뭐고 작대기는 무엇인가. 뭔가 왼쪽에서 오른쪽으로 이동하는 것 같은데, 그림이 의미하는 바가 무엇인가. 


이러한 신경망 구조를 쉽게 이해하려면 하나만 기억하면 된다. 벡터 연산. 그중에서 벡터의 '내적' 연산이다.



벡터는 대부분의 사람들에게 친숙한 개념일 것이다. 숫자는 숫자인데, 차원을 갖고 있어서 여러 개의 숫자들의 조합을 통해 결정되는 값이다. 예를 들어, 2차원 벡터는 숫자 두 개가 필요하고 2차원 평면 위에 점으로 (또는 화살표로) 나타낼 수 있다. 마찬가지로 3차원 벡터는 숫자 세 개가 필요하고 3차원 공간 위에서 마찬가지로 점으로 나타낼 수 있다. 이런 식으로 고차원의 벡터를 어렵지 않게 생각할 수 있다. 1차원 벡터의 경우, 편의상 '스칼라'라고 한다.


각각 같은 차원의 벡터의 경우 사칙 연산을 할 수 있는데, 그중에 가장 널리 쓰이는 것이 '내적' 연산이다. 두 개의 다른 벡터에 대해서 각각의 같은 차원 값끼리 곱한 값을 모두 더하면 하나의 스칼라 값으로 도출된다.


예를 들어, A = (a1, a2, a3, a4, a5...)이고, B = (b1, b2, b3, b4, b5...) 일 때, A와 B의 내적은 a1xb1 + a2xb2 + a3xb3 + a4xb4 + a5xb5 +...이다.


벡터 내적의 특징은, 두 개의 벡터가 서로 유사할수록 내적 값이 크다는 것이다. 두 벡터가 완전히 같을 경우에는 가질 수 있는 가장 큰 양의 값을 가지며, 두 벡터가 멀리 있으면 내적 결과가 음의 값으로 나온다. 즉, '닮음 정도'를 평가할 때 가장 유용하게 쓰일 수 있는 수학적 도구이다.



자, 이제 준비가 다 되었다. 아래와 같은 그림을 생각해보자. 흰색이 글씨이고, 검은색이 배경이다.

왼쪽 숫자는 '7'과 같은 모양을 하고 있고, 이것이 오른쪽에 나타낸 두 개의 그림 중에서 어떤 것과 더 닮았는지 평가를 할 것이다. (빨간색 화살표가 나타내는 그림은 숫자 '1'을 닮았고, 파란색 화살표가 나타내는 그림은 숫자 '0'을 닮았다) 눈으로 볼 때는 어떨까? 빨간색 화살표 쪽이 더 가까울까, 아니면 파란색 화살표 쪽이 더 가까울까? 대부분의 사람은 위쪽 빨간색 화살표를 택할 것이다. 다행히 컴퓨터도 그렇게 인식한다.


컴퓨터 관점에서 인식 과정은 다음과 같이 나타낼 수 있다. 모든 그림에서 흰색 픽셀은 크기가 1, 검은색 픽셀은 크기가 -1 이라고 했을 때, 닮음 평가는 각각 빨간색과 파란색 경로가 나타내는 대표 그림이랑 벡터 내적을 하면 된다.

벡터 내적은 같은 차원 값들끼리 곱한 값을 모두 더한다고 했으니, 빨간색 경로는 같은 픽셀이 8 개, 다른 픽셀이 1 개가 있으므로 내적 값은 8 - 1 = 7 이다. 이것을 빨간색 출력 값이라고 하자. 파란색 경로도 마찬가지의 방법으로 (같은 픽셀 5 개, 다른 픽셀 4 개) 출력 값 5 - 4 = 1 로 계산할 수 있다. 빨간색이 7대 1로 이겼으니, 입력 그림은 빨간색 경로의 대표 그림과 더 닮은 것이다. 


(그러면 입력 그림은 0 보다 1 에 가까우니, 입력 그림 정보를 특정한 가중치를 통해 빨간색 경로 '1' 대표 그림에 반영해야 한다. (파란색 경로 '0' 은 반대 방향으로 반영) 즉, 학습을 통해 대표 그림 (경로 값)이 조금씩 변하게 되는 것이다. 다음번에 숫자 '7' 이 입력되었을 때는 빨간색과 파란색 경로의 벡터 연산 결과 차이가 7 대 1 보다 더 큰 점수 차이로 (예를 들면 8 대 -1 과 같이) 판별이 되어 구분이 더 명확해질 것이다.) 



자, 여기서부터가 굉장히 중요하다. 눈썰미가 빠른 사람들은 알겠지만, 사실 빨간색 경로와 파란색 경로가 의미하는 각각의 대표 그림을 '굳이' 중간에 저런 식으로 픽셀로 그릴 필요가 없다. 그냥 빨간 선과 파란선 자체를 출력 값까지 쭉 이어서 표현해도 무방하다. 컴퓨터 입장에서 대표 그림은 숫자로 저장되기 때문에 굳이 일일이 그려서 보여줄 필요가 없는 것이다. 대표 그림은 각각의 선 자체에 정보를 저장해 두고 필요할 때만 꺼내서 확인해 보면 된다. 그러면 다음과 같이 굉장히 우아하게 신경망 구조를 표현할 수 있다.

처음에 입력 그림을 세로 방향으로 쭉 뽑아서 한 줄로 나열하면 왼쪽 그림과 같고, 그것이 일반적인 신경망 구조 그림에서 '동그라미' 부분이다. 그리고 각각 빨간색, 파란색 선들은 출력 값에 대한 대표 그림이며, 맨 처음 말했던 '작대기' 부분이다. 이런 신경망 구조에서 다양한 입력 그림이 들어왔을 때 각각 빨간색 경로와 파란색 경로를 통해 내적 연산하여 출력 값으로 뽑아낼 수 있다. 지금은 9개의 입력과 2개의 출력이므로 그림이 간단하지만, 입력 크기 (이미지 픽셀 수)와 출력 크기 (결과 종류)는 자유롭게 바꿀 수 있다. 100 개의 입력에 5개의 출력, 또는 백만 개의 입력과 20개의 출력..... 이런 식이 얼마든지 가능하다. 



그리고 이러한 과정을 여러 번 반복하여 출력 값을 결정할 수도 있다. 입력 이미지에 대하여 각각 특정 형태와 얼마나 닮았는지를 차례대로 계산하여 숫자로 나열하고, 그것을 다시 두 번째 입력으로 활용해서 두 번째 닮음 평가를 하여 최종 출력 값을 뽑아내는 것이다. 그러면 한번 평가로 끝나는 게 아니라, 여러 번의 대표 이미지를 평가하고 결과들을 감안하게 되어 정확성이 높아진다.


다음과 같은 다차원 신경망 구조에서는 3개의 입력값을 각각 3가지 대표 그림 (input과 hidden 사이의 작대기)에 얼마나 닮았는지를 내적 연산하여 hidden layer에 기록한다. 그다음, 그 값을 다시 두 번째 입력값으로 활용하여 2가지의 대표 그림 (hidden과 output 사이의 작대기)과 평가하여 두 번째 벡터 내적 결과를 출력한다. 그리하여 가장 높은 값을 정답으로 선택하면 된다. 이런 식으로 hidden layer를 무수히 많이 만들어낼 수 있으며, 입출력 크기도 같이 늘릴 경우에 신경망 구조가 흔히 보는 것처럼 굉장히 복잡하게 생긴 모양으로 바뀐다. 하지만 사실 원리는 크기에 상관없이 똑같다.



이러한 신경망 구조에서 중간중간 작대기를 시냅스 웨이트 (synaptic weight)라고 하며, 우리의 뇌 안에 시냅스가 바로 이러한 역할을 담당하게 된다. 신경망의 학습은 이러한 대표 그림들, 즉 시냅스 웨이트의 변화로 이루어진다. (우리는 이러한 학습 경로 1000조 개를 가지고 있다)






특정한 입력 데이터의 여러 가지 대표 그림과의 닮음 정도를 평가하고, 이것을 전체적으로 종합하여 객체가 어떻게 생겼는지를 판단하는 이러한 과정은 정확성은 높지만, 사실 실제 전자 시스템에서 구현하기는 상당히 어렵다. 신경망 구조가 복잡해질수록 시냅스 웨이트 수가 제곱으로 증가하기 때문에 컴퓨터가 연산하기에 양이 너무 많고, 에너지 및 시간 효율성 면에서 좋지 않다.


빼는 것이 플러스다~라는 노래가 있다. 공학자는 무엇을 더하는 것보다, 불필요한 부분을 제거하는 것을 더 신경 써야 하는 직업이며, 어떻게 하면 경제적으로 에너지적으로 좋은 구조적 선택이 되는지를 고민해야 한다. 



<2편에서 계속>




매거진의 이전글 길고양이 밥 한번 안주는 매정한 사람
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari