우선 가설에 대한 정의를 봐보자
가설에 대한 식은 위와 같으며 끝에 bias가 추가적으로 붙을 수 있다.
이 가설을 이용하여 로지스틱 회귀 방식에서는 다음과 같은 cost를 통해 최소화 알고리즘을 적용시킨다.
가설과 실제 값의 차이(WX-y)를 통하여 전체를 합치고 평균을 낸다. 그리고 이 차이의 최소 값을 이용하여
최적의(최소의) cost 값을 도출해낸다. 그렇기에 cost 값을 계속 구하다보면 위와 같은 도자기 모양이 나온다.
그리고 이 값을 찾기 위해 step을 옮기는 것을 learning rate라고 하며 최종적으로 원하는 weight 값을 찾아낸다.
Logistic Classification
반면에 Classification은 두개 혹은 다중의 값(요소)가 있을 때 그리고 여러 개의 값 중 최적의 결괏 값을 도출해내야 할때사용되는 알고리즘이다. 이것을 패턴화 시킨 것이 0과 1로 구분 지어서 활용하는 Bainary Classfication이다.
그런데 이것은 입력된 값이 매우 클 경우 0과 1사이를 벗어난다는 점이 발생해버렸다. 그래서 생각해낸 방식이 시그모이드(sigmoid) 방식이다.
변형되는 가설에 대한 파이썬 코드는 다음과 같다.
먼저 선형회귀에서의 가설
hypothesis = tf.matmul(X, W) + b
그 다음은 시그모이드를 적용한 가설이다.
# Hypothesis using sigmoid: tf.div(1., 1. + tf.exp(tf.matmul(X, W)))
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
그리고 이 시그모이드 기법을 활용한 가설을 이용하여 나온 출력값 A,B,C가 있다면
이 출력 값들이 A=2.0 B=1.0 C=0.7 이런 식으로 가르킬 시
이것들의 합을 0~1 사이로 표현해주는 것이
바로 Softmax이다. 예를들어
A=0.6 B=0.3 C=0.1 이런식으로 말이다.
그리고 더 나아가서 이것들을 오로지 0과 1로만 표현해주는 것이 바로 One-hot Encoding이다.
가설에 이어서 이제 cost 함수를 계속 설명해보면
그렇게 정의된 가설이 바로 위와 같기에 기존 Linear 방식에서 사용한 cost 함수도 변형이된다.
먼저 시그모이드 함수를 사용할 경우 cost는 log 함수를 사용하여야 상극이 잘 맞는다.
y=1일 경우
H(x)=1 -> cost =0 에 수렴
H(x)=0 -> cost = 무한에 수렴
y=0 일 경우
H(x)=1 -> cost(1)=무한에 수렴
H(x)=0 -> cost= 0에 수렴
이런 0에 수렴하는 것을 이용하여 최적의 cost 값을 구한다. 하지만, 이렇게 y가 0과 1일 경우를 나누기 어려우므로
이러한 수식으로 사용할 수 있다.
텐서플로우에선 다음과 같이 구현된다.
# Hypothesis using sigmoid: tf.div(1., 1. + tf.exp(tf.matmul(X, W)))
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
# cost/loss function
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
그리고 이것을 좀더 경량화 한것이 다음과 같다.
# tf.nn.softmax computes softmax activations
# softmax = exp(logits) / reduce_sum(exp(logits), dim)
logits = tf.matmul(X, W) + b
hypothesis = tf.nn.softmax(logits)
# Cross entropy cost/loss
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits,
labels=tf.stop_gradient([Y_one_hot])))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
즉, 정리하자면 선형회귀에서 사용되는 가설과 cost 함수는
Classification에서 사용되는 가설과 cost 함수에 있어 차이가 있다.
'[프로그래밍] > 모두를 위한 딥러닝' 카테고리의 다른 글
[모두를위한딥러닝] 텐서보드(TensorBoard)로 딥러닝 해보기 (0) | 2019.08.21 |
---|---|
[모두를위한딥러닝] XOR 문제를 딥러닝으로 풀기 (0) | 2019.08.21 |
[모두를위한딥러닝] 텐서(Tensor) 연산 기본 사용 명령어 (0) | 2019.08.20 |
[모두를위한딥러닝]ML 실용과 몇가지 팁 (0) | 2019.08.20 |
[모두를위한딥러닝] 소프트맥스 회귀 (0) | 2019.08.19 |