brunch

You can make anything
by writing

C.S.Lewis

by 코싸인 Jul 31. 2017

[코싸인의 인지과학 이야기] 인공지능(11)

[인공지능 4주차-응용과학] 1. 알고리즘의 이해

사실 컴퓨터는 0과 1을 다루는 계산기에 불과합니다. 그림판이나 엑셀과 같은 프로그램은 기초적인 계산기를 쌓고 쌓아 복잡한 계산이 가능하도록 만든 또 다른 계산기라고도 볼 수 있죠. 그림판이나 엑셀이 아무리 복잡해도 결국 이 프로그램들은 입력값을 받고 그 값을 계산해 출력 값을 받는 과정을 정의해둔 것에 블과합니다. 그렇다면 최근에 화두가 되고 있는 인공지능은 어떻게 복잡한 문제들을 풀 수 있게 되었을까요? 이번 포스트에서는 단순한 계산기인 컴퓨터가 복잡한 현실 세계의 문제들을 풀기 위해 어떤 전략을 사용하는지 알아보겠습니다.  


고양이를 세는 알고리즘

수학을 공부해 본 사람이라면 함수에 대해서 알고 있을 것입니다. y = f(x)라는 함수는 변수 x에 대하여 y의 값을 정해주는 함수라고 말할 수 있죠. 컴퓨터 프로그램도 함수로 표현할 수 있습니다. 예를 들어서 사진에 몇 마리의 고양이가 있는지 세어주는 프로그램을 생각해봅시다. 입력인 x는 사진 데이터가 될 것이고, 출력인 y는 고양이의 수가 될 것입니다. 여기서 x에서 y로 바꾸는 함수의 내용, 다시 말해서 입력 x에서 출력 y를 계산하는 일련의 과정을 알고리즘이라고 합니다. 그래서 현실 세계의 문제를 컴퓨터로 풀기 위해서는 그 문제를 푸는 알고리즘을 만들어야 합니다. 사진에서 고양이를 세는 프로그램을 만들려면 어떻게 하면 될까요? 고양이를 세는 알고리즘을 만들면 되겠죠!

                                                                                                  

날 세어라 닝겐 / CC0


이제 사진(이미지 데이터)을 입력받고 고양이의 수를 출력하는 알고리즘을 만들어봅시다. 이미지 데이터는 색상을 표현하는 값을 가진 픽셀들로 이루어져 있을 것입니다. RGB로 색상을 표현하는 이미지라면 각 픽셀은 ff2b3b와 같은 숫자 값으로 색상을 표현하겠죠. 여기서는 문제를 쉽게 하기 위해 픽셀마다 검은색(1) 아니면 흰색(0)의 색만 가지는 (극단적인) 흑백 이미지를 생각해보겠습니다. 흑백 이미지가 주어질 때 사람은 어떻게 고양이를 셀 수 있을까요? 아마도 과거의 경험을 통해 알고 있는 고양이의 모습을 떠올리며 흑백 사진 속에서 고양이의 실루엣처럼 생긴 형태들을 찾아내서 몇 마리가 있는지 세게 되겠죠.

사람이 아닌 컴퓨터의 경우는 어떨까요? 먼저 컴퓨터는 이미지의 데이터를 읽게 될 것입니다. 512x512의 해상도의 이미지라면 262,144개의 픽셀을 가지고 있을 것입니다. 컴퓨터는 262,144개의 0 또는 1이라는 데이터를 가지고 어떤 연산 절차를 통해서 고양이를 찾아야 합니다. 그리고 그 연산 절차는 우리가 설계한 알고리즘이 되겠죠. 컴퓨터는 고양이를 본 적이 없으므로 우리가 설계한 알고리즘에는 고양이의 모습을 컴퓨터가 이해할 수 있도록 묘사하는 내용이 포함되어야 할 것입니다. 그렇다면 고양이의 모습은 어떻게 정의될 수 있을까요? 그리고 우리는 컴퓨터에게 고양이를 어떻게 이해시킬 수 있을까요?


알고리즘: 어떤 문제를 해결하기 위해 명확히 정의된(well-defined) 유한 개의 규칙과 절차의 모임.

[출처: 컴퓨터 인터넷 IT용어 대사전]


위의 정의처럼 알고리즘은 어떠한 문제를 해결하기 위해 사람이 컴퓨터에게 시키는 일(규칙과 절차)의 모임입니다. 사람이 문제를 푸는 규칙과 절차를 한번 정의하면 그다음부터는 뛰어난 연산속도를 가진 컴퓨터에게 반복적으로 그 일을 수행시켜서 문제를 계속 풀게 할 수 있겠죠. 여기서 사람이 컴퓨터에게 일을 시키기 위해 가장 중요한 것은 알고리즘의 과정을 명확히 정의하는 것입니다. 서두에서 말했듯이 컴퓨터는 단순한 계산기이기 때문에 모든 절차에 있어서 계산적으로 수행될 수 있도록 두루뭉술한 것 없이 명확하게 정의되어야 합니다. 고양이를 세는 알고리즘을 설계하며 왜 명확히 정의되는 것이 필요한지 더 알아보겠습니다.

     

계산밖에 모르는바보! ㅠ / CC0


이 글을 읽는 독자들을 대신하여 알고리즘 설계를 부탁받은 철수는 직감적으로 다음과 같이 고양이의 모습을 정의했습니다.

1.    귀가 두 개이고

2.    다리가 네 개,

3.    수염이 나 있으며

4.    귀엽게 생겼다

다른 동물들과 구별할 수 있게 고양이의 모습을 정의하려면 더 많은 조건이 필요하겠지만 일단 철수의 직감을 믿어봅시다. 이제 정의된 고양이의 모습을 컴퓨터가 이해할 수 있는 형태로 바꿔주어야 합니다. 1번의 경우에는 귀의 모습을 기하학적으로 분석하여 컴퓨터가 계산할 수 있도록 ‘귀의 모습’을 정의하는 수학적 모델을 만든 후 그 모델에 부합하는 부분이 이미지에서 몇 개 있는지 찾게 하면 될 것입니다. 하지만 고양이의 종마다 귀의 모양은 조금씩 다를 것이며, 고양이를 찍은 각도나 고양이가 어떤 포즈로 있는지에 따라서도 이미지에서 보이는 귀의 형태가 다를 것입니다. 이 모든 상황에서도 귀의 모습을 정의할 수 있는 모델을 찾는 건 불가능하거나 사람이 하기에는 정말 어려운 일일 것입니다. 2, 3번 조건 역시 같은 이유로 정의하기가 어렵고, 4번의 경우에는 ‘귀엽다’라는 표현이 추상적인 개념이기 때문에 이 개념을 표현하는 모델을 정의하기가 더 어렵습니다.


현실 세계의 문제를 풀지 못하는 고전적인 알고리즘의 한계

수학적인 문제를 푸는 경우에는 컴퓨터를 사용하는 것이 매우 뛰어난 효율을 보여줬지만, 고양이를 세는 것과 같이 추상적인 문제에는 컴퓨터를 사용하기가 어려웠습니다. 현실 세계의 많은 문제들은 수학적인 문제로 정의하기 어려운 형태였기 때문이었죠.

물론 시간과 노력을 들이기만 한다면 수학적인 문제로 치환할 수 있는 문제들도 있을 것입니다. 고양이를 세는 경우에는 고양이에 대한 조건을 계속 늘려가며 고양이를 더 잘 표현할 수 있는 조건을 만들면 아마도 언젠가는 사람만큼 정확히 고양이를 셀 수 있는 알고리즘을 찾게 되겠죠. 하지만 알고리즘이 가진 세 가지 복잡성으로 인해 이마저도 한계에 부딪히게 됩니다.


공간 복잡성(spacecomplexity): 알고리즘이 컴퓨터 저장소에 보관할 정보량의 크기. 고양이를 찾는 동안 기억할 게 많아 정보량의 크기가 저장소의 크기를 넘어서면 알고리즘을 동작시킬 수 없을 것이다.

시간 복잡성(timecomplexity): 알고리즘을 수행하는 데에 걸리는 시간. 알고리즘이 복잡해서 고양이를 세는 데에 지나치게 오랜 시간이 걸리면 결국 사람이 아닌 컴퓨터로 고양이를 세는 의미가 없어질 것이다.

사람이 연관된 복잡성(humancomplexity): 인간이 이해하기 어려울 정도로 알고리즘이 복잡하거나 버그가 빈번하게 발생하거나 다른 알고리즘과 잘 어울려 작동하지 못하는 정도. 고양이의 조건을 복잡하게 추가할수록 개발자가 프로그램을 이해하기가 어려워져 버그가 많아지고, 결국 어느 순간 인간의 두뇌로 프로그램을 더 개발하기 어려 울 정도로 알고리즘이 복잡하게 얽혀있는 시점이 오게 될 것이다.


그래서 컴퓨터 과학자들은 현실 세계의 문제들을 풀기 위해 새로운 문제 접근 방식을 생각해냈습니다. 그게 바로 요즘 떠오르고 있는 ‘딥러닝’으로 대표되는 머신러닝이라는 방법이죠!

이제 우리는 머신러닝이라는 신세계를 보게 됩니다. [코싸인 응용과학팀]

 


매거진의 이전글 [코싸인의 인지과학 이야기] 인공지능(10)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari