검수요청.png검수요청.png

다층퍼셉트론

해시넷
이동: 둘러보기, 검색

다층퍼셉트론(Multi-layer Perceptron, MLP)은 입력층과 출력층 사이에 하나 이상의 중간층이 존재하는 신경망으로 전방향(feedforward) 인공신경망(ANN)의 한 종류이다. 영어 약자로 MLP(엠엘피)라고 한다.

개요[편집]

다층퍼셉트론은 입력층과 출력층 사이에 하나 이상의 중간층이 존재하는 신경망이다. 네트워크는 입력층, 은닉층, 출력층 방향으로 연결되어 있고, 각 층내의 연결과 출력층에서 입력층으로 직접적 연결이 없다. 이를 전방향(feedforward) 네트워크 또는 순전파라고 한다. 다층퍼셉트론은 단층 퍼셉트론과 유사한 구조를 가지지만, 중간층과 각 구성단위의 입출력 특성을 비선형으로 하여 네트워크 능력을 향상시켜 퍼셉트론의 단점들을 극복했다. 다층퍼셉트론의 동작원리는 단층퍼셉트론의 동작원리와 크게 다를 것이 없다. 다른점은 단층퍼셉트론은 활성함수가 1개라는 점이고, 다층퍼셉트론은 은닉층과 출력층에 존재하는 활성 함수가 여러 개이며, 이에 따라 가증치도 여러개인 것이다. 다층퍼셉트론의 동작원리는 다음과 같다.

  1. 각 층에서의 가증치를 임의의 값으로 설정한다. 보통 0으로 설정하게 되는데, 각 층에서 바이어스 값은 1로 설정한다.
  2. 하나의 트레이닝 데이터에 대해 각 층에서 순입력 함수값을 계산하고 최종적으로 활성 함수에 의한 출력값을 계산한다.
  3. 출력층의 활성 함수에 의한 결과값과 실제값이 허용오차 안에 들도록 각층에서 가중치를 변경한다.
  4. 모든 트레이닝 데이터에 대해서 출력층의 활성 함수에 의한 결과값과 실제값이 허용오차안에 들면 학습을 종료한다.

다층퍼셉트론은 단층퍼셉트론과 달리 입력층과 출력층 사이에 은닉층이 존재하고, 은닉층의 출력값에 대한 기준값을 정의할 수 없기 때문에 은닉층에서 어떤값이 출력되어야 맞는지에 대한 기준이 없다. 다층퍼셉트론에서는 출력층에서 발생하는 오차값을 이용해 은닉층으로 역전파시켜 은닉층에서 발생하는 오차값에 따라 은닉층의 가증치를 업데이트한다.

역사[편집]

다층퍼셉트론은 1986년에 발표되어, 소개되자마자 새로운 가능성으로 엄청난 주목을 받았다. 1960년대에 거의 소멸되다시피한 신경망 연구의 부활을 알리는 신호탄이었기 때문이다. 물론 그 이전에도 몇 가지 신경망 모델들이 연구되고 발표되었으나 본격적인 횃불을 올린 것은 바로 다층퍼셉트론 모델이었다. 다층퍼셉트론이 발표된 지 얼마 되지 않아 미국의 세즈노스키(Sejno-wski)는 백프로퍼게이션 학습 알고리즘을 이용한 다층퍼셉트론 모델을 사용하여 문자를 음성으로 합성하는 네토크(NETtalk) 모델을 개발하였다. 이 모델은 미국에서 열린 컴퓨터 관련 학술 대회에 빠짐없이 전시되어 신경망의 새로운 유행에 일조하였다. 수백 번의 전시를 통하여 텍스트를 발음할 수 있는 신경망의 능력에 많은 사람들이 감탄하였으며 그것을 계기로 신경망 연구에 입문하는 사람들이 급격히 불어났다. 다층퍼셉트론의 가장 성공적인 적용의 예는 XOR 문제다. 이 문제는 전술한 바와 같이 0과 1의 입력 가운데 똑같은 입력쌍에 대해서는 0이 출력되고 서로 다른 입력에 대해서는 1이 출력되도록 학습하는 문제다.

1960년대에 단층퍼셉트론이 해결할 수 없었던 학습에 관한 대표적인 이 문제를 해결함으로써 신경망 연구는 새로운 출발점을 맞이하였다. 이를 계기로 많은 사람들이 신경망에 대한 기본적인 이해를 하게 되었으며 다수의 사람들이 신경망 연구에 몰두하였다. 미국의 이브 쇼빈(Yves Ch-auvin)같은 사람은 XOR 문제에 대하여 은닉 유닛의 수 및 학습계수의 변화가 학습의 속도에 주는 영향을 조사하였다. 여러 번의 실험 결과 단지 두 번만이 지역 최소점에 빠져 정확한 해를 구할 수 없었고 나머지 경우에는 모두 정확한 해를 구하였다.

다층퍼셉트론의 또 다른 성공적인 적용은 패리티(Parity) 문제였다. 패리티 문제는 입력 패턴이 홀수 개의 1을 포함한 경우에만 1을 출력하는 문제인데 매우 유사한 입력에 대해 다른 출력을 내지 않으면 안되므로 일반적인 네트워크를 이용하여 풀기에는 쉽지 않은 문제다. 중간층의 내부 표현을 통하여 이 문제를 정확하게 풀었다는 것은 다층퍼셉트론이 뛰어난 기능을 지녔음을 의미한다고 볼 수 있다.

그 외 다층퍼셉트론이 해결한 초창기의 문제들로는 부호화(Encoding) 문제, 대칭성 시메트리(Sy-mmetry) 문제, 덧셈 문제, 부정(Negation) 문제, T-C 판별 문제 등이 있다. 이러한 문제 해결에 있어서의 결정적인 요인으로는 은닉층을 사용함으로써 신경망의 내부 표현이 풍부하게 되었다는 점이다. 이를 계기로 하여 음성 인식. 음성 합성을 비롯한 다층퍼셉트론 모델의 본격적인 응용이 이어졌다. [1]

구조[편집]

레이어[편집]

다층퍼셉트론은 비선형 활성 노드의 3개 이상의 레이어로 구성된다. 다층퍼셉트론은 완전하게 연결되어 있기 때문에, 한 레이어의 각 노드는 다음 레이어의 모든 노드에 특정 중량 와 연결된다.[2]

덴스 레이어(Dense Layer)

덴스 레이어는 입력과 출력을 모두 연결해 준다. 예를 들어 입력 뉴런이 4개, 출력 뉴런이 8개 있다면 총 연결선은 32개(4*8=32)이다. 각 연결선에는 가중치(weight)를 포함하고 있는데, 이 가중치가 나타내는 의미는 연결강도라고 보면 된다. 현재 연결선이 32개이므로 가중치도 32개가 된다. 가중치가 높을수록 해당 입력 뉴런이 출력 뉴런에 미치는 영향이 크고, 낮을수록 미치는 영향이 적다. 예를 들어 성별을 판단하는 문제에 있어서, 출력 뉴런의 값이 성별을 의미하고, 입력 뉴런에 머리카락 길이, 키, 혈액형 등이 있다고 가정했을 때, 머리카락 길이의 가중치가 가장 높고, 키의 가중치가 중간이고, 혈액형의 가중치가 가장 낮게 나올 것이다. 딥러닝 학습 과정에서 이러한 가중치들이 조정된다. 이렇게 입력 뉴런과 출력 뉴런을 모두 연결한다고 해서 전결합층이라고 불리고, 케라스에서는 덴스라는 클래스로 구현이 되어 있다. 주요 인자는 다음과 같다.

  • 첫 번째 인자: 출력 뉴런의 수를 설정한다.
  • input_dim: 입력 뉴런의 수를 설정한다.
  • init: 가중치 초기화 방법 설정한다.
  • uniform: 균일 분포
  • normal: 가우시안 분포
  • activation: 활성화 함수를 설정한다.
  • linear: 디폴트 값, 입력 뉴런과 가중치로 계산된 결과값이 그대로 출력으로 나온다.
  • relu: 정류기(rectifier) 함수, 은익층에 주로 쓰인다.
  • sigmoid: 시그모이드 함수, 이진 분류 문제에서 출력층에 주로 쓰인다.
  • softmax: 소프트맥스 함수, 다중 클래스 분류 문제에서 출력층에 주로 쓰인다.

덴스 레이어는 입력 뉴런 수에 상관없이 출력 뉴런 수를 자유롭게 설정할 수 있기 때문에 출력층으로 많이 사용된다. 이진 분류 문제에서는 0과 1을 나타내는 출력 뉴런이 하나만 있으면 되기 때문에 아래 코드처럼 출력 뉴런이 1개이고, 입력 뉴런과 가중치를 계산한 값을 0에서 1 사이로 표현할 수 있는 활성화 함수인 시그모이드를 사용한다. 덴스 레이어는 보통 출력층 이전의 은닉층으로도 많이 쓰이고, 영상이 아닌 수치 자료 입력 시에는 입력층으로도 많이 쓰인다. 이때 활성화 함수로 렐루(relu)가 주로 사용된다. 렐루는 학습 과정에서 역전파 시에 좋은 성능이 나는 것으로 알려져 있다.[3]

활성화 함수[편집]

만약 다층 지각변동기가 모든 뉴런, 즉 가중 입력을 각 뉴런의 출력에 매핑하는 선형 함수에서 선형 활성화 기능을 가지고 있다면, 선형 대수학에서는 어떤 층도 2층 입출력 모델로 축소할 수 있음을 보여준다. 다층퍼셉트론에서 일부 뉴런은 생물학적 뉴런의 작용 전위 또는 발화 빈도를 모델링하기 위해 개발된 비선형 활성화 기능을 사용한다. 역사적으로 공통적인 두 가지 활성화 기능은 둘 다 시그모이드(sigmoids)이며, 아래 식에 의해 설명된다.

최근 딥러닝의 전개에서는 정류기 신경망, 정류기 선형단위(ReLU)가 시그모이드와 관련된 수치적 소실 구배 문제를 극복할 수 있는 방법 중 하나로 더 자주 사용된다. 첫째는 쌍곡선 접선이며, 다른 하나는 로지스틱 함수로 모양은 비슷하지만 0부터 1까지이다. 번째 노드(뉴론)의 출력이며, 는 입력 연결의 가중치 합이다. 또한 정화기 신경망과 정화기 및 소프트플러스 기능을 포함한 대체 활성화 기능이 제안되었다.[2]

계단 함수

퍼셉트론은 활성화 함수로 계단 함수(step function)를 이용한다. 계단 함수는 선형 함수의 결과를 이진 분류로 나타내기 위한 함수이다. 특정 임계값을 넘기면 활성화된다. 특정값 이상일 경우, 0에서 멈추어 있다가 어느 기점에서 1로 바뀐다.[4]

시그모이드 함수

시그모이드 함수(sigmoid fuction)는 선형 함수의 결과를 0부터 1까지의 비선형 형태로 변형하기 위한 함수이다. 로지스틱 회귀와 같이 분류 문제에서 확률을 표현하기 위해 사용한다. 신경망에서 입력을 받아서 출력을 돌려주는 변환기라고 할 수 있다. 계단함수에 비해 완만한 곡선 형태로 비선형이다. 특정 경계를 기준으로 출력이 확 바뀌어 버리는 계단함수와 달리 시그모이드 함수는 완만하고 매끄럽게 변화하는데 이 매끄러움이 신경망 학습에서 중요하며, 활성화 함수로 시그모이드 함수를 사용하는 이유이기도 하다. 신경망에서는 활성화 함수를 통해서 각 노드(뉴런)로부터 받은 신호를 변환하고, 변환된 신호를 다음 뉴런으로 전달한다. 실제로는 계단 함수와 시그모이드 함수는 사용되지 않는 것으로 보인다. 시그모이드 함수는 깊이가 깊어질수록 중앙보다 양극으로 쏠리는 형태이기 때문에 데이터의 양극화가 일어나고, 극에 가까울수록 변화량이 작기 때문에 파라미터를 학습시키는 그래디언트 값이 매우 작아지게 되는 문제점이 있다. 그리고 결과값이 항상 양수이기 때문에 오차 역전파 시 체인룰에 의해 계산되는 그래디언트 값이 부호 편향적이다. 또한 1보다 항상 값이 작기 때문에 오차 역전파 시 체인룰에 의해 계산되는 그래디언트 값이 네트워크가 깊어질수록 크기가 작아져서 그래디언트가 제대로 반영되지 않는다는 문제점이 있어 현재 잘 쓰이지 않는다.[5]

하이퍼볼릭 탄젠트

하이퍼볼릭 탄젠트(Hyperboloc tangent) 함수는 시그모이드 함수의 문제를 해결하기 위해 나온 함수이다. 선형 함수의 결과를 -1부터 1까지의 비선형 형태로 변형하기 위한 함수이다. 시그모이드 함수와 형태는 매우 유사하나, 평균이 0이기 때문에 결과값이 양수로 편향되어 있던 문제는 해결되었지만 여전히 나머지 문제는 해결되지 않았다.[5]

렐루 함수

렐루(ReLU) 함수는 가중치 곱의 합이 0보다 크면 그 값을 그대로 반환하고 0보다 작으면 0을 반환하는 활성화 함수이다. 이를 수식으로 표현하면 다음과 같다.

 

시그모이드 함수의 가장 큰 문제점이였던 매우 작은 그래디언트 값은 렐루가 선형 함수이기 때문에 1보다 큰 영역에서 그래디언트가 다음 레이어로 그대로 전달이 되기 때문에 그래디언트에 대해서는 악영향을 주지 않게 되었다. 연산 속도 역시 exp에 비해 매우 빨라졌다. 비록 선형 함수의 꼴을 하고 있지만 깊은 신경망에 여러 개의 렐루 함수가 들어가게 되면 비선형 함수와 비슷한 모습을 가지게 된다. 모든 것을 해결해 줄 것 같은 렐루이지만 한 가지 단점이 있었는데, 0보다 작은 값을 출력하게 될 경우, 그래디언트가 0에 계속해서 머물 가능성이 생기게 된다. 그래디언트가 0을 가지게 되면 해당 가중치는 학습이 완료되는 순간까지 0으로 남기 때문에 학습이 이루어지지 않는다.[6] 이 문제를 죽은 렐루(dying ReLU)라고 한다.

리키 렐루

리키 렐루(Leaky ReLU) 함수는 죽은 렐루를 보완하기 위해 등장한 함수이다. 렐루와 거의 유사하지만 한 가지 차이점은 가중치 곱의 합이 0보다 작을 때의 값도 약간 고려한다는 것이다. 리키렐루의 수식은 다음과 같다.[6]

 

리키 렐루 함수는 0보다 작은 영역에서 0이 아닌 매우 작은 에 비례하는 값을 가지고 있어서 렐루의 장점을 가지면서도 0 이하의 값에서 가중치들이 죽어버리는 현상을 해결할 수 있었다.[6] 리키 렐루 함수는 입력값이 음수일 경우에 0이 아니라 0.001과 같은 매우 작은 수를 반환하도록 되어 있다. a는 하이퍼 파라미터로 새는 정도를 결정하며 일반적으로는 0.01의 값을 가진다. 여기서 말하는 '새는 정도'라는 것은 입력값의 음수일 때의 기울기를 비유하고 있다.

 a = 0.1
 def leaky_relu(x):
    return np.maximum(a*x, x)
 x = np.arange(-5.0, 5.0, 0.1)
 y = leaky_relu(x)
 plt.plot(x, y)
 plt.plot([0,0],[5.0,0.0], ':')
 plt.title('Leaky ReLU Function')
 plt.show()
외부 선형 단위

외부 선형 단위(Exponential Linear Unit)는 2105년 B.Xu et al.의 논문에서 제안된 활성화 함수이다. 외부 선형 단위의 수식은 다음과 같다.

 

ELU는 렐루와 달리 다음과 같은 특성을 가진다.

  • 일 때 ELU 활성화 함수 출력의 평균이 0(zero mean)에 가까워지기 때문에 편향 이동(bias shift)이 감소하여 그래디언트 소실 문제를 줄여준다. 하이퍼파라미터인 ​는 ​가 음수일 때 ELU가 수렴할 값을 정의하며 보통 1로 설정한다.
  • 이어도 그래디언티가 0이 아니므로 죽은(dead) 뉴런을 만들지 않는다.
  • 일 때 ELU는 ​에서 급격하게 변하지 않고 모든 구간에서 매끄럽게 변하기 때문에 경사하강법에서 수렴 속도가 빠르다.[7]

학습[편집]

예상 결과 대비 출력 오류의 양에 따라 각 데이터가 처리된 후 연결 가중치를 변경함으로써 학습이 수용자에서 이루어진다. 이것은 감독된 학습의 예로서, 선형 수용체에서 최소 평균 제곱 알고리즘의 일반화인 백프로파게션(backpropagation)을 통해 수행된다.

th 데이터 지점(훈련 예)의 출력 노드 에서 오류 정도를 으로 나타낼 수 있다. 여기에서 는 목표값이고 4는 수용자에 의해 생성된 값이다. 노드 가중치는 아래 식으로 주어진 전체 출력의 오류를 최소화하는 보정에 기초하여 조정할 수 있다.

구배 강하를 사용하면 각 무게의 변화는 아래의 식과 같다.

여기에서 는 이전 뉴런의 출력이고 은 '학습 속도'가 된다. 이 변화는 무게들이 진동 없이 반응으로 빠르게 수렴되도록 하기 위해 선택된다.

계산할 파생 상품은 유도 국소장 에 따라 달라지는데 그 자체도 다르다. 출력 노드의 경우 이 파생 상품을 아래의 식으로 단순화할 수 있다는 것을 쉽게 증명할 수 있다.

여기에서 은 위에서 설명한 활성화 함수의 파생이며, 그 자체도 다양하지 않다. 가중치를 숨겨진 노드로 변경하는 것이 더 어려운 분석이지만, 관련 파생상품이 아래의 식이라는 것을 알 수 있다.

각주[편집]

  1. 136 다층 퍼셉트론의 응용〉, 《전자신문》, 1994-08-04
  2. 2.0 2.1 Multilayer perceptron Wikipedia - https://en.wikipedia.org/wiki/Multilayer_perceptron
  3. Taeyoung Kim, 〈다층 퍼셉트론 레이어 이야기〉, 《깃허브》, 2017-01-27
  4. 데이터 분석하는 문과생 싸코, 〈문과생도 이해하는 딥러닝 (2) - 신경망 Neural Network〉, 《티스토리》, 2017-10-18
  5. 5.0 5.1 록, 〈2주차 딥러닝 - 다층신경망, 활성화 함수, 손실 함수 그리고 텐서보드〉, 《데이터마켓》, 2017-05-16
  6. 6.0 6.1 6.2 book, 〈딥러닝 발전 과정〉, 《퀀티랩》, 2020-03-10
  7. Excelsior-JH, 〈05-1. 심층 신경망 학습 - 활성화 함수, 가중치 초기화〉, 《티스토리》, 2018-10-05

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 다층퍼셉트론 문서는 인공지능 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.