다층퍼셉트론
다층퍼셉트론(Multi-layer Perceptron)은 입력층과 출력층 사이에 하나 이상의 중간층이 존재하는 신경망으로 전방향(feedforward) 인공신경망(ANN)의 한 종류이다.
개요
다층퍼셉트론은 입력층과 출력층 사이에 하나 이상의 중간층이 존재하는 신경망이다. 네트워크는 입력층, 은닉층, 출력층 방향으로 연결되어 있고, 각 층내의 연결과 출력층에서 입력층으로 직접적 연결이 없다. 이를 전방향(feedforward) 네트워크 또는 순전파라고 한다. 다층퍼셉트론은 단층 퍼셉트론과 유사한 구조를 가지지만, 중간층과 각 구성단위의 입출력 특성을 비선형으로 하여 네트워크 능력을 향상시켜 퍼셉트론의 단점들을 극복했다. 다층퍼셉트론의 동작원리는 단층퍼셉트론의 동작원리와 크게 다를 것이 없다. 다른점은 단층퍼셉트론은 활성함수가 1개라는 점이고, 다층퍼셉트론은 은닉층과 출력층에 존재하는 활성 함수가 여러 개이며, 이에 따라 가증치도 여러개인 것이다. 다층퍼셉트론의 동작원리는 다음과 같다.
- 각 층에서의 가증치를 임의의 값으로 설정한다. 보통 0으로 설정하게 되는데, 각 층에서 바이어스 값은 1로 설정한다.
- 하나의 트레이닝 데이터에 대해 각 층에서 순입력 함수값을 계산하고 최종적으로 활성 함수에 의한 출력값을 계산한다.
- 출력층의 활성 함수에 의한 결과값과 실제값이 허용오차 안에 들도록 각층에서 가증치를 변경한다.
- 모든 트레이닝 데이터에 대해서 출력층의 활성 함수에 의한 결과값과 실제값이 허용오차안에 들면 학습을 종료한다.
다층퍼셉트론은 단층퍼셉트론과 달리 입력층과 출력층 사이에 은닉층이 존재하고, 은닉층의 출력값에 대한 기준값을 정의할 수 없기 때문에 은닉층에서 어떤값이 출력되어야 맞는지에 대한 기준이 없다. 다층퍼셉트론에서는 출력층에서 발생하는 오차값을 이용해 은닉층으로 역전파시켜 은닉층에서 발생하는 오차값에 따라 은닉층의 가증치를 업데이트한다.
구조
레이어
다층퍼셉트론은 비선형 활성 노드의 3개 이상의 레이어로 구성된다. 다층퍼셉트론은 완전하게 연결되어 있기 때문에, 한 레이어의 각 노드는 다음 레이어의 모든 노드에 특정 중량 와 연결된다.[1]
- 덴스 레이어(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)가 주로 사용됩니다. 렐루는 학습 과정에서 역전파 시에 좋은 성능이 나는 것으로 알려져 있다.[2]
활성화 함수
만약 다층 지각변동기가 모든 뉴런, 즉 가중 입력을 각 뉴런의 출력에 매핑하는 선형 함수에서 선형 활성화 기능을 가지고 있다면, 선형 대수학에서는 어떤 층도 2층 입출력 모델로 축소할 수 있음을 보여준다. 다층퍼셉트론에서 일부 뉴런은 생물학적 뉴런의 작용 전위 또는 발화 빈도를 모델링하기 위해 개발된 비선형 활성화 기능을 사용한다. 역사적으로 공통적인 두 가지 활성화 기능은 둘 다 시그모이드(sigmoids)이며, 아래 식에 의해 설명된다.
최근 딥러닝의 전개에서는 정류기 신경망, 정류기 선형단위(ReLU)가 시그모이드와 관련된 수치적 소실 구배 문제를 극복할 수 있는 방법 중 하나로 더 자주 사용된다. 첫째는 쌍곡선 접선이며, 다른 하나는 로지스틱 함수로 모양은 비슷하지만 0부터 1까지이다. 는 번째 노드(뉴론)의 출력이며, 는 입력 연결의 가중치 합이다. 또한 정화기 신경망과 정화기 및 소프트플러스 기능을 포함한 대체 활성화 기능이 제안되었다.[1]
- 계단 함수
퍼셉트론은 활성화 함수로 계단 함수(step function)를 이용한다. 계단 함수는 선형 함수의 결과를 이진 분류로 나타내기 위한 함수이다. 특정 임계값을 넘기면 활성화된다. 특정값 이상일 경우, 0에서 멈추어 있다가 어느 기점에서 1로 바뀐다.[3]
- 시그모이드 함수
시그모이드 함수(sigmoid fuction)는 선형 함수의 결과를 0부터 1까지의 비선형 형태로 변형하기 위한 함수이다. 로지스틱 회귀와 같이 분류 문제에서 확률을 표현하기 위해 사용한다. 신경망에서 입력을 받아서 출력을 돌려주는 변환기라고 할 수 있다. 계단함수에 비해 완만한 곡선 형태로 비선형이다. 특정 경계를 기준으로 출력이 확 바뀌어 버리는 계단함수와 달리 시그모이드 함수는 완만하고 매끄럽게 변화하는데 이 매끄러움이 신경망 학습에서 중요하며, 활성화 함수로 시그모이드 함수를 사용하는 이유이기도 하다. 신경망에서는 활성화 함수를 통해서 각 노드(뉴런)로부터 받은 신호를 변환하고, 변환된 신호를 다음 뉴런으로 전달한다. 실제로는 계단 함수와 시그모이드 함수는 사용되지 않는 것으로 보인다. 시그모이드 함수는 깊이가 깊어질수록 중앙보다 양극으로 쏠리는 형태이기 때문에 데이터의 양극화가 일어나고, 극에 가까울수록 변화량이 작기 때문에 파라미터를 학습시키는 그래디언트 값이 매우 작아지게 되는 문제점이 있다. 그리고 결과값이 항상 양수이기 때문에 오차 역전파 시 체인룰에 의해 계산되는 그래디언트 값이 부호 편향적이다. 또한 1보다 항상 값이 작기 때문에 오차 역전파 시 체인룰에 의해 계산되는 그래디언트 값이 네트워크가 깊어질수록 크기가 작아져서 그래디언트가 제대로 반영되지 않는다는 문제점이 있어 현재 잘 쓰이지 않는다.[4]
- 하이퍼볼릭 탄젠트
하이퍼볼릭 탄젠트(Hyperboloc tangent) 함수는 시그모이드 함수의 문제를 해결하기 위해 나온 함수이다. 선형 함수의 결과를 -1부터 1까지의 비선형 형태로 변형하기 위한 함수이다. 시그모이드 함수와 형태는 매우 유사하나, 평균이 0이기 때문에 결과값이 양수로 편향되어 있던 문제는 해결되었지만 여전히 나머지 문제는 해결되지 않았다.[4]
- 렐루 함수
렐루(ReLU) 함수는 가중치 곱의 합이 0보다 크면 그 값을 그대로 반환하고 0보다 작으면 0을 반환하는 활성화 함수이다. 이를 수식으로 표현하면 다음과 같다.
시그모이드 함수의 가장 큰 문제점이였던 매우 작은 그래디언트 값은 렐루가 선형 함수이기 때문에 1보다 큰 영역에서 그래디언트가 다음 레이어로 그대로 전달이 되기 때문에 그래디언트에 대해서는 악영향을 주지 않게 되었다. 연산 속도 역시 exp에 비해 매우 빨라졌다. 비록 선형 함수의 꼴을 하고 있지만 깊은 신경망에 여러 개의 렐루 함수가 들어가게 되면 비선형 함수와 비슷한 모습을 가지게 된다. 모든 것을 해결해 줄 것 같은 렐루이지만 한 가지 단점이 있었는데, 0보다 작은 값을 출력하게 될 경우, 그래디언트가 0에 계속해서 머물 가능성이 생기게 된다. 그래디언트가 0을 가지게 되면 해당 가중치는 학습이 완료되는 순간까지 0으로 남기 때문에 학습이 이루어지지 않는다.[5]
- 리키 렐루
리키 렐루(Leaky ReLU) 함수는 렐루 함수의 단점을 보완하기 위해 등장한 함수이다. 렐루와 거의 유사하지만 한 가지 차이점은 가중치 곱의 합이 0보다 작을 때의 값도 약간 고려한다는 것이다. 리키렐루의 수식은 다음과 같다.[5]
리키 렐루 함수는 0보다 작은 영역에서 0이 아닌 매우 작은 에 비례하는 값을 가지고 있어서 렐루의 장점을 가지면서도 0 이하의 값에서 가중치들이 죽어버리는 현상을 해결할 수 있었다.[5]
각주
- ↑ 1.0 1.1 Multilayer perceptron Wikipedia - https://en.wikipedia.org/wiki/Multilayer_perceptron
- ↑ Taeyoung Kim, 〈다층 퍼셉트론 레이어 이야기〉, 《깃허브》, 2017-01-27
- ↑ 데이터 분석하는 문과생 싸코, 〈문과생도 이해하는 딥러닝 (2) - 신경망 Neural Network〉, 《티스토리》, 2017-10-18
- ↑ 4.0 4.1 록, 〈2주차 딥러닝 - 다층신경망, 활성화 함수, 손실 함수 그리고 텐서보드〉, 《데이터마켓》, 2017-05-16
- ↑ 5.0 5.1 5.2 book, 〈딥러닝 발전 과정〉, 《퀀티랩》, 2020-03-10
참고자료
- Multilayer perceptron Wikipedia - https://en.wikipedia.org/wiki/Multilayer_perceptron
- Taeyoung Kim, 〈다층 퍼셉트론 레이어 이야기〉, 《깃허브》, 2017-01-27
- 록, 〈2주차 딥러닝 - 다층신경망, 활성화 함수, 손실 함수 그리고 텐서보드〉, 《데이터마켓》, 2017-05-16
- 데이터 분석하는 문과생 싸코, 〈문과생도 이해하는 딥러닝 (2) - 신경망 Neural Network〉, 《티스토리》, 2017-10-18
같이 보기