컴퓨터에게 강아지와 고양이를 가르쳐주며 전문가 시스템에 대해 이해해봅니다.
1. 들어가며
이번글에서는 본격적으로 컴퓨터에게 강아지와 고양이를 가르쳐보겠습니다. 유치원생 조카에게 했던 것처럼 동일하게 하면 되지 않을까요? 강아지와 고양이 사진을 가져와서 각각의 특징을 가르쳐주면 될 것 같습니다. ‘이렇게 생기면 강아지고, 저렇게 생기면 고양이야’라고 가르쳐주는 거죠. 컴퓨터가 유치원생 조카 수준의 지능만 된다면 쉽게 성공할 것 같네요.
2. 해결 방법
2-1. 유치원생 조카에게 처럼 설명해 주기
이제 막 한글을 깨친 조카에게 강아지랑 고양이를 가르쳐준다고 상상해 보죠.
저라면 우선 강아지랑 고양이 사진을 최대한 많이 모을 겁니다. 그리고 사진을 하나씩 보여주면서 조카에게 이렇게 알려주는 거죠. “이건 강아지고, 이건 고양이야. 강아지는 사진처럼 이렇고 저렇고, 고양이는 저렇고 이래.” 우리 모두가 어렸을 적 이렇게 하나둘씩 배웠잖아요. 컴퓨터도 동일한 방법으로 차근차근 알려주면 쉽게 이해할 것 같습니다.
“자 컴퓨터야, 얘는 강아지야. 강아지는 이렇게 눈과 귀가 두 개씩 있어. 털로 몸이 덮여 있고, 꼬리는 짧아. 얘는 고양이야. 고양이는 뾰족한 귀가 두 개 있어. 그리고 강아지보다 꼬리가 길어.” 이렇게 알려주고 다음 사진을 펼쳤더니 이번에는 아메리칸 폭스하운드 사진이 나옵니다.
방금 강아지 꼬리는 짧고 고양이 꼬리는 길다고 알려줬는데, 이번 강아지는 꼬리가 기네요. 조금 곤란하지만 이렇게 다시 얘기해 줍니다. “얘도 강아지야. 아까 강아지는 꼬리가 짧았지? 얘는 기네. 가끔씩 꼬리가 긴 강아지도 있어.” 그러자 컴퓨터가 고개를 갸우뚱하며 이렇게 물어봅니다. “강아지는 꼬리가 짧다는 거야, 길다는 거야? 가끔씩은 정확히 얼마큼의 확률을 말하는 거야?”
2-2. 조카에게처럼 가르쳐주는 방법의 한계
당황스럽네요. 우리는 무언가를 배울 때 정확한 확률값으로 배우지 않았잖아요.
그냥 그런가 보다 하면서 적당히 이해했고, 그렇게 이해했을 때 문제가 된 적은 없었는데 말이죠. 이 컴퓨터는 뭐든지 정확하게 어떻게 구분되는지를 자꾸 물어봅니다. 이번에는 강아지 얼굴 사진을 보면서 이렇게 물어보네요.
“이건 꼬리가 아얘 없는데, 이건 그럼 강아지야 고양이야?” 강아지 얼굴을 보면서 꼬리를 찾다니요.
이런 식이라면 전 세계 모든 강아지 사진을 가져와도 컴퓨터에게 강아지를 알려주기는 힘들 것 같습니다. 세상에 존재하는 모든 강아지들을 관통하는 규칙이 몇 개나 있을까요? 눈이 두 개, 귀가 두 개, 코가 두개, 입이 한 개 이 정도 아닐까요? 하지만 이 정도 기본 규칙을 만족하는 동물은 강아지 말고도 대부분의 동물들이 해당합니다.
보통 특정 개체를 설명하는 규칙은 매우 복잡합니다.
예외 사항이 매우 많죠. 만약 강아지를 구분하는 규칙을 만들려면 위의 예시처럼 눈, 코, 입, 귀 정도로 접근해서는 불가능할 겁니다. 각각의 강아지 종마다 특성이 다 다르죠. 따라서 종마다의 규칙을 만들어줘야 할 겁니다. 같은 종이라도 색상이 다르고 체격이 다를 수 있죠. 뿐만 아니라 사진을 어떻게 찍었는지에 따라 특성이 전혀 다르게 나타납니다. 얼굴만 보이거나, 뒷모습만 보이거나 하는 식으로 말이죠.
생각이 여기까지 미치자 난처해졌습니다. 이런 식으로는 컴퓨터에게 강아지랑 고양이를 알려주는 건 불가능해 보입니다.
2-3. 전문가 시스템 : 모든 조건 찾아 코딩하기
실제로 AI 연구 초창기에는 위와 같은 방법을 시도했습니다.
강아지와 고양이를 구분하는 AI를 만들기 위해 연구자들이 직접 모든 조건을 찾아주는 방법이었죠. 강아지에 해당하는 모든 조건을 찾아 직접 코딩하는 방법이었습니다. 다음과 같이 코드를 짜는 거죠.
이렇게 사람이 직접 규칙을 찾아 코딩해 주는 초창기 AI 방식을 전문가 시스템이라고 합니다.
사람이 직접 전문가가 되어 AI를 만드는 방법이죠. 전문가 시스템 방법의 AI는 성능이 어땠을까요? 위에서 벌써 강아지랑 고양이를 구분하는 예시를 보았으니 성능이 안 좋았을 것 같죠? 반은 맞고 반은 틀린 말입니다. 전문가 시스템은 비교적 간단한 기능을 구현하기에는 매우 적합한 방법이었습니다. 오히려 지금의 최신 AI 방법들보다 효율적이고 정확하게 사용할 수 있습니다.
예를 들어 볼까요? 공장의 컨베이어 벨트 자동화 시스템을 생각해 보겠습니다.
공장에 가보면 대부분의 컨베이어 벨트는 자동화되어 동작합니다. 이런 컨베이어 벨트는 어떻게 자동으로 동작하도록 구성했을까요? 공장의 컨베이어 벨트는 동작하기 위한 명확한 규칙이 있습니다. 예를 들면 이런 것이죠. “1번 위치에 부품이 도착하면 A 컨베이어를 가동한다. 2번 위치에 부품이 도착하면 A 컨베이어는 멈추고 B컨베이어를 가동한다.”
부품이 도착했는지 여부는 센서를 부착해서 정보를 받으면 됩니다. 물론 대부분의 공장 컨베이어 벨트는 이보다는 훨씬 복잡한 규칙을 갖겠죠. 하지만 대부분의 공장에서는 수백 가지 조건을 나열하면 자동으로 공장을 운영할 수 있습니다. 아무리 복잡한 공장이라도 수천 가지 조건이면 충분하죠. 이 정도라면 공장 운영을 잘 아는 전문가 몇 명만 있으면 코드를 만들 수 있습니다.
2-4. 전문가 시스템의 한계
그럼 전문가 시스템 방식의 문제는 무엇일까요?
바로 위에서 살펴본 예시죠. 강아지랑 고양이를 구분하는 문제를 풀기에는 전문가 시스템이 적합하지 않습니다. 강아지랑 고양이를 사진만 보고 구분하는 경우의 수는 생각보다 매우 많기 때문이죠.
아무리 조건을 추가해 줘도 성능이 미세하게 올라갈 뿐, 사람 수준을 만들기 쉽지 않습니다.
아주 많은 시간을 들여 조건을 추가해 주면 충분한 성능이 나올 수도 있겠죠. 하지만 이런 식이라면 범용적으로 사용할 수 있는 AI의 방식이라고 할 수는 없겠죠. 매번 전문가가 투입되어서 몇 년씩 조건을 만들어줄 수는 없으니까요. 실제로 강아지랑 고양이를 구분하는 AI를 만들기 위해 전문가 시스템 방법을 사용한때가 있었습니다. 하지만 어느 팀도 사람 수준으로 강아지랑 고양이를 구분하도록 만드는 데는 실패했죠.
2-5. 전문가 시스템 정리
여기까지 정리해 보겠습니다.
초창기 AI는 문제를 풀기 위한 모든 조건을 사람이 찾아서 코딩해 주는 방법을 사용했습니다. 전문가가 문제를 해결하는 방법이라는 의미로 이러한 방식을 전문가 시스템이라고 합니다. 공장처럼 특수한 상황에서는 전문가 시스템 방식으로 훌륭한 AI를 만들 수 있습니다. 하지만 일반적인 상황에서는 전혀 다른 접근 방법이 필요합니다. 전문가가 조건을 찾아 나열하기에는 불가능할 정도로 경우의 수가 많기 때문이죠.
3. 마무리
컴퓨터를 유치원생 조카라고 생각하고 강아지와 고양이를 가르쳐봤습니다.
유치원생 조카는 사진 몇 장씩만 보여주며 설명하면 곧잘 이해했죠. 어느 순간부터는 스스로 응용하기도 하고요. 하지만 컴퓨터는 조카와는 전혀 달랐습니다. 융통성 있게 이해하지 못하고 모든 조건을 다 알려달라고 했죠. 하지만 세상에 존재하는 모든 강아지와 고양이의 조건을 다 알려줄 수는 없습니다. 컴퓨터에게 강아지와 고양이를 가르쳐주기 위해서는 전혀 다른 방법이 필요해 보입니다.
다음 글에서는 전혀 다른 방법을 시도해 보겠습니다.