모두를 위한 딥러닝 강좌 시즌 1 정리 (상) - lec 1 ~ 7

Supervised Learning : learning with labeled data
Unsupervised learning : learning with un-labeled data
즉, supervised는 이미 정답이 있는 문제들을 가지고 학습시키는 것을 말하고, unsupervised는 정답(라벨)을 지정해 주지 않은 문제들(데이터들)을 가지고 학습하는 것을 말한다.

Supervised Learning의 종류
regression : 연속적인 결과에 대한 예측
binary classification : 2개의 결과 중에서 예측
multi-label classification : 여러가지의 결과들중에서 예측.

Linear Regression
Linear한 모델로서 regression을 하는 것.
H(x) = Wx + b

Cost function
우리의 모델에서 나온 예측값과 실제 결과값의 차이를 계산하는 함수.
cost = 1/m * Σ{H(x) - y}
(m = 데이터 개수, Σ : 총 m개의 x에 대해 괄호안의 수식값들을 합하는 함수.)

Gradient descent algorithm
cost function을 minimize하는 algorithm중 하나.
W := W - αΔcost(W) (α = learning rate, Δ = W에 대한 미분)
convex function에만 적용할 수 있다.

Multi-variable Linear Regression
변수가 여러개인 Linear Regression
H(x) = w1*x1 + w2 * x2 + ... + b = (행렬의 곱으로 표현)
W = [ b  w1  w2  ... ]
X = [ 1  x1  x2  ... ]
H(X) = transpose(W) * X

Sigmoid
g(z) = 1/(1+e^(-z))
(0, 1) 범위로 output을 낸다.

Logistic Binary Classification
Z = WX
H(X) = g(Z) (g : sigmoid함수)
cost(W) = 1/m * Σ{C(H(x), y)}
C(H(x), y) = (y-1) * log(1-H(x)) - y * log(H(x))
cost함수를 convex function으로 만들기 위해 C(H(x), y) 를 사용한다.

Multinomial Classification
기본적인 아이디어는 Binary를 여러 번 하는 느낌.

Softmax
sigmoid의 multinomial version 느낌.
s(y) = (e^y) / (Σ{e^y})
[0,1] 범위로 output을 낸다. output의 합은 항상 1이다.
scores -> probabilities 로 변환해주는 함수인셈.
ex) scores : [2.0, 1.0, 0.1] -> probabilities : [0.7, 0.2, 0.1]

Cross-entropy
multinomial classification에 사용되는 cost function
cost = 1/m * Σ{D(S,L)}
D(S, L) = - Σ{L*log(S)}
label에 표시된 분류정답(?)에 대해서만 cost를 -log(S)로 계산한다고 보면됨.

Overshooting
learning rate가 너무 커서, cost가 줄어들지 않고, 오히려 점점 커지는 것을 overshooting이라 한다.
그렇다고 해서 learning rate를 너무 작게 하면, 학습하는 시간이 너무 오래 걸리거나 학습이 완전히 안될 수 있다.
따라서 실험을 통해 적당한 learning rate를 찾는 것이 중요하다.

Standardization
data가 비쭉비쭉하게 일반화가 안된 상태이면, 학습이 잘 안되거나 적합한 learning rate에서도 이상한 동작을 보일 수 있다.
그래서 data를 전처리한 후에 학습을 시키는 게 좋다.
zero-center (중심을 0에 맞추는 것), normalize(data range가 특정 범위에 항상 들어가도록) 의 방법이 있다.
nx = (x - 평균) / 표준편차
Python code example) x_std[:,0] = (x[:,0] - x[:,0].mean()) / x[:,0].std()

Overfitting
training data에'만' 너무 잘 맞아서 문제 (그냥 training data를 memorizing하는 것 처럼 되버림)boundary 구부림에 비유하자면, 심하게 구부려져서 일반적인 모델이 되는 게 아니라 training data에만 최적화된 구부림이 되버림.해결책) - 요약 : 구부림을 펴자!1. More training data2. Reduce the number of features3. Regularization
Regularizationweight가 너무 큰 값을 가지지 않게 하기.cost를 계산할 때, + 상수*Σ{W^2} 를 붙이자!

혼잣말 1)
Q. 어짜피 one hot encoding할 꺼면, softmax를 굳히 안하고 linear hypothesis에서 도출된 score에서 바로 하면 되지 않나?
A. 맞다. 그래도 된다. 대신 cost함수를 못쓴다. 그러니 softmax를 해야하는 거다. softmax를 안쓰고 cost함수를 쓰면 H(x)가 y(0 or 1)에 비해 너무 크거나 작아서 학습이 제대로 안될 것 같다. 그래서 아마 H(x)를 0~1로 만들어주는 sigmoid, softmax 같은 것을 쓰는 거고 cost function을 convex function으로 만들기 위해 그에 따른 logistic cost function, cross-entropy 를 사용하는 것이다.

댓글