Supervised: H: x → y (H: hypothesis, x: 입력 데이터, y: 출력 데이터)
x 라는 입력데이터가 주어졌을 때 그에 해당하는 출력인 y를 알려주고
x를 입력했을 때 y라는 데이터가 나올 수 있는 가설을 세우고
그 차이를 줄이는 것.
Unsupervised: 위의 식에서 y가 없고 x만 존재.
이 경우 x에서 특징들을 찾아내어 분석
Reinforcement: 알파고의 자기 학습을 예로 들면,
알파고가 바둑을 두었을 경우 그 경우가 좋은 경우인지 나쁜 경우인지
나중에 reward를 알려줌.
이를 설명하면
어떠한 상태 S(t)는 어떠한 행동 A(t)에 의해 S(t+1)로 변하게 되는데
이 경우가 좋은 지 나쁜지는 나중에 결과로 알 수 있음.
나중에 P
S(t),A(t):reward 로 GOOD / BAD 를 알려줌.
//오늘은 자세히 설명을 안하신다고 언급
Clustering: 어떠한 기준으로 군집합을 나누는 데 이 때 기준을 미리 정해주지 않는다.
이 때 기준은 데이터들 간의 수학적 거리를 통해 정해진다.
군집합을 나누는 기법에는 여러 기법이 있다.
Classification: 이 방법은 분류 기준이 주어지는 데
예를 들면, 사람들을 안경을 쓴 사람과 안 쓴 사람을 구분한다고 하자.
그러면 안경을 쓴 사람들의 사진과 안경을 안 쓴 사람들의 사진을 보여주고
그 차이를 학습시킨다. 그 후 새로운 사람 데이터를 주었을 때
이 사람이 안경을 쓴 사람인지 안 쓴 사람인지 구분
Linear Regression: 선형회귀분석
y = wx + b (w,x: linear combination)
이산 분포 데이터들을 가지고 가정을 한다. 그러한 가정으로 가설을 세우고
실제의 값과 가설을 세워 나온 값들의 차이를 계산하여 그 차이를 최소화하는 것.
perceptron: 뉴론 네트워크의 기본으로 등장
y = w1x1 + w2x2 + ... + b
(w1x1 + w2x2 + ... +wnxn = 선형결합, b = 평행이동)
Logistic Regression: 선형회귀가 입력 데이터에 해당하는 데이터를 출력한다면
로지스틱 회귀분석은 분류를 하기 위해 사용된다.
위에 나온 퍼셉트론으로 대소 비교하여 x가 해당 범위에 포함되는지 확인.
최적화문제: 실제 이런 것은 관측 데이터와 가설의 차이를 최소화하는 최적화 문제이다.
최적화 Objective Function
Loss func ( Mean Square Error )
y = H(x) + α
α를 최소화, 절대값α or α^2 를 이용하여 거리의 최솟값을 찾는다.
미분을 통해 최적화를 하는데
절대값α의 경우 0 일 때, 미분을 할 수없다는 문제가 있어
α^2를 주로 사용한다.
Cross func ( Cross Entropy Error )
argmin θ = -∑ y * log H(x,θ)
여기서 θ는 w와 b의 조합
H(x,θ)는 확률분포를 따라 ∑H(x,θ) = 1 이다.
Softmax func
여기서 argmin θ 앞에 -를 붙이는 것은 로그함수의 특징을 보면 알 수 있다.
log함수는 0 < x < 1 일 경우 음수의 값을 가진다.
이를 -를 붙여 양수의 값을 취한다.
이 때 argmin θ의 값이 0에 가까워 질수록 가장 정확하다.
Gradient descent: Grobal Minima를 찾기 위해 미분을 해서 0이 되는 점을 찾아야하는데
보통 미분은 대수식이 있을 경우 손쉽게 미분가능하지만
딥러닝의 경우 수식이 정해지지 않아 대수적으로 미분이 불가능하다.
그 때문에 Gradient descent를 사용하여 극값에 도달한다.
다른 방법으로는 '뉴턴 메소드'가 있지만
기울기와 이계도를 함수를 사용하여 다소 복잡한 면이 있다.
Gradient descent의 경우 그 함수가 convex 함수인지 non-convex 함수인지가 중요한데
non-convex함수일 경우 지역 최적화(local optima)의 문제에 빠질 수 있다.
수식으로 나타내면
w(n+1) = w(n) - α∇wL
이 때 - 를 하는 이유는 기울기에 반대 방향으로 가야지 최소값을 찾을 수 있기 때문이다.
그리고 α를 Learning Rate라고 하는데
러닝 레이트가 클 경우, 빨리 수렴하지만 자칫 잘못하다간 탈출, 즉 한없이 커질 수가 있다.
러닝 레이트가 작을 경우, 계산량은 많지만 크기의 변화는 적어 오래 걸린다.
따라서 러닝 레이트를 적절히 조정해야하는데 보통 처음에 크게 하고 점차 decay(감소)시킨다.
Multi-Layer Perceptron
DAG(Directed Acyclic Graph)
앞서 말한 perceptron이 층을 이룬 구조다. 이 때 몇가지 조건이 필요한데
우선 cycle이 없고, 방향이 한쪽으로만 가야한다.
Non-linear Activation Function
Non-linear Activation Function에는 3가지가 있는데
>
- Sigmoid
- ReLU
- tanh
이다. 위의 함수는 구글에서 찾을 경우 쉽게 이미지를 볼 수 있으니 참조하면 좋다.
Sigmoid의 경우 0일때 미분값이 가장 크고 양 극으로 갈수록 미분값이 0에 가까워진다.
f(x) = 1 / 1 + exp(-x)
ReLU의 경우 0을 기준으로 음수이면 제거하고 양수일 경우 미분값이 1이다.
ReLU는 Rectified Linear Unit의 약자로 양방향으로 가는 것을 한뱡향으로 보내준다.
전자공학에서 사용하는 Rectifer와 유사
f(x) = max(0,x)
Deep Learning을 하다보면 모델이 깊어질 수 밖에 없음.
GoogLeNet의 경우 깊이가 20 이상 되는데
이 경우 용량만 수십 GB를 차지하며 연산해야하는 연산 수 또한 많아
GPU로 연산을 해야한다. 이와 같은 문제 때문에 모델을 축소해야한다.
앞에 이야기를 한 내용을
Feedforward Network라 한다.
Recurrent Neural Network
이것은 두 가지 특징을 가지는데
weight sharing
sequential data
이것은 데이터가 깊을 필요가 없지만 이전에 데이터가 나중에 영향을 주므로
시간 또는 데이터의 시퀀스가 매우 중요하다.
번역이나 음성데이터 분석할 때 사용.
ex) 구글 자동완성, 대화 프로그램(seq2seq)
RNN를 식으로 나타내면 아래와 같은 식으로 나타낼 수 있다.
H(t) = wX(t) + vH(t-1)
y(t) = α(H(t))
RNN의 Back propagation의 경우 α는 고려되지 않는다.
하지만 H(t)에서 Back propagation 할 경우 v^n 이므로 계산할 양이 많다.