728x90
반응형

 

[Deep Learning] 1. 단층 퍼셉트론과 다층 퍼셉트론

 

 

 

 

단층 퍼셉트론과 다층 퍼셉트론에서 매개변수로 가중치와 편향 값을 사용자가 임의로 조정 하였는데, 신경망 개념을 도입한다면 이를 자동으로 학습하여 적절한 값을 대입 할 수 있다. 또한 신경망에는 입력 데이터가 무엇인지 식별하는 처리 과정도 포함된다.

 

 

 

1. 신경망의 개념

 

신경망에는 입력층, 은닉층, 출력층 으로 나누어진다. 은닉층의 뉴런은 사람의 눈에 보이지 않는다. 또한 이러한 신경망을 2층 신경망이라고 한다. (가중치를 갖는 층은 2개 뿐이기 때문에)

 

 

(그림 1) 신경망 구조

 

 

 

2. 퍼셉트론 복습

 

신경망의 신호 전달 방법을 보기전에 퍼셉트론을 복습해 보자면 퍼셉트론은 다음과 같이 구성되어 있었다. x1과 x2의 두 신호를 입력 받아 y를 출력하는 퍼셉트론이다.

 

(그림 2) 퍼셉트론의 구조

 

 

이 퍼셉트론을 수식으로 나타내면 다음과 같다.

 

        (1)

 

b는 편향을 나타내는 매개변수로, 뉴런이 얼마나 쉽게 활성화 되느냐를 제어한다. w1, w2는 각 신호의 가중치를 나타내는 매개변수로 각 신호의 영향력을 제어하게 된다.

 

위와 같은 퍼셉트론 구조에 편향을 명시하면 아래와 같다. 가중치가 b이고 입력이 1인 뉴런이 추가되었다. 이 퍼셉트론의 동작은 x1, x2, 1 이라는 3개의 신호가 뉴런에 입력되어, 각 신호에 가중치를 곱한 후, 다음 뉴런에 전달된다. 다음 뉴런에서는 이들 신호의 값을 더하여, 그 합이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력하게 된다. 참고로, 편향의 입력 신호는 항상 1이기 때문에 그림에서는 해당 뉴런을 회색으로 채워 다른 뉴런과 구별했다.

 

(그림 3) 편향이 명시된 퍼셉트론 구조

 

 

 

이와 같은 구조를 식으로 표현하면 다음과 같다.

 

 

                (2)

 

 

 

입력신호의 총합이 h(x) 라는 함수를 거쳐 변환되어, 그 변환된 값이 y의 출력이 됨을 보여준다. 그리고 h(x) 함수는 입력이 0을 넘으면 1을 돌려주고 그렇지 않으면 0을 돌려주게 된다.

 

 

 

 

3. 활성화 함수

 

입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수(Activation Function)이라고 한다. 이는 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 한다. 식 (2) 첫번째 줄은 가중치가 곱해진 입력 신호의 총 합을 계산하고, 그 합을 활성화 함수에 입력해 결과를 내는 2단계로 처리된다. 그래서 이 식은 다음과 같이 나눌 수 있다.

 

            (3)

 

이는 가중치가 딸린 입력 신호와 편향의 총 합을 계산한 것을 a 라고 하고, 이 a를 함수 h에 넣어 y를 출력하는 것이다. 이러한 처리과정을 거쳐 결과 값 (출력 값)을 내는 것이다. 즉, 각 노드 안에 처리과정이 존재하는 것이다.

 

 

3.1 시그모이드 함수

 

이러한 노드 안에 처리과정에 활성화 함수를 사용하게 된다. 활성화 함수는 앞서 배웠던 것처럼 계단 형식 (0과 1을 결과 값으로 내는 퍼셉트론 수식) 즉, 계단 함수를 사용하게 된다. 하지만 이런 계단함수 말고도 다른 함수를 쓸 수 있다. 다른 함수를 쓴다면 더 다양한 표현이 가능해질 것이다.

 

다른 함수로 대표적인 '시그모이드 함수(Sigmoid Function)이 있다.

 

다음은 시그모이드 함수를 나타낸 식이다.

 

        (4)

 

신경망에서는 활성화 함수로 시그모이드 함수를 이용하여 신호를 변환하고, 그 변환된 신호를 다음 뉴런에 전달하게 된다.

 

 

구현된 계단 함수와 시그모이드 함수는 다음과 같다. 참고로 시그모이드 뜻은 S 자 모양이라는 뜻이다.

 

(그림 4) 계단함수(좌), 시그모이드함수(우)

 

 

3.2 시그모이드 함수와 계단 함수의 비교

 

시그모이드는 부드러운 곡선이고 입력에 따라 출력이 연속적으로 변화한다. 하지만 게단함수는 0을 경계로 출력이 갑자기 바뀌어버린다. 시그모이드의 이 매끈함이 신경망 학습에서 아주 중요한 역할을 하게 된다.

또한 계단함수는 0과 1을 돌려주지만, 시그모이드 함수는 출력값으로 실수(0.1234, 0.3434, ...) 등을 돌려 줄 수 있다.

 

그리고 중요한 공통점은 입력이 작을 때의 출력은 0에 가깝고, 입력이 클 때의 출력은 1에 가깝다는 것이다. 큰 관점에서 봤을 때 같은 모양을 갖고 있는 것이다.

 

 

 

3.3 비선형 함수

 

비선형 함수는 저번 포스팅에서 배웠다. XOR 논리 연산 게이트에 대한 출력 값을 나누려고 할 때 직선으로는 나누지 못하는 문제가 발생했다. 이를 선형적으로 처리하지 못한다 하고, 비선형 함수로 처리해야한다.

(그림 5) XOR 게이트, 비선형 함수

 

비선형 함수는 위와 같이 구부러진 곡선 또는 계단형 함수를 예로 들 수 있다. 시그모이드 함수도 마찬가지이다. 정확히 말하자면 출력이 상수 배 만큼 변하는 함수를 선형 함수라고 일컫는다. 비선형 함수는 직선 1개로는 그릴 수 없는 함수를 말한다. 1번이 아니고 1개 이다.

 

신경망에서는 활성화 함수로 비선형 함수를 채택한다. 즉, 선형함수는 사용해서는 안된다. 선형함수를 사용한다면 신경망의 층을 깊게 할 필요가 없기 때문이다. 즉 단층 퍼셉트론에서만 사용이 된다. 신경망은 주로 다층 퍼셉트론만을 다룬다.

 

선형함수의 문제는 층을 아무리 깊게 해도 은닉층이 없는 네트워크가 되어버린다.

 

즉, h(x) = cx 와 같은 함수가 있을 때 3층 네트워크라면  y(x) = h(h(h(x))) 로 표현된다. 즉, c * c * c * c 으로 표현 할 수 있다. 이는 그냥 c^3 으로 표현하면 된다. 즉, 은닉층이 없는 네트워크로 표현 할 수 있다는 뜻이다. 그렇기 때문에 반드시 신경망에서는 비선형 함수를 사용하도록 되어있다.

 

 

 

3.4 ReLu 함수

 

시그모이드 함수는 신경망 분야에서 오래전에 사용했으나, 최근에는 ReLu(Rectified Linear Unit, 렐루) 함수를 주로 이용한다.

(참고로 Rectified 는 정류된 이라는 뜻이다. 반파정류회로라는 것이 있는데 이는 +/-가 반복되는 교류에서 - 흐름을 차단하는 회로이다.)

 

ReLu는 아래와 같이 입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하이면 0을 출력하는 함수이다. 즉, 0 이하의 값들은 무시해버리는 것이다. 파이썬으로 구현한 결과는 다음과 같다.

 

(그림 6) ReLU 함수

 

 

 

 

 

 

참고자료 1 : 밑바닥부터 시작하는 딥러닝 (책)

 

728x90
반응형