게임 디자인 레벨업 #6 엑셀로 쉽게 이해하는 딥러닝 – Bias의 학습

보다 새롭고 창의적인 게임 디자인을 발굴하기 위해, 엔씨소프트 개발전략실이 직접 연구한 최신 게임 트렌드와 사례 연구를 소개하는 ‘게임 디자인 레벨업’!

이중 ‘엑셀로 쉽게 이해하는 딥러닝’ 시리즈에서는 딥러닝의 핵심인 신경망의 기초에 대한 쉬운 이해를 위해 엑셀 프로그램을 통해 직접 연습해볼 수 있도록 도움드리고 있는데요. 지난 시간에는 신경망이란 무엇인가에 대해서 간단히 알아보고, 신경망의 가장 기초가 되는 Single Neuron의 학습이 사칙연산으로 이루어져 있다는 것을 확인했습니다.

이번 시간에는 Single Neuron에 단순히 입력, 가중치, 활성화함수, 출력만을 사용했을 때 모든 입력에 대해서 모든 출력을 얻을 수 없었던 점을 되짚어보고(입력으로 0을 넣는 경우), 이 문제를 해결하기 위한 Bias라는 추가 구성요소에 대해서 살펴보겠습니다.


지난 글에서 제공되었던 엑셀 파일에서는 파란색 숫자를 바꾸면 시뮬레이션 결과가 바뀌는 것을 확인할 수 있었습니다. 이들 중 입력을 0으로 넣으면 시뮬레이션이 정상적으로 되지 않는 것을 볼 수 있습니다.

[그림 1] 입력을 0으로 바꾸면, Error 가 더 이상 줄어들지 않습니다.
좌측의 W값도 줄어들지 않습니다.

Single Neuron의 학습은 가중치(W)를 변화시켜 Error를 0에 가깝게 하고, 기대출력이 실제출력에 가까워지도록 하는 것이었습니다.

[그림 2] 지금까지 알아본 Single Neuron은 이런 모양입니다.

그런데 가중치를 변화시키는 값에 입력이 곱해지고 있습니다. 입력이 0인 경우라면, 가중치를 변화시키는 값은 α*X*Error = α*0*Error = 0이 되어 가중치는 변하지 않을 것입니다.

[그림 3] 가중치의 변화량은 입력에 비례합니다. 입력이 0이면 가중치의 변화량도 0입니다.

이런 경우를 방지하기 위해서 Bias 입력이라는 것을 더해줍니다. Bias는 편향이라는 뜻으로 여기서는 입력값에 편향을 둔 가상의 입력을 의미합니다.

[그림 4] 효과적인 계산을 위해서 Single Neuron에 Bias 입력을 추가합니다.

보통 Bias 입력값으로 1을 주게 됩니다. 기존의 입력이 변할 수 있는 값이지만, Bias 입력값은 고정된 채 변하지 않습니다.

[그림 5] 기존의 입력이 변할 수 있는 값이라면, Bias는 늘 하나의 값(편향된 값)을 가집니다.

Bias 입력은 고정되어 있지만, 가중치는 변할 수 있습니다. 가중치를 변화시켜서 실제출력을 기대출력에 가깝도록 하는 것이 신경망의 학습 목적입니다. 이 부분은 Bias에서도 동일합니다.

기존 가중치처럼 Bias 가중치에도 임의의 값을 넣어서 초기화합니다.

[그림 6] 랜덤한 가중치를 주기 위해서, 엑셀에서는 셀의 수식에 =RAND()*2-1을 입력하면 됩니다.

그럼 이제 계산을 해보겠습니다. 보통 2개 이상의 입력이 하나의 Neuron에 들어가게 되면 각 뉴런의 입력 * 가중치값을 모두 더해준 다음에 활성화함수에 넣어줍니다. 수학 기호로는 시그마(∑)입니다.

[그림 7] 엑셀로 직접 계산해보세요.
=1/(1+EXP(-(0*0.15345+1*-0.54972)))를 입력하시면 됩니다.

계산하면 실제 출력은 반올림해서 0.36593으로 나옵니다.

[그림 8] 실제출력이 나온 다음에는 무엇을 해야 할까요?
제일 먼저 기대출력과 실제출력의 차이인 Error를 계산해야 합니다.

기대출력과 실제출력의 차이인 Error를 계산하면 0 – 0.36593 = -0.36593이 나옵니다. 이 Error를 줄이는 것이 학습의 목적입니다. Error를 줄인다는 것은, 0에 가까워지도록 한다는 뜻입니다.

[그림 9] 기대출력과 실제출력의 차이인 Error를
0에 가까워지도록 줄이는 것이 학습의 목적입니다.

지난 번 학습과 마찬가지로 이번에도 Batch Learning을 사용합니다.

가중치에 학습계수(α), 입력값, Error를 곱한 값을 더해주는 것입니다. 그리고 새로운 가중치로 다시 출력값을 계산하고, 거기서 나온 Error로 다시 가중치를 계산하고, 이 과정을 반복해줍니다. 여기서 가중치에 더해줄 때의 입력값은 각 입력값을 그대로 사용하면 됩니다.

[그림 10] W1은 기존 가중치, Wb는 Bias 가중치입니다.
W1에서는 입력 0을, Wb에서는 입력 1을 사용했습니다.

계산 결과 기존 가중치는 변하지 않지만 Bias 가중치는 -0.54972에서 -0.64120으로 변했습니다. 바뀐 가중치로 출력을 다시 계산해보면, 새로운 출력은 0.34498이 됩니다. Bias를 추가하기 전과는 다르게 Error가 조금 줄어든 것을 확인할 수 있습니다.

[그림 11] Error가 줄어들었다는 말은 0에 가까워진다는 뜻입니다.
즉 Error의 절대값이 작아진다는 뜻입니다.

계산을 몇 번 반복하면 실제출력이 점점 기대출력에 가까워집니다. 지난 시간에 살펴봤던 Single Neuron과 동일하게 동작하지만, 차이는 기존 가중치 대신 새로 추가된 Bias 가중치가 변화한다는 점입니다.

[그림 12] 기대출력과 실제출력의 Error는 0에 가까워집니다.

그럼 이제까지 살펴본 내용을 엑셀에서 확인해보도록 하겠습니다. 첨부된 엑셀 파일에는 방금 살펴본 계산을 200번 반복한 시뮬레이션이 있습니다.

[그림 13] 하늘색으로 표시된 숫자를 바꾸면 시뮬레이션 결과도 같이 바뀝니다.

지난 번과 비교할 때 Bias, WB 열이 추가된 것을 확인할 수 있습니다. Bias는 Bias 입력, WB는 Bias 가중치를 뜻합니다.

[그림 14] Bias 입력값은 계속 1로 유지됩니다.

이제 파란색 숫자인 입력을 0으로 바꿔봅니다. 기존 가중치인 W1은 변하지 않지만, Bias 가중치인 WB가 변하기 때문에 결과적으로 Error가 줄어들고 학습이 잘되는 것을 확인할 수 있습니다.

[그림 15] 입력을 0으로 설정해도 Bias 가중치가 변하기 때문에 학습이 잘 됩니다.

그럼 이제 이것으로 무엇을 할 수 있을까요? 가장 간단하게는 논리회로의 일종인 NOT 게이트를 만들 수 있습니다.

논리회로는 불(Bool) 대수를 물리적인 회로에 구현한 것으로, 여러 개가 모여서 컴퓨터, 라디오 등의 전자기기가 만들어집니다. NOT 게이트는 1(True)을 입력으로 넣으면 0(False)을 출력으로 내보내고, 0(False)을 입력으로 넣으면 1(True)을 출력으로 내보내는 가장 간단한 논리회로입니다.

[그림 16] NOT 게이트. 입력을 반전시키는 기능을 합니다. (관련 링크)

논리회로에는 NOT 게이트 말고도 많은 종류가 있습니다. 이들 중 대부분은 2개 이상의 입력을 받게 되는데, 대표적인 예로 AND 게이트, OR 게이트가 있습니다. 다음 시간에는 이 2개의 논리 게이트를 엑셀 신경망으로 구현하는 방법에 대해서 알아보겠습니다.

아래 첨부 파일로 엑셀 시뮬레이션 시트가 제공됩니다. 파란색 값을 바꿔 보시고 변화하는 그래프의 모습을 직접 확인해보세요.

엑셀 파일 다운 받기


엑셀로 쉽게 이해하는 딥러닝 시리즈

# 1 Single Neuron의 학습

# 2 Bias의 학습

# 3 AND, OR 논리회로 학습