다층 퍼셉트론(MLP) - 기본 구조
다층 퍼셉트론 신경망 구조
다층 퍼셉트론 신경망은 퍼셉트론 계층 여러개를 배치하여 입력 벡터로부터 중간 표현을 거쳐 출력 벡터를 얻어내는 신경망 구조이다. 입력과 출력 계층 사이에 있는 퍼셉트론 계층, 즉 입력 벡터를 처리한 뒤 다음 계층으로 넘기는 계층을 은닉 계층(즉, 출력에 직접 드러나지 않음)이라고 하며 은닉 계층이 생성하는 중간 표현을 은닉 벡터라 한다.
다층 퍼셉트론에서 각각의 계층은 단층 퍼셉트론과 같은 내부 구조를 갖는다. 즉 같은 계층 내의 퍼셉트론은 동일한 입력을 공유하지만 서로 영향을 주고받을 수 없다. 그러나 인접한 계층끼리는 앞 계층의 출력이 뒤 계층의 (모든 퍼셉트론의)입력으로 들어간다.
최종 단계에 배치된 계층은 알맞은 형태의 출력 벡터를 생성한다. 따라서 출력 계층이라는 별도 이름을 가지며, 출력 벡터의 크기도 문제에 따라 고정적으로 정해진다.
그러나 은닉 계층에는 이런 제한이 없다. 은닉 계층의 수와 폭은 자유롭게 설계할 수 있다. 은닉 계층의 폭은 해당 계층의 퍼셉트론 수이다. 퍼셉트론은 노드라고 하기도 한다.
입력 벡터 4개, 은닉 계층1이 노드 3개, 은닉 계층2가 노드 3개, 출력 계층이 4개의 노드로 구성되어있다면 첫번째 은닉계층은 4x3의 가중치 파라미터와 3개의 편향 파라미터를 합쳐 15개를 가지고 같은 방법으로, 2번쨰 파라미터는 3x3+3, 출력 계층은 3x4+4의 파라미터를 가지게 될 것이다.
무조건 은닉 계층 수나 폭을 늘린다고 하여 품질이 좋아지는 것은 아니다. 파라미터 수가 늘어나면, 더 많은 학습 데이터가 필요해지는 경향이 있다.
따라서 은닉 계층 수와 폭은 데이터양, 문제의 규모 등을 종합적으로 고려해야한다.
비선형 활성화 함수
은닉 계층은 선형 연산 결과를 바로 출력으로 내보내는 대신, 한 번 더 변형시켜 내보낸다. 비선형 활성화 함수를 추가하면 일차 함수 표현을 넘어서는 복잡한 형태의 퍼셉트론 출력을 만들 수 있다.
그러나 출력 계층에는 비선형 활성화 함수를 두지 않는데, 코드가 지나치게 복잡해지기 때문이다. 앞서 시그모이드와 소프트맥스를 사용했을 때도, 후처리에서 사용하였다.
은닉 계층에서 비선형 활성화 함수는 필수이다. 선형 처리를 여러 단계로 한다고 해도, 결국 하나의 선형 처리로 표현할 수 있기 때문이다. 예를 들어 y=ax+b와 z=cy+d 는 z=c(ax+b)+d = acx+bc+d로 하나의 식으로 표현할 수 있다.
ReLU함수
ReLU 함수는 음수 입력을 걸러내 0으로 만드는 기능을 제공한다. 은닉 계층의 비선형 활성화 함수로 가장 널리 이용된다.
ReLU는 x가 0보다 클때는 y=x, x가 0보다 같거나 작을 때는 y=0으로 정의된다.
시그모이드나 소프트맥스도 비선형 함수이지만, 복잡하여 잘 사용하지 않고, 소프트맥스는 한 계층에서 모든 퍼셉트론의 결과값을 합쳐 계산하므로, 적절하지 않다.
ReLU함수는 x=0에서 미분불가능이지만, 보통 x=0일때 기울기를 0으로 강제로 정한다. 즉 x가0보다 같거나 작을 때는 기울기를 0, x가 0보다 클때는 기울기를 1로 준다.
민스키의 XOR문제와 비선형 활성화 함수
민스키는 단층 퍼셉트론으로 XOR 함수를 구현할 수 없음을 지적했다. 입력 $x_1$, $x_2$ 그리고 출력 $y_1$에 대해 다음을 만족해야한다.
x_1 | x_2 | y_1 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
단층 퍼셉트론이 다음과 같은 출력을 만든다고 하자
\[y=f(x_1,x_2) = w_1x_1 + w_2y_2+b\]$x_2 = 0$ 일때 $x_1$이 증가하면 y도 증가한다. 반대로 $x_2=1$인 경우 $x_1$이 증가하면 y는 감소한다. $w_1$은 증가와 동시에 감소를 시켜야하는 아주 이상한 상황이 된다. 이제 비선형 함수를 이용하여 이 문제를 해결해보자
두개의 은닉 계층과 하나의 출력계층이 있다고 하자. 은닉계층의 가중치와 편향을 각각 $\textbf w, \textbf b$, 출력 계층의 가중치와 편향을 $\textbf v, c$라 하고, ,$w_1=1, w_2=2,b_1=0,b_2=2, v_1=1,v_2=-1,c_1=0$ 일때 다음과 같이 출력된다.
$l_1,l_2$는 은닉 계층을 통과한 후, $h_1,h_2$는 ReLU함수를 통과한 후 라고 할 때 다음과 같이 된다.
x_1 | x_2 | l_1 | l_2 | h_1 | h_2 | y |
---|---|---|---|---|---|---|
0 | 0 | 0 | -2 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 2 | 2 | 2 | 2 | 0 |
즉 비선형 함수를 사용하면 선형함수가 표현하지 못하는 것도 표현할 수 있음을 알 수 있다.
Reference
- 윤덕호 저, [파이썬 날코딩으로 알고 짜는 딥러닝], 한빛미디어, 2019
댓글남기기