[모두를 위한 딥러닝] 강좌 요약 - Section 1~6
Deep Learning성김교수의 모두를 위한 딥러닝을 요약한다.
- ML 개념 이해
- Linear Regression과 Multi-Variables Linear Regression 개념
- Logistic Regression (Classification)에서 Binary Classification과 Multinomial Classification 개념
기본적인 ML 용어와 개념 설명
프로그램이 학습을 통해 배우는 프로그래밍
- Supervised Learning: 결과가 있는(Labeled) 데이터를 통해 학습. 예) 이미지 학습, 이메일 스팸 필터링, 시험성적 예측
- Unsupervised Learning: un-labeled 데이터를 통해 학습. 예) Word Clustering
지도학습
- 값, label, y
- input data, x, training dataset
지도학습 종류
- regression(회귀): 0~100 연속값으로 결과(label)를 통해 새로운 input을 주었을 때 값을 예측
- classification(분류): true or false, pass or not pass
- multi-label classification: A, B, C or D, F
Tensorflow
- pip install --upgrade tensorflow
- 또는 아나콘다를 설치하여 가상환경으로 python버전까지 설정해서 사용한다.
- 가장 쉬운 방법은 구글의 코랩에서 수행한다.
결과의 b = bytes literals 의미
- tensor 수행은 session.run(tensor) 해주어야 한다.
step-1) Tensor들의 flow graph 만들고
step-2) data를 입력해서 graph를 수행한다.
step-3) session.run(tensor)을 통해 graph안의 변수를 업데이트 하거나, 결과값을 반환한다.
Tensorflow data feed
- tf.placeholder(tf.float32) 처럼 자료형을 갖는 placeholder를 만듦
- session.run(tensor, feed_dict=<data>) 처럼 데이터를 placeholder에 넣어준다.
Tensorflow
- Ranks: 차원, n-Tensor
- Shapes: 엘러먼트에 몇개씩 들어 있느냐?
- Types: 데이터타입, float32를 많이 사용함
Linear Regression
용어: Hypothesis, Cost Function, Gradient Descent
선형회귀, 연속된 데이터를 통해 다음것을 예측하고자 할 때 사용한다. Hypothesis 가설을 통해 Linear한 1차원 선의 기울기를 찾는다.
H(x) = Wx + b
Cost Function
- 가설 Linear선과 실 데이터 사이의 거리를 측정함
- 가설값 - 실데이터의 차이로 계산함
- +, - 일수 있으므로 제곱을 한다.
코스트 펑션의 W, b의 펑션이다. 가장 작은 cost를 (minimize cost) 구할 수 있는 W, b의 값을 구하는 것이 목표이다.
Tensorflow로 Linear Regression 구현해 보기
- 깃헙 소스
- tf.Variable: 텐서플로우가 변경하는 값으로 trainable variable로 본다.
- Minimize cost를 구하는 알고리즘으로 GradientDescent를 사용한다.
import tensorflow as tf
tf.set_random_seed(777)
x_train = [1,2,3]
y_train = [1,2,3]
W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")
h = x_train * W + b
cost = tf.reduce_mean(tf.square(h - y_train))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(2001):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(cost), sess.run(W), sess.run(b))
placeholder를 사용할 경우
import tensorflow as tf
tf.set_random_seed(777)
X = tf.placeholder(tf.float32, shape=[None])
Y = tf.placeholder(tf.float32, shape=[None])
W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")
h = x_train * W + b
cost = tf.reduce_mean(tf.square(h - y_train))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(2001):
cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], feed_dict={X: [1,2,3], Y: [1,2,3]})
if step % 20 == 0:
print(step, cost_val, W_val, b_val)
Cost Function
Cost(W) 에서 W를 x축으로 보고 Cost( W)을 y축으로 볼때. Cost(W)이 최소가 되는 값을 찾는다.
- 최소값을 찾아가는 앍리즘 Gradient Descent Algorithm => cost minimization
- 경사도를 따라서 내려가서 최종 최소값을 구하기
+ 경사도(기울기): 미분
+ 내려가기: step
미분식
- 알파값 0.1
- Cost(W)에 대한 미분 === 기울기
import tensorflow as tf
import matplotlib.pyplot as plt
X = [1,2,3]
Y = [1,2,3]
W = tf.placeholder(tf.float32)
h = X * W
cost = tf.reduce_mean(tf.square(h - y_train))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
W_val=[]
cost_val=[]
for i in range(-30, 50):
feed_W = i * 0.1
curr_cost, curr_W = sess.run([cost, W], feed_dict={W:feed_W})
W_val.append(curr_W)
cost_val.append(curr_cost)
plt.plot(W_val, cost_val)
plt.show()
W = 1 일때 Cost(W)의 기울기가 0이되어 최소값을 갖는다.
- Gradient Descendent는 W := W-기울기 값을 측정한다.
descent = W - learning_rate * gradient
Multi Variable Linear Regression
용어: Sigmoid
Hypothesis: 가설 -> Cost function -> Cost 최적화 하기 Gradient descent algorithm
- W, b 두개의 값을 학습
- W, b관계의 함수: 예측값과 실제값의 차이의 제곱의 평균
- GD convex 밥그릇 모양
3개의 변수가 주어질 경우
- H(x1, x2, x3) = w1x1 + w2x2 + w3x3 +b
- 변수가 엄청많을 경우 처리 방법 = Matrix를 이용함
Matrix
- [2*3] * [3*2] = [2*2]
- 매트릭스 사용시 앞에 X를 사용 뒤에 W를 사용한다.
- 데이터의 row를 instance라고 한다.
- [ n개 instance 갯수, x 변수 갯수 ] * [ x 변수를 위한 Weight, 1 ] = [ n개 instance 갯수, 1 ] = Shape
보통 n개 instance를 None으로 표현한다.
- bias는 결과값의 갯수에 따른다. 여기서는 1개
- 많은 데이터를 batch로 가져온다.
Logistic (regression) Classification
Deep Learning 에 이용되는 컴포넌트이다.
- Binary Classification: 둘중하나 고르기
- g(z) = 1/(1+ e-z) -> sigmoid 로 0, 1을 얻을수 있게 하고 이를 logistic function이라 한다.
+ 값이 커지면 1에 수렴
+ 값이 작아지면 0에 수렴
- Linear Hypothesis에 대한 지수함수 = 시그모이드 함수
Logistic Regression의 Cost 함수
- 선형함수는 매끄럽게 그려진다.
- 시그모이드 함수로 하면 매끄럽지 않고 울퉁불퉁하다.
=> 어디서 시작하느냐에 따라서 최소값을 찾고 끝날 수 있음. local minimum이 아니라 global minimum을 찾는게중요 함
=> 따라서 GDA를 사용하기 어렵다.
=> exponantail과 반대가 log 함수를 이용한 Sigmoid함수를 이용한다.
cost와 H(x)의 로그함수
위의 두경우 함수를 하나의 Cost 함수로 표현한다.
해당 cost 함수에 대한 최소값을 구한다.
- 해당 함수를 GradientDescentOptimizer().minimize(cost)로 호출한다.
- 최소값을 구한 좌표의 x좌표의 값 W를 찾을 수 있게된다.
W, b -> Hypothesis -> Cost (H-y) -> GD Minimize -> Training -> Predicted
- W, b 값을 구할 H(가설) 수립: sigmoid를 사용함
- W, b를 변경해 가며 가설값 - 결과값의 제곱에 대한 cost 함수를 만듦: y=0일때와 y=1일때의 로그함수값을 사용함
- cost 함수의 최소값을 구함: Gradient Descent = cost함수의 미분
- Training을 수행함. training이 되면서 cost값이 작아지고 W, b의 값도 내부적으로 변경이 된다.
Multinomial Classification
용어: Softmax, Cross Entropy, One hot encoding
Logistic Classification
- 위에서 H(x) = wx 를 g(z)로 만들어 아무리 큰값이거나 작아도 1 또는 0으로 만들어주는 sigmoid함수를 이용한 Logistic Classification을 다루었음.
- 1차원위에 (Hyper Plane)에서 데이터를 구분하는 선을 구하는 것이다.
- g(z) = 1 / (1 + e-2) 에서 g(z) 을 logistic 또는 sigmoid함수라고 한다.
- Y : real result value, Y hat: predict value
Multinomial Classification
> Hypothesis 구하기
- 예로 3개의 Binary classification을 각각 독립된 classification을 구함.
- A or not, B or not, C or not 3개를 하나의 식으로 표현. Y햇에 sigmoid를 각각 적용하지 않고 효율적으로 적용하는 방법은 matrix manuplication!
- logistic classifier를 통해 나온 결과값을 sigmoid를 사용하지 않고, 모두 0~1 사이값으로 만들고, 0~1사이의 결과값을 모두 더하면 1이되게 만든다.
이렇게 만들어주는 것이 softmax 함수이다.
- Softmax를 통해 Y값을 넣으면 각각 0~1 사이값이면서 모두 더하면 1의 값이 되므로 확률로 볼 수 있다. => Hypothesis 함수가 된다.
- 또한 이것중 하나를 고르는 (제일 큰값을 고르는) One-Hot Encoding를 사용한다. (arg max)
> Cost function 구하기
- Cross Entropy를 사용한다. Y햇 값이 1이면 classification이 맞고, 엄청크면 맞지 않은 것이다.
- Y햇 값과 Y햇 로그한것을 곱한 후 합하여 cost값을 구한다. (즉, Y햇 예측값에 log함수값을 곱하여 확률을 구하는 것이다.)
- Logistic cost가 cross entropy이다.
- 위의 식을 여러개의 Training Set에 대하여 구할 때는 D(S, L)에 대한 합에 대한 갯수로 나누어 평균을 구한다.
> Minimize
- Gradient Descent 알고리즘을 사용해 W값을 구함.
- 기울기는 cost함수를 미분하는 것이다. 이렇게 내려가면서 최소값을 찾으면 최적의 W값을 찾게됨.
- 내려가는 값의 간격은 알파(learning_rate)이다.
Tensorflow 구현하기
> Hypothesis
- tf.nn.softmax(tf.matmul(X,W) + b)
> Cost function
- 깃헙 소스
Fancy Softmax Classifier
용어: Logits (score), Reshape
- Score(Logits)을 softmax에 넣으면 확률이 나옴. tf.nn.softmax_cross_entropy_with_logits 호출
- one_hot을 사용하게 되면 rank가 N에서 N+1로 변해서 reshape을 해주어야 한다. (잘 이해안감), 깃헙소스
+ Hypothesis 와 cost function을 만듦
+ 학습을 시킴 => 결과를 측정해봄
정리
W,B -> Hypethesis -> Const fuction -> Minimize(Convex에 대해 GD 사용) -> Train -> Prediction
Linear Regression
- One Variable
+ Hypothesis: 1차원 Wx + b => H(x) = Wx + b
+ Cost function: Convex Function 형태로 만듦.
+ Gradient Descent Optimizer를 사용하려면 Convex 형태로 매끈한 모양이 나와야 함. Logistic Cost(Cross Entropy)도 convex로 만들어줌.
- Multi Variables (Features): x값이 여러개 있을 경우
+ Hypothesis: n차원의 x와 w를 갖는 Wx + b => matrix를 이용한다. => H(X) = XW
+ Matrix의 row === instance
x [5,3] = 5개의 row와 3차원의 x갯수
w [3,1] = 3차원의 x갯수 대응 w와 결과값 y갯수 1개
예) W1x1 + W2x2 + W3x3 + b
n차원의 x를 가짐
Logistic Regression (Classification)
- Binary Classification: 분류값이 둘중 하나일 경우
+ Hypothesis: Sigmoid
+ Cost Function: Logistic Cost
- Multinomial Classification: 분류값(y)이 여러개일 경우
+ Hypothesis: Softmax
+ Cost Function: Cross Entropy (=== Logistic Cost)
y값이 multi classification임
<참조>
- 회귀분석
- 구글 코랩 설명
- 선형회귀 이해
'Deep Learning' 카테고리의 다른 글
| [모두를 위한 딥러닝] 강좌 요약 - Section 7~10 (0) | 2019.01.17 |
|---|