"모바일 앱 환경에서는 latex 수식이 깨져 나타나므로, 가급적 웹으로 봐주시길 바랍니다."
오늘부터는 본격적인 딥러닝의 개념으로 들어간다. 오늘은 그 첫 번째 글로 '신경망'에 대한 이야기를 앞으로 3번에 걸쳐 해나가고자 한다.
신경망 (Neural network, Deep neural network)는 오늘날 딥러닝 모델의 뼈대를 이루고 있는 구조이다.
먼저 간단한 이미지를 통해 살펴보자.
신경망이란 결국 층 (layer)이 겹겹이 쌓여서 서로 연결되어져 있는 구조로 되어져 있다.
이때 데이터를 입력으로 받는 층을 입력층 (input layer), 최종적으로 모델의 output을 내놓는 층을 출력층 (output layer), 그리고 그 사이 겹겹이 쌓여져 있는 층을 은닉층 (hidden layer)라고 부른다.
결국 딥러닝은 이전 층에서 다음 층으로 특정한 연산을 거듭하여 진행하면서 신경망이 데이터의 '표현' (=특징) 을 학습하는 신경망 연산이 기초라고 할 수 있다.
과거 인공지능의 역사를 살펴보면 '인공지능의 겨울'이라고 불리우는 시기가 있었다.
위 간략한 인공지능 역사 그림을 보면 1st AI winter, 2nd AI winter라 불리우는 시기가 있었다.
이 중 1st AI winter는 1969년 퍼셉트론이 나온 이후 인공지능에 대한 큰 기대와 붐이 일어났는데, 퍼셉트론의 결정적인 문제점이 발견되면서 (XOR problem) 도래하였고 이를 퍼셉트론을 심층적으로 쌓아나간 신경망과 비선형 함수 (activation function, 추후 자세히 다룬다.) 등으로 해결하였고, 현재 신경망 학습의 근간을 이루는 역전파 (backpropagation)가 나오면서 다시 인공지능 부흥기가 찾아왔다.
하지만, 기존의 머신러닝보다 신경망을 학습시키는 딥러닝이 더 우월한지에 대한 의문은 여전히 남아있었고, 전통적인 통계 기반 알고리즘이나 머신러닝 알고리즘이 더 자주 쓰이면서 딥러닝에 대한 회의감은 계속 남아있었다.
이러다가 이를 결정적으로 깨부순 것이 2012년 이미지 분류 대회 (ILSVRC)에서 머신러닝 알고리즘을 딥러닝 기반의 모델인 CNN이 정확도에서 앞서며 1위를 차지한 사건이었고, 현재까지 이어지는 딥러닝 부흥기가 찾아오게 되었다.
이때 등장한 모델이 AlexNet이고 이 팀의 지도교수가 Geoffrey Hinton 교수로서 현재 딥러닝의 4대 천왕이라 불리우는 인물 중 하나이다.
CNN에 대해서는 신경망에 대한 기본적인 이야기가 마무리되면 자세히 다루도록 하겠다.
다시 본론으로 돌아와서, 신경망을 표현하는 가장 간단한 방법은 이를 함수로 바라보는 것이다.
정확히는 '합성 함수'로 바라보는 것이다.
신경망 모델을 $F$라 하자. 신경망은 결국 데이터라는 "input"을 받아서 특정한 output (eg : 강아지 사진, 고양이 사진 분류)을 내놓는 것이므로 이를 함수로 표현하는 것은 타당하다.
함수이면 당연히 파라미터가 있을 것이고, 이것이 바로 학습의 대상이 되는 변수이다. 이를 $w$로 표기하자.
데이터는 $(x, y)$로 표현하자. x는 data이고 y는 label이다. (supervised learning을 가정하자.)
그렇다면 신경망에서 이뤄지는 것은 결국 합성함수 연산이다.
입력층에서 첫 번째 은닉층, 첫 번째 은닉층에서 두 번째 은닉층, 두 번째 은닉층에서 세 번째 은닉층, 이렇게 최종적으로 출력층까지 점진적으로 연산이 이뤄지고, 각 층별로 이뤄지는 연산을 하나의 함수로 생각한다면 (이를 $f_i$로 표기하자.) 결국 신경망을 함수로 표현하면 $F = f_n(f_{n-1}(f_{n-2}(\cdots(f_1(w))))$이라 볼 수 있다.
여기서 우리의 목표는 결국 최적의 파라미터 $w$ 값을 찾는 것이고 이 과정을 우리는 학습 (training)이라 한다.
그리고 딥러닝의 학습 알고리즘은 역전파 알고리즘 (backpropagation)이며 이에 대해서는 뒤에서 자세히 다룰 것이다.
그렇다면 가중치와 데이터를 어떻게 연산하는 것일까? 간단하다. 선형 연산이 이뤄진다.
$x$를 벡터로 생각하고 $w$를 행렬로 생각한다면, 결국 행렬과 벡터의 곱셈이 이뤄지는 것이다.
물론, 여기에 특정한 값들로 이뤄진 벡터 (bias, $b$)를 더하기도 하지만 이것은 옵션이므로 본 설명에서는 무시하겠다.
예를 들어 $n-2$번째 hidden layer에서는 $W_{n-2}^Tx$연산 (또는 $W_{n-2}^tx + b$)연산이 이뤄지고, 이것이 다음 hidden layer ($n-1$번째) 의 input으로 들어간 다음 또다시 $W_{n-1}^T(W_{n-2}^Tx)$ 연산이 이뤄진다.
하지만 이러한 선형 연산만 계속해서 진행된다면 어떤 문제가 있을까?
딥러닝은 많은 hidden layer를 심층적으로 쌓아간 신경망 모델로 학습이 이뤄지는데, 위와 같이 계속해서 선형 연산만 반복한다면 layer를 얼마나 많이 쌓든지간에 하나의 행렬에 대한 벡터 곱 (W := W_{n} \cdots W_1)으로 나타낼 수 있고, 이는 결국 선형 변환에 국한되는 것이다. 그렇다면 비선형 변환은 신경망 함수 $F$가 표현할 수 없기 때문에 신경망의 표현력 (representation power)에 한계가 존재하는 것이다.
바꿔 말하면 입력을 받았을 때 이를 원하는 출력으로 변환할 수 있는 규칙을 신경망이 스스로 학습하면서 찾아나가는 것인데, 이 규칙이 '선형성'을 지닌다면 너무 많은 제약이 존재하는 것이다.
이를 해결하기 위해서는 결국 비선형 연산을 추가해줘야 하고, 이를 위해 등장한 것이 활성화 함수 (activation function)이다.
그리고 비선형성을 지닌 활성화 함수를 연산 중간에 추가해주는 이러한 신경망 함수 $F$를 우리는 '연속 조각적 선형 함수'라고 부른다. (continuous piecewise linear, CPL)
활성화 함수를 $\sigma()$로 표현하자.
그렇다면 하나의 hidden layer를 가지는 신경망 함수를 다음과 같이 표현할 수 있다.
이때 $\sigma$함수에 선형 연산 결과를 input으로 집어넣으면서 비선형 변환을 하게 된다.
이와 같은 연산을 층층이 쌓여진 신경망에 적용하자 기존의 머신러닝 성능을 앞선 딥러닝의 시대가 도래하게 된 것이다.
그렇다면 이러한 활성화함수의 종류에는 무엇이 있을까?
오늘날 무수히 많은 종류의 활성화 함수가 있는데 가장 대표적인 것만 이야기하자면 다음과 같은 함수들이 있다.
오늘날에는 ReLU function, 또는 이를 살짝 변형한 꼴의 함수들이 activation function 으로 자주 쓰인다.
그렇다면 우리의 신경망 $F(w)$는 입력으로 $(x, y)$를 받아서 어떤 output을 내놓을 것이다.
그리고 그것이 우리가 원하는 정답 (label) $y$와 가능한 일치하길 원할텐데 이를 위해선 최적의 parameter $w$를 찾아야 할 것이다. 이를 위한 알고리즘이 앞서 소개한 Backpropagation algorithm이다.
다음 글에서는 이에 대해 자세하게 살펴보도록 하겠다.
'Deep dive into Deep learning' 카테고리의 다른 글
Deep dive into Deep learning part 12. 신경망 (3) - Updated (0) | 2023.04.16 |
---|---|
Deep dive into Deep learning part 11. 신경망 - Updated (0) | 2023.04.11 |
Deep dive into Deep learning part 9 - Updated (0) | 2023.04.02 |
Deep dive into Deep learning part 8. - Updated (0) | 2023.03.29 |
Deep dive into Deep learning part 7 - Updated (0) | 2023.03.22 |
댓글