Group Study (2022-2023)/Machine Learning

[Machine Learning] 1주차 스터디 - 머신러닝의 용어와 개념 & 선형 회귀(Linear Regression)

이애옭 2022. 10. 4. 01:59
머신러닝의 용어와 개념

인공지능의 한 분야이다.

(사람이 학습하듯이 컴퓨터에도 데이터들을 줘서 학습하게 함으로써 새로운 지식을 얻어내게 하는 것)

어떠한 자료나 현상을 바탕으로 프로그램이 학습해서 일을 함

학습에는 2가지 방법이 있다.

  1. 정해진 Data (supervised learning)
  2. Data 스스로 학습 (unsupervised learning)

1. Supervised Learnig은 컴퓨터가 입력값과 그에 따른 출력 값이 있는 data set을 이용하여 주어진 입력에 맞는 출력을 찾는 학습 방법이다. 입력된 문제에 대한 답을 예측하는 데 사용된다. ex) 상품 추천, 질병 진단 등

학습 훈련 데이터(training data)가 필요하다. 예로, 개와 고양이 사진을 구분하는 것을 들 수 있다. 이때 입력은 사진이고, 출력은 개 또는 고양이인지의 여부가 된다. 또 다른 예시로 사과 사진들을 주고 컴퓨터가 이것이 사과라는 것을 알게 해 준다.

<Types of supervised learning>
- regrssion ( 시험공부 시간에 따른 시험 점수 예측 )
- binary classification ( Pass-Fail 구분 )
- multi-lable classification ( ABCDF 구분 )

2. Unsupervised Learning은 입력값만 있는 data set을 이용하여 AI가 규칙성을 찾아내야 하는 학습 방법이다.

 

선형 회귀 (Linear Regression)

✔ Regrssion이란 뭘까?

전체의 평균으로 수렴한다? 되돌아간다? 회귀한다?라는 뜻이다.

데이터들을 대변하는 하나의 직선 y=ax+b를 가설 함수(예측 함수)로 만들어 보면 H(x)=  Wx+b 가 된다.

H(x) - y의 차이가 적을수록 직선이 데이터들의 분포를 잘 설명하고 있다고 할 수 있다.

가설 함수와 비용 함수
Gradient descent

✔How to minimize cost?

어떻게 실제 데이터와 비슷하게 만들어 낼 수 있을까? 바로 Gradient descent 알고리즘을 사용한다.

cost가 최소가 되는 W, b를 찾는 알고리즘
# Gradient descent를 tensorflow로 구현하고 반복문을 사용
# 실제 데이터 x=1,2,3,4,5 y=1,2,3,4,5 일 때

for i in range(100):
	with tf.GradientTape() as tape:
    	hypothesis = W * x_data + b
        cost = tf.reduce_mean(tf.square(hypothesis - y_data))
    W_grad, b_grad = tape.gradient(cost, [W, b])
    W.assign_sub(learning_rate * W_grad)
    b.assign_sub(learning_rate * b_grad)

결과는 초기값 W=2.9, b=0.5 일 때, 여러 번 반복함으로써 정확도가 올라가기 때문에 W는 1에 수렴하고 b는 0으로 수렴하며 cost(실제 데이터와의 차이)는 줄어든다.

cost function 수식

# Cost function in TensorFlow
def cost_func(W, X, Y):
	hypothesis = X * W
    return tf.reduce_mean(tf.square(hypothesis - Y))

✔ Gradient descent

Gradient descent 수식

# 발표자료의 코드를 수정하였습니다. x를 x_data, y를 y_data, w는 1이 아니라 1.6으로 수렴합니다.
# 실제 데이터 값 (y=2x-1)이지만 간략화 하여 (y=1.6x)로 가능
tf.random.set_seed(0)
x_data = [1., 2., 3., 4.]
y_data = [1., 3., 5., 7.]

# W값 초기설정
W = tf.Variable([5.0]) # W값이 무엇이던 간에 반복을 통해 W는 cost가 최소인 대략 1.6으로 수렴함

for step in range(300):
	hypothesis = W * x_data
    cost = tf.reduce_mean(tf.square(hypothesis - y_data))
    # gradient descent 수식을 코드로 작성
    alpha = 0.01
    gradient = tf.reduce_mean(tf.multiply(tf.multiply(W, x_data) - y_data, x_data))
    descent = W - tf.multiply(alpha, gradient)
    W.assign(descent)
    
    if step % 10 == 0:
    print('{:5} | {:10.4f} | {:10.6f}'.format(step, cost.numpy(), W.numpy()[0]))

 


1주 차 중요 내용

  • 머신 러닝의 2가지 학습 방법
  • Cost 함수의 값은 작을수록 실제 데이터와 비슷하다는 뜻
  • Gradient descent는 경사를 따라 기울기가 최소일 때까지 찾아가는 알고리즘