요즈음 소위 딥러닝(deep learning) 분야가 주목을 받고 있는데 여기에는 수학적인 신경망(neural network)이 사용된다. 신경망은 뭔가 복잡한 것일거라고 오해하기 쉬운데 사실 그 구조는 상당히 단순하다. 여기에서는 신경망을 구성하는 가장 기본적인 단위인 뉴런(neuron)에 대해서 알아보도록 하겠다.


 뉴런은 입력 신호를 받아서 새로운 신호를 발생시키는 신경망의 기본적인 처리 단위이다. 다음 [그림 1]에 개념도를 도시하였다.


[그림 1] 뉴런의 개념도


이 그림에서 보면 원으로 도시된 뉴런은 입력들(이것은 또 다른 뉴런들의 출력들이다)을 받아서 그것을 이용한 어떤 계산을 수행한 후에 출력으로 내 보낸다. 이 출력이 다시 또 다른 뉴런의 입력으로 사용되는 것이다. 이러한 기본적인 수많은 뉴런들이 연결되어 신경망을 구성한다. 여기에서 입력과 출력은 어떤 숫자 값인데 뉴런은 이것을 그대로 받아들이지 않고 가중치(weight)라는 수치를 곱해서 받아들인다.


 이것을 수식으로 표현해 보자. (고등학생 정도의 수학 지식이 있다면 이해할 정도로 간단하다.) 뉴런으로의 입력을 x1, x2, xn 이라고 표기하고 가중치를 w1, w2, …, wn 이라고 표기한다면 뉴런으로의 총 입력 v는 다음과 같이 (입력x가중치) 들의 합으로 표현된다.



이 v를 바이어스(bias) b와 더한 후 활성화 함수(activation function)에 인가시켜 얻은 출력 값이 뉴런의 출력 y가 된다. 활성화 함수를 φ(⋅)로 표기한다면 다음과 같이 뉴런의 출력이 구해진다.



활성화 함수는 여러 종류가 있지만 다음과 같은 시그모이드(sigmoid) 함수가 주로 사용된다.



이 함수는 다음 그림에서 보듯이 양 끝단이 0과 1로 수렴하는 아주 간단한 형태를 갖는 비선형 함수이다. 이 함수의 출력이 0에 가까우면 뉴런은 비활성화되었다고 하며 1에 가까울수록 활성화 되었다고 한다. 여기서 σ는 기울기값으로서 이 값이 클수록 수렴하는 속도가 빨라진다. (즉 원점에서의 기울기가 커진다.)


[그림 2] 시그모이드 함수(실선이 σ=0, 빨간 점선이 σ=2, 녹색 점선이 σ=0.5인 경우)


그리고  바이이스(bias)는 시그모이드 함수를 x축에 대해서 이동시키는 역할을 한다.


[그림 3] (a) b=5 인 경우, (b) b=-5 인 경우


이 바이어스는 어떤 수준의 입력 값에서 뉴런이 활성화될지를 결정하는 인자이다. 보통은 계산식의 편의상 입력이 항상 1인 신호선의 가중치로 간주된다.


[그림 4] 바이어스를 n+1번째 가중치로 간주


즉, n+1번 째 입력을 항상 1로 놓고 그 가중치를 바이어스로 간주하는 것이다. 따라서 [그림 1]과 [그림 4]는 완전히 동일한 뉴런이다. 이제 다음과 같이 가중치 벡터와 입력 벡터를 정의하자.



그러면 뉴런의 출력 y는 다음과 같이 구할 수 있다.



 이 내용을 바탕으로 신경망 중에서 비교적 간단한 구조를 가지는 전방향 신경망(feedforward neural network)이 기본적인 뉴런들로부터 어떻게 구성되는지 다음 포스트에서 알아보도록 하자.


Posted by 살레시오