최근, 머신러닝에 관심을 갖게 되어 개념을 정리해본다.
Neural Network (신경망)
서로 결합도가 다른 뉴런 사이의 전파가 전달되는 정도를 이용한다. 뉴런 발화 조건으로 일정한 임계값을 입력할 수 있다.
오차정정학습법
발화된 뉴런이 결과가 되는데, 이때 결과가 틀린 경우, weight나 임곗값을 조정할 수 있다. 수정된 폭이 없어질 때까지 수행을 반복(학습)한다.
Activation fuction (활성함수)
뉴런의 선형결합을 계산한 후에 비선형변환을 하는 함수이다.
Simple Perceptron
perceptron은 뉴런의 출력을 y=f(Wx+b)
의 형태로 표현한 것이다. 입력한 값이 바로 출력에 전달되는 단순한 형태의 모델을 단순 퍼셉트론이라 칭한다. perceptron에서는 발화여부를 step function(출력이 0 혹은 1)을 사용해 판별한다.
weight 벡터(W)와 바이어스(b) 총 집합이 머신러닝 모델이다.
Logistic Regression (로지스틱 회귀)
출력을 0~1 사이의 값으로 매핑할 필요가 있는 경우, sigmoid function을 사용할 수 있다. sigmoid function을 사용한 모델을 Logistic Regression이라고 한다.
Probit Regression을 쓰기에는 gradient descent를 적용하는 계산이 힘들다. 따라서 정규분포의 누적 분포함수와 모양이 같고 계산이 편한 sigmoid를 사용하는 Logistic Regression을 사용한다.
- Probit Regression (프로빗 회귀)
- 정규분포의 누적분포함수를 사용한 모델. 신경망 모델에서 거의 쓰지 않는다.
Likelihood fuction (우도 함수)
network의 파라미터인 w와 b를 최우추정하기 위해 Likelihood fuction를 사용할 수 있다.
Cross-entropy error function (교차 엔트로피 오차 함수)
cross-entropy error를 최소화함으로 likelihood function을 최적화할 수 있다. 이 함수는 error function 혹은 loss function이라고 부른다. (주로 Loss function이라 칭한다.)
Gradient descent (경사하강법)
error function이 최소가 되는 w와 b를 구하기 위해 식으로 계산하는 것이 아니라, 반복학습을 통해 순차적으로 계산하는 방식 중 하나이다. gradient descent는 N개의 데이터의 합을 구해야해서 메모리 사용량이 크기에, 대안으로 stochastic gradient descent(확률 경사 하강법)을 사용한다.
- stochastic gradient descent
- gradient descent와 다르게, 모든 데이터를 합하지 않고, 데이터 하나를 무작위로 골라가며 파라미터를 변경한다. 반복학습이 필요한데 이때, 데이터를 셔플해서 사용해야 편향이 되지 않는다.
- epoch: 데이터 전체에 대한 반복 횟수
- minibatch gradient descent
- minibatch gradient descent는 N개의 데이터를 M개씩 나눠서 학습한다. 메모리 부족 없이 선형대수를 연산할 수 있어서 데이터 한 개씩 반복 계산하는 것보다 빠르게 계산할 수 있다.
국소최적해는 주변에서 최적화된 해, 대역최적해는 진짜 해이다. 무작위 초기값을 고르게 되면 국소최적해에 빠질 수 밖에 없다. learning rate가 크면 해를 넓게 찾을 수 있지만 수렴이 힘들기 때문에, 점차 값을 줄여나가 후반에 해의 수렴 가능성을 키워주는 방식을 사용한다. 그렇게 실용성있는 국소최적해를 찾는 것이 현실적이다.
Multi-class logistic regression (다중 클래스 로지스틱 회귀)
위와 같이 발화/비발화로 나누는 것은 이진분류라고 한다. 다중 클래스는 그보다 다양한 분류를 지원한다. softmax function으로 sigmoid를 변형하여 다중 클래스분류를 가능하게 한다. 이 출력은 합이 1인 수들의 벡터로 이루어진다.
모델의 출력 전체는 y=f(Wx +b)
로 나타낼 수 있다. W는 weight, b는 바이어스 벡터이다.
Multi-layer Perceptron
Linear classifier(Simple Perceptron이나 Logistic Regression처럼 선형분리가능한 문제에만 적용가능한 모델)을 조합해서 비선형 문제를 풀 수 있다. 입출력 외에 뉴런이 연결된 모델을 multi-layer percentron이라고 부른다. 입력을 받는 층을 input layer, 출력을 하는 층을 output layer라고하며, 둘 사이에 추가된 층은 hidden layer다.
Backpropagation (오차역전파법)
최적해를 구하기 위해서는 gradient를 계산해야 한다. 이 gradient는 error function을 최소화하기 위해 사용할 수 있다.
Backpropagation는 네트워크가 여러 층으로 구성된 경우, gradient를 계산하기 위한 오차를 역방향으로 전파된다고 보는 기법이다. error부터 gradient를 layer를 역으로 거슬러가며 계산한다. 이 때, 편미분의 결과가 재사용됨으로 연산에서 이득을 취할 수 있다.
모델 평가
training data로 학습한 모델은 test data를 통해 검증할 수 있다. accuracy(정답률), precision(적합률), recall(재현율)의 지표로 평가한다. accuracy는 전체 데이터에서 정답을 맞춘 비율, precision은 발화한 데이터 중에서 실제로 발화가 필요했던 비율, recall은 뉴런이 발화해야하는 비율 중 실제로 발화한 비율이다.
ex) 자동 차단의 경우, recall이 조금 낮더라도 precision이 높은 편이 낫다. 그러나 부적절 사용자의 감지의 경우, precision은 낮더라도 recall은 높은 편이 좋다.
Deep neural networks
기존의 neural network에서 hidden layer를 늘리는 방식이 deep neural networks이다. 이 deep neural networks를 학습시키는 것이 Deep learning이다. 그러나 단순히 hidden layer의 수를 늘린다고 모델이 좋아지는 것은 아니다.
발생할 수 있는 문제
Vanishing gradient problem (경사 소실 문제)
최적해를 구하기 위한 parameter의 gradient가 0이 되어버리는 문제를 말한다. activate function 미분 후 값이 작아져, hidden layer의 개수가 늘어남에 따라 점점 error function의 값이 0에 가까워진다. 이런 경우 Backpropagation도 제대로 작동하지 않는다.
Overfitting
학습 데이터로 과하게 근사해버리는 상태를 말한다. 즉, 학습할 때, error function 값이 무조건 최소화되는 것이 좋은 것이 아니다. training에 비해 test 성능이 많이 낮다면 Overfitting을 의심할 수 있다.
generaization하기 위해 dropout을 선택할 수 있다. 학습 시, 뉴런을 의도적으로 누락하는 기법이다.
Others
- learning rate는 모델이나 도메인마다 적절한 수준이 있으니 찾아서 쓰면 됨
- early stopping은 필요한 수준까지 혹은 더이상의 학습 효율이 나오지 않을 때까지만 학습함을 말함
- 라이브러리의 일종인 텐서플로우에서 전체적인 학습 과정은 [모델 정의 -> 오차 함수 정의 -> 최적화 기법 정의 -> 세션(데이터 취급 방법) 초기화 -> 학습] 순서이다.