이 시리즈는 R로 딥러닝을 구현하고 설명하는 것에 목표를 둔 글입니다. 이전 글에서 벡터와 행렬연산, 브로드캐스트 연산 등에 이어서 2번째 순서입니다. 이전 글들은 이곳에서 찾아 보실 수 있습니다.

소개

이번 글에서는 인공지능 분야에서 가장 기초가 되는 신경망이 무엇인지 알아보고 그것에 요소들과 신경망을 R로 구현해 손글씨 인식 및 분류 모델을 만들어 보겠습니다.

용어소개

인공신경망: 동물의 뇌구조에서 약간의 아이디어를 얻은 머신러닝 알고리즘입니다. 이 알고리즘은 기존의 머신러닝 알고리즘과 달리 데이터 내에 특징이나 규칙에 대해 따로 프로그래밍하지 않고도 데이터를 학습할 수 있는 장점이 있습니다.

신경망: 생물학에서 동물의 뇌구조와 같은 것으로 뉴런과 시냅스의 연결로 이루어진 네트워크 구조입니다. 본래 인공신경망과 구분되는 용어이지만, 이 글에서는 인공신경망이라는 용어 대신에 신경망이라 서술하여 나아가겠습니다.

노드(인공뉴런): 신경망 구조에서 인간의 뉴런 모방한 것으로, 뉴런 네트워크와 유사하게 네트워크 구조를 이루는 것입니다. 노드는 신경망 구조에서 신호를 보내는 역할을 합니다. 노드는 데이터에서 열을 의미합니다. 예를들면, 28x28 크기의 이미지는 784개의 노드를 가진 것입니다.

신호(인공 시냅스): 뉴런 사이에 연결되는 신호와 같이 인공뉴런들 사이를 이어주는 것으로 인간의 뇌의 시냅스와 유사한 구조입니다. 신호에는 노드에 들어오는 입력 신호와 노드에서 나가는 출력 신호가 있습니다. 앞의 층의 노드에서 보낸 출력 신호는 다음층의 입력 신호로서 역할하게 됩니다. 참고로 시냅스는 신경세포 간 접점이 되는 부위를 말하며, 신경세포 간 신호를 전달하는 역할을 하는 것입니다.

활성화: 뉴런이 신호를 내보낼 때 신호를 받아들여서 다음 뉴런으로 출력 신호를 보내게 되는 상태입니다. 즉 뉴런들 사이에 활성화가 된 경우는 뉴런 사이의 연결이 생기고 활성화 되지 않을 경우 뉴런 사이의 연결이 없는 상태가 됩니다.

가중치: 신경망에서 신호들에 곱해지는 값으로 뉴런 사이의 연결 강도(입력 신호의 중요도)를 조절합니다. 가중치의 값은 활성화 상태와 연관되며, 그 값이 클수록 해당 신호가 더 중요한 역할을 합니다.

임계값(편향): 신경망에서 신호들에 더해지는 값으로 뉴런이 얼마나 쉽게 활성화될 수 있는지를 조정하는 값입니다. 즉 임계값의 크기가 활성화의 기준 값이 됩니다. 입력 신호와 가중치의 곱의 값이 임계값을 넘지 못하면 활성화되지 않고 넘으면 활성화 상태가 됩니다.

신경망이란 ?

신경망은 인간의 지능의 모태가 되는 뇌구조에서 아이디어를 얻은 머신러닝(기계학습) 알고리즘입니다. 신경망은 노드와 가중치의 연결로 이루어진 네트워크 구조이며 뇌의 뉴런과 시냅스 구조를 모방합니다. 신경망 알고리즘에는 회귀와 분류 모델과 같은 지도학습과 데이터 클러스터링과 같은 비지도학습 알고리즘이 있습니다. 이 글은 지도학습 분류 모델에 초점을 맞추고 있습니다.

신경망의 네트워크 구조는 3가지층(layer)으로 구성되어 있습니다. 각 층의 이름은 입력층(input layer), 은닉층(hidden layer), 출력층(output layer)으로 층마다 여러개의 인공 뉴런으로 구성되어 있습니다. 각 층에서 보내는 신호(가중치)를 보내 노드와 노드가 이어진 네트워크 구조로 연결됩니다.

예를 들어 입력층과 1개의 은닉층 그리고, 출력층으로 구성된 신경망을 2층 신경망이라 부르는데, 입력층-은닉층, 은닉층-출력층 구조로 가중치로 연결되는 부분을 가지기 때문에 2층 신경망 구조라 부릅니다. 은닉층의 개수가 많아질수록 심층 신경망(deep neural networks)이라 부르며 은닉층의 개수가 n개면 n+1층 신경망이라 부를 수 있습니다. 참고로 은닉층의 경우 사람의 눈에 보이지 않기 때문에 그 이름이 은닉층이라 부릅니다.

이제 각 층의 역할에 대해 알아봅시다. 입력층은 입력 신호를 받아 은닉층으로 하나의 출력 신호를 출력합니다. 입력층에서는 하나의 출력 신호를 출력하기위해 여러가지 입력 신호를 받을 수 있습니다. 입력층에서 보낸 출력 신호는 이후 은닉층의 입력 신호로서 역할하며 은닉층의 노드 개수만큼 출력 신호가 보내집니다.

먼저 입력층의 뉴런에 x1과 x2라는 2개의 뉴런을 가지고 있고 은닉층으로 신호를 보낸다고 해봅시다. 이 때 입력층에서 보낸 출력 신호(은닉층에서는 입력 신호)는 w1, w2라는 가중치와 곱해지고 편향 b의 값과 더해지게 되어 하나의 값이 만들어집니다. 이 값을 활성화 값이라 하는데, 활성화 값이 0보다 큰 경우 출력 신호는 1을 출력합니다. 그러나 활성화 값이 0 보다 작거나 같은 경우 0을 출력하게 됩니다.

그리고, 2층 신경망에서 은닉층의 개수는 1개로 나타납니다. 만약 더 깊은 신경망 구조일 경우 은닉층의 개수가 2개 이상이 되며 은닉층에서 은닉층으로 신호 전달 과정이 생기게 됩니다. 그러나, 2층 신경망에서는 은닉층에서 출력층으로 보내는 신호 전달 과정이 마지막 처리 과정입니다. 이후에는 출력 신호의 값을 분류 모델의 분류할 대상에 대한 확률 값으로 변경하여 분류할 대상 값을 결정하게 됩니다.

은닉층에서도 마찬가지로 활성화 값을 판단하여 출력층으로 출력 신호를 보내게 됩니다. 먼저 은닉층에는 3개의 노드가 출력층에는 2개의 노드가 있다고 가정해 봅시다. 은닉층에서 받은 입력 신호는 입력 층에서 3개의 출력 신호(값)가 입력 신호로 들어옵니다. 이 3개의 입력 신호가 은닉층의 가중치와 곱해지고 편향과 더 해지면서 활성화 값이 계산됩니다. 활성화 값이 0을 넘었는지 아닌지를 판단하여 출력층으로 2개의 출력 신호(값)를 보내게 됩니다.

출력층에서는 은닉층에서 전달받은 신호(값)를 사람이 어떤 분류 대상 값인지 알 수 있도록 볌환하는 작업을 합니다. 이 작업에서는 어떤 모델이냐에 따라 결과 값을 변환하는데 사용하는 함수가 달라지게 됩니다. 분류 모델에서는 분류 대상들에 대한 확률 값을 나타내주는 소프트맥스 함수를 사용합니다.