인공지능
인공지능 정의
인공지능을 오랫동안 접해왔지만 인공지능을 정의하기는 쉽지 않다. 비교적 짧은 인공지능 정의를 인용해본다.
It is the science and engineering of making intelligent machines, especially intelligent computer programs. (by John McCarthy)
인공지능이 필요한 이유
인공지능이라는 것을 그 동안 느끼고 생각을 것을 기준으로 설명한다면, 인공지능 정의 전에 먼저 시스템이라는 용어에 익숙해야 한다. 시스템은 주어진 입력에 대하여 규칙대로만 출력하는 시스템이 보통이다. 물론 확률적인 개념들이 도입되기도 하고 훨씬 더 복잡한 시스템도 있지만 설명을 돕기 위해 간단한 시스템을 예로 든다. 이러한 시스템은 프로그래밍으로 표현하면 기본적으로는 if {A} else {B}이 사용된다. 입력 A가 들어오면 출력 B를 내 보내도록 구성된 것이다. 보통 복잡한 시스템들도 결국 입력과 출력들의 관계를 명백하게 연결될 수 있는 범주 안에서 구현이 되어 있다.
그러면 인공지능이라는 것은 무엇인가를 다시 재 질문해보자. 프로그램 구현 입장에서 인공지능이 필요한 이유는 바로 입력과 출력을 미리 프로그래밍할 수 없는 경우이다. 입력과 출력을 미리 프로그램할 수 없는 경우는 크게 두 가지 경우가 있다.
- 입력의 (조합) 수가 너무 많은 경우
- 현 시점에서 입력을 열거할 수 없을 경우 (미래에 나타날 수 있는 입력)
그렇다면 어떤 시스템을 구현하는 데 있어, 현 시점에서 입력의 수가 많아 프로그래밍 할 수 없으며 또 현 시점에서의 입력 출력 쌍을 모두 프로그래밍할 수 없다면 어떻게 해야 할까? 바로 해당 시스템에 인공지능 알고리즘 처리가 필요한 것이다.
- 인공지능 알고리즘의 처리 : 현재 주어진 입력과 출력의 쌍(지식)을 이용하여 미리 프로그램 되어 있지 않은 입력에 대해서도 적당한 출력 패턴을 찾을 수 있도록 함
인공지능이 적용된 대표적인 사례가 문자 인식이다. 필기체로 알파벳을 쓰면 그 필기체의 특징점을 보고 문자를 인식하는 시스템이다. 사용자가 입력하는 필기체의 패턴을 생각해보자. 너무나도 다양하여 필기체 패턴에 대한 출력(인식 결과)를 if {A} else {B} 의 규칙을 설정하기가 어렵다. 결국 이런 시스템의 경우 인공지능 알고리즘을 이용하면 어느 정도 해결이 가능하다.
인공지능에 사용되는 알고리즘의 분류
그렇다면 인공지능 시스템을 구현하기 위해 사용되는 알고리즘은 무엇일까? 여러 가지 알고리즘이 무수히 많고, 또 그에 따른 파생적인 알고리즘도 매년 새롭게 생겨나고 있다. 그렇지만 그러한 인공지능 시스템을 구현하려는 방법들을 크게 2 가지 정도로 분류될 수 있다. (아래 용어 선택은 wikipedia에서 참조)
- Symbolic(심볼) : 인공지능을 처리하기 위해서, 지식 혹은 정보가 기반이 되어야 하는데 그런 지식이나 정보를 표현하는 형태가 주로 Symbolic(심볼)로 구성되어 있고 Symbolic(심볼)을 주로 처리하는 알고리즘들에 속한다. 보통 규칙(rule) 시스템이 가장 대표격에 해당한다.
- Sub-symbolic : 지식이나 정보가 심볼 형태가 아닌, 가중치(weight)나 연결 정보 등으로 표현된 형태이다. 대표격은 신경망이 이에 속합니다.
인공지능에 수 많은 알고리즘이 있지만 근본이 심볼 형태인지 혹인 심볼이 아닌 어떤 수치적 값(value) 형태인지로 크게 구분될 수 있다. 사실 접근 방법에 따라 장단점이 있으며 지능을 구현하는 데 있어 어떤 알고리즘으로 구현해야 하는가는 그 시스템의 특성에 따라 접근 방법이 달라질 수 있다. 인공지능의 처음 태동기는 주로 Symbolic(심볼) 기반의 알고리즘이 대두되었고 그 다음 신경망 등 Sub-symbolic 기반의 알고리즘이 활기를 띈 때도 있었다. 최근에는 온토로지(ontology), Embedded-AI 등 다양한 접근 방식이 연구되고 있다.
최근에 와서 신경망 기반의 연결론적 접근 방식, 유전자 알고리즘의 진화론적 방식, 인공생명 기반의 방식 등이 연구되며, 기호적 하향식에서 비기호적 상향식으로 지능적인 행동을 하도록 프로그래밍하던 방식에서 창발적인 행동으로 연결되도록 하는 진화적, 학습적 방식에 많은 관심이 있다. 그 이유인 즉, 방대한 지식을 구성하기 위한 데이터베이스가 그 자체적으로 힘들뿐 아니라 거의 불가능에 가깝기 때문이다.
인공지능 범주 내 주요 알고리즘
- 신경망
- 기호적 인공지능의 기반인 규칙 시스템(Rule-based System)
- 유전자 알고리즘(Genetic Algorithm) / 유전자 프로그래밍 (Genetic Programming)
- 패턴 인식 (Pattern Recognition)
인공지능 응용 분야
- 로봇
- 전문가 시스템
- 자연어 처리
- 게임 : NPC(또는 몬스터)들의 지능적인 행동 처리
- 음성 인식
- 자연어 이해(Natural Language Understanding)
- 영상 인식
- 화자 인식
- 생체 인식(홍채, 지문 등)
인공지능 구현
인공지능 시스템을 구현하기 위해 여러 가지 전문화된 또는 특화된 언어 또는 관련 도구들이 개발되었다. 인공지능 언어로 대표격은 Prolog, Lisp 등이 있다. 하지만 실무에서는 보통 C++/Java 계열을 일반적인 프로그래밍 방식 언어를 종종 사용하여 구현하게 됩니다. 웹 검색을 해보시면 실제 인공지능 알고리즘들이 대부분 자바(또는 C++) 계열로 구현되어 있는 것을 확인할 수 있습니다. 이유는 간단합니다. 가장 익숙한 도구나 언어를 이용할 뿐이고 인공지능의 실체는 알고리즘이기 때문입니다. 알고리즘은 프로그래밍 언어와는 무관하죠. 저도 사실 Lisp 나 Prolog 언어에 관심이 많은데 실무에서는 별로 활용한 적이 없습니다.
- Lisp
- Prolog
현대 인공지능의 특징
- 합리론에서 경험론적인 접근 방법 변화 : 기존의 기호 논리 기반의 인공지능에서 경험이나 통계적 접근과 학습의 조화로써의 접근 방법이다. 구체적인 예로 자연어처리를 들 수 있다. 80년때 까지만 해도 언어학 문법에 기초한 방법이 주류를 이루었으나, 근대에는 말뭉치(corpus)에 나타한 수 많은 문장들을 통계되고 학습하는 식의 자연어처리 방식으로 변화된 것이다.
- 하향식에서 상향식으로의 접근 방법 변화 : 하향식(top-down)의 대표적인 예는 인공지능이고 상향식의 대표적인 예는 인공생명 적인 접근 방법인데 근래는 인공지능에서 인공생명적인 접근 방식을 취하고 있다 이러한 연구 분야의 예로는 Embodied AI를 들 수 있다.
인공지능 분야에서의 유명인
- Alan Turing
- Marvin Minsky
- Rodney Brooks (MIT.edu)
- John McCarthy (standford.edu) : 인공지능(artificial intelligence) 라는 용어를 처음으로 사용함, Lisp 개발자
- Peter Norvig
- Ray Kurzweil (레이 커즈와일) : 미래학자, "특이점(Singularity)이 온다." 의 저자,
기타 인공지능을 설명한 사이트
(계속...)
Recent Comments