Neural Networks

Wonny·2024년 1월 21일

딥러닝

목록 보기
1/6
post-thumbnail

신경망을 사용하는 이유가 무엇이냐는 질문을 받으면 뭐라고 답할 것 같나요?

저는 단지 "성능이 더 잘 나와서?" 라고 밖에 대답을 못했을 것 같습니다.

왜 성능이 더 잘 나오는 지를 물어본다면 대답을 제대로 못했을 것 같아요.

그것이 제가 공부해온 방식. . .

그저 코딩하는 걸 좋아하고 모델 만드는 것에 급급해서
기본적인 이론조차 제대로 모르는 스스로가 너무 창피해서
이론 공부의 시간을 꾸준히 가지려고 합니다.

그래서 이번 포스팅은 기본 중의 기본인 신경망을 다뤄보겠습니다.

1. Neural Networks

그럼 신경망을 사용하는 이유가 무엇일까요?

데이터를 분류하는 상황을 가정해봅시다.

직선 하나만 그으면 완벽히 분류되는 그런 이상적인 상황은 거의 없습니다.

대부분의 데이터는 선형적으로 분리되지 않기 때문입니다.

따라서 선형 분류기를 이용한다면 분류 성능이 제한될 것입니다.

하지만 비선형 분류기를 사용한다면 좀 다를 것 같아요.

아래 같이 곡선을 그려 분류한다면 직선보다는 더 잘 분류할 수 있을 것 같습니다.

이러한 경계를 비선형 결정 경계(non-linear decision boundaries)라고 하는데요.

신경망은 이러한 비선형 결정 경계를 만드는 분류기 중 하나입니다.

따라서 신경망을 사용하는 이유는
성능이 더 잘 나오기 때문이라는 말도 맞지만
비선형 경계를 만들어 데이터를 더 잘 분리함으로써 성능을 높이기 때문이라는 말이 더 적절한 것 같습니다.

신경망은 비선형 결정 경계를 만듦으로써 선형 모델보다 분류 성능을 더 높일 수 있다.

2. A Neuron

뉴런은 n개의 입력을 받아 하나의 출력을 만들어내는 일반적인 계산 유닛입니다.

아래 그림을 통해 여러 입력을 받아 aa라는 하나의 출력을 만드는 것을 확인할 수 있습니다.

서로 다른 뉴런들은 서로 다른 출력을 만들어 내는데요.

그 이유는 뉴런에 따라 파라미터(가중치)가 다르기 때문입니다.

예를 들어 입력 x1x_1이 1번 뉴런에 입력될 때의 가중치가 w11w_{11}, 2번 뉴런에 입력될 때의 가중치가 w12w_{12}라면
이 때 w11w_{11}w12w_{12}가 서로 다르므로 뉴런들도 서로 다른 출력을 만들어 내는 것입니다.

뉴런의 예로는 시그모이드, 이항 로지스틱 회귀 등이 있습니다.

뉴런이 시그모이드일 때를 예로 들면

  • 뉴런이 n차원 입력 벡터 xx를 받아 스칼라 값 출력 aa를 생성
  • 이 뉴런은 n차원 가중치 벡터 ww와 편형 스칼라 bb를 가짐
  • 따라서 이를 시그모이드 함수로 표현하면
    a=11+exp((wTx+b))a = \frac{1}{1+\text{exp}(-(w^T x + b))}

참고로 편향 bb는 입력이 0일 때도 뉴런이 일정한 출력을 만들 수 있도록 출력의 기준점을 조정해주는 역할을 합니다.

뉴런은 여러 입력을 받아 하나의 출력을 생성하며 서로 다른 뉴런은 서로 다른 출력을 만든다.

3. A Single Layer of Neurons

아래 그림같이 입력 벡터 xx가 여러 개의 뉴런에 동시에 입력되는 경우를 생각해봅시다.

1번 뉴런부터 m번 뉴런까지 존재할 때 우리는 다음과 같이 뉴런의 출력 값을 표현할 수 있습니다.

a1=11+exp((w(1)Tx+b1))am=11+exp((w(m)Tx+bm))a_1 = \frac{1}{1+\text{exp}(-(w^{(1)T} x + b_1))}\\ \vdots \\ a_m = \frac{1}{1+\text{exp}(-(w^{(m)T} x + b_m))}

n번 뉴런의 가중치는 w(n)Tw^{(n)T}이며 편향은 bnb_n이고 출력은 ana_n입니다.

출력, 편향, 가중치 집합을 다음과 같이 스칼라로 나타낼 수도 있습니다.

σ(z)=[11+exp(z1)11+exp(zm)],     b=[b1bm]Rm,     W=[ w(1)T  w(m)T ]Rm×n\sigma (z) = \begin{bmatrix}\frac{1}{1+exp(-z_1)}\\ \vdots \\ \frac{1}{1+exp(-z_m)}\end{bmatrix}, \ \ \ \ \ b = \begin{bmatrix}b_1 \\ \vdots \\ b_m\end{bmatrix} \in \R^m , \ \ \ \ \ W = \begin{bmatrix}-\ w^{(1)T} \ - \\ \vdots \\ -\ w^{(m)T} \ -\end{bmatrix} \in \R^{m \times n}

σ(z)\sigma(z)는 뉴런의 출력 값 집합, bb는 편향 집합, WW는 가중치 집합입니다.

위 식에서는 w(n)Tx+bnw^{(n)T} x + b_n의 형태가 아닌 znz_n으로 표현되었음을 확인할 수 있습니다.

따라서 σ(z)\sigma(z)로 표현할 수도 있고 σ(Wx+b)\sigma(Wx+b)로도 표현할 수 있습니다.

뉴런의 출력은 최종적으로 활성화 함수를 거치며 이때 가중치와 편향 그리고 이전 레이어의 출력 xx이 사용된다.

4. Feed-forward Computation

지금까지는 입력 벡터 xx가 어떻게 시그모이드 유닛 계층에 입력되어 활성값 aa를 생성하는 지 알아보았는데요.

이제 활성 값 계산에 대한 직관적인 예(개체명 인식)를 통해 순방향 계산에 대해 살펴보겠습니다.

여기서 잠시!

개체명 인식이란 자연어 처리 분야의 기술 중 하나로, 텍스트에서 특정한 의미를 가진 '개체명'을 찾아내고, 미리 정의된 카테고리(범주)로 분류하는 작업을 말합니다.

"Museums in Paris are amazing"이란 문장이 있을 때 단일 은닉층 신경망에 대한 차원을 구성해봅시다.

각 단어를 4차원 단어 벡터로 표현한다고 가정하고 5 단어 윈도우를 입력으로 사용하면
입력 xx는 20차원(4 x 5 = 20)의 실수 전체 집합입니다.

간단히 나타내면 아래와 같은 형태일 것입니다.

신경망은 아래와 같은 형태입니다.

다음과 같은 가정을 해봅시다.

  • 은닉층에 8개의 시그모이드 유닛 사용 m=8\rightarrow m = 8
  • 은닉층의 활성 값들로부터 1개의 출력 스코어를 생성

위 가정으로부터 다음을 도출할 수 있습니다.

  • WR8×20W \in \R^{8 \times 20} \rightarrow 은닉층에 유닛 개수가 8개이고 입력 벡터 xx의 차원 수는 20(4 x 5)
  • bR8b \in \R^8 \rightarrow 은닉층 유닛 개수가 8개이므로 편향도 유닛 별로 한 개씩
  • UR8×1U \in \R^{8 \times 1} \rightarrow UU는 출력층 직전의 가중치들을 의미, 즉 은닉층의 유닛이 8개이고 출력층의 유닛은 1개이므로 8 x 1
  • sRs \in R \rightarrow - ss는 실수 하나를 출력

그렇다면 이 과정에서 feed-forward computation은 어떻게 일어날까요?

  • 먼저 뉴런의 출력 값이 1차적으로 계산됩니다. z=Wx+b\rightarrow z = Wx + b
  • 이 출력이 시그모이드를 거쳐 뉴런의 최종 출력(활성 값)이 계산됩니다. a=σ(z)\rightarrow a = \sigma(z)
  • 은닉층의 활성 값으로부터 ss를 계산합니다. UTa\rightarrow U^T a \ldots
    (UTU^T 역시 가중합을 표현한 것이며 마지막 가중치는 WW가 아닌 UU로 표현됩니다.)

여기서 중심 단어인 "Paris"가 개체명인지 아닌지 분류하고자 합니다.

단순히 윈도우 안에 특정 단어들이 존재하는지 아닌지만을 판단해서는 제대로 분류할 수 없습니다.

"Paris" 주변의 단어를 살펴봤을 때 "in"이 있는지 없는지를 파악하는 것은
선형적인 특징을 가지므로 개체명 분류같은 복잡한 관계를 학습하는 데 큰 도움이 되지 않습니다.

오히려 "Museums" 다음에 "in"이 함께 등장하는가 같이 단어 간 조합이나 순서를 고려하는 것이
비선형적인 특징을 가지므로 복잡한 결정을 내리는 데 큰 도움이 될 수 있습니다.

입력을 단순히 소프트맥스 함수에 넣어서 판단하는 것(선형 분류기에 가까움)만으로는
이러한 비선형 결정(non-linear decision)을 포착하기는 어렵습니다.

따라서 중간 계층의 scoring을 통하면 이러한 관계(복잡한 패턴)를 표현할 수 있습니다.

중간 계층(intermediate layer)의 scoring를 활용하는 방식은 다음과 같습니다.

  • URm×1U \in \R^{m \times 1} 행렬을 사용
  • 이 행렬과 은닉층의 활성 값을 곱하면(UTaU^T a) 정규화되지 않은 점수 생성 가능
    s=UTa=UTf(Wx+b)s = U^Ta = U^Tf(Wx+b)
  • 여기서 ff는 활성 함수

어렵게 생각할 필요 없습니다.

수식을 보면 알 수 있듯이 은닉층에서 출력층으로 향할 때 일어나는 순방향 계산을 이용하자는 건데
이는 신경망을 활용하면 복잡한 패턴을 포착할 수 있다는 말과 같습니다.

신경망의 순방향 계산을 활용하면 scoring 등을 통해 복잡한 패턴을 표현할 수 있다.

5. Maximum Margin Objective Function

신경망도 대부분의 머신러닝 모델과 마찬가지로 최적화 목적 함수(optimization objective fuction)을 필요로 합니다.

최적화 목적 함수를 사용하기 위해선 먼저 error나 성능을 측정해야 하고
이 error를 최소화하거나 성능을 최대화하는 것이 학습의 목적이 됩니다.

이번 섹션에서 다룰 최대 마진 목적 함수의 아이디어는
정답으로 레이블링 된 데이터 포인트에 대한 점수가 오답으로 레이블링 된 데이터보다 더 높게 나오도록 하는 것입니다.

예를 들어 "Museums in Paris are amazing"이라는 문장 윈도우를 정답 윈도우라 하고 이에 대한 점수를 ss라 해봅시다.

반면에 "Not all museums in Paris"를 오답 윈도우라 하고 이에 대한 점수는 scs_c라고 하겠습니다.

여기서 c_c는 corrupt의 약자입니다.

손실 함수의 구성

목적 함수는 원래 정답 점수는 크도록, 오답 점수는 작도록, 즉 sscs - s_c를 최대화하는 것입니다.

이것은 scss_c - s를 최소화하는 것과 같은 의미이기도 합니다.

손실을 계산하는 경우를 다음의 경우로 한정합니다.

  • sc>ss_c > s, 즉 scs>0s_c - s > 0인 경우

왜 이 경우로만 한정할까요?

정답 점수가 오답 점수보다 낮을 때만 문제가 있다고 간주하기 때문입니다.

따라서 손실 함수는 다음과 같이 정의됩니다.

minimize J=max(scs,0)\text{minimize}\ J = \text{max}(s_c - s, 0)

하지만 이 손실 함수는 margin of safety가 없습니다.

여기서 margin of safety는 정답 점수가 오답 점수보다 크더라도 얼마의 여유를 줄 지를 말합니다.

margin of safety가 없으면 두 점수를 비교할 때 정답 점수가 오답 점수보다 조금이라도 높기만 하면 된다는 기준을 갖습니다.

따라서 margin of safety를 부여하여 정답 점수가 오답 점수보다 일정한 여유(\triangle)만큼은 더 높아야 한다고 강제합니다.

따라서 손실은 ssc<s - s_c < \triangle(정답 점수가 오답 점수보다 크더라도 그 차이가 \triangle보다 작을 때)일 때 발생하도록 합니다.

이에 따라 손실 함수를 다시 정의하면

minimize J=max(+scs,0)\text{minimize}\ J = \text{max}(\triangle + s_c -s, 0)

보통은 margin(\triangle)을 1로 설정합니다.

따라서 margin을 1로 설정하여 다시 손실 함수를 정의하면

minimize J=max(1+scs,0)\text{minimize}\ J = \text{max}(1 + s_c - s, 0)

참고로 다른 파라미터들이 margin에 맞춰 조정되므로 성능에 영향을 주진 않습니다.

여기서 scs_css는 다음과 같습니다.

sc=UTf(Wxc+b)s=UTf(Wx+b)s_c = U^Tf(Wx_c+b)\\ s = U^Tf(Wx+b)

마지막 레이어의 가중치 UU와 이전 레이어의 출력 f(Wx+b)f(Wx+b)의 곱을 통해 최종 결과 ss가 출력된다는 수식입니다.

최대 마진 목적 함수의 아이디어는 정답 점수가 오답 점수보다 더 높게 나오도록 하는 것이다.

6. 정리

지금까지 신경망, 뉴런, 순방향 계산 및 최대 마진 목적 함수를 간단히 살펴보았습니다.

순방향 계산을 알아봤으니 역방향 계산, 즉 오차 역전파도 살펴봐야겠지요.

다음 포스팅은 역전파에 대해 알아보겠습니다.

0개의 댓글