퍼셉트론 : 선형 분류기의 한계

 

선형 분리가 불가능한 상황인 XOR 문제에서 75% 정확도의 한계를 보임

이를 보완하고자 1986년 Rumelhart, Hinton이 다층 퍼셉트론의 이론 정립, 신경망 재부활

 

핵심 아이디어

 

  • 은닉층을 둔다.
    • 은닉층을 통해 훨씬 유리한 새로운 특징 공간으로 변환한다.
  • 시그모이드 활성함수를 도입한다.
    • 선형 분리할 땐 step function이라는 활성 함수로 양극화를 시켜 결과를 도출해 냈는데 시그모이드 활성함수를 도입하여 결정값을 discrete한 값에서 continuous한 값(연속값)으로 만들어주었다.
  • 오류 역전파 알고리즘을 사용했다.
    • 다층 퍼셉트론은 여러 층이 순차적으로 이어진 구조이므로, 역방향으로 진행하며 한 번에 한 층씩 gradient를 계산하고 가중치를 갱신하는 방식의 오류 역전파 알고리즘을 사용한다.

핵심 아이디어 1 : 특징 공간 변환

 

퍼셉트론 2개를 사용하여 XOR 문제 해결

 

XOR는 다음과 같다.

 

{0, 0} = 0

{0, 1} = 1

{1, 0} = 1

{1, 1} = 0

 

퍼셉트론 두 개를 사용하면 다음과 같이 XOR을 잘 분리할 수 있다.

 

 

첫 번째 퍼셉트론과 두 번째 퍼셉트론이 모두 +1이면 값은 1,

그렇지 않으면 값은 0이 되도록 퍼셉트론을 설정하면 XOR 문제를 해결 가능하다.

 

이 때 사용한 퍼셉트론 2개를 병렬 결합하면 원래 공간 x=(x_1, x_2)^T를 새로운 특징 공간 z=(z_1, z_2)^T로 변환한다.

그러면 새로운 특징 공간 z에서 선형 분리가 가능하게 된다. 즉, 문제를 푸는데 훨씬 유리한 공간으로 바꿀 수 있고, 그 공간에서 또 다른 의미를 찾을 수 있다.

 

위 작업은 사람이 수작업 특징 학습(hand-craft features learning)을 수행한 것과 유사하다.

(ex)비슷한 것끼리 묶는 작업... 가령 색깔에 의해 분류할 수도 있고, 모양에 의해 분류할 수도 있다. 즉, 사람이 느끼는 가장 도드라진 특징으로 분류하는 작업을 특징 학습이라 할 수 있다.)

-> 표현 학습(샘플을 표현하는데 가장 뛰어난 특성과 이런 특성을 원본 데이터에서 추출하는 방법 https://broscoding.tistory.com/307)


다층 퍼셉트론의 용량

 

일반화해서, p개 퍼셉트론을 결합하면 p차원 공간으로 변환하게 된다. 단, 원 공간에서의 특징은 유지하되, 그 특징이 더 두드러지게끔 만든다.


핵심 아이디어 2 : 활성함수

 

계단함수는 딱딱한 의사결정 -> 영역을 점으로 변환

그 외 활성함수는 부드러운 의사결정 -> 영역을 영역으로 변환

  • logistic sigmoid
  • hyporbolic tangent sigmoid
  • softplus & rectifier Linear Unit(Relu)

 

 

시그모이드 함수

 

이진 시그모이드 함수 (범위 0 ~ 1)

양극 시그모이드 함수 (범위 -1 ~ 1)

그 외 다양한 활성함수

 

logistic sigmoid와 tanh는 α가 커질수록 계단함수에 가까워짐

모두 1차 도함수 계산이 빠름 (특히 ReLU는 비교 연산 한 번. 그래서 심층학습에 많이 쓰임.)

 

일반적으로 은닉층에서 logistic sigmoid를 활성 함수를 많이 사용.

-> 그러나 logistic sigmoid는 양 끝값이 0으로 수렴하게 되기 때문에 0*미분값을 전달해버리면 아무리 오류값, 미분값, 그 어느 값을 전달해도 0이 되어버린다. 즉, gradient vanish 문제가 발생하게 됨.

Courtesy of  https://www.desmos.com/calculator

∴ 깊은 신경망에서는 ReLU를 활용하여 grandient vanish 문제를 없앤다.


다층 퍼셉트론 구조

 

d+1개의 입력 노드 (이 때, d는 특징의 개수), c개의 출력 노드 (c는 부류 개수(정답 개수))

p개의 은닉 노드 (p는 하이퍼 매개변수=사용자가 정해주는 매개변수)

-> p가 너무 크면 과잉적합이 되고, 너무 작으면 과소적합이 된다. -> 하이퍼 매개변수를 최적화해야 한다!

(p가 더 특징을 추출하는 요소)

 

2층 퍼셉트론의 매개변수(가중치 행렬)

 

U^1 : 입력-은닉층 연결

U^2 : 은닉층-출력 연결


동작

 

결국 은닉층은 특징 벡터 x를 출력 벡터 o로 사상(mapping)하는 함수로 간주할 수 있다.

각 노드가 수행하는 연산을 구체적으로 쓰면

 

j번째 은닉 노드 연산

k번째 출력 노드 연산

2층 퍼셉트론 동작을 행렬로 표기

 

은닉층은 특징 벡터를 분류에 더 유리한 새로운 특징 공간으로 변환해준다.

현대 기계학습에서는 이를 특징학습(feature learning / data-driven features)이라 부름

 

특징이 두드러지는 부분은 은닉층을 거치면 거칠수록 더욱 두드러지게 됨.


구조

 

  • 범용적 근사 이론(universal approximation theorem)
    • 하나의 은닉층은 함수의 근사 표현
      -> 다층 퍼셉트론도 공간을 변환하는 근사 함수
  • 얕은 은닉층의 구조
    • 지수적으로 더 넓은 폭이 필요할 수 있음
    • 더 과잉적합 되기 싶다.
      -> 일반적으로 깊은 은닉층의 구조가 좋은 성능을 갖게 된다.
  • 지수의 표현(exponential representation)
    • 각 은닉층은 입력 공간을 어디서 접을지 지정
      -> 지수적으로 많은 선형적 영역 조각들(의미적으로 공간이 나눠지고, 더 심플하게 나눌 수 있을 것)
  • 성능 향상
    • 실제 레이어가 깊어지면 깊어질수록 test accuracy가 높아진다.

다층 퍼셉트론 시각화 - https://playground.tensorflow.org

 

Tensorflow — Neural Network Playground

Tinker with a real neural network right here in your browser.

playground.tensorflow.org


모델 성능 향상을 위한 경험의 중요성

 

  • 아키텍처
    • 은닉층과 은닉 노드의 개수
      • 은닉층과 은닉 노드를 늘리면 신경망의 용량은 커지지만, 추정할 매개변수가 많아지고 과잉적합의 가능성이 커진다.
        -> 현대 기계 학습은 복잡한 모델은 사용하되, 적절한 규제 기법(L1, L2)을 적용
  • 초깃값
    • 초깃값은 보통 난수를 생성하여 설정하는데, 값의 범위가 분포가 중요
  • 학습률
    • 처음부터 끝까지 같은 학습률을 사용하는 방식
    • 처음에는 큰 값으로 시작하고 점점 줄이는 적응적 방식
  • 활성함수
    • (초창기) logistic sigmoid, tanh
      -> 은닉층의 개수를 늘림에 따른 gradient vanish 문제 발생
    • 깊은 신경망에 ReLU 함수 사용

오류 역전파 알고리즘

 

훈련집합


목적함수

 

평균 제곱 오차(mean squared error, MSE)로 정의

 

온라인 모드와 배치모드가 큰 차이는 없다.

배치 모드는 데이터를 n개만큼 나눠 나눈 갯수만큼의 평균 제곱 오차를 더하는 것,

온라인 모드는 전부에 대한 평균 제곱 오차를 구하는 것.

요즘엔 대부분 배치 모드로 사용.


연쇄 법칙(Chain rule)의 구현

 

반복되는 부분식들(subexpressions)을 저장하거나 재연산 최소화

ex) 동적 프로그래밍(dynamic programming)

ex2 ) 경사도 계산을 위한 연산 그래프

 

f(w)라는 부분식이 반복됨

 

2층 퍼셉트론의 목적함수

 

Θ={U^1, U^2}

 

J(Θ) = ({U^1, U^2})의 최저점을 찾아주는 경사 하강법


오류 역전파 알고리즘

 

오류 역전파 출력의 오류를 역방향으로 전파해 경사도를 계산하는 알고리즘

반복되는 부분식들의 경사도의 지수적 폭발 혹은 사라짐을 피해야 한다.(그래서 심층 학습은 ReLU를 쓴다고 했다..)

 

우리가 원하는 것 = Downstream gradients 

우리에게 있는 것 = local gradient, Upstream gradient

 

Downstream gradients를 얻기 위하여 local gradient와 Upstream gradient를 계산하여 chain rule을 통해 두 gradient를 곱해주면 된다.

 

ex) 곱셈의 역전파

in_1 = x

in_2 = y

out = xy라고 가정하자.

그러면 backpropagation 과정이 당연하게 성립함을 알 수 있다.

 

ex2) 덧셈의 역전파같은 경우는

local gradient = 1이 되기 때문에 각 노드마다 output gradient만이 전달된다.

 

ex3) 전개(fanout)의 역전파 예

 

 

각 노드마다 chain rule을 적용시켜 구한 값을 전부 더한다.

즉, sum(backprop)이라고 생각하면 된다.

 

 

오류 역전파에 대해 잘 정리되어 있는 사이트 - https://velog.io/@kangtae/EECS-498-007-598-005-6.-Backpropagation

'AI > KDT 인공지능' 카테고리의 다른 글

[06/28] 심층학습 기초2  (0) 2021.06.28
[06/24] 심층학습 기초  (0) 2021.06.24
[06/22] 라이브 세션  (0) 2021.06.22
[06/21] 신경망의 기초  (0) 2021.06.21
[06/16] 인공지능과 기계학습  (0) 2021.06.16

+ Recent posts