시리즈[자연/테크] 우리 주변 현상들, 왜 그럴까?

왜 컴퓨터는 개와 고양이 구별을 잘 못할까?

위즈덤시드님의 프로필 사진

위즈덤시드

공식

2021.02.15. 09:0012,801 읽음

2016년 봄, 서울에서 열린 이세돌 기사와 알파고의 바둑 대결을 기억하세요? IT 발전이 점점 더 가속화되며 놀라운 신기술이 속속 등장해 왔지만, '설마 바둑까지 지겠어?' 하는 의견이 더 많았지요.
결과는 알파고의 완승...

이세돌 기사와 알파고의 바둑 대결, 출처: Financial Times

이제는 인공지능, 빅테이터를 활용한 기술을 피부로 느낄 수 있는 세상이 되었어요. 컴퓨터가 어마어마하게 강력해지고 있는 거지요.
그런데 컴퓨터가 개와 고양이 구별을 잘 하지 못한다고요? 그리 오래되지 않은 과거에는 정말 잘 못했고요, 이제는 꽤 잘하지만 아직 사람보다는 못하다는 거예요.

이 질문을 통해 사람과 컴퓨터가 작동하는 방식의 차이, 그리고 우리 뇌를 모방하는 신경회로망(neural network)의 발전에 대하여 알아보아요.
알파고가 사용한 딥러닝 기술로 개와 고양이를 거의 사람만큼 잘 구별하게 되었다는 것도요.

이 정도는 어린아이도 금방 구별할 수 있지요?

위 그림에 비슷한 색깔과 크기의 새끼 고양이와 강아지가 있어요. 개와 고양이를 많이 접하지 않은 어린아이도 쉽게 구별할 수 있을 거예요.
어떻게 알았냐고 물어보면요? 이러저러한 서로 다른 특징을 이야기할 수도 있고, 머 딱 보면 알지 이유가 어디 있냐는 답이 올 거 같네요.
그런데 컴퓨터는 개와 고양이 구별을 잘 하기 위해서 엄청난 노력, 시간, 에너지가 필요하답니다. 엄청 '학습'해야 어린아이 정도 되는 거예요.

출처: www.geeksforgeeks.org/machine-learning/

이제 우리는 주머니 속에 고성능 컴퓨터를 하나씩 넣고 다니고 있어요. 여러분의 모바일폰이 사무실에서 쓰는 PC보다, 또 몇 십 년 전의 슈퍼컴퓨터 보다 더 강력하다는 걸 아시나요?
반도체 발전에 따라 메모리, CPU 등 하드웨어의 성능이 엄청나게 좋아졌고요 (위즈덤시드의 포스트 '왜 '반'도체가 그리 유용할까?' 링크를 아래 걸어놓았습니다).
소프트웨어도 점점 더 강력해지고 있지요. 하드웨어 성능 향상 덕분에 좀 더 복잡하고 많은 기능을 더 빨리 처리할 수 있게 되었습니다.

컴퓨터는 사람이 미리 프로그래밍한 대로 신속 정확하게 일을 수행해요. 정해진 답이 있는 논리적 판단(즉, 계산)은 사람과 비교할 수 없을 정도로 빨리 잘 하지요.  
그런데 컴퓨터, 소프트웨어는 또한 더 '똑똑해지고' 있답니다. '똑똑해진다'라는 것은 무엇을 의미할까요?
경험과 학습을 통해서 새로운 지식이나 이해를 얻어, 예전보다 더 올바른 판단을 할 수 있다는 거예요 (위즈덤시드의 포스트 '왜 검색엔진이 잘 찾을까?' 링크를 아래 걸어놓았습니다).

우리 두뇌는 아주 복잡한 기관이에요. 감각, 기억, 추론, 상상 등이 어떻게 이루어지는지 조금씩 알아가고 있지만 아직 많은 부분이 신비에 싸여 있지요.
우리 뇌와 컴퓨터는 어떤 면에서 유사하고, 또 다를까요? 뇌와 컴퓨터는 어떻게 학습을 하고 똑똑해 질까요?
뇌에 대해 아직 모르는 부분이 많고, 과학기술이 너무나 빠르게 발전하고 있습니다. 그래서 위 질문에 대한 답을 명확히 하기 어렵고, 또 계속 변해갈 거예요.

출처: 고등학교 정보 금성출판사

컴퓨터는 프로그래밍된 대로 일을 처리한다고 했죠? 프로그램 또는 코드라고 불리는 일련의 명령문을 사람이 만들어서 넣어 주어야 해요.
어떤 일을 하기 위한 매뉴얼 같은 거고, 문제를 풀기 위한 알고리즘입니다.
위 그림처럼 순차적으로 진행되며, 조건에 따라 나뉘기도 하고 또 반복하기도 하지요.

우리는 어떻게 개와 고양이를 구별할까요? 몇 가지 서로 다른 특징을 잡아내서 판단하지 않나요?
위 그림을 보면 고양이가 수염이 더 길고, 고양이 귀는 위를 향하고, 개의 코와 입이 앞으로 튀어나와 있어요.
그래서 예를 들어 수염이 길고(예), 귀가 위로(예), 코와 입이 앞으로(아니오) 경우는 고양이라고 판단을 하는 거예요.

의사결정 트리와 이진 탐색

이처럼 어떤 특성(Features)을 구체적으로 정리해서 알고리즘으로 만들 수 있다면, 컴퓨터도 사람처럼 쉽게 개와 고양이를 구별할 수 있겠죠?
위에 간단한 예시를 보였습니다. 예와 아니오 2가지로 나뉘면서 (이진 탐색), 최종 판단을 하는 거예요.
그런데 우리는 사진을 보면 수염, 귀, 코, 입을 바로 알아보지만, 컴퓨터는 이게 바로 되는 게 아니죠. 일단 이러한 이미지 인식을 할 수 있다고 해봐요.

3가지 특성에 대한 예, 아니오로 개와 고양이를 잘 구별할 수 있다면 (이미지 인식은 일단 잊고요), 컴퓨터도 아주 쉽게 할 수 있겠지요. 하지만 그렇게 간단하지 않아요.
귀가 아래로 쳐진 아래 사진 모습은 명백히 고양이지요? '3가지 중에서 2가지 이상이 고양이에 해당하면 고양이'라고 하면 어떨까요? 특성별로 다른 가중치를 둘 수도 있지요. 또 눈 모양을 새로운 특성으로 더해 보고요.

위 개 고양이 이진 탐색에서 3가지 질문으로 나뉘는 경우, 23 = 8 가지의 경우가 나옵니다 (그림에서 8, 9, ..., 15). 눈 모양을 더하면 24 = 16 가지 경우가 나오고, 그 각각의 경우에 대해 개, 고양이로 판단하는 규칙을 정해야지요.
4개의 특성으로 분류가 잘 안되면, 계속해서 그럴듯한 특성을 추가해 가고요.

출처: blogs.loc.gov/maps/category/game-theory/

유사한 방법을 바둑에도 적용해 보면 어떨까요. 바둑판은 19 x 19 격자점을 가지고, 각 점마다 검정돌, 흰돌, 공백 이렇게 3가지 경우가 있어요.
그러니 바둑의 가능한 경우의 수는 3(19 x19) ~ 10172 라는 어마어마하게 큰 수가 돼요. 우주의 원자 수보다 훨씬 큰 수라고 할 정도지요.
아무리 큰 메모리를 가지는 슈퍼 슈퍼컴퓨터라도 도저히 감당할 수 없는 방법입니다. 알파고는 이런 의사결정 트리 알고리즘을 사용하지 않는 게 분명해요.

다시 개와 고양이로 돌아와봐요. 세 개, 네 개의 특성으로 모자라면, 열 개, 스무 개는 어떨까요? 이 정도는 고성능 컴퓨터가 다룰 수 있겠지요.
그런데 모습 일부분이 가려졌다던가, 장난으로 이상한 분장을 시켰다고 해봐요. 그래도 우리는 쉽게 구별할 수 있지만, 우리의 알고리즘은 그렇지 못할 수 있어요.

숫자로 나타내는 이미지 픽셀, 출처: www.mygreatlearning.com/blog/image-recognition/

또한 일단 컴퓨터가 수염, 귀, 코를 인식할 수 있다고 가정했어요. 사실 이것도 기술적으로 상당히 어려운 일이에요. 
컴퓨터는 근본적으로 0과 1의 숫자만 알아들어요. 그러니 일단 사진과 같은 이미지를 숫자로 바꿔야 하지요.
위 그림에서 보듯이, 격자로 나뉜 픽셀(화소, 자그만 사각형) 각각에 그 색깔에 따른 숫자를 하나씩 대응시키는 거예요. 해상도가 높은 사진은 픽셀 개수가 많은 거고, 그러니 꽤 긴 숫자의 나열로 표현되는 거고요.
다음은 숫자의 나열을 읽고, 어디가 눈이고 어디가 코인지 알아내야 하지요. 이게 바로 이미지 인식 기술이에요.

출처: www.perficient.com/insights/research-hub/image-recognition-accuracy-study

혼잡한 배경 속에서 아는 사람을 딱 인식하는 능력, 여러 소리가 섞인 음악 속에서 특정 악기 소리를 파악하는 능력, 어디서 배운 적도 없는데 우리가 가지고 있는 대단한 기술이에요.
컴퓨터가 이러한 인식 능력을 가지도록 오래전부터 많은 연구가 이루어져 왔습니다.
사람은 잘 하니 사람이 하는 방식을 컴퓨터가 따라 하게 하면 어떨까요? 20세기 초부터 본격 발전한 신경과학과 함께 컴퓨터 과학자들도 우리 뇌가 작동하는 방식을 모방하기 시작했어요.
아래 그림에서 보듯이, 1940년 대부터 벌써 신경회로망(neural network) 등 인공지능 연구가 시작되었습니다. 최초의 범용 전자식 컴퓨터 개발이 이루어진 때와 유사하지요.

신경회로망 연구 역사, 출처: www.slideshare.net/deview/251-implementing-deep-learning-using-cu-dnn/4

우리 뇌의 신비가 조금씩 밝혀지고 있어요. 뇌에는 수백억 개의 뉴런(신경세포)이 있고, 뉴런은 신경아세포와 함께 신경계와 신경조직을 이루는 기본단위입니다.
뇌의 여러 기능과 작동은 다수의 뉴런 간에 신호를 전달하고 받는 과정으로 일어난다고 해요.
아래 그림을 봐 주세요. 가지돌기에 일정 강도 이상의 신호가 들어오면, 신경 세포체와 축삭 종말 사이에 전위차가 발생하여 전기신호가 보내집니다. 그리고 연결된 여러 다른 뉴런으로 다시 신호가 전달되고요.

뉴런(신경세포)과 수초의 신호 전달, 출처: en.m.wikipedia.org/wiki/Artificial_neural_network

신경회로망은 이를 모방한 것으로 아래 그림과 같이 입력층, 숨겨진 층, 출력층으로 구성되어요.
입력층의 파란 동그라미는 중간의 숨겨진 층에 있는 검은 동그라미에 연결되어 있고, 다시 출력층의 초록 동그라미로 연결됩니다.
동그라미의 값은 특정 가중치를 가지고 여러 다른 동그라미로 전달되어요. 가중치는 연결의 강도를 나타내지요(0이면 연결 안 됨). 신경과학에서 뉴런 연결 부위인 시냅스의 연결 강도에 해당돼요.
숨겨진 층과 출력층의 동그라미는 여러 곳으로부터 값을 전달받아요. 출력층의 초록 동그라미는 전달받은 값을 다 고려해 최종 출력값을 만들게 되지요.

신경회로망 (neural network)

인공지능과 머신러닝(기계학습) 연구는 많은 관심을 받았습니다. 하지만 흥미 있는 결과를 오랫동안 내놓지 못하였어요. 그래서 연구에 대한 관심도 식고, AI Winter라고 불리는 암흑기도 겪지요.
실질적으로 의미 있는 문제를 풀려면, 위 신경회로망 그림에서 보이는 숨겨진 층을 여러 개 두는 등 좀 더 크고 복잡한 회로망이 필요해요.

GPU (Graphics Processing Unit)

그러기 위해서 필요한 강력한 컴퓨터가 나오기 전까지 연구에 어려움을 겪은 거지요. 근래 메모리나 프로세서의 성능이 급속히 좋아졌어요.
빠르고 실감 나는 3차원 게임에는 엄청난 계산이 필요하지요. 신경회로망 계산도 그래픽과 유사한 큰 행렬 계산이에요. 그래픽을 위해 개발된 고성능 GPU가 신경회로망 연구에도 쓰이게 되었습니다.

출처: Machine Learning Department, Carnegie Mellon University

앞에서 개와 고양이 분간을 이야기할 때, 수염, 귀 등과 같은 특성을 잡았어요. 신경회로망의 입력층 파란 동그라미가 바로 이런 특성에 해당합니다.
예를 들어 첫 번째 동그라미는 수염이 길면 1, 길지 않으면 0의 입력값을 가지고, 두 번째 동그라미는 귀가 위로 향하면 1, 아니면 0의 입력값을 가지는 식이지요.
출력층의 초록 동그라미는 (여기서는 하나의 동그라미만 필요) 개이면 1, 고양이면 0의 값을 내놓게 되고요.
신경회로망의 '학습'이란 입력층과 출력층 사이에 있는 많은 연결선의 가중치를 변화시켜 올바른 답을 주도록 만들어 가는 것이랍니다.

그럴듯한 몇 가지 특성을 찾아 이진결정 트리나 신경회로망을 만들면 잘 작동할 수 있어요. 하지만 개와 고양이 문제처럼 이미지로 되어 있고, 또 그 특성이 그리 분명하지 않은 경우도 있지요.
사실 우리는 딱 보면 아는데, 구체적으로 어떻게 알아냈는지 설명하기 어려운 경우가 있지요? 그러니 컴퓨터에도 미리 어떤 특성을 정해서 넣어주지 말고, 그냥 이미지 데이터만 주고 알아서 학습하라고 하면 어떨까요?

훈련 데이터(Training dataset), 출처: towardsdatascience.com/label-smoothing-making-model-robust-to-incorrect-labels-2fae037ffbd0

이미지는 (컴퓨터 입장에서) 숫자의 나열이라고 했지요? 픽셀 값 하나하나가 신경회로망의 입력층 동그라미에 각각 들어가도록 해요.
그리고 위와 같이 개와 고양이로 미리 분류되어 있는 사진에 대해 '훈련'을 시키는 거예요. 개 이미지가 입력되면 출력값이 개로 나와야 하고, 고양이 이미지가 입력되면 출력값이 고양이로 나오도록 중간 가중치 값들을 계속 조정해 나가는 거지요.

딥러닝 (deep learning)

이런 방법을 딥러닝(deep learning)이라고 해요. 개별 입력에 대한 답은 알지만 (개 사진을 보면 개 등) 왜 그런 답을 했는지 딱히 이유를 찾기 어려운 문제, 즉 특성을 잘 뽑아내기 어려운 문제에 사용되는 방법이지요.
이런 문제는 (이미지 데이터처럼) 입력 수도 많고, 중간의 숨겨진 층도 크기 때문에 아주 강력한 계산 능력이 필요합니다.

출처: towardsdatascience.com/what-is-big-data-lets-answer-this-question-933b94709caf

어린아이에게 몇 번만 이건 개고, 이건 고양이라고 가르쳐 주면 금방 곧잘 구별을 하지요. 그런데 컴퓨터(딥러닝 신경회로망)는 그렇지 못해요.
굉장히 많은 수의 개와 고양이 이미지를 가지고 학습을 시켜야 하지요. 그러니 훈련 시킬 많은 (개와 고양이로 분류가 되어 있는) 데이터가 필요해요.
여기서 근래 많이 듣는 빅데이터가 관련이 됩니다. 개 고양이 구분 문제뿐만 아니라, 딥러닝을 사용하는 많은 머신러닝 문제에서 훈련 데이터가 충분히 있는지가 성공의 중요한 요소가 되니까요.

여러분이 사용하는 스마트폰이나 소셜미디어 등에서 머신러닝을 활용한 여러 기능이 나오고 있어요. 음성으로 질문하면 알아서 검색하여 답을 주고, 올린 사진에 자기나 친구가 나오면 알아서 인식하여 알림을 주지요.
심각한 과학기술 연구뿐만 아니라, 우리 일상을 편리하게 또 재밌게 해주는 머신러닝 기술이 점점 더 발전하고 또 널리 사용되고 있습니다.
이러다가 사람보다 더 똑똑해지고, 사람 일자리를 다 뺏어가지 않을까 하는 우려까지 나오고 있지요.
기계에 의해 대체되는 사람이 아니라 똑똑한 기계를 잘 활용하여 더 자유롭고 풍요로운 삶을 사는 우리가 되자고요.

로딩중