1. 개요
머신러닝의 모델로 많이 사용되는 신경망은 꽤 오래된 분야이고, 최근 들어 딥러닝이 주목받으면서 신경망의 중요성이 굉장히 커졌습니다. 머신러닝과 신경망의 관계는 다음과 같습니다. ‘모델’이 ‘신경망’으로, ‘머신러닝’이 ‘학습 규칙’으로 바뀌었습니다. 신경망에서는 학습 데이터에서 모델(신경망)을 찾아내느 기법을 ‘학습 규칙’이라고 부릅니다.
2. 신경망의 노드
컴퓨터는 정보를 메모리의 특정 위치에 저장하지만, 뇌는 신경세포의 연결 관계를 바꾸는 방식으로 저장합니다. 뇌는 이런 신경세포들이 연결된 거대 네트워크이며, 신경세포들의 연결 상태가 바로 뇌에 저장된 정보를 나타냅니다.
뇌 | 신경망 |
신경세포 | 노드 |
신경세포들의 연결 | 연결 가중치 |
신경망은 뇌의 작동 원리 중에서 가장 중요한 신경세포들의 연결 관계를 노드들의 연결 가중치로 흉내 냅니다.
그림에서 원은 노드를 의미하고 화살표는 신호의 흐름을 나타냅니다. x1, x2, x3은 외부에서 들어오는 신호를, w1, w2, w3은 해당 신호의 연결 가중치를 의미합니다. b는 바이어스를 나타냅니다. 바이어스는 가중치와 함께 신경망이 정보를 저장하는 데 관여하는 변수입니다. 즉 신경망에서 정보는 가중치와 바이어스의 형태로 바뀌어 저장됩니다.
외부에서 노드로 들어오는 신호는 해당 가중치가 곱해져 노드에 전달됩니다. 노드에서는 이 값들을 모두 더하는데, 이 합계를 가중합 weighted sum 이라고 합니다. 노드의 가중합이 계산되고 나면, 이 가중합을 활성함수 activation function 에 입력해 얻은 값을 외부로 출력합니다. 이 활성함수에 의해 노드의 동작 특성이 결정됩니다.
신경망의 활성함수에는 여러 종류가 있는데, 각각의 특징이 조금씩 다릅니다. 자세한 내용은 뒤에서 설명하겠습니다.
지금까지 설명한 노드의 동작 과정을 간단히 요약해보겠습니다. 신경망의 노드는 내부에서 다음과 같은 과정을 거쳐 신호를 출력합니다.
- 입력 신호의 가중합을 구한다.
- 활성함수에 가중합을 입력해 얻은 값을 외부로 출력한다.
3. 신경망의 계층 구조
노드들을 어떻게 연결하느냐에 따라 다양한 형태의 신경망을 만들 수 있습니다. 이 중에서 가장 많이 쓰이는 형태는 다음과 같이 노드들을 계층적으로 배치해 만든 형태의 신경망입니다.
- Input: 입력층은 들어온 신호를 그대로 다음 노드에 전달하는 창구 역할을 한다. 즉 입력층 노드에서는 가중합이나 활성함수 계산을 하지 않는다.
- Output: 출력층에서 노드들의 출력이 신경망의 최종 결과값이다.
- Hidden: 신경망의 외부에서 은닉층의 노드들에 직접 접근할 수 없다.
입력층-출력층으로만 구성된 신경망을 ‘단층 신경망’이라고 합니다. 단층 신경망에 은닉층이 추가된 신경망은 ‘다층 신경망’이라고 부릅니다. 즉 다층 신경망은 입력층-은닉층(들)-출력층으로 구성됩니다. 다층 신경망 중에서 은닉층이 2개 이상인 신경망을 특별히 ‘심층 신경망’이라고 부릅니다.
계층 구조로 된 신경망에서 신호는 입력층으로 들어가 은닉층을 거쳐 출력층으로 빠져 나옵니다. 이 과정에서 신호는 층 단위로 이동합니다. 즉 같은 층의 노드들은 동시에 신호를 입력받고, 처리한 결과를 다음 층으로 내보내는 작업도 동시에 처리합니다.
4. 신경망의 지도학습
큰 틀에서 신경망의 지도학습은 다음과 같은 순서로 진행됩니다.
- 신경망의 가중치를 적당한 값으로 초기화합니다.
- 지도학습의 학습 데이터 형태인 { 입력, 정답 }에서 ‘입력’을 신경망에 입력해 출력값을 얻습니다. 이 출력값과 해당 입력의 ‘정답’을 비교해 오차를 계산합니다.
- 이 오차가 줄어들도록 신경망의 가중치를 조절합니다.
- 전체 학습 데이터에 관해 단계 2~3을 반복합니다.
5. 단층 신경망의 학습: 델타 규칙
신경망은 정보를 가중치의 형태로 바꿔 보관합니다. 주어진 정보에 맞춰 가중치를 체계적으로 변경하는 방법을 신경망에서는 ‘학습 규칙’이라고 부릅니다.
단층 신경망의 대표적인 학습 규칙인 델타 규칙에 관해 알아보겠습니다.
“어떤 입력 노드가 출력 노드의 오차에 기여했다면, 두 노드의 연결 가중치는 해당 입력 노드의 출력(x)과 출력 노드의 오차(e)에 비례해 조절한다.”
델타 규칙으로 단층 신경망을 학습시키는 과정을 정리해보겠습니다.
- 신경망의 가중치를 적당한 값으로 초기화한다.
- 학습 데이터 {입력, 정답}에서 입력을 신경망에 입력해 출력값을 얻는다. 이 출력값과 해당 입력의 정답을 비교해 오차를 계산한다.
- 델타 규칙에 따라 가중치의 갱신값을 계산한다.
- 신경망의 가중치를 조절한다.
- 전체 학습 데이터에 관해 단계 2~4를 반복한다.
- 신경망의 출력 오차가 충분히 줄어들 때까지 단계 2~5를 반복한다.
단계 6은 전체 학습 데이터를 반복해서 재학습시키라는 의미입니다. 단계 5를 마치면 모든 학습 데이터를 한번씩은 다 학습하게 됩니다. 그런데 왜 전체 학습 데이터를 또 학습시키는 걸까요? 그 이유는 델타 규칙은 정답을 한번에 바로 찾아내는 게 아니라, 과정을 반복하면서 정답을 찾아가는 알고리즘이기 때문입니다.
6. 델타 규칙의 일반 형태
임의의 활성함수에 대한 델타 규칙은 다음과 같습니다.
그럼 활성함수로 많이 사용되는 시그모이드 함수를 알아보겠습니다. 비용 함수 (cost function)의 값이 최소가 되는 지점을 찾는 과정에서 활성화 함수는 미분되어야 한다. 그러나 계단 함수는 x=0에서 연속이 아니므로 미분이 불가능합니다. 여기서 각 노드의 활성화 함수로 계단 함수 대신 시그모이드(sigmoid) 함수가 사용될 수 있습니다. 시그모이드 함수는 출력이 0~1 사이로 제한됩니다.
7. SGD, 배치, 미니 배치
SGD(Stochastic Gradient Descent, 경사 하강법)는 하나의 학습 데이터마다 오차를 계산해 신경망의 가중치를 바로 조절합니다. 따라서 한 개의 학습 데이터마다 매번 가중치를 갱신하기 때문에 신경망의 성능이 들쑥날쑥 변하면서 학습됩니다.
반면 배치(batch) 방식은 모든 학습 데이터의 오차에 관해 가중치 갱신값을 계산한 다음에 이들의 평균값으로 가중치를 한 번 갱신하는 기법입니다.
미니 배치(mini batch) 방식은 SGD와 배치 방식을 섞어 놓은 개념입니다. 전체 학습 데이터에서 일부 데이터만 골라 배치 방식으로 학습시킵니다. 즉 일부 학습 데이터의 가중치 갱신값을 계산한 다음, 이 값들의 평균으로 가중치를 갱신하는 방식입니다.
미니 배치 방식의 데이터의 개수를 적절히 정하면 SGD의 속도와 배치 방식의 안정성이라는 장점을 동시에 얻을 수 있어 대량의 학습 데이터가 사용되는 딥러닝에서 많이 사용됩니다.
8. 단층 신경망의 한계
아래 그림에서 주목할 점은 ‘0’의 영역과 ‘1’의 영역을 직선으로 분리할 수 없는 경우가 있다는 것입니다. 이러한 경우 복잡한 곡선으로만 두 영역을 나눌 수 있습니다. 이러한 문제를 선형 분리 불가능(linearly inseparable) 문제라고 합니다.
단층 신경망은 특정 유형의 문제에만 적용할 수 있습니다. 대부분의 실제 문제는 이런 유형이 아니어서 단층 신경망으로 해결 할 수 있는 문제는 매우 제한적입니다. 다층 신경망은 이러한 단층 신경망의 근본적인 한계를 극복하기 위해 개발되었습니다.