Neural Network

  • 신경망
  • 퍼셉트론은 가중치, 편향등의 매개변수 설정 작업을 사람이 수동으로 했음.
    이를 개선하기위해, 매개변수의 적절한 값을 데이터로부터 자동으로 학습하도록 신경망이 나옴.
    구성은 보통 입력층 / 출력층 / 은닉층 으로 이루어짐.

  • 활성화 함수
  • 영어로는 Activation Function. 입력 신호의 총합을 출력 신호로 변환하는 함수를 지칭함.
    활성화 함수를 통해 입력 신호의 총합이 활성화를 일으키는지 정함.
    신경망에서는 활성화 함수로 비선형 함수를 사용해야 함. 만약 선형 함수를 사용한다면, 층을 깊게해도 의미가 없기때문.
    예를 들어, $h(x) = cx$ 라는 활성화 함수가 있으면 이를 3층으로 겹쳐도 $h(x) = c*c*cx$가 되고 사실상 $h'(x) = c'x$와 같은 식이되어 의미가 없어짐.
    따라서, 아래의 종류와 같은 활성화 함수를 사용함.

    1. 계단 함수
    2. $$ h(x) = \begin{cases}0 & (x \leq 0) \\ 1 & (x > 0) \end{cases} $$
      • 파이썬으로 구현
      • def step_function(x):
            return np.array(x > 0, dtype=np.int)
        
        X = np.arange(-5.0, 5.0, 0.1)
        Y = step_function(X)
        plt.plot(X, Y)
        plt.ylim(-0.1, 1.1)
        plt.show()
        
      • 결과

    3. 시그모이드 함수
    4. $$ h(x) = \frac{1}{1+\exp(-x)} $$
      • 파이썬으로 구현
      • def sigmoid(x):
            return 1 / (1 + np.exp(-x))    
        
        X = np.arange(-5.0, 5.0, 0.1)
        Y = sigmoid(X)
        plt.plot(X, Y)
        plt.ylim(-0.1, 1.1)
        plt.show()
        
      • 결과

    5. ReLU 함수
    6. Recified Linear Unit 의 약자임.
      $$ h(x) = \begin{cases}0 & (x \leq 0) \\ x & (x > 0) \end{cases} $$
      • 파이썬으로 구현
      • def relu(x):
            return np.maximum(0, x)
        
        x = np.arange(-5.0, 5.0, 0.1)
        y = relu(x)
        plt.plot(x, y)
        plt.ylim(-1.0, 5.5)
        plt.show()
        
      • 결과

    7. SoftMax 함수

    8. $$ y_k = \frac{\exp(a_k)}{\sum_{i=1}^n \exp(a_i)} $$
      • 파이썬으로 구현
      • def softmax(x):
            if x.ndim == 2:
                x = x.T
                x = x - np.max(x, axis=0)
                y = np.exp(x) / np.sum(np.exp(x), axis=0)
                return y.T 
        
            x = x - np.max(x) # 오버플로 대책
            return np.exp(x) / np.sum(np.exp(x))
        
      • 특징
      • 소프트맥스 함수의 출력은 0에서 1.0 사이의 실수이며, 출력의 총합은 1.
        => 소프트맥스 함수의 출력을 '확률'로 해석해도 무방.
        $ y = \exp(x) $가 단조 증가 함수이므로, 소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않음.
        => 신경망으로 분류할 때는 출력층의 소프트맥스 함수를 생략함.(일반적으로)

  • 신경망내에서 값(데이터) 전달
  • 전달에서는 행렬의 내적을 이용함. 처음의 입력을 X, 입력들에 적용하는 가중치를 W, 조정하는 편향을 B, 이에따른 결과를 A, 그 결과 A에 활성화 함수를 적용 시킨것을 Z라고 하면 아래와 같이 나타낼 수 있다.
    w1, w2, w3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    a1 = np.dot(x, w1) + b1 # 입력층 -> 1층 신호(=값, =데이터) 전달
    z1 = sigmoid(a1) # 1층에서의 활성화 함수 처리
    a2 = np.dot(z1, w2) + b2 # 1층 -> 2층
    z2 = sigmoid(a2) # 2층에서의 활성화 함수 처리
    a3 = np.dot(z2, w3) + b3 # 2층 -> 출력층
    y = softmax(a3) # 출력층의 활성화 함수 처리
    
  • 출력층의 설계
  • 신경망은 분류/회귀 모두에 이용가능. 즉, 어떤 문제냐에 따라 출력층에서 사용하는 활성화 함수가 달라짐. 일반적으로는
    회귀(regression) => 항등 함수
    분류(classification) => 소프트맥스 함수
    위와 같이 사용함.
  • 원-핫 인코딩 = one-hot encoding
  • 정답을 뜻하는 원소만 1이고(=hot하고) 나머지는 모두 0인 배열.
  • 전처리 = pre-processing
  • 신경망의 입력 데이터에 특정 변환을 가하는 것
    1. 정규화
    2. Normalization. 데이터를 특정 범위로 변환하는 처리.
    3. 데이터 전체 분포 고려
    4. 데이터 전체 평균과 표준편차를 이용하여 데이터들이 0을 중심으로 분포하도록 이동.
      데이터의 확산 범위 제한.
    5. 데이터 백색화 = whitening
    6. 전체 데이터를 균일하게 분포시킴.
  • 배치 처리
  • Batch : 하나로 묶은 입력 데이터.
    배치 처리는 컴퓨터로 계산 시 큰 이점을 줌. 이미지 1장당 처리 시간이 대폭 줄어드는데, 그 이유는
    1. 수치 계산 라이브러리 대부분이 큰 배열을 효율적으로 처리할 수 있도록 고도록 최적화 되어있음.
    2. 커다란 신경망에서는 데이터 전송이 병목으로 작용하는 경우가 자주 있는데, 배치 처리를 함으로써 버스에 주는 부하가 줄어듬. => 느린 I/O를 통해 데이터를 읽는 횟수가 줄고 빠른 CPU(또는 GPU)로 순수 계산을 수행하는 비율이 높아짐.
    종합하면, 컴퓨터에서는 큰 배열을 한꺼번에 계산하는게 분할된 작은 배열을 여러 번 계산하는 것보다 빠름.
  • 학습 : 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것
  • 최적값을 자동으로 찾기 위해 '손실 함수'를 사용해 매개변수에 대한 손실 함수의 미분값을 사용함.
  • 기계 학습과의 비교
  • 특징 = Feature : 입력 데이터(=이미지)에서 본질적인 데이터(=중요한 데이터)를 정확하게 추출할 수 있도록 설계된 변환기. 보통 벡터로 기술함.(이미지 데이터를 벡터로 변환)
    이러한 Feature에는 SIFT, SURF, HOG 등이 있음. 다크 프로그래머 님이 비교 정리 잘 해놓으신 블로그
    Feature를 이용해 변환된 벡터들을 가지고 SVM, KNN 과 같은 지도 학습 방식의 분류 기법을 사용해 학습할 수 있음.
    위가 기계학습을 이용한 것이면, 신경망=딥러닝 에서는 특징 추출과 기계학습을 모두 기계가 스스로 학습함. 그래서 딥러닝을 종단간 기계학습=end-to-end machine learning 이라고도 함.
  • 데이터 구분
  • 훈련 데이터 = Training Data : 매개변수 학습
    검증 데이터 = Validation Data : 하이퍼파라미터 성능 평가
    시험 데이터 = Test Data : 신경망의 범용 성능 평가
  • 발생하는 문제
  • 오버피팅 = Overfitting : 한 데이터셋에만 지나치게 최적화된 상태

댓글

이 블로그의 인기 게시물

Loss Function

Backpropagation

SGD = Stochastic Gradient Descent