게임 디자인 레벨업 #7 엑셀로 쉽게 이해하는 딥러닝 – AND, OR 논리회로 학습

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

이중 ‘엑셀로 쉽게 이해하는 딥러닝’ 시리즈에서는 딥러닝의 핵심인 신경망의 기초에 대한 쉬운 이해를 위해 엑셀 프로그램을 통해 직접 연습해볼 수 있도록 도움드리고 있는데요.

지난 시간에는 Single Neuron으로 학습할 때 입력만으로는 학습이 잘 되지 않을 수 있음을 확인했고, 이를 보완하기 위해 Bias를 추가해서 학습이 정상적으로 되는 것을 확인했습니다. 그리고 이렇게 학습시킨 Single Neuron이 간단한 논리회로인 NOT 게이트의 역할을 할 수 있다는 것을 말씀드렸는데요.

이번 시간에는 두 입력의 참, 거짓을 비교해서 결과값을 얻는 AND, OR 논리회로에 대해 살펴보겠습니다.


지금까지 살펴본 Single Neuron은 입력이 1개, 출력이 1개인 단순한 형태였습니다. Bias가 추가되는 경우도 있었지만 Bias는 입력이 1로 고정되어 변하지 않기 때문에 입력으로 분류하지 않습니다.

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

이번 시간에는 NOT 논리회로에 이어 전자회로와 현대 컴퓨터의 근간이 되는 AND, OR 논리회로를 만드는 Single Neuron에 대해서 알아보겠습니다. 중학교 수학에도 나오는 이 개념은 두 입력의 참, 거짓을 비교해서 결과값을 얻습니다. 즉 2개의 입력이 필요합니다.

[그림 2] 입력이 2개가 되었습니다. 신경망에서 대부분의 Neuron은 2개 이상의 입력을 받습니다.

본론으로 들어가기 전에 AND, OR의 진리표를 확인해보겠습니다. 논리값은 참(True), 거짓(False)의 두 종류가 존재합니다. 컴퓨터 과학에서는 참을 1로, 거짓을 0으로 표현합니다. AND는 두 입력이 모두 참이어야 출력이 참이 되고, OR는 두 입력 중 하나라도 참이면 출력이 참이 됩니다.

[그림 3] AND, OR 진리표입니다. 왼쪽과 오른쪽은 동일한 값을 다른 표현으로 바꿔 쓴 것입니다.

이 연재글에서 많이 다뤄서 이제는 익숙한 도표인 Single Neuron으로 AND 진리표, OR 진리표의 입력, 출력을 나타내면 아래 그림과 같습니다. 입력값-출력값은 AND, OR에 대해 각각 네 쌍입니다.

[그림 4] AND, OR의 입력값, 출력값을 Single Neuron에서 살펴본 모습입니다.

혹시 지난 연재글에서 다뤘던 NOT의 입력값-출력값은 몇 쌍인지 기억하시나요? 입력값=1일 때 출력값=0, 입력값=0일 때 출력값=1로 총 두 쌍입니다.

그런데 지난 번에 제공되었던 엑셀 파일에서는 입력값=1일 때 0을 계산하고, 입력값=0일 때 1을 계산하기만 했습니다. 그럼 여기서는 위의 그림에서 볼 수 있는 것처럼 각각 다른 8개의 계산을 해봐야 하는 걸까요?

결론부터 말씀드리면 아닙니다. 이번에는 AND 회로를 위한 입력값-출력값 네 쌍을 한꺼번에 계산하고, OR 회로를 위한 입력값-출력값 네 쌍을 한꺼번에 계산할 겁니다.

지금까지는 입력이 고정된 신경망의 학습을 알아봤다면, 이번에는 입력이 달라지는 신경망의 학습을 알아보는 것입니다.

[그림 5] 딥러닝은 많은 데이터를 필요로 합니다.
따라서 학습 과정, 테스트 과정에서 다양한 입력을 받게 되고,
그에 대해 안정적인 출력을 낼 수 있어야 학습이 잘 되었다고 할 수 있습니다. (관련 링크)

지난 번과 계산 과정은 동일합니다. 활성화함수로는 Sigmoid 함수를 사용하고, 각 입력에 가중치를 곱해준 뒤 모두 더해주고 활성화함수를 취해준 값이 출력값이 되는 것도 동일합니다.

[그림 6] Bias를 추가할 때처럼 입력이 2개여도 같은 방식으로 추가해주면 됩니다.
입력이 3개, 4개 등으로 늘어나도 마찬가지입니다.

그럼 이제까지 살펴본 내용을 엑셀에서 확인해보도록 하겠습니다. 입력이 2개인데다가 입력값-출력값의 쌍이 여러 개이기 때문에, 앞의 예제들보다 긴 학습과정이 필요합니다. 따라서 파일 크기도 커졌습니다.

[그림 7] 입력값이 많아진만큼 긴 학습 과정이 필요합니다.
안정적인 결과를 얻기 위해 처음 두 개의 파일보다
시뮬레이션 반복 횟수가 크게 늘어났습니다. (200회 → 12,000회)

첨부된 엑셀 파일에는 방금 살펴본 논리회로가 Single Neuron으로 계산된 결과가 있습니다. 1만 2천 번 정도 계산하면 정확도가 100%에 수렴합니다(주의: 가중치 초기값에 따라 정확도가 100%가 되지 않을 수도 있습니다. 그럴 때는 빈 칸에 Delete 키를 눌러서 시뮬레이션을 다시 실행해주셔야 합니다).

[그림 8] 파란색 글씨로 쓰인 값을 바꿔보며 시뮬레이션을 다시 돌려볼 수 있습니다.
시뮬레이션 반복 횟수가 1만 2천 회이니만큼 PC 사양에 따라 계산에 시간이 많이 소요될 수 있습니다.

입력값인 X1, X2를 살펴보면 각 셀에 =IF(RAND()<0.5, 0, 1) 수식이 쓰여있는 것을 확인할 수 있습니다. 0에서 1사이의 랜덤값이 0.5보다 작을 때는 0, 그렇지 않을 때는 1이 되기 때문에 랜덤하게 변하는 입력값을 간단히 만들 수 있습니다.

[그림 9] 엑셀의 IF 함수는 첫 번째 인자인 논리식을 검사해서
참이면 두 번째 값, 거짓이면 세 번째 값을 반환합니다.

현재 엑셀 파일의 진리표를 살펴보면 입력값 2개 중 하나라도 1이 있을 경우 결과값으로 1이 출력되는 OR 논리회로를 따르고 있는 것을 확인할 수 있습니다. 이것을 AND 논리회로로 바꿔보겠습니다.

[그림 10] 2번째, 3번째 결과값을 1에서 0으로 바꾸면 OR에서 AND 진리표로 바뀝니다.

결과를 살펴보면 역시 학습이 잘되는 것을 확인할 수 있습니다. 입력값 네 쌍 중 어떤 것을 넣어도 이 Single Neuron은 올바른 출력값을 반환합니다. Error의 절대값은 대략 1만 번째 실행 부근에서 최소 에러값(0.01)보다 작아지고, 정확도는 100% 에 가까워집니다.

[그림 11] AND 논리회로에서도 학습이 잘 됩니다.

시뮬레이션의 마지막 행 부근으로 이동해보겠습니다. Error는 0에 가까워지고, 각 입력값에 맞는 결과값이 잘 나오고 있습니다.

Error와 SumError 열에서 자주 보이는 E의 정체는 과학적 기수법(Scientific Notation)이라는 것으로, 아주 크거나 아주 작은 수를 간단히 나타내기 위해 유효 숫자 뒤에 E를 쓰고 그 뒤에 10의 거듭제곱수를 표시하는 것입니다. 물론 여기에서는 아주 작은 수가 되겠습니다. 예를 들어 11,998 행의 Error인 2.2E-05는 2.2×10-5=0.000022가 됩니다.

[그림 12] 시뮬레이션을 계속할수록 Error와 SumError에는 점점 작은 값이 출력됩니다.

입력값 (X1, X2)에 대해서 2×2×2×2=16가지의 출력을 테스트해볼 수 있습니다. 즉 (0, 0, 0, 0)부터 (1, 1, 1, 1)까지 진리표의 파란색 글씨를 바꿔볼 수 있는 것입니다. 대부분의 경우 학습이 잘되지만, 딱 두 가지 경우에서 학습이 잘되지 않는 것을 확인할 수 있습니다.

엑셀에서 숫자를 바꿔 보면 금방 찾을 수 있습니다. 바로 (0, 1, 1, 0) 또는 (1, 0, 0, 1)을 Y 값으로 넣었을 때입니다.

[그림 13] Single Neuron은 XOR의 결과값을 제대로 추론할 수 없습니다.
XOR의 값을 반전시킨 XNOR도 마찬가지로 계산할 수 없습니다.

이것은 XOR 문제라고 불리는 고전적인 Single Neuron의 한계로, Single Neuron은 XOR 문제를 풀 수 없고, 따라서 더 복잡한 문제도 풀 수 없다는 지적에 의해 신경망은 한동안 암흑기를 맞았습니다. (관련 링크)

[그림 14] MIT AI Lab.의 Marvin Minsky와 Seymour Papert는
1969년 발표한 『퍼셉트론』을 통해 Single Neuron, 나아가 Single Layer Network에서
XOR 문제 등 비교적 간단한 문제를 풀 수 없다는 것을 증명했고,
신경망 연구는 한동안 암흑기를 맞았습니다. (관련 링크)

이 사건을 계기로 신경망 연구는 오랜 시간 동안 주류에서 밀려났다가 1980년대 후반에 다층 신경망(multi-layer neural nets)을 통해 『퍼셉트론(Perceptrons)』이 제기했던 문제들을 풀 수 있다는 것이 증명되면서 다시 인기를 끌기 시작했습니다.

그리고 현재는 딥러닝을 통해 바둑, 이미지 인식 문제, 자동 번역 등 전통적인 문제해결법으로 풀 수 없던 문제를 풀어내고 있어서 현재 세계적으로 가장 주목 받는 문제 해결 기법이 되었습니다.

지금까지 3회의 연재글을 통해 딥러닝의 핵심인 신경망의 기초에 대해 알아보았습니다. 이 주제를 처음 접하는 분들의 부담감을 줄이기 위해 많은 분들에게 익숙한 프로그램인 엑셀을 통해서 접근해보았습니다. 앞으로도 기회가 된다면 다른 주제에 대해서 더 알기 쉽고 분명한 글을 써서 공유하고 싶습니다. 지금까지 읽어주셔서 감사합니다.

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

엑셀 파일 다운 받기 ◀


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

# 1 Single Neuron의 학습

# 2 Bias의 학습

# 3 AND, OR 논리회로 학습