강몬드의 프로그래밍 이야기

신경망과 딥러닝 2.시그모이드 뉴런 본문

학습/딥러닝

신경망과 딥러닝 2.시그모이드 뉴런

강몬드 2016. 1. 23. 14:55

시그모이드 뉴런

   학습 알고리즘을 생각해보자. 신경망에 대한 학습이 뭘까? 우리가 퍼셉트론으로 설계된 하나의 신경망 모델이 있으면 이 신경망을 어떤 문제에 적용하기 위해서는 학습을 해야 한다.  예를 들어, 손 글씨 문자를 이 신경망 모델의 입력으로 사용한다고 해보자. 그러면 입력은 손 글씨 문자의 픽셀 값들이고 출력의 결과가 그 문자들을 분류한 결과이다. 우리는 결과의 정확도를 올리기 위해 weights와 bias값을 학습할 수 있다. 그럼 신경망 모델에서 임의의 weights값들을 선택해 값의 변화를 줘보자. 그리고 그 변경한 값으로 계산된 출력 값과 변경 이전의 출력 값을 비교해보자. weights 값의 변화가 출력의 영향을 미치는 걸 볼 수 있다. 이 예로 우리는 값의 학습이 되고 있는지는 알 수 없지만 어쨌든 weights들의 변화는 출력의 변화를 눈으로 확인할 수 있었다. 그림 1.3.1은 weights와 outpt의 관계를 보여준다.



<그림 1.3.1. weights와 출력의 관계>

   weights의 변화가 출력의 변화를 주었다면 weights와 bias의 값을 수정하여 우리가 원하는 목적을 달성할 수 있다. 예를 들어, “9”로 분류가 되어야하는 이미지를 “8”로 잘못 분류하였다. 그럼 신경망이 “9”로 정확히 분류될 수 있게끔 weights와 bias의 값의 변화를 만들 수 있다면 그 변화를 반복해서 더 좋은 결과를 얻게끔 만들 수 있다. 이처럼 원하는 목적으로 더 좋은 결과가 나오게 되게끔 하는 게 신경망의 학습이다.


   여기서 퍼셉트론으로 이뤄진 모델은 문제가 있다. 퍼셉트론의 경우 weights와 bias의 값의 작은 변화가 출력이 0에서 1로 바뀌는 영향을 미칠 수 있다. 그리고 그 값의 변화는 신경망의 나머지 부분에도 영향을 미친다. “9”가 제대로 분류되게끔 수정한다 하더라도 나머지 이미지들에 대해선 또 다른 결과를 갖게 된다.


   이 문제를 극복하기 위해 시그모이드 뉴런이라는 새로운 인공뉴런을 소개한다. 시그모이드 뉴런은 퍼셉트론과 유사하지만 weights와 bias의 작은 변화가 출력에도 변화를 주게끔 수정하였다. 이는 시그모이드 뉴런으로 설계된 모델이 학습할 수 있게끔 하는 중요한 요인이다.


   시그모이드 뉴런을 설명하자. 그림 1.3.2는 시그모이드 뉴런의 구조이다.



<그림 1.3.2. 시그모이드 뉴런의 구조>

   퍼셉트론처럼 시그모이드 뉴런은 다중의 입력을 갖는다. 그러나 0과 1의 이진 값이 아닌  0과 1사이의 실수 값을 갖는다. 예를 들어, 0.638...과 같은 valid 입력이다. 또한, 각각의 입력이 weights를 갖고 전체 bias를 갖는다. 그리고 출력은 이다. 여기서 는 시그모이드 함수로 불린다. 수식 1.3.1은 시그모이드의 정의이다.




<수식 1.3.1. 시그모이드 정의>

   

에서 이면 이다. 다른 말로 값이 크면 시그모이드 뉴런의 출력은 1에 가깝고 이는 퍼셉트론과 유사하다. 그림 1.3.3은 시그모이드 함수의 그래프 형태이다. 모양을 살펴보자.




 <그림 1.3.3. 시그모이드 함수 그래프>

   시그모이드 함수의 평탄함은 중요한 요소이다. 이 평탄함은 weights의 변화량 와 bias의 변화량 로 출력의 변화 를 표현할 수 있다. 수식 1.3.3은 수식으로 표현하였다.




<수식 1.3.3. output의 조정>

   

 와 는 출력에 가 얼마나 영향을 미치는 지 알려주는 편미분이다. 편미분을 몰라도 당황하지마라. 간단한 내용이다.   의  a linear function of the changes이다. 이 성질이 weights와 bias를 목적에 맞게끔 출력에 변화를 주는 weights의 수정을 쉽게 해준다.


    시그모이드 뉴런의 출력을 어떻게 설명할 수 있을까? 퍼셉트론과의 큰 차이점으로서 시그모이드 뉴런은 출력이 0이나 1값이 아닌 0~1사이의 실수 값이다. 0.173이 될 수도 있고 0.689가 될 수도 있다. 이 값은 우리가 입력이미지의 픽셀 값들을 평균을 내어서 신경망의 출력으로 표현하고 싶다고 하면 유용할 수 있다. 다른 예로 입력 이미지가 ‘9’인지 ‘9’가 아닌지를 출력하기를 원한다고 해보자. 이 문제는 결과를 0이나 1로 표현하는 퍼셉트론에서도  결과를 출력할 수 있다. 시그모이드에서는 임의의 방법을 사용하여 출력이 0.5보다 크면 결과는 “9 이다.” 0.5보다 작으면 “9가 아니다.”처럼 정의할 수도 있다.


출처 : http://neuralnetworksanddeeplearning.com/index.html

Comments