[밑바닥부터 시작하는 딥러닝1] 01. 퍼셉트론과 신경망, 활성화 함수

권유진·2022년 1월 1일
0

퍼셉트론(Perceptron)

  • 다수의 신호를 입력받아 하나의 신호를 출력
  • 신경망(딥러닝)의 기원
y={0w1x1+w2x2θ1w1x1+w2x2>θy = \left\{ \begin{matrix} 0& w_1x_1+w_2x_2 \le \theta\\ 1& w_1x_1+w_2x_2 > \theta \end{matrix}\right.

θ\thetabb(편향, bias)로 치환 시,

y={0w1x1+w2x2+b01w1x1+w2x2+b>0y = \left\{ \begin{matrix} 0& w_1x_1+w_2x_2+b \le 0\\ 1& w_1x_1+w_2x_2+b > 0 \end{matrix}\right.

신호의 총 합이 θ\theta를 넘을 때만 1 출력 (θ\theta: 임계값)
\to 뉴런이 활성화 한다.

1. AND 게이트 구현

x1x_1x2x_2yy
000
010
100
111

이를 만족하는 매개변수(w1,w2,θ(b)w_1, w_2, \theta(b))가 무수히 많다.

w1w_1w2w_2θ\theta
0.50.50.7
0.50.51
.........

2. NAND 게이트 구현

AND 게이트 매개변수 반전

w1w_1w2w_2θ\theta
-0.5-0.5-0.7
-0.5-0.5-1
.........

3. OR 게이트 구현

w1w_1w2w_2θ\theta
0.50.50.4
.........

4. XOR 게이트 구현

배타적 논리합, 어느 한쪽만 1인 경우

  • 단층 퍼센트론으로는 구현 불가 (\because 선형으로 분류 불가)
  • 다층 퍼셉트론(비선형)으로 구현 가능!
x1x_1x2x_2s1s_1s2s_2yy
00100
01111
10111
11010

x1x_1, x2x_2는 입력, s1s_1는 NAND의 출력, s2s_2는 OR의 출력

\therefore 이와 같이 퍼셉트론의 층을 깊게 쌓아 매우 복잡한 것 구현 가능

퍼셉트론은 복잡한 함수도 표현할 수 있지만, 가중치를 설정하는 작업을 사람이 수동으로 해야한다.
\to 신경망이 자동으로 해결

신경망(Neural Network)

- 한 층에서의 출력 과정
a=w1x1+w2x2+by=h(a)\begin{aligned} a &= w_1x_1+w_2x_2+b\\ y &= h(a) \end{aligned}

1. 활성화 함수(activation function)

  • 입력 신호의 총합을 출력 신호로 변환하는 함수
  • 입력 신호의 총합이 활성화를 일으키는지 정함
  • 위의 식에서 h를 의미
  1. 계단 함수(Step Function)
  • 임계값(θ\theta)을 경계로 출력이 변하는 함수
  • 퍼셉트론에서 사용하는 활성화 함수
  • 0과 1로 밖에 출력할 수 없다.(다중 출력 불가)
  1. 선형 함수(Linear Activation Function)
h(x)=cx+bh(x) = cx+b
  • 선형으로 이루어진 함수
  • 다중 출력 가능
  • 오차역전파법(BackPropagation) 불가
  • 여려겹으로 쌓아도 출력 cxc'x로 동일
  1. 시그모이드 함수(Sigmoid Function)
σ(x)=11+ex\sigma(x) = \cfrac{1}{1+e^{-x}}
  • 출력 값 범위가 0~1이다.
  • 라장 많이 사용되는 활성화 함수
  • Saturation(포화상태) 발생
    • 오차역전파법 사용 시 미분 값을 사용해야 하는데, 미분 값이 σ(x)(1σ(x))\sigma(x)(1-\sigma(x))이므로 최대값이 0.25이다.
    • 그러므로 함수의 기울기가 0에 가까워져 Gradient Vanishing 문제 야기
  • non-zero centered
  1. 쌍곡탄젠트 함수(Hyperbolic Tangent Function)
tanh(x)=sinh(x)cosh(x)\tanh(x) = \cfrac{\sinh(x)}{\cosh(x)}
  • 출력 값의 범위: -1 ~ 1
    • zero-centered
  • Gradient Vanishing 문제 야기
    • 미분 시 (1tanh(x))(1+tanh(x))(1-tanh(x))(1+tanh(x))이기 때문
  1. ReLU함수(Rectified Linear Unit)
ReLU(x)={0,  ifx<0x,  ifx0ReLU(x) = \begin{cases} 0, \; if \, x<0\\ x, \; if \, x\ge0 \end{cases}
  • 양의 값에서는 Saturation 발생하지 않음
  • 계산 효율이 뛰어남(빠름)
  • 비선형함수
  • non-zero centered
  • Dying ReLU: 입력 값이 0 이하일 때, gradient가 0이 되어 학습을 하지 못함.
  1. Leaky ReLU
Leaky_ReLU(x)={0.01x,  ifx<0x,  ifx0Leaky\_ReLU(x) = \begin{cases} 0.01x, \; if \, x<0\\ x, \; if \, x\ge0 \end{cases}
  • ReLU와 유사하지만 0 이하의 범위에서 더이상 0이 아니다.
  1. PReLU(Parametric ReLU)
Leaky_ReLU(x)={αx,  ifx<0x,  ifx0Leaky\_ReLU(x) = \begin{cases} \alpha x, \; if \, x<0\\ x, \; if \, x\ge0 \end{cases}
  • 0 이하일 때, 기울기가 α\alpha인 Leaky ReLU
  • α\alpha는 Backpropagation으로 학습
  1. ELU(Exponential Linear Unit)
ELU(x)={α(ex1),  ifx<0x,  ifx0ELU(x) = \begin{cases} \alpha (e^x -1), \; if \, x<0\\ x, \; if \, x\ge0 \end{cases}
  • zero-mean에 가까운 출력 값 보임
  • ReLU의 모든 장점 및 Dying ReLU 문제 해결
  • 지수함수를 사용해 연산비용 추가
  • 큰 음수 값에 쉽게 포화
  1. Maxout Neuron
    maxout(x)=max(w1Tx+b1,wxTx+b2)maxout(x) = max(w_1^Tx+b_1,\, w_x^Tx+b_2)
  • ReLU와 LeakyReLU의 더 일반화 된 형태(두 개의 선형 함수를 취하기 때문)
  • 선형이기 때문에 Saturation 발생하지 않는다.
  • Dropout과 함께 사용하기 좋음
  • neuron 당 parameter 수가 두 배가 됨(계산량 많고 복잡)
  1. 출력층 활성화함수
  • 분류 문제
    • 이진 분류: 시그모이드 함수
    • 다지 분류: 소프트맥스 함수(softmax)
      yk=eakΣk=1neaky_k = \cfrac{e^{a_k}}{\Sigma_{k=1}^{n}{e^{a_k}}}

      지수함수가 매우 쉽게 커지기 때문에 오버플로 문제 발생
      \rarr C를 대입하여 개선(C는 aka_k의 최대값)

      yk=eak+lnCΣk=1neak+lnCy_k = \cfrac{e^{a_k+\ln{C}}}{\Sigma_{k=1}^{n}{e^{a_k+\ln{C}}}}

      시그모이드 함수 일반화한 형태

  • 회귀문제
    • 항등함수
      y=xy = x

참고
밑바닥부터 시작하는 딥러닝 <사이토 고키>
https://deepinsight.tistory.com/113
https://subinium.github.io/introduction-to-activation/

profile
데이터사이언스를 공부하는 권유진입니다.

0개의 댓글