튜토리얼

필수 데이터사이언스 방법론 가이드
카테고리는 수준별, 언어별, 분야별, 주제별 순으로 정렬되어 있습니다.

인공 신경망(Neural Networks)

작성자
sungkenh
작성일
2017-01-12 15:47
조회
378
카테고리 : [ 고급   |   Python   |   기타   |   기타 ]

1) 제목


인공 신경망(Neural Networks)

2) 작성자


컴퓨터정보통신공학과 홍성은

3) 링크 및 출처


Data Science From Scratch

 

4) 문제 및 개요


5) 데이터


6) 해결방법 및 결과


Neural Networks


  • 인공신경망은 인간 뇌가 패턴을 인식하는 방식을 모사한 알고리즘이다.

  • 사람의 뇌는 250억 개의 뉴런으로 구성되어 있다고 추정된다.

  • 뉴런 간의 정보 교환은 시냅스라고 불리는 신경세포 간의 접합부를 통해 전달된다.

  • 뉴런들이 모이면 인간의 지능을 지닐 수 있다고 가정한다.


 

from IPython.display import Image
Image(filename='/home/s6413/Data Science from Scratch/nn-1.JPG')

1

Perceptrons


  • 가장 간단한 신경망을 Perceptron이라고 하며, 이진 (0과 1)값을 갖는 다중의 입력을 하나의 2진수 값으로 출력하는 모델임

  • 아래의 그림은 입력이 3개인 퍼셉트론의 구조이고 입력이 많거나 더 적을 수 있다.

  • 퍼셉트론은 간단한 수학 계산 모델로 볼 수 있는데 이를 통해서 입력 값이 결과에 미치는 영향력(가중치)을 정해서 결정을 내리는 장치로 생각할 수 있다


from IPython.display import Image
Image(filename='/home/s6413/Data Science from Scratch/nn-2.JPG')

 

 

2

 

import numpy as np
def step_function(x):
return 1 if x >= 0 else 0

def perceptron_output(weights, bias, x):
"""returns 1 if the perceptron 'fires', 0 if not"""
calculation = np.dot(weights, x) + bias
return step_function(calculation)
  • 퍼셉트론은 문제 공간을 분리해낼 수 있다.

  • 적절한 가중치를 선택하여, 심플한 문제를 해결할 수 있다.

  • 아래의 그림과 같이 AND 게이트와 OR게이트의 문제르 해결할때, AND게이트의 특성상 두개의 인풋이 모두 1일때만 1이 되므로

  • 퍼셉트론으로 weight가 2,2 이고 bias=-3이 구해진다면 위의 공식으로 AND게이트의 경계를 정할 수 있다.

  • OR 게이트의 경우에는 weight가 2,2 이고 bias=-1


 

from IPython.display import Image
Image(filename='/home/s6413/Data Science from Scratch/nn-3.JPG')

 

1

 



  • 예를들어, 주말이 오고 도시에 치즈 축제가 열린다고 들었다고 하자.

  • 당신은 치즈를 좋아하고 축제에 갈지 안 갈지를 정해야 한다.

  • 우리는 결정을 내릴 때 세 가지 요건을 고려해야 한다.

      1. (x1)날씨가 좋은지?



      1. (x2)여자 친구가 같이 가기를 원하는지?



      1. (x3)축제가 대중교통에서 가까운지? (차가 없다고 가정)



  • 예를 들어, x1 = 1이라면 날씨가 좋은 거다.

  • 우리는 치즈를 좋아하고 축제도 가고 싶지만 여자 친구가 싫다하면 결정하기 힘들다.

  • 또 당일 날씨까지 안 좋다면 더욱 가기 싫어진다.

  • 이럴 때 결정을 해주는 퍼셉트론 모델을 만들자.
    • 먼저 가중치를 정하자. w1 = 6, w2 = 2, w3 = 2처럼 각각의 조건마다 가중치가 다르다.

    • w1이 가장 큰 이유는 날씨 따라 선택이 크게 좌우되기 때문이다.

    • 마지막으로 퍼셉트론의 임계값은 5로 정하자.

    • 임계값은 퍼셉트론의 수식 계산 결과가 임계값보다 적으면 0 크면 1을 출력하는 과정을 수행하기 위한 값이다.


  • 이렇게 만들어진 모델은 날씨가 좋은지 아니면 나쁜지, 그리고 여자 친구가 원하는지, 축제가 대중교통에서 가까운지 상황을 입력받고 결정을 만들어준다.

  • 우리는 이 모델을 개인에 맞게끔 가중치와 임계값을 바꿔서 모델의 결정을 바꿀 수 있다.
    • 예를 들어, 임계값을 3으로 정하자.

    • 그땐 임계값이 5일 때보다 날씨와 여자 친구, 대중교통으로부터 받은 요인에서 축제에 갈 확률이 높아진다.

    • 이 의미는 임계값이 작을수록 우리가 축제에 가게 될 확률이 높아지는 것이다.


  • 그러나, 퍼셉트론 모델은 선형 분리가 불가능한 문제에 대해서 해결하지 못한다.








  • 아래의 그림은 2차원 평면인 지도상에서 한 구역을 선하나로 나머지 구역과 분리하는 것이 불가능 하지만, 3차원인 지구본에서 는 평면 하나로 나머지 구역과 분류하는 것이 가능해진다는 것이다.

  • 즉, 은닉층을 삽입하여 선형 분리가 불가능했던 데이터를 새로운 공간으로 사상함으로써 선형 분리가 가능하도록 변환한다.

1

 

LFF(Layered Feed-Forward Neural Network)


  • 이러한 문제를 해결 하기 위해서 나타난 것이 LFF이다.

  • LFF는 선형분리가 불가능한 문제를 나누기 위해서 여러개의 직선으로 층을 나눠서 문제해결을 시도한다.
    • 퍼셉트론으로 풀지 못한 문제를 LFF, 2개의 층으로 이뤄진 신경망을 이용하여 해결이 가능하다.


  • LFF는 하나의 입력층과 하나 이상의 은닉층, 하나의 출력층으로 이뤄져 있다.

  • 이름에서 나타 났듯이 입력층, 은닉층, 출력층 등으로 층이 나눠져 있으며, 앞으로만 전진이 가능한 단방향 뉴런 네트워크다.

1



  • 입력층 : 계산과정 없이 외부로 부터 신호를 받아들이는 지점

  • 은닉층 : 계산 뉴런들로 이뤄져 있다. 이론적으로는 하나의 은닉층만 있어도 모든 함수가 표시 된다.
    • 문제의 특성 및 원하는 결과 등에 따라 여러개의 은닉층이 존재 할 수 있다. 이는 반복되는 실험으로 밝혀야 한다.


  • 출력층 : 계산 뉴론들리 이뤄져 있으며, 최종 계산 결과를 출력 신호로 내보낸다.
    • 활성화 함수로는 sigmoid함수를 사용한다.









신경망의 학습


  • 모든 가중치들은 학습과정에서 계속 조금씩 변하는데, 결과적으로 각 노드가 어떤 입력을 중요하게 여기는지를 반영하는 것이다.

  • 신경망의 학습은 이 계수를 업데이트 하는 과정이다.

Back Propagation


  • 인공 신경망 학습의 목적은 출력의 오류를 최소화하는 것이다.

  • 운동장 주변의 트랙을 뛰는 달리기 경기를 생각해보라.

  • 트랙을 여러 바퀴 달리다 보면 같은 지점을 여러 번 지나게 된다.

  • 신경망의 학습과정도 비슷하다. 우선 학습이 시작되기 전에 뉴럴넷의 모든 가중치를 초기화하고, 반복적으로 데이터를 보여주어서 학습을 한다.

  • 만일 학습이 잘 되었다면 가중치는 적절한 값으로 업데이트가 되어 있을 것이고, 이 인공 신경망으로 각종 분류와 예측이 가능하다.

  • 학습 과정 내부에선 같은 원리의 가중치 업데이트가 반복적으로 일어난다.

  • 가중치의 업데이트의 원리는 가중치를 추정 또는 초기값을 지정하고 그 가중치를 사용했을때 발생하는 에러를 측정한 뒤 에러에 기반해서 계수를 약간씩 업데이트하는 것이다.

  • 신경망의 과정과는 반대로 출력층의 값에 기반하여 은닉층의 가중치를 조절하기 때문에 이러한 과정을 역전파라고 한다.
    • 입력* 가중치 = 출력(추정값)

    • 정답 - 추정값 = 오차

    • 오차* 계수 별 오차 기여도 = 보정 값


Gradient Descent


  • 모델의 학습 과정에서는 각 계수의 값이 반복적으로 업데이트됩니다. 이 업데이트 방법 중 가장 널리 쓰이는 방법은 “gradient descent (경사 하강법)”입니다.

  • Gradient는 경사 혹은 기울기를 의미합니다. x-y 평면에서 기울기는 두 변수의 관계를 설명해줍니다. x의 변화량에 따른 y의 변화량1




  • 예를 들어 시간에 따른 통잔 잔고의 변화량을 함수의 기울기로 설명할 수 있습니다.

  • 인공 신경망에서 우리는 신경망의 오차와 각 가중치와의 관계에 관심이 있습니다.

  • 즉, 각 가중치의 값을 증가 혹은 감소시켰을 때 신경망의 오차가 어떻게 변하는지 그 관계에 주목합니다.

  • 그렇다면, 가중치를 어떤 값으로 결정하면 전체 에러가 가장 작아질까요? 어떻게 노드의 가중치를 설정해야 입력 데이터에서 의미있는 정보를 추출할 수 있을까요? 어떻게 해야 사진의 물체가 사람인지, 자동차인지, 고양이인지 알아낼 수 있을까요?

  • 인공 신경망의 학습과정은 수 많은 가중치를 보정해가는 과정입니다.

  • 가중치는 오차를 줄이는 방향으로 보정되어야 데이터에서 의미있는 정보를 추출할 수 있습니다. 그리고 이 오차와 가중치의 관계는 편미분으로 정의할 수 있습니다.

  • dE/dw가 가중치의 변화량에 따른 오차의 변화량, 즉 우리에게 중요한 그 기울기에 해당합니다.

  • 다층 신경망은 여러 층으로 이루어져있기 때문에 각 노드의 계수는 신호에 곱해지는 여러 가중치 중 하나입니다.

  • 따라서 이 관계를 미적분학의 연쇄 법칙(chain rule)을 사용해 설명할 수 있습니다.

  • 이를 이용하면 신경망의 출력이 여러 층과 갖는 관계를 구할 수 있습니다. 그리고 결과적으로 각 층의 가중치와 최종 출력(또는 오차)과의 관계가 나옵니다. dErrordweight=dErrordactivationdactuvationdweightdErrordweight=dErrordactivation∗dactuvationdweight

  • 즉 오차와 계수가 활성 함수를 통해 정해지는 경우 최종적으로 가중치 값의 변화가 오차를 증가할지, 혹은 감소할지를 구할 수 있습니다.








활성함수


  • 심층 신경망의 여러 층 중 마지막 층, 즉 출력층은 다른 층과 조금 다릅니다.

  • 가장 흔한 작업인 분류(classification) 작업의 경우 출력 층은 데이터의 각 샘플이 여러 범주에 속할 확률을 구한 뒤 확률을 비교하여 그 중 하나의 범주를 선택합니다.

  • 출력 층의 노드는 각각 하나의 범주에 해당하고 이 노드가 활성화 되는 정도를 비교하여 하나의 노드를, 즉 하나의 범주를 고릅니다.

  • 분류 작업의 경우 최종적으로 출력 노드는 0 또는 1의 값을 가지게 됩니다.

  • 즉, 무조건 해당 범주에 속하거나(1) 혹은 속하지 않는다(0)는 결론을 내리게 설계됩니다.

  • 한편 입력 데이터는 출력과 달리 연속적인 값을 가지는 경우가 대부분입니다


.
  • 예를 들어 추천 엔진을 구현하는 경우 최종 결과는 해당 아이템을 추천할 것 인지 아닌지로 딱 떨어지게 나와야 합니다.

  • 하지만 입력 데이터는 고객이 해당 페이지에서 머무른 시간, 고객의 구매력 등 연속된 값을 갖습니다.

  • 즉 입력으로 들어온 온갖 범위의 값(예: 3만원짜리 티셔츠, 고객이 과거에 구매한 내역, 고객이 웹사이트에 머무른 시간 등)을 압축해서 최종적으로 이 아이템을 어떤 범주에 넣을 것인지, 혹은 사용자가 어떤 타입의 고객인지 등 어떤 범주에 넣을지를 결정합니다.

  • 이렇게 넓은 범위의 값을 0 또는 1의 값으로 결정해주는 과정을 로지스틱 회귀라고 합니다. 이 이름이 굉장히 헷갈리기 쉬운데, 회귀(연속된 값을 예측하는 작업)라는 이름이 붙여져 있지만 실제로는 분류 작업을 한다는 것을 유의하시기 바랍니다.

  • 지수 함수로 처리하여 결과를 0과 1 사이에 압축시킬수 있기 때문에 지수 함수를 사용한 로지스틱 회귀를 인공 신경망의 출력층에 사용합니다.

  • 최종적인 판단을 위해서 확률의 기준값을 세워주면 됩니다.

  • 예를 들어 어떤 노드의 확률이 0.5보다 크다면 그 노드에 해당하는 범주에 속한다고 판별한다고 규칙을 만드는 것 입니다.

  • 만일 이 기준값이 너무 작다면(예:0.0001을 넘기면 이 범주에 해당한다) false positive(긍정 오류, 거짓 양성: 실제로는 이 범주에 해당하지 않는데 이 범주라고 예측을 하는 것)가 많아지고, 기준값이 너무 크다면 반대로 false negative(부정 오류, 거짓 음성)이 많아집니다.

1