레플리
글 수 13

신경망을 통한 학습의 구현

조회 수 1229 추천 수 0 2016.03.25 02:05:28


npingpong.jpg

 

소스코드 : 첨부파일

 

 

 

신경망의 개요

 

기존의 기호 처리 기반의 기존 인공지능 분야와는 달리, 신경망의 실제 인간의 뇌의 작용을 모델링하여 구현한 정보처리 모델이다. 기존 디지털 컴퓨터는 결정론적인 이진 계산 모델에 기반하여 순차적으로 정보를 처리하는 방식이지만, 신경망은 생물학적인 방식의 모델로서 문제를 잘게 나누고 그것들의 결과를 더하므로서 문제를 해결하는 병렬적이고 아날로그적인 처리 방식이다.

 

신경망 모델은 1946년 워렌 맥클로츠(Warren McCulloch)와 월터 피츠(Walter Pitts)의 논문에서 처음 제안되었으며 기존의 기호처리 인공지능 모델과 같은 시기에 연구가 시작되었다. 초기에 신경망은 인공지능 연구자들로부터 많은 주목을 받았지만 신경망의 한 모델인 '퍼셉트론'의 한계가 지적되면서 인공지능 연구의 주도권이 기호처리 방식으로 넘어가게 되었다. 하지만 그로부터 몇십년후에 '퍼셉트론'의 한계를 극복한 '다층 퍼셉트론'이 발표됨으로써 신경망은 기존의 기호처리 방식과 견줄 만한, 또는 그 한계를 극복할 수 있는 새로운 대안으로 각광을 받고 있다.

 

 

 

생물학적 신경세포의 구조

 

먼저 인간 두뇌의 기본 단위인 신경세포의 구조는 아래와 같다. 인간의 두뇌는 평균 천만개, 즉 10의 11승 개의 신경세포들로 이루어져 있으며, 각 신경세포는 수상돌기들을 통해서 대략 10000개 까지의 다른 신경세포들과 연결되어 있다. 신호는 전기화학적인 과정들을 통해서 전달되는데, 수상돌기와 축색돌기의 연결부인 시냅스가 기본적인 신호전달 지점이다.

 

수상돌기들은 다른 신경세포들로터 온 신호들을 모으고 세포체가 그 신호들을 요약하여 그 결과를 축색돌기를 통해 다른 신경세포로 전달한다. 중요한 점은 그 결과가 시냅스를 통해 넘어갈 수 있는지에 대한 여부인데 이것이 인간의 두뇌가 학습을 하는 원리라 할 수 있다.

 

즉, 수백수천만개의 신경세포들이 서로 연결되어 있고 신경세포들간의 연결상태(시냅스를 통해 다른 신경세포에 정보를 전달하는지의 여부) 자체가 학습되어진 지식이라 할 수 있다. 이러한 연결상태들은 학습에 따라 변할 수 있고, 그러므로 여러 가지 정보들을 계속적으로 습득할 수 있다.

 

실제 신경망 모델을 적용하기 위해서는 현재의 이진 순차처리 방식의 컴퓨터와는 다른 구조의 병렬 신경망 컴퓨터가 필요하다. 하지만 신경망 컴퓨터는 아직 개발되지 않았으며 현재는 기존의 컴퓨터에서 병렬구조의 신경망을 소프트웨어적으로 순차적 구조의 시뮬레이션으로 구현하고 있다. 그렇기 때문에 병렬처리 기반의 빠른 속도가 불가능하여 처리속도가 현저히 저하되고 있다.

 

figure1.jpg

 

 

 

신경망 모델의 구조

 

간단한 하나의 신경망의 구조는 아래 그림과 같다. n개의 X 입력들이 각각 W라는 가중치에 의해 Y라는 뉴로드(인공 신경세포)에 연결되어 있다. 각 입력들은 각각의 가중치들과 곱해져 더해지고, 이 결과가 특정한 조건보다 크다면 출력을 통해 전달된다.

 

여기서 가장 중요한 점은 가중치 W들을 어떻게 설정하는가 이다. 특정한 입력이 들어왔을 때 특정한 출력이 나오도록 하기 위해, 그 조건에 맞도록 적절하게 가중치들을 조정하여야 한다. 이처럼 특정 상황에 맞도록 가중치를 설정하는 것이 바로 정보의 저장, 또는 학습이라 할 수 있다.

 

보통 여러개의 입력들을 반복적으로 신경망에 넣음으로써 점차적으로 가중치들을 원하는 방향으로 조절하게 된다. 문제는 어떻게 가중치들을 설정할 것인가인데, 이와 같은 학습의 방법에 따라 다양한 신경망 모델이 개발되었다.

 

figure2.jpg

 

 

 

신경망의 장.단점

 

신경망의 기존의 기호처리 방식과 비교하여 다음과 같은 장점이 있다.

 

첫째, 신경망은 사람의 뇌에 더욱 근접한 구조를 가지고 있다. 일반적으로 비슷한 구조에서 비슷한 기능이 생겨나리라고 기대할 수 있다. 그러므로 신경망의 특징인 학습능력, 대규모 병렬동작, 지식의 분산표현등은 지금까지 인공지능의 구현에 있어 문제가 되었던 모호함의 처리, 탐색공간의 거대화 등을 해결할 수 있는 가능성을 제시하고 있다.

 

둘째, 신경망은 학습을 위한 적당한 구조를 가지고 있다. 기존의 방식으로도 학습하는 시스템을 만들 수 있지만, 이를 위해 많은 노력이 소요된다. 그러나 신경망의 경우, 사람은 단지 신경망으로 하여금 가르치기를 원하는 것들을 경험하도록 하기만 하면 되므로 학습이 훨씬 용이하다.

 

셋째, 신경망은 매우 단순하다. 신경망을 구성하는 신경세포들의 구조와 기능은 매우 단순하여 복잡한 프로그래밍 과정이 필요가 없다. 그러나 이처럼 단순한 구조로부터 여러 가지 복잡한 작업이 가능하다.

 

 

 

하지만 신경망은 기존의 방식에 비해 다음과 같은 단점들이 존재한다.

 

첫째, 신경망의 내적 지식을 사람이 이해하기 힘들다는 점이다. 기존의 방식은 사람에 의해 프로그래밍되어 되어지므로 이를 분석하면 어떻게 동작할 것인지를 알 수 있지만, 신경망은 학습 후 회상을 통해서만 결과를 알 수가 있다.

 

둘째, 아직까지 신경망의 하드웨어적인 구현이 어렵다는 점이다. 신경망의 지식은 그것의 연결 가중치의 전체적인 상태에 의해 결정된다. 따라서 보다 많은 지식을 가지기 위해서는 보다 많은 연결이 필요하게 된다. 그러나 아직까지의 반도체 기술로는 충분히 많은 연결을 구현하기가 어렵다.

 

셋째, 신경망은 사람이 잘하는 여러 가지 작업에 있어 컴퓨터보다 뛰어난 성능을 발휘하지만, 사람의 뇌가 컴퓨터에 비해 잘하지 못하는 산술 연산과 같은 부분에 있어서는 컴퓨터에 미치지 못한다.실제로 산술적인 연산 기능을 수행하는 신경망을 구성하기는 매우 힘들다.

 

 

 

간단한 응용 - Neural Pingpong

 

가장 단순하며 최초의 신경망 학습방법인 '헵의 규칙'(Hebbian Learning Rule)을 사용하여 간단한 학습을 수행하는 게임을 구현하였다. 1949년 도널드 헵(Donald O. Hebb)에 의해 만들어진 이 방법은 다음과 같은 규칙으로 신경망의 연결가중치를 조절한다.

 

'만일, 어떤 신경세포의 활성이 다른 신경세포가 활성하는데 계속적으로 공헌을 한다면, 두 신경세포간의 연결가중치를 증가시켜 주어야 한다'즉, 어떤 순간에 서로 연결된 두 개의 신경세포가 동시에 활성이 되었다면 그것들 사이의 연결가중치를 증가시켜 주어야 한다는 것이다. 이것은 마치 인간 관계에 있어, 두 사람의 의견이 계속적으로 일치하면, 그들의 친밀도가 커지는 것과 비슷한 것이다.

 

신경망의 입력과 출력은 각각 3개씩이다. 각 입력은 공이 라켓위에 있을 때, 라켓과 같은 위치일 때, 라켓 아래에 있을 때이다. 그에 따른 출력은 라켓을 위로 이동, 라켓 정지, 라켓을 아래로 이동으로 나누어져 있다. 예를들어 입력패턴이 '0 0 1'이면 출력패턴도 '0 0 1'로, 공이 라켓 아래에 있으면 라켓을 아래로 이동하는 식이다.

 

이와같이 입출력의 학습 패턴을 정하고 매 순간마다 공과 라켓의 위치를 조사하여 패턴을 결정하고 학습을 시키게 된다. 그리고 학습 후 현재 입력에 맞는 출력을 신경망에서 얻은후 이에 따라 라켓을 이동한다. 처음에는 컴퓨터의 라켓이 제자리에 가만히 있다가 점차 학습이 진행될수록 라켓이 공의 위치에 따라 이동하게 된다.

 

 

 

[참고자료]

    - 학습하는 기계신경망, 이상원, Ohm사
    - Game Programming Gems, Andre LaMothe, 정보문화사, p.429 ~ p.455

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