인공지능

[모두를 위한 딥러닝1] Linear Regression(1주차)

sujin7837 2021. 1. 7. 02:25
반응형

기본적인 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을 만족하는지 확인하는 것이 중요합니다.

 

 

 

반응형