딥러닝 발전 과정

Posted on Tue 10 March 2020 in book • 5 min read

최근 주목받는 딥러닝은 사실 오랜 역사를 역사를 가지고 있습니다. 이번 장에서는 딥러닝의 시초라 할 수 있는 퍼셉트론부터 발전된 형태의 인공 신경망을 거쳐 딥러닝으로 여겨지는 심층 신경망에 대해서 다룹니다.

퍼셉트론

퍼셉트론(perceptron)은 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 고안한 기초 형태의 인공 신경망입니다. 퍼셉트론의 구조는 다음 그림와 같습니다.

퍼셉트론

퍼셉트론의 구조

퍼셉트론은 입력값과 편향 값에 가중치(weight)를 곱하여 합한 값 즉, '가중치 곱의 합'이 임계치(threshold)를 넘어가면 1, 그렇지 않으면 0을 출력하는 활성화 함수(activation function)를 가집니다. 여기서 주목해야 할 점은 출력 값이 0 또는 1로 둘 중 하나라는 것입니다.

수식으로 표현해 보면 다음과 같습니다.

$$z=\sum_{i=0}^n{w_ix_i}$$
$$y=h(z)=\begin{cases}1&\text{if z > threshold}\\0&\text{else}\end{cases}$$

위에서 설명한 바와 같지만 수식에 쓰인 기호로 다시 설명해 보겠습니다. z는 가중치 곱의 합으로 입력값과 가중치를 곱하여 합한 값입니다. 함수 \(h\)는 활성화 함수로 \(z\)가 임계치보다 클 경우 0을 그렇지 않으면 0을 출력합니다.

\(x_0\)은 편향 값을 의미하고 \(x_1\)부터는 각 입력 값을 나타내는데, 이 둘 사이에 어떠한 차이가 있는지 알아보겠습니다. 입력은 외부에서 퍼셉트론에 들어오지만 편향은 퍼셉트론을 만들 때 엔지니어(우리)가 정하는 값입니다. 편향을 두는 이유는 임계치를 0으로 만들기 위해서입니다. 임계치를 정하는 일이 어렵거나 불가능할 수 있으며 임계치가 0이면 활성화 함수 구현 또한 편해집니다. 편향을 1로 정해 주면 학습 과정에서 \(w_0\)이 (임계치 × -1)에 근사해집니다. 학습 과정은 뒤에서 다룰 오차 역전파법 부분에서 이어서 설명하겠습니다.

퍼셉트론에서 학습 대상은 \(w_0\)을 포함한 전체 가중치입니다. 가중치를 적절히 조절함으로써 입력값을 적절히 선형으로 분리하여 1과 0으로 출력하는 것이 퍼셉트론의 목적입니다.

간단한 예로서 AND(논리합) 연산을 위한 퍼셉트론을 생각해 보겠습니다. AND 연산의 두 개의 입력값과 그 출력 값은 표 2.1과 같습니다.

AND 연산의 입력과 출력

\(x_1\) | \(x_2\) | y -- | -- | -- 0 | 0 | 0 0 | 1 | 0 1 | 0 | 0 1 | 1 | 1

이를 좌표로 표시하고 \(x_1\)\(x_2\)가 모두 1일 때만 양수가 되도록 편향과 가중치를 정해 보면 다음 그림과 같습니다.

AND 연산 퍼셉트론의 편향과 가중치

AND 연산 퍼셉트론의 편향과 가중치

편향을 -1로 정하고 각 가중치 \(<w_0, w_1, w_2>\)\(<1.5, 1, 1>\)로 정하면 가중치 곱의 합이 \(x_1\)\(x_2\)가 모두 1일 때만 양수이기 때문에 활성화 함수를 거치면 AND 연산의 결과인 \(y\)를 얻을 수 있습니다.

퍼셉트론은 선형으로 입력값을 분리하는데, 이러한 특성 때문에 비선형으로 분류해야 하는 문제는 풀지 못 합니다. 이러한 경우 퍼셉트론을 여러 층 쌓은 다층 퍼셉트론(multi-layer perceptron)을 사용하여 풀 수 있습니다. 다층 퍼셉트론은 인공 신경망의 구조와 크게 다르지 않기 때문에 여기서는 다루지 않겠습니다.

인공 신경망

인공 신경망(artificial neural network)은 다층 퍼셉트론에서 조금 더 발전된 모델입니다. 신경망은 다음 그림과 같이 입력층(input layer), 은닉층(hidden layer), 출력층(output layer)으로 구성되어 있습니다.

인공 신경망의 구조

인공 신경망의 구조

여기서 입력층의 노드는 편향을 포함한 입력값들을 표현합니다. 은닉층과 출력층의 진하게 표시한 노드들은 각각이 퍼셉트론입니다.

다양한 활성화 함수 출현

인공 신경망에서는 은닉층에서 다양한 활성화 함수를 사용할 수 있습니다.

활성화 함수란 생체 신경 세포의 시냅스 소포를 모방한 것으로서, 전위가 일정치 이상되면 소포가 터지면서 시냅스 간 연결이 되듯이, 활성화 함수로 들어오는 값이 일정한 값이 되었을 때 그 값이 다음 퍼셉트론으로 전달되게 하는 역할을 합니다. 다만 활성화 함수에 따라 다음 퍼셉트론으로 전달될 값이 변형될 수 있습니다.

이와 같은 활성화 함수의 종류에 따라서 신경망의 효율이 달라지기도 하는데, 이는 오차 역전파 시의 기울기 소실 문제와 관련이 있습니다. 다만, 이는 이 책의 범위를 벗어나므로 관심이 있는 분이라면 인공지능 관련 도서를 참고하시기 바랍니다.

여기서는 대표적인 활성화 함수인 계단 함수(step funtion), 렐루 함수(rectified linear unit function, ReLU), 리키렐루 함수(leaky rectified linear unit function, Leaky ReLU), 시그모이드 함수(sigmoid function), 쌍곡탄젠트 함수(hyperbolic tangent function, 즉 tanh function)를 알아보겠습니다.

계단함수

계단 함수는 앞서 퍼셉트론에서 다룬 활성화 함수입니다. 퍼셉트론에서의 계단 함수는 가중치 곱의 합이 0보다 작으면 0을, 0보다 크면 1을 반환하였습니다. 계단 함수에서 반환하는 값을 다르게 설정할 수 있습니다. 예를 들어 다음 수식의 계단 함수는 -1 또는 1을 반환합니다.

$$h(z)=\begin{cases}1&\text{if z > 0}\\0&\text{else}\end{cases}$$

계단 함수의 모양은 다음 그림과 같습니다.

계단 함수

계단 함수

렐루 함수

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

$$h(z)=\begin{cases}z&\text{if z > 0}\\0&\text{else}\end{cases}$$

이 함수는 인공 신경망의 은닉층에서 많이 쓰이는 활성화 함수입니다. 그 모양은 다음 그림과 같습니다.

렐루 함수

렐루 함수

리키렐루 함수

렐루의 변형으로 리키렐루가 있습니다. 렐루와 거의 유사하지만 한가지 차이점은 가중치 곱의 합이 0보다 작을 때의 값도 약간 고려한다는 것입니다. 리키렐루의 수식은 다음과 같습니다.

$$h(z)=\begin{cases}z&\text{if z > 0}\\x\times\alpha&\text{else}\end{cases}$$

이 때 α는 정하기 나름이지만 0.3 정도를 줄 수 있습니다. 그럼 그 모양이 다음 그림과 같아집니다.

리키 렐루 함수

리키 렐루 함수

선형 함수

선형 함수는 입력과 출력이 같은 직선 함수입니다. 수식을 굳이 적을 필요도 없겠지만 일관성을 위해서 적어보겠습니다.

$$h(z)=z$$

다음 그림과 같이 선형 함수의 모양은 말그대로 직선입니다.

선형 함수

선형 함수

시그모이드 함수

시그모이드 함수는 가중치 곱의 합을 0과 1사이의 값으로 조정하여 반환하는 활성화 함수이고 그 모양이 S자와 닮았습니다. 시그모이드 함수는 로지스틱(logistic) 함수 라고도 불리고 수식은 아래와 같습니다.

$$h(z)=\frac{1}{1+e^{-z}}=\frac{e^z}{e^z+1}$$

시그모이드 함수는 가중치 곱의 합이 0에서 양이나 음으로 커지면 반환하는 값이 급격하게 변하고 절대값이 2.5 이상일 때부터는 크게 변하지 않는 특징이 있습니다. 이 S자 모양을 변경할 수도 있으나 딥러닝에서는 일반적으로 있는 그대로 사용하므로 여기서는 다루지 않겠습니다.

시그모이드 함수의 모양은 다음 그림과 같습니다.

시그모이드 함수

시그모이드 함수

쌍곡탄젠트 함수

쌍곡탄젠트 함수(hyperbolic tangent, tanh 함수)는 시그모이드 함수와 유사한 모양을 가집니다. 쌍곡탄젠트 함수가 반환하는 값의 범위는 -1에서 1 사이의 값이며 가중치 곱의 합이 0에서 양이나 음으로 커질 때 시그모이드 함수보다 더욱 급격하게 변합니다. 쌍곡탄젠트 함수의 수식은 아래와 같습니다.

$$h(z)=\frac{\sinh{z}}{\cosh{z}}=\frac{\frac{1-e^{-2z}}{2e^{-z}}}{\frac{1+e^{-2z}}{2e^{-z}}}=\frac{1-e^{-2z}}{1+e^{-2z}}$$

쌍곡탄젠트 함수의 모양은 다음 그림과 같습니다.

쌍곡탄젠트 함수

쌍곡탄젠트 함수

출력층에서 활성화 함수를 사용

출력층에서도 활성화 함수를 사용하는데 일반적으로 회귀 문제에서는 선형 함수 또는 쌍곡탄젠트 함수를, 분류 문제에서는 시그모이드 함수 또는 소프트맥스(softmax) 함수를 사용합니다. 분류 문제의 경우 출력층에서 시그모이드 함수나 소프트맥스 함수를 사용하는 이유는 출력 값을 확률화 시키기 위해서입니다.

이항 분류 문제에서 시그모이드 함수가 0에서 1사이의 값을 반환하기 때문에 여기에 100을 곱하면 확률로 사용할 수 있습니다. 소프트맥스 함수는 다항 분류 문제에서 출력 값을 확률화시키기 위해서 사용합니다. 소프트맥스 함수는 분류될 수 있는 각 결과, 즉 레이블(label)에 대한 입력값에 지수(exponential)를 취해 합하여 분모로 취함으로써 정규화(normalization)합니다. 수식은 다음과 같습니다.

$$h(z_x)=\frac{e^{z_x}}{\sum_{i=1}^n{e^{z_i}}}$$

예를 들어 사진을 입력으로 받아서 이 사진을 개, 고양이, 소, 말로 분류하는 문제에서 개, 고양이, 소, 말이 각각 레이블이 되고 이들에 대한 지수화 출력 값의 합을 분모로 취하여 나누어 줍니다. 만약 각 레이블에 대한 지수화 출력 값이 1.1, 1.1, 1.7, 1.2였을 때 1.7에 대한 소프트맥스 값은 \(1.7/(1.1+1.1+1.7+1.2)\approx0.33\)이 됩니다.

심층 신경망

심층 신경망(deep neural network)은 은닉층이 2개 이상인 인공 신경망입니다. 다음 그림은 은닉층이 2개인 심층 신경망의 구조를 보여줍니다. 은닉층을 더 많이 쌓을 수도 있습니다.

심층 신경망의 구조

심층 신경망의 구조

은닉층의 수를 제외하고는 인공 신경망과 같습니다. 은닉층 수를 많이 쌓음으로써 인공 신경망이 비선형 문제를 좀 더 잘 학습할 가능성이 높아집니다. 그러나 은닉층이 많아지면 학습에 필요한 컴퓨팅 비용이 높아지고 사람이 학습을 추적하기가 매우 어려워집니다.

딥러닝(deep learning)은 이러한 심층 신경망을 이용한 머신러닝을 의미한다고 볼 수 있습니다. 은닉층의 수를 제외하고는 심층 신경망은 인공 신경망과 같아서 인공 신경망에서 사용하는 활성화 함수들을 그대로 적용할 수 있습니다.