👉이전글에서 이진분류의 대표 기술인 Logistic Regression
에 대해 알아보았습니다.
이번엔 출력 값이 두 개가 아닌, 다수의 출력 값을 낼 수 있는 기술인 Softmax Regression
에 대해 알아보겠습니다.
이번 글은 모두를 위한 딥러닝 강의를 수강한 후 작성하는 글입니다.
Multinomial Classification
성적에 따른 S~F등급 예측 등과 같은 다중 출력 모델은 기존 Logistic Classfication
기술을 응용하여 만들 수 있습니다.
위 사진에서 나타낸 것처럼 출력 데이터(A, B, C)의 가지수를 3으로 가정해봅시다.
출력 데이터 A, B, C중 하나로 분류하기 위해 3개의 Hypothesis
가 필요한데요.
3개의 Hypothesis
를 활용하여 도출된 수식은 아래 사진과 같이 표현할 수 있습니다.
위 사진과 같이 출력 데이터(A, B, C)의 가지수 3에 맞게 크기 3의 W 1차원 벡터를 구성하고,
입력으로 들어온 입력 값을 위 W벡터에 각각 계산해주면
그에 맞게 도출된 출력 값에 따라 입력 값을 A, B, C중 하나로 분류하고 Hypothesis
를 최적화할 수 있습니다.
그리고 w벡터들을 하나의 벡터로 표현하면 위 사진과 같은 형태의 수식이 탄생합니다.
Softmax Classifier
여러 가지수 중 하나로 예측하여 분류하기 위해서는 0과 1사이의 확률 값으로 변환할 필요가 있습니다.
위 사진은 Hypothesis
의 출력 값을 Softmax
분류기를 통해 0과 1사이의 확률 값으로 변환하는 도식입니다.
그리고 변환된 확률 값은 위 사진에서 보이는 것처럼 One-Hot Encoding
과 같은 과정을 거쳐
분류를 위한 최종 벡터 값 설정을 진행합니다.
가장 간단한 방법은 가장 큰 확률 값은 1로 설정하고 나머지는 0으로 세팅하는 One-Hot Encoding
이 있습니다.
Cost Function
Cost Function은 위 도식과 같은 형태로 표현할 수 있습니다.Softmax
에서는 Cross Entropy
라고도 불립니다.
수식은 Logistic Regression
의 Cost Fucntion과 비슷한 원리로,
예측값과 실제값에 차이가 있을 경우, 무한대로 수렴하는 Cost가 출력되고,
에측값과 실제값에 차이가 없을 경우, 0에 수렴하는 Cost가 출력되는 원리입니다.
그리고 아래 사진은 최종 형태입니다.
Softmax Regression in Tensorflow
아래 코드는 Softmax
예제 Tensorflow 코드입니다.
x_data = [[1, 2, 1, 1], [2, 1, 3, 2], [3, 1, 3, 4], [4, 1, 5, 5], [1, 7, 5, 5], [1, 2, 5, 6], [1, 6, 6, 6], [1, 7, 7, 7]]
y_data = [[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 1, 0], [0, 1, 0], [1, 0, 0], [1, 0, 0]]
X = tf.placeholder("float", [None, 4])
Y = tf.placeholder("float", [None, 3])
nb_classes = 3
W = tf.Variable(tf.random_normal([4, nb_classes]), name='wieght')
b = tf.Variable(tf.random_normal([nb_classes]), name='bias')
hypothesis = tf.nn.softmax(tf.matmul(X, W) + b)
cost = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(hypothesis), axis=1))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(2001):
sess.run(optimizer, feed_dict=(X: x_data, Y: y_data))
if step % 200 == 0:
print(step, sess.run(cost, feed_dict=[X; x_data, Y: y_data]))
'개발 > AI' 카테고리의 다른 글
KT AI 해커톤 회고 (2) (1) | 2023.11.02 |
---|---|
KT AI 해커톤 회고 (1) (0) | 2023.10.27 |
[NLP] Embedding (0) | 2023.09.23 |
[AI] Logistic Regression (0) | 2023.09.10 |
[AI] Regression (0) | 2023.01.22 |