레플리
글 수 13

신경망을 이용한 사용자의 행동 학습

조회 수 622 추천 수 0 2016.03.25 02:07:02


nagent.jpg

 

소스코드 : 첨부파일

 

 

 

사용자의 행동 학습

 

'블랙 앤 화이트'란 게임을 보면 사용자는 애완동물과 같은 크리쳐를 하나씩 가지고 있다. 이 크리쳐가 보통 다른 일반적인 게임 인공지능과 다른 점은 사용자의 행동이나 가르침을 학습하여 새로운 행동을 배워나간다는 데 있다. 크리쳐 앞에서 여러 가지 마법이나 작업들을 해보이면, 조금씩 그러한 행동들을 배워 적절한 상황에서 학습한 행동들을 수행하는 것을 볼 수 있다.

 

이처럼 사용자의 행동을 배우고 새로운 행동을 학습하는 것은 게임에서 뿐만아니라, 사용자의 성향을 학습을 통해 파악하여 더 나은 서비스를 제공할 수 있는 지능형 시스템(로봇에서 자동차, 일반 가전제품 등에 걸친)에서 중요하게 사용되는 요소이다.

 

학습을 위해 사용할 수 있는 방법에는 '블랙 앤 화이트'에서 사용한 디시전 트리(decision tree)를 비롯해서 여러 가지가 있지만, 여기서는 이전에 다루었던 신경망(neural network)을 이용하여 사용자의 행동을 학습하는 인공지능 에이전트를 구현해 보았다.

 

 

 

프로그램 소개

 

프로그램의 기본적인 목적은 사용자의 행동을 학습한 후 에이전트가 학습한 내용에 따라 적절하게 행동하는 지를 확인하는데 있다. 먼저 'Player' 버튼을 눌러 60초 동안 커서키(이동)와 스페이스(공격)를 사용하여 몬스터를 공격하고 음식을 통해 체력을 회복하며 여러 행동을 수행한다.

 

그 다음 'Training' 버튼을 누르면 신경망을 통한 학습이 수행되는데 에러율이 적을수록 학습이 더 잘 이루어진 것이다. 학습이 끝난 후 'Agent' 버튼을 누르면 학습한 내용에 따라 에이전트가 행동을 수행한다. 'Initialize' 버튼은 에이전트의 학습된 내용과 사용자의 입력을 새로 초기화 한다.

 

 

 

기타 규칙들

 

- 몬스터는 모두 10마리, 회복약은 모두 5개 존재
- 몬스터나 회복약은 하나 없어질 때마다 임의의 장소에서 새로 생성됨
- 가능한 행동에는 전후좌우 이동, 보고 있는 방향으로 공격의 5가지가 가능
- 한 텀에는 하나의 행동만이 가능
- 몬스터는 랜덤하게 움직이다 시야에 플레이어(또는 에이전트)가 있으면 추격하여 공격
- 몬스터를 없애면 10점의 점수를 얻는다
- 회복약을 먹으면 50만큼 체력이 회복
- 몬스터에게 공격을 당하면 10만큼 체력이 감소
- 체력이 0이 되면 종료
- 60번의 텀이 지나면 종료

 

 

 

신경망의 구조

 

신경망의 입력은 현재 상태인 플레이어의 전후좌우 시야 2칸 내의 개체들 24개(자신의 위치 제외)와 플레이어의 방향 4개, 체력 1개 등 모두 29개로 구성된다. 그리고 신경망의 출력은 현재 상태에서 플레이어의 행동인 대기, 전후좌우 이동, 공격 등의 6가지로 구성된다.

 

신경망의 구조는 입력층인 29개의 노드와 각각 50개의 노드로 구성된 2개의 은닉층, 6개의 출력층으로 이루어져 있다. 학습 알고리즘으로는 오류 역전파(error back-propagation) 방식을 사용하였다.

 

 

 

신경망 학습의 특징

 

신경망 기반 학습의 특징은 먼저 동적인 행동 학습이 가능하다는데 있다. 미리 프로그램된 인공지능일 경우에는 정해진 방식으로만 동작할 수 있어 항상 같은 행동방식을 유지한다. 그리고 규칙들이 커질 경우 프로그래밍이 더욱 복잡해지는 단점이 있다. 하지만 학습을 통해 행동을 결정한다면 학습의 내용에 따라 서로 다른 행동을 수행할 수 있어 상황에 따라 적합한 행동방식을 배울 수 있다.

 

또 다른 특징으로 학습의 일반화(generalizaion)를 들 수 있다. 만약 위의 프로그램에서 신경망을 사용하지 않고 사용자의 입력에 따라 각 상태마다 일일이 각 출력을 설정한다면, 상태집합이 4의 29승 정도이므로 적어도 약 100,000,000,000,000,000개 이상의 상태에 대해 출력을 지정해야 한다. 그러나 신경망은 일정한 패턴을 인식하여 일반화시키는 특징이 있기 때문에 훨씬 적은 입력 데이터만으로도 새로운 입력에 대해서도 비슷한 패턴의 적절한 출력을 얻을 수 있다.

 

 

 

결과 분석

 

플레이어가 몬스터를 피해다니기만 하며 되도록 공격을 하지 않는 방식으로 학습을 수행하였을 경우, 100~200개의 입력정도만 학습시키면 매우 효과적으로 사용자와 같은 행동을 보임을 알 수 있다. 그러나 공격위주의 방식으로 학습을 하였을 경우 학습의 에러율이 높아지고 올바른 행동을 보이지 않는다.

 

이는 전자의 경우 몬스터를 회피하는 방식은 상태와 출력 사이에 일정한 패턴이 있어 학습이 용이한 반면, 후자의 경우에는 공격하는 상태와 회피하는 상태가 중복되어 학습이 쉽게 이루어지지 않게 된다. 예를 들어 몬스터가 바로 왼쪽에 있을 때 공격을 할 수도 있고 도망갈 수도 있는데, 몬스터가 왼쪽에 있다는 같은 상태 입력에 두 개의 행동 출력이 있기 때문에 어느 한쪽으로 행동을 결정되지가 않아 신경망의 일반화가 잘 이루지지 않는다.

 

이를 해결하기 위해 플레이어의 방향 4개와 체력 1개의 입력을 추가했지만 나머지 24개의 주변상황 입력의 영향이 커서 그런지 별 효과가 없었다. 이러한 문제에 대한 적절한 방안이 필요할 것이다.

 

 

 

[참고자료]

    - 학습하는 기계신경망, 이상원, Ohm사

List of Articles
제목 글쓴이 날짜 조회 수
신경망의 동작과정을 3차원으로 시각화한 영상 file 깊은바다 2019-12-24 778
아 오랜만에 글 올려봅니다. 신경망 라이브러리 업데이트했습니다. [1] 사지방컴 2019-03-08 382
인공신경망 라이브러리 버전관리 file [2] 사지방컴 2018-08-16 454
직접 C#으로 제작한 인공신경망 라이브러리 [2] 사지방컴 2018-05-04 3107
신경망을 이용한 보급품 찾기 [6] 사지방컴 2017-07-17 786
신경망 퍼셉트론과 XOR 문제 해결 방법 깊은바다 2017-04-29 2876
퍼셉트론에 대한 설명과 C++ 코드 깊은바다 2017-03-23 1047
오류 역전파 알고리즘 개요 및 C++ 코드 file 깊은바다 2017-03-07 2358
파이썬 코드로 뉴럴 네트워크를 만들어보자 깊은바다 2017-02-28 855
뉴럴네트워크 코드 짜는 법 배우기 [1] 깊은바다 2017-02-28 888
인공신경망을 이용한 마우스 제스쳐 인식 file 깊은바다 2016-03-25 668
신경망을 이용한 사용자의 행동 학습 file 깊은바다 2016-03-25 622
신경망을 통한 학습의 구현 file 깊은바다 2016-03-25 1220