[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 3. 신경망

퍼셉트론에서 신경망으로

  • 신경망의 예
    • 가중치를 갖는 층은 2개이므로 2층이라고 할 수도 있다.
  • 퍼셉트론 복습
    • 가중치가 b이고 입력이 1인 뉴런이 추가
    • 다음과 같은 수식으로도 나타낼 수 있다.
      $$y = h(b + w_1x_1+w_2x_2)$$ $$h(x) = \begin{cases} 0 & (x \leq 0) \\ 1 & (x > 0) \end{cases}$$
    • 위 식은 입력 신호의 총합이 h(x) 라는 함수를 거쳐 변환되어, 그 변환된 값이 y의 출력이 된다.
    • h(x)는 입력이 0을 넘으면 1을 돌려주고 그렇지 않으면 0을 돌려줌
  • 활성화 함수의 등장
    • 이처럼 입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수(activation function)이라고 한다.
    • 위 그림에서처럼 가중치 신호를 조합한 결과가 a라는 노드(뉴런)가 되고, 활성화 함수 h를 통과하여 y라는 노드로 변환된다.
참고) 일반적으로 단순 퍼셉트론은 계단 함수(임계값을 경계로 출력이 바뀌는 함수)를 활성화 함수로 사용한 모델을 가리키고, 다층 퍼셉트론은 신경망(여러층 + 시그모이드 함수 등의 매끈한 활성화 함수를 사용)를 가리킴

활성화 함수

  • 활성화 함수는 임계값을 경계로 출력이 바뀌는데, 이런 함수를 **계단 함수(step function)**이라고 한다.
  • 여기서 계단 함수를 다른 함수로 변경하는 것이 신경망의 세계로 나아가는 열쇠이다.
  • 시그모이드(sigmoid) 함수
def sigmoid(x):
	return 1 / (1 + np.exp(-1))
  • 시그모이드 함수와 계단 함수의 비교
    • 시그모이드 함수는 입력에 따라 출력이 연속적으로 변하는 매끄러운 형태. 이 매끈함이 신경망 학습에서 매우 중요한 역할을 한다.
    • 큰 관점에서 보면 둘 다 입력이 클때는 큰수를, 작을 때는 작은 수를 출력한다. 그리고 입력이 아무리 작거나 커도 출력은 0에서 1사이.
  • 비선형함수
    • 계단 함수와 시그모이드 함수 둘 다 비선형 함수이다
    • 신경망에서 선형 함수를 이용하면 신경망의 층을 깊게 하는 의미가 없어진다.
    • 선형 함수의 문제는 층을 아무리 깊게 해도 ‘은닉층이 없는 네트워크’로도 똑같은 기능을 할 수 있다는 데 있다.
    • 예를 들어 선형 함수인 \(h(x)=cx\)를 활성화 함수로 사용한 3층 네트워크를 떠올려 보면, 이를 식으로 나타내면 \(y(x) = h(h(h(x)))\)가 되고, 이는 \(y(x) = c * c * c* x\) 처럼 곱셈을 세번 수행하지만 \(y = ax, a= c^3\) 과 같은 형태이다.
    • 즉, 은닉층이 없는 네트워크로 표현할 수 있다.
    • 따라서 층을 쌓는 혜택을 얻고 싶다면 활성화 함수로는 반드시 비선형 함수를 사용해야 한다.
  • ReLU(Rectified Linear Unit) 함수
    • 입력이 0을 넘으면 그대로 출력, 0 이하이면 0을 출력
def relu(x): 
    return np.maximum(0, x)

출력층 설계하기

  • 신경망은 분류와 회귀 모두에 이용할 수 있다. 다만 둘 중 어떤 문제냐에 따라 출력층에서 사용하는 활성화 함수가 달라진다.
  • 일반적으로 회귀에는 항등 함수, 분류에는 소프트맥스 함수를 사용한다.
  • 소프트맥스 함수의 출력은 0에서 1 사이의 실수이며, 소프트 맥스 함수 출력의 총합은 1이다. 이 성질 덕분에 소프트맥스 함수의 출력을 ‘확률’로 해석할 수 있다.
  • 소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않는다. 지수 함수 y=exp(x)가 단조 증가 함수이기 때문이다.
  • 따라서, 추론 단계에서는 소프트맥스 함수를 생략하고 사용해도 된다(자원 효율).

실습 코드

정리

  • 신경망에서는 활성화 함수로 시그모이드 함수와 ReLU 함수 같은 매끄럽게 변화하는 함수를 이용한다.
  • 넘파이의 다차원 배열을 잘 사용하면 신경망을 효율적으로 구현할 수 있다.
  • 기계학습 문제는 크게 회귀와 분류로 나눌 수 있다.
  • 출력층의 활성화 함수로는 회귀에서는 주로 항등 함수를, 분류에서는주로 소프트맥스 함수를 이용한다.
  • 분류에서는 출력층의 뉴런 수를 분류하려는 클래스 수와 같게 설정한다.
  • 입력 데이터를 묶은 것을 배치라 하며, 추론 처리를 이 배치 단위로 진행하면 결과를 훨씬 빠르게 얻을 수 있다.