기본적인 Machine Learing의 용어와 개념 설명
Machine Learning이란?
-프로그램 자체가 스스로 학습해서 배우는 능력을 갖는 프로그래밍
-limitations of explicit programming
Machine Learning의 학습 방식
-Supervised learning
정해져있는 데이터(training set)로 학습을 하는 방식으로, 레이블(label)이 주어짐
ex)고양이 사진을 여러 장 주고 그것들의 특징을 가지고 학습
ex)image labeling, email spam filter, predicting exam score 등
-Unsupervised learning
레이블이 주어지지 않고, 데이터를 가지고 스스로 학습
Training data set
x | y |
3,6,8 | 3 |
1,2,9 | 1 |
4,7 | 4 |
Supervised learning의 타입
-regression: 일정한 범위를 가지고 결과를 예측(성적을 0~100점으로 나누어 예측)
-binary classification: pass/non-pass 두가지로 분류
-multi-label classification: A, B, C, ....,F 등 레이블이 2개보다 많은 가짓수로 분류
Linear Regression의 Hypothesis와 cost 설명
(Linear)Hypothesis
$H(x)=Wx+b$
Cost Function
그래프의 여러가지 선들 중 어떤 것이 가설에 가장 잘 맞는지 선택해야 합니다. cost function은 데이터가 선에서 얼마나 떨어져있는지 계산하는 방법입니다.
$H(x)-y$ : 가설이 실제 값과 떨어져있는 거리
$(H(x)-y)^2$ : 거리를 더 명확하게 나타내주기 위해 값을 제곱함
$$cost(W, b)=\frac{1}{m}\sum_{i=1}^m (H(x^{(i)})-y^{(i)})^2$$
$$H(x)=Wx+b$$
데이터 개수만큼 예측값과 실제값의 차이의 제곱을 합해줍니다.(수학에서의 분산 구하는 방식과 동일)
***목표: cost 값을 최소화하기!!***
Linear Regression의 cost 최소화 알고리즘의 원리 설명
Simplified hypothesis
$$cost(W)=\frac{1}{m}\sum_{i=1}^m (H(x^{(i)})-y^{(i)})^2$$
$$H(x)=Wx$$
W=0 cost(W)=4.67
W=1 cost(W)=0
W=2 cost(W)=4.67
Gradient descent algorithm(경사를 따라 내려가는 알고리즘)
# 단순한 선형 회귀 예제 (텐서플로우2)
import numpy as np
import tensorflow as tf
# x(입력), y(결과) 데이터
x_train = [1,2,3,4]
y_train = [1,2,3,4]
# 모델 생성
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(1, input_dim=1)) # 1차원 입력자료
# 최적화 방식
sgd = tf.keras.optimizers.SGD(lr=0.01)
# cost/loss 함수로 컴파일 작업
model.compile(loss='mean_squared_error', optimizer=sgd)
# 가중치와 바이어스 추출은 아주 쉽게 이루어집니다
model.layers[0].get_weights()
# 우리는 가중치와 바이어스를 별도의 변수로 저장하여 쉽게 검사 할 수 있습니다
# 수백 또는 수천 개가 있을 수 있습니다!
weights = model.layers[0].get_weights()[0]
bias = model.layers[0].get_weights()[1]
# 훈련 (1000번 반복)
model.fit(x_train, y_train, epochs=100) # 100번 반복 훈련
# 테스트 모델
print(model.predict(np.array([5]))) # 입력 5에 대한 예측 값 출력
이 알고리즘에서 최저점을 찾는 방법은 '경사도'를 이용하는 것입니다.
경사도를 따라 움직이며 0에 가까운 값(최저점)에 도달하게 됩니다.
기울기를 구하기 위해 cost function 식을 미분합니다.
$$cost(W)=\frac{1}{2m}\sum_{i=1}^m W(x^{(i)})-y^{(i)})^2$$
$$미분$$
$$cost(W)=\frac{1}{m}\sum_{i=1}^m (W(x^{(i)})-y^{(i)})x^{(i)}$$
Convex function
x_data=[1,2,3]
y_data=[1,2,3]
W=tf.Variable(tf.random.normal([1]),name='weight')
@tf.function
def model(x,y,learning_rate):
hypothesis=W*x
cost=tf.reduce_sum(tf.square(hypothesis-y))
gradient=tf.reduce_mean((W*x-y)*x)
descent=W-learning_rate*gradient
return descent
for step in range(21):
update=W.assign(model(x_data, y_data, 0.1))
print(step, cost, W)
$$cost(W)=\frac{1}{m}\sum_{i=1}^m (W(x^{(i)})-y^{(i)})x^{(i)}$$
어느 곳에서 시작하든지 간에 도착 지점이 원하는 곳(최저점)을 향하게 됩니다.
항상 cost function이 convex function을 만족하는지 확인하는 것이 중요합니다.
'인공지능' 카테고리의 다른 글
[Training Neural Network] epoch, batch, and iteration (0) | 2021.01.20 |
---|---|
[Optimizer] Optimizer의 종류 (0) | 2021.01.19 |
[Keras] Keras에서 loss 함수 (0) | 2021.01.19 |
[모두를 위한 딥러닝1] Soft classification(3주차) (0) | 2021.01.16 |
[모두를 위한 딥러닝1] Logistic Regression (2주차) (0) | 2021.01.09 |