[개발자 아빠의 교육실험](10) 기계에게 판단하는 법 가르치기

2019.05.07 11:42
인공지능 컴퓨터로 영화에 등장하는 ‘HAL9000’. 우주 비행선의 승무원을 모두 죽이려 시도한다. 이 때문에 전미 영화 협회에서 선정한 ′100대 영웅 그리고 악역′ 중 당당히 14위에 올랐다.
인공지능 컴퓨터로 영화에 등장하는 ‘HAL9000’. 우주 비행선의 승무원을 모두 죽이려 시도한다. 이 때문에 전미 영화 협회에서 선정한 '100대 영웅 그리고 악역' 중 당당히 14위에 올랐다.

“제 계산에 착오가 있었음을 인정합니다. 우리가 대화로 이 문제를 풀어나갈 수 있을 것입니다.”

 

역대 최고의 SF 영화 중 하나로 꼽히는 '2001: 스페이스오디세이'에서 집요하게 인간을 공격하는 인공지능 컴퓨터 ‘HAL9000’이 최후를 맞으며 구차하게 목숨을 구걸하는 대사다. 목숨이 경각에 달린 상황임에도 불구하고 감정이 철저히 배제된 인공지능의 말소리는 오히려 충격적이다. 요 몇 년 새 무섭게 진화하는 인공지능에 대한 새소식이 들릴 때면 언제나 이 장면이 떠오른다.

 

2015년 3월 13일은 인류가 인공지능에게 바둑으로 승리한 마지막 날이다. 퀴즈쇼 ‘제퍼디(Jeopardy)’의 전설적인 퀴즈왕들이 인공지능 ‘왓슨’에게 줄줄이 무릎을 꿇은 지도 벌써 10년에 가깝다. 그뿐만이 아니다. 법률 및 금융, 쇼핑 등 방대한 데이터 분석이 필요한 분야는 이미 인공지능이 활발히 이용되고 있을 뿐만 아니라, 심지어 암진단 등 의료 영역에서의 활용도 가능성의 차원을 넘어가고 있다. 긴 시간 교육받은 의사의 직관까지도 위협받는 상황이란 얘기다. 이렇듯 인공지능은 날로 진화하고 있는데, 인공지능의 핵심에는 컴퓨터가 가진 판단 기능이 자리잡고 있다.

 

컴퓨터의 판단은 모두 ‘조건 분기’로 이뤄진다. “if(조건) then ~ else ~”의 형태인 경우가 대부분이다. 어떤 조건이 참이면 이에 해당되는 코드 묶음을 수행한다는 것이다. 우리가 실생활에서 배가 고프면(조건) 밥상을 차리고 밥을 먹는 것(코드 묶음)과 마찬가지다. 이게 안 되는 것은 컴퓨터가 아니다. 현대의 컴퓨터는 튜링 완전(Turing Completeness) 하다고 여겨지는데, 튜링 완전의 조건 중 하나가 ‘조건 분기’ 기능의 제공 여부이기 때문이다. 여기까지는 참 간단하다.

 

그렇다고 컴퓨터에게 현명하게 판단하는 능력까지 기대하는 것은 무리다. 단순히 판단의 기능만 가지고 있을 뿐이다. 단적으로 컴퓨터의 가장 낮은 수준에서 조건 분기는 바로 직전의 계산 결과만 참고한다. 그마저도 결과가 0인지 아닌지 정도만 보고 판단한다. 따라서 조건을 의도한 대로 적절한 수식을 이용해 구성해야 한다. 판단의 기준을 만드는 것은 오롯하게 사람의 몫이란 것이다.

 

인공지능의 놀라운 능력도 결국 사람의 판단에 기대고 있다. 예컨대, 요즘 각광받는 머신러닝은 사람이 판정한 대량의 데이터에서 시작한다. 간단히 말해 교과서를 만드는 것과 같다. 여기에 추가로 컴퓨터에게 주입식 교육을 반복하기만 하면 된다. 컴퓨터는 교과서에 충실한 모범생일 따름이다. 게다가 주입식 교육마저도 “if(조건) then ~ else ~”라는 판단문을 이용해 구현된다. 이제 ‘HAL9000’을 만들기 위한 첫걸음을 밟아 보자.

 

대게 코딩 교육에서 판단은 변수 다음 차례로 진행된다. 프로그래밍 언어 교과서의 차례를 따르자면 그렇다. 그러나, 판단을 진행하기가 적잖이 주저되었다. 아이가 아직 변수에 익숙하지 않다고 판단됐기 때문이었다.

 

원래는 변수를 한 시간 더 진행하려 했다. 실습 교안도 작성했다. 간단한 계산기를 만들었는데, 더하기, 빼기 등 연산자를 구별하기 위해 판단문을 결국 이용할 수밖에 없었다. 이럴 바에는 차라리 정면으로 부딪쳐 보는 것이 낫다는 생각이 들었다. 어차피 조건과 판단에는 변수가 항상 따라다닌다. 변수가 눈에 익을 때가 되면 변수 사용도 자연스러워질 것이다. 지적 성장은 계단식으로 이뤄진다는 게 필자의 생각이다. 키가 자라는 것처럼 연속적이기를 기대하지 않아도 된다는 것이다.

 

실습 교안을 다시 만들었다. 엔트리봇과 가위바위보 게임을 하는 과정으로 구성했다. 아이가 가위, 바위, 보 중 하나를 입력하면 엔트리봇의 선택과 비교해 승패를 판정하는 순서다. 이 과정에서 많은 판단문이 이용될 수밖에 없다. 판단문을 가르치기에 제격이다. 게다가 게임의 형식이므로 아이의 흥미도 쉽게 유발할 수 있을 것이라 기대했다.

 

아이가 만든 가위바위보 놀이. 화면 왼쪽의 변수 목록에서 실행하는 동안 변숫값의 변화를 확인할 수 있다. 아이에게 변수를 이해시키는 데 많은 도움이 됐다. 김기산 제공
아이가 만든 가위바위보 놀이. 화면 왼쪽의 변수 목록에서 실행하는 동안 변숫값의 변화를 확인할 수 있다. 아이에게 변수를 이해시키는 데 많은 도움이 됐다. 김기산 제공

아이의 이해를 돕기 위해 순서도를 활용하기로 했다. 순서도는 프로그램 처리 과정을 화살표등으로 도식화하여 표현한 그림이다. 판단 및 조건 분기의 의미를 직관적으로 전달하기에 이만한 게 없다.

 

코드와 순서도의 얼개를 짜고 난 후 아이에게 가르칠 순서와 양을 가늠했다. 3시간 정도가 적당해 보였다. 가위바위보 승패 판정에는 2시간이면 충분하나, 예외 처리를 추가한 만큼 1시간이 늘어났다. ‘갸위’나 ‘바우’ 등 잘못된 입력에 대한 처리가 필요하기 때문이다. 많은 버그가 미흡한 예외 처리에서부터 시작한다는 것은 개발자들 사이에 잘 알려진 사실이다. 아이에게 예외 처리에 대한 습관을 익혀줄 필요가 있다. 물론 예외 처리조차도 판단의 과정을 밟는다.

 

교육은 첫 시간부터 삐걱거렸다. 아이가 제대로 따라오지 못한다는 것이 어렵지 않게 느껴졌다. 우려했던 변수에 대한 이해 부족이 원인이 아니었다. 입력 등 변수 처리는 기대 이상으로 잘 해냈다. 순서도에 그려진 논리 흐름도 아이는 곧잘 따라갔다. 그때까지만 해도 ‘그럼 그렇지, 누구 딸인데.’라고 속으로 우쭐하기까지 했다.

 

문제는 다른 곳에 있었다. 아이에게 지나치게 복잡한 코드였던 것이다. 판단문 하나는 쉽게 이해했으나 판단문이 중첩될수록 아이는 갸웃거리기 시작했다. 9살 아이의 머릿속은 복잡한 논리가 한꺼번에 자리 잡을 수 있을 정도로 넓지도, 단단하지도 않다. 그 부분에 대한 예외 처리가 제대로 되지 못한 것은 다름 아닌 교안이었다. 눈높이를 무시한 채 안이하게 설계된 탓이 크다.

 

 

조바심이 생겼다. 우울감도 밀려왔다. 자기 아이의 능력이 부족하다고, 그래서 이 정도까지라고 인정하는 것은 부모 된 사람으로서 쉽지 않은 일이다. 자기 아이를 가르치는 것만큼 어려운 일이 없다는 말도 떠올랐다. 부모는 아이의 반응을 증폭하여 해석하는 경향이 강하다. 과장해 말하자면 멀쩡한 사람도 조증과 울증을 넘나들게 만드는 고약한 처지에 있단 것이다.

 

두 번째 시간의 교안을 부랴부랴 수정했다. 복잡해 보이는 코드를 단순화하면 될 일이라 판단했다. OR 연산을 이용하면 간단히 해결될 일이다. OR 연산은 아이에게 “이거나”로 설명하면 어렵지 않게 이해할 것이라 생각했다.

 

결과는 나쁘지 않았다. “이거나”를 통해 단순화시킨 코드를 아이는 어려워하지 않았다. 합집합 개념이나 불 대수(Boolean Algebra)를 몰라도 상관없었다. 실생활에서 사용되는 말 “이거나”가 가진 힘이다.

 

OR 연산을 통해 단순화시킨 코드. 한눈에 봐도 단순해졌다는 것을 알 수 있다. 단순해진 만큼 아이는 코드를 쉽게 이해했다. 김기산 제공
OR 연산을 통해 단순화시킨 코드. 한눈에 봐도 단순해졌다는 것을 알 수 있다. 단순해진 만큼 아이는 코드를 쉽게 이해했다. 김기산 제공

코드를 완성한 순간 아이는 엔트리봇과의 가위바위보 대결에 빠져들었다. 몇 판을 해야 하냐고 아이는 물었다. 보통 5판 3선승이 기본이라고 아무 생각 없이 얘기했다. 잠시 후 이겼다는 외침과 함께 아이의 까르르 웃는 소리가 거실안을 도르르 굴러다녔다. 흐뭇했다. 그러나 이 감정은 오래가지 않았다. 입가의 웃음이 사라지기도 전 아이는 흥미를 잃었는지 자기 방으로 들어가 버렸다. 9살 아이에게 가위바위보 따위가 이미 흥미로울 턱이 없다. 이렇게 부모는 또 조증과 울증의 경계를 넘나든다.

 

도움자료

1) 9~11일 차 교안을 공유합니다.

https://drive.google.com/drive/folders/16vcqlEnRIFiNo1evj1L6Wtvc0TEAU-kj

2) 아이와 만드는 코드도 공유합니다. 엔트리 메인화면의 공유하기에서 “chloe10”을 검색하세요.

 

※필자소개

김기산 기업에서 IT 디바이스 소프트웨어 개발자로 일하고 있다. 대학에서 전자공학을 전공하고 20년 가까이 리눅스 개발자로 지내다가 뜻밖의 계기로 육아휴직을 냈다. 지난해 한층 강화된 '아빠의 달' 제도의 수혜자로, 9살 아이와 스킨십을 늘리며 복지 확대의 긍정적인 면을 몸소 깨닫고 있다.

 

메일로 더 많은 기사를 받아보세요!

댓글 0

작성하기

    의견쓰기 폼
    0/150