3 분 소요

단층 퍼셉트론 신경망 구조

단층 퍼셉트론은 퍼셉트론을 한 줄로 배치하여 입력 벡터 하나로부터 출력 벡터 하나를 얻어내는 신경망 구조이다.

출력 벡터를 얻어내기 위해서는, 출력 벡터의 크기 만큼 퍼셉트론이 있어야한다.

또 가중치와 편향이라는 것이 있는데, 학습 과정 중 이 값을 조정하면서 학습하여 정확도를 높이게 된다. 이렇게 학습 과정 중에 계속 변경되어 가면서 퍼셉트론의 동작 특성을 결정하는 값들을 (모델)파라미터 라고한다.

가중치는 (입력벡터크기, 퍼셉트론 개수)형태의 행렬이며 편향은 퍼셉트론 별로 가산되는 스칼라 값으로서, (퍼셉트론 개수)형태의 벡터이다. 이때 출력벡터 y는 다음과 같이 계산된다.

\[\begin{pmatrix}y_1 & y_2& y_3\\ \end{pmatrix} = \begin{pmatrix}x_1&x_2&x_3&x_4 \end{pmatrix}\begin{pmatrix}w_{11}&w_{21}&w_{31}\\w_{12}&w_{22}&w_{32}\\w_{13}&w_{23}&w_{33}\\ w_{14} & w_{24} & w_{34}\end{pmatrix} + \begin{pmatrix}b_1&b_2&b_3\\ \end{pmatrix}\] \[\begin{pmatrix}y_1\\y_2\\y_3\\ \end{pmatrix} = \begin{pmatrix}w_{11}&w_{12}&w_{13}&w_{14}\\w_{21}&w_{22}&w_{23}&w_{24}\\w_{31}&w_{32}&w_{33}&w_{34}\\ \end{pmatrix} \begin{pmatrix}x_1\\x_2\\x_3\\x_4\\ \end{pmatrix} + \begin{pmatrix}b_1\\b_2\\b_3\\ \end{pmatrix}\]

보통은 여기서 $w_{xy}$에서 x는 x번째 퍼셉트론을 의미하여, y는 y번째 입력원소를 의미한다. b는 편향 벡터이다.

여러 퍼셉트론 열을 두어 정확도를 높이기도 한다. 퍼셉트론 열을 계층이라고 부른다. 출력 계층은 결과를 최종 출력하는 계층이고, 은닉 계층은 출력 계층앞에 있는 계층이다.

텐서 연산과 미니배치의 활용

텐서는 딥러닝에서, 다차원 숫자 배열이다. 파이썬에서 반복문보다 텐서 연산이 더 빠르다. 그리고 미니배치란 여러 데이터를 한꺼번에 처리하는 것을 의미한다. 미니배치는 특정 학습 데이터에 너무 영향을 받지 않게 해준다. 또한 학습 데이터 전체에 대한 한 차례 처리를 에포크(epoch)라 부른다.

퍼셉트론이 하나만 있을 때는 입력벡터 x, 출력 스칼라 y,가중치 벡터 w에 대하여 $y = x_1w_1 +…+ x_nw_n + b = \textbf{w}^T \textbf{x}+b$로 나타낼 수 있다. 반복문을 사용하여 계산하는 것보다, 벡터의 내적을 이용해 계산하는 것이 더 빠르다. 단층 퍼셉트론의 퍼셉트론 열이 데이터 하나를 처리할때는 ‘단층 퍼셉트론 신경망 구조’파트에서 나온 것 같이 $\textbf{y=W}^T \textbf{x+b}$이다. 미니 배치 처리의 경우 입력 벡터가 여러개 있는 것, 즉 입력 행렬이 들어간다고 생각하면 된다. 미니 배치 처리의 경우 $\textbf{y=W}^T \textbf{X+b}$ 로 표현할 수 있다. (여기서 얇은 소문자는 스칼라, 굵은 소문자는 벡터, 굵은 대문자는 행렬을 의미한다.)

에포크 수나 미니배치 크기처럼 학습과정에서 변경되지 않으면서 결과에 영향을 미치는 요인을 하이퍼 파라미터라고 한다.

신경망의 세 가지 기본 출력 유형과 회귀 분석

  • 회귀 분석
    • 하나의 특징값을 숫자로 추정
    • 입력 정보로부터 미지의 값을 직접 추정
  • 이진 판단
    • 예/아니오 가운데 한쪽을 선택
    • 입력 정보로부터 예의 확률 추정
  • 선택 분류
    • 몇 가지 후보 항목 중 하나를 선택
    • 입력 정보로부터 후보간 확률 분포 추정

회귀 분석과 평균제곱오차(MSE) 손실 함수

딥러닝 학습시 실제값에 비해 추정값이 얼마나 정확한지 보여줄 지표가 필요하다. 회귀 분석에서는 보통 평균제곱오차를 쓴다. 신경망 출력(추정)이 $(t_1,t_2,…,t_n)$ 이고, 실제값이 $(y_1,y_2,…,y_n)$ 일 때 평균제곱오차는 다음과 같다.

\[\frac{1}{n} \sum^n_{i=1}(t_i - y_i)^2\]

평균제곱오차는 항상 0 이상이고, 정답과 모두 일치할 때 0이된다. 계산이 쉬워 회귀 분석에서 사용된다.

딥러닝에서 손실함수(비용함수)란, 값이 항상 0이상이며 추정이 정확해질수록 0에 가까워진다. 즉 학습시, 이 값을 최소화하는 것을 목표로 하게 된다.

경사하강법과 역전파

경사하강법은 함수의 기울기를 반복 계산하고, 이 기울기를 이용하여 함숫값이 낮아지는 방향으로 이동하는 알고리즘이다. 또 순전파와 역전파 과정을 번갈아 반복 수행한다.

  • 순전파: 입력 데이터에 대해 신경망 구조를 따라가면서 현재의 파라미터값들을 이용해 손실함수값 계산
  • 역전파: 순전파의 계산을 거꾸로 하여 손실 함숫값에 영향을 미친 모든 성분에 대해 손실 기울기를 계산하는 과정이다. 뒤에서 보겠지만, 계산된 손실 기울기를 이용하여 파라미터 값을 변경한다.

손실 함수는 항상 0이상이고 추정이 정확해질수록 0에 가까워지므로, $z=x^2 + y^2$같은 그래프라고 가정하자. 여기서 x,y는 파라미터이다. z는 손실함수의 값이다. 그러면 손실함수를 $f(x,y)$라 하고, $x=x_i, y=y_i$일때 다음으로 쓸 파라미터 값 $x_j$, $y_j$는 다음과 같이 계산할 수 있다.

\[x_j = x_i - \alpha \frac{\partial f(x_i,y_i)}{\partial x}\] \[y_j = y_i - \alpha \frac{\partial f(x_i,y_i)}{\partial y}\]

여기서 $\alpha$ 는 학습률이라고 부르는 것으로, 학습 속도를 조절하는 하이퍼 파라미터이다. 너무 작으면 최적값에 도달하기 너무 오래걸릴 것이고, 너무 크면 최적값을 지나쳐버릴 것이다. 생각하기 쉽게 $y=x^2$ 같은 그래프에서, 최적값은 x=0일때인데, 미분값이 마이너스일때는 x<0 이므로 x를 증가하여야한다. 반대로 미분값이 플러스라면 x>0이므로 x를 감소시켜야한다. 그래서 위 식에서 미분값에 마이너스가 붙어는 것이다. 또한 미분값이 클때는 최적값에서 멀어진 상태이므로 많이 이동하고, 미분값이 작을 때는 최적값에 가까워진 상태이므로 적게 이동해야한다. 이런 것이 위 식에 반영되어있다(일반적으로 파라미터는 매우 많으므로 최소값을 찾기 위한 공식이 따로없어 위와 같은 방식을 이용하여 바닥점을 찾는다.).

전미분이 아닌 편미분을 사용하는 이유는 전미분은 x가 다른 변수를 통해 f(x)값에 간접적으로 영향을 주는 것까지 고려해야하므로 복잡하기 때문에 간단한 편미분을 사용하는 것이다.

경사하강법의 약점은 local minimum에 있다. local minimum은 아래 그림에서 보면 파란점 부분이라고 볼 수 있다. 위에서 설명하였듯이 기울기가 양수면 x를감소시키고, 기울기가 음수이면 x를 증가시키게 된다. 따라서 파라미터의 값이 파란점에 도달하면, 더이상 움직이지 못한다. 즉, 노란색 부분 global minimum에 도달할 수 없는 것이다.

local minimum

편미분과 손실 기울기의 계산

편미분의 연쇄적 관계를 이용한 역전파 처리과정을 보자.
f(x)를 어떤 모델이라고 했을 때 순전파에서 x가 구해지고 y=f(x)가 계산되며 y를 이용하여 손실함수 L이 계산된다. 역전파에서는 y의 손실 기울기 $\frac{\partial L}{\partial y}$ 를 구하고 $\frac{\partial L}{\partial x}$ 를 계산하여 다음 x를 계산하게 된다. 이떄 연쇄법칙을 사용한다.

\[\frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \frac{\partial y}{\partial x} = \frac{\partial L}{\partial y}\frac{\partial f(x)}{\partial x}\]

입력이 여러개인 경우, 각 입력 성분에 대한 손실기울기는

\(\frac{\partial L}{\partial x_i} = \frac{\partial L}{\partial y} \frac{\partial y}{\partial x_i} = \frac{\partial L}{\partial y}\frac{\partial f(x_1,...,x_n)}{\partial x_i}\) 이다.

출력이 여러개인 경우 \(\frac{\partial L}{\partial y} = \frac{\partial L}{\partial y} + ... +\frac{\partial L}{\partial y_{n}}\) 이다.

예를 들어보자. $y=f(\textbf{x}) = \textbf{w}^T\textbf{x}$ 라는 최적의 w를 찾아야할 함수가 있다고 하자. 실제값을 $r$라고 하면 손실함수는 다음과 같다.

\[(y-r)^2=(f(\textbf{x})-r)^2 = (\textbf{w}^T\textbf{x}-r)^2 = (w_0x_0 + w_1x_1+...+w_nx_n-r)^2\]

이제 손실 기울기 $\frac{\partial L}{\partial y_i}$ 를 구해보자. $\frac{\partial L}{\partial y_i}$ 는 다음과 같다.

\[\frac{\partial L}{\partial y_i} = \frac{\partial \sum (y-r)^2}{\partial y_i} = 2(y_i-r)\]

또한 $\frac{\partial f(\textbf{x})}{\partial w_i}$ 는 다음과 같다.

\[\frac{\partial f(\textbf{x})}{\partial w_i} = \frac{\partial (w_0x_0 + w_1x_1+...+w_nx_n)}{\partial w_i} = x_i\]

따라서 손실 기울기는 다음과 같다. \(2(y_i-r)x_i\)

따라서 다음 $w_{i}$ 는 다음과 같이 정해질 수 있다.

\(w_i \leftarrow w_i -\alpha (y_i-r)x_i\) 여기서 2는 $\alpha$ 에 포함되어있다.

그러면 bias에 대한 손실 기울기는 어떻게 될까? $w_0$가 bias일때는 항상 $x_i$는 1이므로 위 식에서 $x_i = 1$로 치환하면 된다.

또 만약, x_i의 손실기울기는 위의 연쇄법칙을 사용하면 다음과 같이 구할 수 있다.

\[\frac{\partial L}{\partial x_i} = \frac{\partial L}{\partial y} \frac{\partial f(\textbf{x})}{\partial x_i} = (f(\textbf{x})-r)w_i\]

2는 생략하였다.

요약하자면, $w_1$에 대한 손실 기울기는 y에대한 손실 기울기에 f(x)를 $w_1$으로 편미분한 값을 곱하면 된다.

비선형 정보와 원-핫 벡터

전복 데이터에서 성별은 유충,수컷,암컷이 있다. 그러나 이것을 신경망에 어떻게 정보로 주어야할까? 0,1,2로 구분할까? 그러나 성별은 어떤 선형적인 관계가 있는 것이 아니다. 만약 0,1,2로 표현한다면 신경망은 유충과 수컷은 가깝고, 유충과 암컷은 멀다고 생각한다. 따라서 이런 경우 원-핫 벡터로 표현한다. 원-핫벡터란 비선형정보를 항목별로 분할하여 해당 항목만 1, 나머지는 0으로 나타내는 방식을 뜻한다. 유충은 (1,0,0), 수컷은 (0,1,0), 암컷은 (0,0,1)로 표현할 수 있다.

Reference

  • 윤덕호 저, [파이썬 날코딩으로 알고 짜는 딥러닝], 한빛미디어, 2019
  • https://hyjykelly.tistory.com/38

댓글남기기