튜링 머신
1900년대 초반 힐베르트 프로그램으로 시작된 인류의 새로운 목표 '생각하는 기계' 만들기가 시작되었다. 그렇게 괴델을 거쳐 튜링이 고안해낸 튜링 머신으로 현재 컴퓨터의 청사진이 나왔다.
튜링 머신은 세상의 모든 문제를 해결할 수 없었지만 튜링은 할 수 있는 범위 내에서 생각하는 생각하는 기계, 인공 지능을 만들고 싶었다. 그런데 지능의 범위가 어디까지 일까? 덧셈을 하면 지능이 있는 것일까? 사진을 분류할 수 있으면 지능이 있는 것일까? 그래서 튜링은 현재 인공지능을 테스트하는 데 많이 사용되는 튜링테스트를 1950년에 개발했다. 인공지능의 발전은 현재 LLM이 나오고 AGI에 대해 생각해볼 수 단계까지 오게 되었다. 이번 글에서는 머신 러닝부터 딥러닝의 현주소까지 살펴보고자한다.
Machine Learning
ML은 일종의 프로그래밍이다. 기존 앱은 명시적 프로그래밍으로 결정론적으로 설계되어 있다. 같은 input이면 같은 output이 나옴. 이러한 프로그래밍으로 구현할 수 있는 한계점이 분명했다.
- Spam filter: many rules
- Automatic driving: too many rules
이러한 명시적 프로그래밍을 하지 않고도 컴퓨터가 계산(학습)할 수 있는 능력을 연구하는 분야가 머신 러닝이다. "Field of study that gives computers the ability to learn without being explicitly programmed" Arthur Sameul(1959). 그래서 머신 러닝은 프로그램인데, 개발자가 일일히 모든 조건을 정하지 않고 특정 데이터를 주어지면 학습하여 답을 추론해낸다.
superviesd learning (지도 학습)
정해져있는 데이터(labeled examples 또는 training set)를 통해 학습하는 것을 뜻한다.
- ex) [cat, dog, mug, hat] 등을 분류하기 위해서 각 label이 붙여진 데이터를 주고 학습한다. 유명한 머핀과 강아지를 구분하지 못하는 것도 이러한 학습에서 비롯된다.
ML에서 다뤄지는 가장 흔한 문제들은 여기에 해당한다.
- Image labeling: 위에 cat, dog 처럼 태그된 이미지를 학습한다.
- Email spam filter: 라벨링된 spam or ham 이메일을 학습한다.
- Predicating exam score: 이전 데이터(학습 시간과 시험 점수 상관관계)를 학습한다.
superviesd에서도 결과에 따라 종류가 나뉜다
- regression(회귀): 시험 결과 예측과 같이 넓은 범위에서 답을 추론하는 학습을 말한다.
- binary classification(이진 분류): pass(1)/non-pass(0)으로 답을 추론하는 학습을 말한다.
- multi-label classification(다중 레이블 분류): 성적(A,B,C, .., F)와 같이 다양한 레이블로 분류하여 답을 추론하는 학습을 말한다.
unsupervised learning (비지도 학습)
정해지지 않은 데이터(un-labeld data)를 통해 학습하는 것을 뜻한다.
- ex) Google new grouping, Word clustering
Linear Regression
Linear Regression 선형 회귀 모델을 학습한다는 것은 하나의 가설(hypothesis)을 세우는 것이다. 세상에는 선형적으로 설명되는 경우가 많다. 단순하게 'A이면 B이다.'라고 인과관계가 묶여있기 때문이다. 이를 선형 가설(Linear Hypothesis)이라고 한다. 예를 들어, '공부를 많이 할수록 성적이 높아진다.', '서울에 가까울수록 집값이 높다.' 등이 있다. 이를 그래프로 나타내면 1차 함수 H(x)=Wx+b로 표현된다.
이제 세워진 가설 중에서 가장 잘 맞는 것을 찾으면 된다. 1차 함수 H(x) = Wx+b의 식에서 적절한 (W, b)를 찾는 것이다. H(x) = x+0 또는 3x+1 또는 2x+2 등 실제 데이터와 가설이 나타내는 데이터와 오차가 적을수록 해당 가설이 맞을 확률이 높아진다. 이를 비용 함수 Cost(Loss) function으로 계산할 수 있다.
비용 함수 Cost function: 제곱 평균 오차
Cost function은 얼마나 실제 데이터와 가설이 일치하는지 측정하는 함수를 나타낸다.
H(x)-y는 가설과 실제 데이터의 오차를 계산하는 식이다. 그런데 이는 양수와 음수 둘 다 존재하기 때문에 제곱된 형태로 다음과 같이 계산해야한다.
$$ {H(x)-y}^2 $$
따라서, Cost function은 다음과 같이 정의할 수 있다.
$$ Cost function: \text{cost}(W, b) = \frac{1}{m} \sum_{i=1}^{m} \left(H(x^{(i)}) - y^{(i)}\right)^2 , (m: 데이터 개수)$$
cost(W,b)의 값이 가장 작은 값을 찾는 것이 선형 회귀(Linear Regression)의 학습 목표라고 할 수 있다.
Gradient descent algorithm (경사 하강 알고리즘)
Gradient descent 알고리즘은 선형 회귀 최솟값을 찾아내는데 자주 사용되는 알고리즘이다.
Hypothesis and Cost
- \(H(x) = Wx+b\)
- \(cost(W,b) = {1\over m} \sum_{i=1} ^{m}(H(x^{(i)}-y^{(i)})^2\)
cost의 최솟값을 찾기 위해서는 매번 파라미터 값을 변경하여 cost(W,b)가 감소하는 방향으로 경사 w를 설정해야 한다. 이를 계속 반복하면 된다. 여기서 우리가 알 수 있는 것은 감소하는 방향이다. cost 함수를 W로 미분하면 기울기 값을 통해 이를 알 수 있다. 최종적으로 W=0에 가까운 위치를 찾으면 된다. W가 감소하는 방향으로 움직이는 함수를 표현하면 \(W := W - a*{a\over aW}*cost(W)\) 이 된다. cost가 감소하는 방향으로 a 만큼 계속 전진해나간다.
따라서, Gradient descent 알고리즘은 다음과 같이 표현할 수 있다.
$$W := W - a*{1\over m}\sum_{i=1} ^{m}(Wx(i)-y(i))*x(i)$$
Logistic Regression(Classification)
Logistic Regression은 하나 이상의 독립 변수와 이진 결과 사이의 관계를 모델링하기 위한 통계적 방법이다. sigmoid라고도 불리는 해당 함수는 0과 1로 수렴하는 특징을 가지고 있다. 그래서 Classification로 표현하기도 한다. 해당 방법은 딥러닝, 뉴럴 네트워크에서 중요하게 다뤄진다.
Regression은 특정 숫자 예측이라면, Classification은 보기 중 하나를 고르는 것이다.
- 스팸 탐지: Spam or Ham
- 페이스북 feed: show or hide
- 신용 카드 이상 거래 탐지: legitimate or fraud
Linear Regression은 음의 무한대~ 양의 무한대의 범위를 가지기 때문에, 이진 분류하기에는 적합하지 않다. 그래서 [0,1] 내에서 출력 범위를 결정하는 Logistic Regression을 사용한다. 0과 1 두개의 값을 잘 나타내는 함수가 뭐가 있나하고 찾아보니 sigmoid라는 함수가 이에 딱 알맞는 형태를 가지고 있었다.
$$ sigmoid: g(z) = {1 \over (1+e^{-z})}$$
비용 함수 Cost function: Sigmoid
sigmoid는 linear regression에서 사용한 제곱 평균 오차를 비용 함수로 사용할 수 없다. 2차 함수와 같이 최저점이 존재하지 않기 때문이다.
Hypothesis and Cost
- \(H(x) = {1 \over (1+e^{-W^{T}X})}\)
- \(cost(W,b) = {1\over m} \sum_{i=1} ^{m}(H(x^{(i)}-y^{(i)})^2\)
위 그래프를 보면 알다시피 y가 1이거나 0으로 수렴하는 케이스를 나눠서 비용 함수를 계산한다.
$$ f(x) = \begin{cases} -log(H(x)) & \text{if} \; y=1, \\ -log(1-H(x)) & \text{if} \; y = 0. \end{cases} $$
한 줄로 표현하면 \(C(H(x), y) = -ylog(H(x)) - (1-y)log(1-H(x))\)와 같다.
Softmax Classification
Logistic은 0과 1 이중 분류에만 사용된다. 두 개보다 더 많은 분류 클래스가 주어졌을 떄는 Softmax Classification을 사용하면 된다. 크게 나오는 결과값을 0~1사이의 값으로 수렴시켜준다. 이도 딥러닝에서 자주 사용된다.
$$S(y_i) = {e^{y_i}\over \sum_{j} e^{y_j}}$$
전체 확률의 합계가 1이 되도록 한다. 예를 들어 샘플 데이터가 입력으로 들어오면
- setosa일 확률이 2.0
- versicolor일 확률 1.0
- virginica일 확률이 0.1
세 개의 확률의 총 합이 1인 예측값을 얻도록 하자는 것이다. 그리고 이 경우 확률값이 가장 높은 setosa로 예측한 것으로 간주한다. 만약 Logistic에서 사용한 sigmoid 함수를 적용하게 된다면, setosa가 정답일 확률은 0.7, versicolor가 정답일 확률은 0.2, virginica가 정답일 확률은 0.1 등과 같은 출력을 얻게된다. 동점이 나올 수도 있다.
이렇게 나온 결과를 one-hot encoding을 통해 하나의 결과만 나오도록 한다.
이제 예측 모델은 완성되었으니 예측한 값과 실제 값의 차이를 나타내는 Cost 함수가 필요하다. 궁극에는 Cost 함수를 최소화하여 학습을 완료하게 되는 것이다.
Deep Learning
힐베르트에서 시작된 만능 기계 만들기. 여기에 몰두한 사람들은 인간을 대체할 수 있는 기계를 만드려고 했다. 인간처럼 생각하는 기계를 만드려고보니... 우선 인간이 어떻게 생각하는지 알아야 했다. '인간은 어떻게 생각할까?' 뇌를 들여다보니 굉장히 복잡하게 구성되어 있었다. 그런데 연결된 부분만 자세히보면 신경 세포 뉴런이 단순하게 input-ouput 구조로 되어있었다. 이를 일반화 시킨 것이 활성화 함수이다.
Frank의 Flase Promises
Perceptron 기계를 만든 Frank가 뉴욕 타임즈에 '스스로 학습해서 걷고, 쓰고, 말하고, 자기 자신을 재귀적으로 재생산해내고, 자신을 인식할 수 도 있다.'고 이야기를 하였다. 이 이후에 많은 주목을 받기 시작하였다.
AND/OR 문제
AND/OR 문제는 계산 논리의 기초를 형성하는 기본 논리 연산이다. 이러한 기본 작업을 모델링하는 기계, 특히 퍼셉트론의 능력은 기계가 기본적인 논리적 추론을 수행할 수 있음을 입증하는 데 중요한 단계라고 생각하였다. AND 및 OR 문제는 선형으로 분리 가능하기 때문에, 단일 레이어 퍼셉트론과 같은 선형 분류기로 풀 수 있었다.
XOR 문제는 풀 수 있을까? 여기서 고비가 찾아왔다.
딥러닝의 첫 번째 겨울 - XOR 문제
MIT AI LAB에 있는 마빈 민스키는 1969년 'Perceptron' 책을 내면서 XOR 문제는 풀 수 없다고 수학적으로 증명하였다. Perceptron이 XOR 문제와 같은 비선형 분리 문제를 해결할 수 없다는 사실이 밝혀져 다소 AI의 첫 번째 겨울이 발생했다. 멀티 레이어로 XOR 문제를 해결할 수 있지만, 문제는 w, b를 학습시킬 수 없다는 것이었다. 그때 당시 마빈 민스키는 지구 상에 있는 누구도 해당 문제를 풀 수없다고 확언하였다.
Back Propagation
Back Propagation은 신경망이 오류나 손실에 따라 w, b를 효과적으로 조정하여 다층 퍼셉트론을 학습시킬 수 있는 방법으로, 딥러닝의 기초가 되는 알고리즘이다. 1974년 Paul이 박사 논문에 XOR 문제를 풀 수 있는 방법을 알아내었다. 처음에는 반응이 없었다. 그러다 70년도 후반에 민스키 교수를 만나 이야기를 나눴지만 반응이 없었다. 그러다가 1982년 논문을 발표해도 관심이 없어 묻힐 뻔 했다. 이후 1986년 제프리 힌튼이 다시 밝혀냄으로써 주목을 받기 시작하였다. Paul이 먼저 제안한 방법이기 떄문에 이를 재발견이라 부른다. 인간 사고 구조로 치면 메타인지 학습법과도 같다. 실제로 두 이론의 탄생 시기는 비슷하다.
뉴럴 네트워크가 순전파(forward) 과정을 진행하여 예측값과 실제값의 오차를 계산한다. 그다음 역전파(backward) 과정에서 경사 하강법을 사용하여 가중치를 업데이트한다. 이렇게 딥러닝의 첫 번쨰 겨울은 끝을 마주했다.
딥러닝의 두 번째 겨울 - Vanishing Gradient
그러다 또 큰 문제가 발생하는데, Back Propagation 알고리즘이 수 많은 다층 퍼셉트론 레이어로 구성되어 있을 경우 제대로 동작하지 않는 것이었다. 입력 층으로 갈수록 이전에 값들이 많이 희석되어 제대로 전달되지 않는 것이 문제였다.
그래서 대안으로 SVM, RandomForest와 같은 머신러닝 알고리즘이 뜨기 시작했다. 1995년 Lecun 교수도 뉴럴 네트워크 전문가이지만 SVM과 같은 더 단순한 알고리즘이 좋은 성능을 보인다고 말하기도 하였다. 딥러닝은 다시 어둠 속으로 사라지는 듯 싶었다.
Back Propagation과 2006/2007 "Deep" 출현
Canadia Institue for Advanced Research(CIFAR)은 딥러닝 겨울에도 연구를 계속해서 지원해주었다. 그래서 제프리 힌튼은 1987년 캐나다로 이주하게 되었다. 아무도 이 일을 하고있지 않을 때, 제프리 힌튼의 지지와 함께 CIFAR은 마치 도박과 같은 행동을 하여 딥러닝이 여기까지 오게 되었다고 한다.
딥러닝의 두 번째 겨울이 10년 정도 지날 떄 쯤에 큰 Breakthrough가 되는 논문을 발표한다.
- 2006년 - A fast learning algorithm for deep belief nets, Hinton, Simon, Yee-Whye
- 아주 "Deep"한 다층 퍼셉트론이 제대로 학습할 수 없었던 Vanishing Gradient 문제에 대한 원인을 밝혀낸다.
- 바로 초기값 설정 문제였다. 문제 원인인 초기값을 잘 설정한다면 제대로 학습할 수 있음을 보여주었다.
- 2007년 - Greedy Layer-Wise Training of Deep Networks, Yoshua Bengio
- 2006년 힌튼이 발표한 논문 내용인 초기값 설정 문제가 맞음을 검증하고 더 나아가서 "Deep" 퍼셉트론을 구축하면 아주 복잡한 문제를 풀 수 있음을 보여주었다.
- 두 논문의 내용을 통해 뉴럴 네트워크는 다시 주목받기 시작하였다. 그리고 두 논문의 제목에서 다룬 "Deep" 단어를 통해 "Deep Nets", "Deep Learning"이라는 단어가 나오기 시작하였다.
ImageNet Challenge라는 그림을 컴퓨터에게 맞추게 하는 챌린지가 존재한다. 이 챌린지는 컴퓨터 비전에서는 아주 중요한 문제였다.
- 2010년 30%에 가까운 에러율이 나왔고 2011년에는 26~7%에 달하는 성능 개선을 보여줬다. 최소 10%에러율이 나와야 상용화가 가능해서 사람들은 10년 더 걸릴 것이라고 예측하였다.
- 그런데 2012년 제프리 힌튼 연구실에 있던 알렉스 박사 과정 학생이 "AlexNet"을 발표하였는데, 에러율이 15%로 거의 2배 떨어지게 되었다.
- 2015년 딥러닝 기반인 시스템은 3% 에러율에 달하게 되었다.
뿐만 아니라 더 나아가서 그림을 설명할 수 있게 되었고, 자연어 처리 분야에도 발전을 가져왔다. Andrew ng 바이두에서는 노이즈 속에서도 사람 말을 알아들을 수 있는 시스템도 개발하였다. 알파고도 딥러닝 기술 중 하나이다.
다양한 Neural Network Model
Feed Forward
가장 흔히 사용하는 네트워크 모델로, 순차적으로 층을 쌓은 네트워크를 말한다.
Fast Forward
2015년도에 ImageNet에서 3% 이하 에러율을 나온 모델 방법이다. 여러 층이 있는 네트워크 모델에서 모든 모델을 거치지 않고 몇 층을 뛰어넘어 학습하는 네트워크를 말한다.
Recurrent network
Feed Forward는 입력의 길이가 고정되어 있어 자연어 처리를 위한 신경망으로는 한계가 있었다. 그래서 다양한 길이의 입력 시퀀스를 처리할 수 있는 인공 신경망인 순환 신경망(Recurrent Neural Network, RNN)이 나오게 되었다. RNN은 시퀀스 데이터와 시간 정보를 처리하도록 설계된 네트워크 모델이다. 자연어 처리, 시계열 분석, 음성 인식과 같이 입력 및/또는 출력이 순차적인 작업에 적합하다.
기본 RNN의 장기 의존성 문제
출력 결과가 이전 계산 결과에 의존하는데, 기본 RNN은 비교적 짧은 시퀀스(sequence)에 대해서만 효과를 보이는 단점이 있다. RNN의 시점(time step)이 길어질 수록 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생한다. 이를 장기 의존성 문제(the problem of Long-Term Dependencies)라고 한다. 이에 대한 개선 버전으로 LSTM, GRU와 같은 모델이 등장한다.
LSTM(Long Short-Term Memory)
전통적인 RNN의 단점을 보완한 RNN의 일종을 장단기 메모리(Long Short-Term Memory)라고 하며, 줄여서 LSTM이라고 한다.
LSTM은 기존 기억을 다시 사용하기는 하되 불필요한 기억을 지우고, 꼭 기억해야할 것들을 정하는 로직을 추가하였다. 이를 위해서 은닉층의 메모리 셀에 (입력 게이트, 삭제 게이트, 출력 게이트)를 추가했다. 그 결과 은닉 상태(hidden state)를 계산하는 식이 전통적인 RNN보다 조금 더 복잡해졌지만 셀 상태(cell state)라는 값을 추가하여 LSTM은 RNN과 비교하여 긴 시퀀스의 입력을 처리하는데 탁월한 성능을 보여줬다.
GRU(Gated Recurrent Unit)
GRU(Gated Recurrent Unit)는 2014년 뉴욕대학교 조경현 교수님이 집필한 논문에서 제안되었다. GRU는 LSTM의 장기 의존성 문제에 대한 해결책을 유지하면서, 은닉 상태를 업데이트하는 계산을 줄였다. LSTM에서는 (출력, 입력, 삭제 게이트)라는 3개의 게이트가 존재했다면, GRU에서는 (업데이트, 리셋 게이트) 두 가지 게이트만이 존재하도록 개선하였다. GRU는 LSTM보다 학습 속도가 빠르다고 알려져있지만 여러 평가에서 GRU는 LSTM과 비슷한 성능을 보인다고 알려져 있다. 그래서 GRU와 LSTM 중 어떤 것이 모델의 성능면에서 더 낫다라고 단정지어 말할 수 없다. LSTM이 먼저 나온 연구 결과이기 떄문에 사용 사례나 자료가 더 많이 나와있다.
Split & Merge (like CNN)
입력층부터 나눠서 나중에 합치는 방법도 있고, 처음에는 한번에 했다가 나중에 나눠서 학습하는 방법도 있다. 이에 대한 대표적인 방식인 CNN이 있다. CNN의 등장 배경은 고양이 실험을 통해서 그림을 읽어들이는 뉴런들이 동시에 다 동작하는 것이 아니라 특정 패턴에는 특정 뉴런만 활성화되는 것을 발견하였다. 그래서 인공지능에도 같은 방식으로 동작하게 만든 것이 CNN이다.
Resources
Sung Kim, 모두를 위한 딥러닝 강좌 시즌 1
Andrew Ng's ML class, http://www.holehouse.org/mlclass/
Stanford CS class, Convolutional Neural Networks for Visual Recognition, http://cs231n.github.io/
Radford, Alec; Narasimhan, Karthik; Salimans, Tim; Sutskever, Ilya (2018년 6월 11일). “Improving Language Understanding by Generative Pre-Training”. Open AI