본문 바로가기
Data Science

딥러닝 인공 신경망과 뉴런의 구조 원리 개념 짚기

by Lora Baek 2023. 4. 4.
300x250

숫자 3이 있다고 하자.

28 x 28의 저해상도 이미지일지라도, 삐뚤빼뚤하게 작성된 글자일지라도, 밝기가 달라지더라도 우리의 뇌(구체적으로는 시각피질, visual cortex)는 숫자 3을 금방 인식해낸다.

하지만, 28x28 입력값을 받아서 0~9 범위의 정수 값 하나를 내는 프로그램을 내라고 한다면? 굉장히 어려워진다.

이 숫자를 판별하는 문제를 기반으로, 신경망이 구체적으로 무엇인지, 수학으로서 신경망이 뭔지. 신경망 구조가 만들어진 토대와, 학습에 대한 의미를 살펴보자.

 

뇌와 신경망의 유사점, '뉴런'

입력층

이 숫자 판별 문제에서 뉴런은 0.0~1.0 사이의 숫자를 하나만 담는다.

이미지의 28x28 픽셀을 입력으로 취하는 신경망에는 총 784개의 뉴런들이 있을 것이고, 뉴런의 숫자는 각 픽셀의 밝기를 나타낼 것이다.(black== 0.0, white == 1.0)

이 숫자들은 입력값, activation이다. 큰 입력값이 주어지면 더 뉴런은 활성화된다.

이 뉴런들이 신경망의 입력층을 구성하게 된다.

 

출력층

출력층은 0~9까지를 나타내는 총 10개의 뉴런들이고, 이 뉴런들은 0과 1 사이의 어떤 값(여기서는 뉴런이 대표하는 숫자와 입력값이 일치하는 정도)을 취한다.

 

은닉층

입력측과 출력증 사이에는 숨겨진 hidden layers가 존재한다.(여기서는 2개의 은닉층을 예시로 들어보자)

이 신경망은 기본적으로 한 층에서의 활성화가 다음 층으로의 활성화를 불러일으킨다.

 

생물의 뉴런이 이런 식으로 닮아있다. 몇몇 뉴런의 활성화가 다른 뉴런을 활성화화도록 한다.

784개 입력 뉴런들을 모두 활성화시킬 때, 이 뉴런들의 특정 패턴이 그 다음 층, 그 다음 층, 마지막으로 출력층이 활성화되는데 가장 빛나는 뉴런이 대표적인 출력값이 된다.

 

 

왜 이런 구조가 '지적으로, intelligently' 행동한다고 부를 수 있는 걸까?

 

우리가 숫자를 인식할 때는 각 부분을 합친다.

9는 o+|, 8은 o+o,4는 <|-와 같은 식이라고 하면,

두 번째 층의 각 뉴런들이 이 각각의 '부분'들에 대응한다고 해보자.

 

동그라미가 위에 있는 9나 8같은 수를 넣으면 특정 뉴런의 활성치가 1에 가까워질 것이다.

이런 식으로는 세 번째 층에서 마지막 층으로 갈 때, 어떤 부분들의 결합이 어떤 숫자를 가리키는지만 보면 될 것이다.

 

어떻게 각 부분을 어떻게 인지할 것인가? 어떤 위치에 있어야 하는가? 에 집중해보자.

o를 인식하는 것도 여러 작은 부분으로 나눠서 인식한다.

그래서 두 번째 층의 뉴런들이 수많은 작은 조각에 대응한다고 생각해보자.

 

9라는 이미지를 입력층에 넣었을 때,

이 그림과 관련된 8~10개 뉴런을 활성화시키고,

위에는 동그라미, 밑에는 수직선과 관련한 뉴런을 활성화시키고,

출력층에서 9를 출력한다.

 

이렇게 층의 구조를 갖게 하는 게 우리의 목표이다.

 

 

어떻게 한 층의 활성화가 다음 층에서의 활성화를 정확하게 이끌어낼까?

바로 픽셀을 테두리로 결합, 테두리를 패턴으로, 패턴을 숫자로 결합하는 매커니즘을 만들어야 한다.

 

두번째 층의 특정 뉴런이 이미지가 외곽선이 있는지 없는지 판단하는 거라고 하자.

첫 번째 뉴런과 두 번째 특정 뉴런을 잇는 걸 가중치라고 하자.

특정 부분을 제외한 다른 모든 픽셀의 가중치를 0에 가깝게 만들면, 특정 영역의 픽셀에만 가중치를 준 겂이다.

우리가 원하는 건 0~1 사이의 값이니까, 이렇게 첫번째 층의 뉴런들과 가중치를 곱해 더한 값이 0~1사이가 되도록 하는 함수에 넣어준다.

 

로지스틱 방정식으로도 알려진 시그모이드 함수를 이용하면 된다. 매우 작은 음수는 0에 가깝게, 큰 양수는 1에 가깝게 된다. 

*그런데 요즘은 시그모이드함수보다 ReLU 함수를 더 많이 쓴다. Rectified Lenear Unit(선형 정류 유닛)이라는 뜻으로, 그냥 0과 a에 max 함수를 취한건데, a는 뉴런의 활성치를 나타내는 함수다. 시그모이드 함수보다 ReLU가 이렇게 아주 깊은 신경망에서 아주 잘 작동한다.

 

만일 가중치의 합이 0이 아니라 10이 넘을 때 뉴런이 활성화되게 하고 싶다면?

함수에 넣기 전에, 가중치 합 수식에 -10을 해 준다. 이 때 이 값을 'bias'라고 한다. 활성화되지 않기 위한 조건.

 

가중치 = 두 번째 레이어가 선택하려면는 뉴런의 픽셀 패턴을 알려줌

bias = 뉴런이 활성화되려면 가중치의 합이 얼마나 더 높아야하는지를 알려줌

 

이 두 번째 층을 기준으로 보면,

16개 뉴런의 숨겨진 레이어는 16개 bias를 가진 784 x 16개의 가중치를 의미한다.

(784x16 + 16x16 + 16x16) == weights

(16+16+10) == biases

두번째~ 세 번째의 연결도 마찬가지다. 이런 식으로 13,000개의 가중치와 bias를 가지고 이 연결 방식은 각각 다르게 작동한다.

 

* 뉴런이 보관한 숫자들은 입력한 이미지에 따라 결정된다. 따라서 뉴런은 이전 층의 뉴런의 출력을 모두 받아서, 0과 1 사이의 수를 만들어내는 함수라고 생각하는 것이 더 정확하겠다.

 

 

주로 수식이 아닌 행렬식으로 아래와 같이 표현한다.

이 행렬식을 기반으로, 컴퓨터는 수많은 수치를 스스로 해결하기 위해, 이 수치들을 찾기 위해 알맞은 환경을 찾는 식으로 '배운다'.

이 개념을 알고 있어야만 네트워크가 예상과 다르게 작동할 때, 구조를 어떻게 바꿔야 개선시킬 수 있을지 생각해볼 수 있게 된다. 무엇이 불가하고 무엇이 가능한지를 시험할 수도 있기 때문에 꼭 한 번 짚고 넘어가야 하는 내용이라 할 수 있겠다.

 

 

 

*3Blue1Brown의 유튜브 영상을 바탕으로 작성된 자료로, 저작권은 원작자에게 있습니다.

댓글