딥러닝/밑바닥부터 시작하는 딥러닝1

[밑바닥부터 시작하는 딥러닝1] Ch3.신경망

CoGam 2024. 4. 28. 05:27
728x90

- 활성화 함수

 Ch3에서 몰랐던 부분을 정말 많이 배웠다. 차근차근 정리해보고자 한다.

이 장에서는 신경망을 앞서 배운 퍼셉트론과 비교하며 알기 쉽게 설명한다.

 

이전에 배웠던 퍼셉트론을 간략히 떠올려 보자.

임계값을 좌변으로 넘겨서 편향 b로 바꿔서 표기했을 뿐이다. 

이것을 좀 더 체계적으로 함수를 사용하여 나타내면, 

이와 같이 될 것이다. 이러한 함수들을 활성화 함수라고 부르고 퍼셉트론에서는 결과값의 부호에 따라 0과 1 중 하나의 출력값을 주는 "계단함수"를 활성화 함수로 이용함을 알 수 있다.

 

 

하지만 신경망에서는 이 계단함수를 사용하지 않는다. 왜 그런지 처음 알게된 부분이라 기억에 매우 잘 남는다.

위의 함수들이 인공 신경망에서 쓰이는 활성화 함수들이다. 계단 함수와 일반적인 공통점은 아래와 같다.

  • 입력이 크면 출력이 증가한다는 점 (일부는 발산 혹은 수렴)
  • 입력이 작으면 출력이 0에 가깝다는 점 (tanh, Leaky ReLU 같이 0이 아닌 경우도 있음)
  • 비선형 함수라는 점

여기서 비선형이라는 특징이 왜 중요한지를 알 수 있다. 앞서 우리는 XOR 게이트를 만들기 위해서 다층 퍼셉트론을 이용했다. 이는 비선형 영역을 표현하기 위한 방법이었다. 이번 절에서는 다른 이유를 설명하는데 활성화 함수로 선형함수를 사용하게 되면 층을 쌓는 의미가 없어진다는 점이었다. 간단히 f(x) = 2x라는 층을 3번 반복하는 것과 f(x) = 2(2(2x) 라는 층을 사용하는 것은 동일한 결과를 출력한다. 선형함수를 사용하게 되면 은닉층이 없는 또 다른 네트워크로 같은 기능을 할 수 있다는 말이다. 때문에 비선형 함수를 사용하여 더 복잡한 특성을 나타낼 수 있게 해주어야한다.

 

 

 

다음으로 계단함수와 인공 신경망의 활성화 함수들의 차이점을 알아보자.

  • 결과값으로 0혹은 1을 주는지 아니면 실수값을 주는지

이것은 인공 신경망의 학습 과정에서 매우 중요하게 작용한다. 모두를 위한 딥러닝에서 배운 것과 같이 인공 신경망은 손실함수를 최소화하는 방향으로 학습을 진행하는데, 결과값이 0 혹은 1 둘 중 한 개이면 손실 값이 0 아니면 1 일 것이기 때문에 학습의 정밀함이 떨어질 것을 예측할 수 있다.

 

여기까지도 헷갈리고 몰랐던 것들을 많이 배웠다. 하지만 배우는 과정에서 궁금한 점이 몇 가지 생겨서 직접 찾아보았다.

 

 

*궁금증 Part*

Q1. 활성화 함수 중 ReLU와 같이 직선 형태를 가진 함수들이 종종 눈에 보였다. 대표적으로 ReLU는 0을 기점으로 0보다 작은 구간에서 선형, 0보다 큰 구간에서도 선형성을 띈다고 생각했다. 이것이 어떻게 비선형 함수가 될까?

 

사실 이 질문은 함수의 선형성을 조금이라도 더 잘 알았다면 금방 알아차렸을 것이라고 생각한다. 분명 전공 시간에 배운 개념인데 까먹은게 아쉽게 느껴졌다. 함수가 선형성을 만족하려면

 

1. Superposition (중첩)

 

2. Homogeneity (동질성)

 

 

 

 

이것은 "5장. 오차 역전파" 더 자세히 배우지만 이때 궁금했던 점이라 여기에 적어두려고 한다. 사실 0이라는 점 때문에 미분이 불가능하다고 보는 것이 맞지만, 한 점에 불과하기에 오차 역전파 과정에서는 아래와 같이 처리하는 것 같다. (사실 미분 값에 0을 포함해야하는지 빼야하는지는 아직도 의문점이다)

 

 

 

 

 

- 출력층에서의 시그모이드 함수, 항등 함수, 소프트맥스 함수

 사실 그동안 모델을 따라 쓰거나 간단하게 mnist dataset을 분류할 때 언제는 sigmoid 함수를 사용하고 언제는 softmax 함수를 사용하는지 잘 알지 못했다. 위에서 살펴본 것과 같이 활성화 함수에는 다양한 종류가 존재한다. 여기서는 은닉층 사이의 활성화 함수가 아니라 마지막(출력층) 계층으로 넘어갈 때 사용하는 마지막 활성화 함수라고 생각하면 될 것 같다. 따라서 해결해야 하는 문제가 무엇인가에 따라서 마지막 활성화 함수가 달라지면 효율적일 것이다. 기본적으로는 아래와 같이 사용한다고 한다. 각 함수의 특징을 보면 금방 이해가 된다.

  • 회귀: 항등 함수
  • 이진 분류: 시그모이드 함수
  • 다중 분류: 소프트맥스 함수

 

 

 

그 중에서 처음 등장한 소프트맥스 함수는 아래와 같다.

 

소프트맥스 함수를 이용할 때 주의해야하는 점이 있다. 바로 "Overflow"이다. 소프트맥스 함수에는 지수함수가 포함되어 있는 것을 알 수 있다. 이로인해 input이 조금 증가하더라도 결과는 기하급수적으로 증가하는 결과를 낸다. 아래 예시를 보면 알 수 있다.

 

이것을 보완하기 위한 방법으로 input 값에 어떤 값을 더하거나 빼도 같다는 개념을 이용한다. 일반적으로는 최댓값을 빼준다고 한다.

 

소프트맥스 함수의 다른 몇 가지 특징은 아래와 같다.

  • 총합이 1이 되므로 다른 관점에서는 확률처럼 해석한다.
  • 단조 증가 함수이므로 각 원소의 대소 관계는 변하지 않는다.
  • 따라서 학습시에는 써주지만, 추론 과정에서는 생략하더라도 결과는 달라지지 않는다.

 

 

 

 

 

-배치 처리

신경망 학습에서 자주 사용하는 기법으로 계산할 때 큰 이점을 주는 방법이다. 수치 계산 라이브러리 대부분이 큰 배열을 효율적으로 처리할 수 있도록 최적화 되어 있기에 효율적이다. 신경망이 커질수록 데이터 전송이 병목현상을 일으키는 경우가 있기에 배치 처리로 부하를 줄이는 것이다.

반응형