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)
Universal Approximation
multi-layer perceptron에서 non-linear activation function을 만족할 경우
universal approximation, 즉 모든 함수를 모방가능하다.
Back Propagation
See also
Chain Rule(https://en.wikipedia.org/wiki/Chain_rule)
Multi-Layer Perceptron에서 변경할 경우 출력노드와 바로 밑의 노드 층만 변경이 된다.
그보다 낮은 층의 노드들의 가중치를 변경하기 위해
출력노드 가중치의 미분 값을 가지고 내부노드로 역으로 전파한다.
위 같은 특성 때문에 '역전파'라고 한다.
Issues of MLP
MLP의 경우 4가지의 문제점이 있다.
- Vanishing Gradient
- Lots of labeled data
- Overfitting
- Local optima
우선 Vanishing Gradient의 문제점은 Sigmoid와 tanh의 함수를 보면 이해하기 쉽다.
Sigmoid와 tanh는 0에서 최대 기울기를 가진 후 양극으로 갈수록 기울기가 0이 되는데
이 때 그 값이 너무 0에 근사하여 변화가 거의 없어 오랜 시간이 걸린다.
위 같은 문제를 해결하기 위해 ReLU를 사용하는데
ReLU의 경우 필요없는 부분은 0으로 만들어 계산을 용이하게 한다.
구글 딥러닝 개발자는 Revolution에서 Re와 LU를 강조하여 ReLU가 딥러닝에 큰 이바지를 함을 나타내었다.
Lots of labeled data는 수식을 찾기 위해서 답을 알고 있는 데이터가 많아야한다는 것이다.
최근 빅데이터를 이용한 많은 개발이 이루어지고 있어 이 부분에 큰 도움이 된다.
Overfitting 문제는 통계의 문제점에서 발생한다.
모수를 전수조사 할 수 없으므로 임의의 표본을 골라 계산을 하게 되는데
이 경우 표본에서만 계산이 잘되고 나머지 부분이 잘 안되는 경우가 있다.
이런 경우를 샘플 측정이 전체측정이라고 착각한다고 말하는 데
더 많은 데이터, 더 깊은 MLP를 구성할수록 overfit이 일어나기 쉽다.
이럴 경우 drop-out을 하여 Overfitting 문제를 해결한다.
drop-out이란 랜덤하게 노드를 빼서 학습하는 것이다.
이럴 경우 가중치의 값은 평균치에 도달하게 되어 overfitting을 해결할 수 있다.
ReLU와 유사
Local optima 문제는 위에서 언급한 것과 같이 non-convex 함수일 경우 일어나는데
이런 경우 모든 미분값이 0이거나 다 올라가는 경우이어야 한다.
데이터가 많아지면 많아질수록 모든 미분값이 0이거나 다 올라가는 경우는 매우 희박해진다.
따라서 위 같은 경우는 일어날 일이 거의 없으므로 생각하지 않는다.
Pre-training
위의 방법을 사용할 때는 2가지 경우가 있는데
- 레이블이 달린 데이터가 얼마 없을 때
- ReLU가 아닐 때
이 2가지 경우 위의 방법을 사용한다. 위의 방법을 설명하자면
적당한 Clustering 후 Classification을 하는 것인데
위에서 언급한 바와 같이 Clustering은 기준이 주어지지 않고 수학적 계산으로 기준을 찾는 것이다.
이렇게 기준을 찾은 후 그 기준을 가지고 Classification을 한다.
노드가 층에 많이 있을 수록 Universal Approximation, 즉 모든함수를 모방할 가능성이 증가한다.
Deep Learning
- Representation Learning
- Traditional Machine Learning
- Hand-craft feature extraction
//필기의 순서가 뒤죽박죽이여서 키워드만 적겠습니다.
ex)
- 형태소 분석
- 아버지가/방에/들어가시/ㄴ다
- 아버지/가방에/들어가시/ㄴ다
두 가지의 경우 중 더 높은 확률로 나타난 값을 기준으로 분석
- 베이즈 정리
I am a man
I, a, m, n으로 이루어진 차원을 축소하여 유의미한 vector를 찾아내는 것을
임베딩이라고 한다.
차원 축소시 축소할 경우 데이터의 값이 잘 분산 되는 것으로 한다.
= 특징이 잘 드러나도록 차원을 축소
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 이므로 계산할 양이 많다.
Convolution Neural Network
현재 제일 잘 나감.
Local connectivity의 특성을 가지고 있어 인접한 노드에만 영향을 받는다.
지금까지 Full connection
MxN이었지만
만약 Local connectivitiy가 3이라면
3 x N 이되며
w 또한 재사용할 경우 복잡도는 확 낮아진다.
- keyword: slide window, receptive field