본문 바로가기
Programming/MachineLearning

딥러닝 머신러닝 인공지능 경사 하강법 10분만에 이해하기 쫄지마 딥러닝

by 하하호호 2021. 12. 15.
반응형

딥러닝 경사 하강법?

 

이전 글에서 살펴본 선형회귀에서

오차를 줄여나가면서 예측값을

수정한다고 했다.

 

선형회귀에서 a값과 b값을 조정하면서

오차를 줄여나가게 되는데, 만약

기울기 a를 너무 크게 잡으면 오차가

커지게 된다. 

 

오차와 기울기의 관계를 그래프로

표현하는 2차 방정식 형태의 그래프가

표현된다.

 

오차가 가장 작은 점은 그래프의 

가장 아래부분이 된다. 즉, 오차 

그래프에서 가장 작은 부분으로

이동하는 방법이 바로 경사 하강법

(Gradient Decent)이다.

 

경사하강법에는 미분을 사용한다.

계속 어려운 용어가 나와서 머리가 

아픈가?

 

이것만 이해하면 딥러닝의 전체적인

그림을 이해하는 것이니 조금더 힘내길

바란다.

 

문과생이라면 미분을 이해하지 못할 수도

있다. 하지만 개념은 간단하다.

 

x축 변화량 대비해서 y축 변화량이 얼마나

되는가를 보는 것이다. 이를 순간 변화량이라고

하며 그래프를 미분하면 순간 변화량을 

찾는 것이다.

 

우리가 찾아야 하는 지점은 미분이 0이

되는 지점, 즉 기울기가 0인 지점을 찾는 것이다.

 

경사하강법은 임의의점 a1에서 미분을 하고,

a2에서 미분을해서 미분값이 0인지점을 계속

해서 찾아나가게 된다. 

 

딥러닝 경사하강법

 

학습률 Learning Rate

우리는 기울기를 조금씩 조정하면서,

미분이 0인 지점, 오차가 0인지점을

찾아야 한다.

 

하지만 기울기의 변화값을 너무 크게 

줘버리면 미분이 0인 지점을 찾지 못하고

오류값을 반환한다.

 

이 때 기울기의 변화값을 학습률이라고

한다. tensorflow의 keras에서는 학습률을

자동으로 조절해준다.

 

딥러닝 경사하강법 구현해보기

 

먼저 tensorflow 라이브러리를 호출한다.

x,y 데이터값을 정의한다. 데이터는 4개의 

데이터를 입력해본다.

 

기울기 a값과 절편 b값을 tensorflow에서 

변수를 정의한다. a값은 0~10사이의 float64형

데이터를, b값은 0~100사이의 float64형 

데이터를 정의한다.

 

seed는 매 실행마다 동일한 결과값을 얻기위한

파라미터라고 생각하면 편하다.

 

회귀 모형을 그려준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
 
# x,y 데이터 값
data = [[2,81],[4,93],[6,91],[8,97]]
x_data = [x_row[0for x_row in data]
y_data = [y_row[1for y_row in data]
 
# 기울기 a와 y절편 b의 값을 임의로 정한다.
# 단, 기울기 범위는 0~10 사이며, y 절편은 0~100 사이에서 변하게 한다.
= tf.Variable(tf.compat.v1.random_uniform([1], 010, dtype=tf.float64, seed=0))
= tf.Variable(tf.compat.v1.random_uniform([1], 0100, dtype=tf.float64, seed=0))
 
# y에 대한 일차 방정식 ax+b의 식을 세운다.
y=a*x_data + b
cs

 

이전 포스팅에서 살펴본 평균제곱근 오차식을

사용해서 오차를 추적한다.

 

학습률은 임의로 0.1을 부여한다. keras에서는 

학습률을 자동으로 조절해준다.

 

경사하강법은 tensorflow에서 GradientDescentOptimizer()

를 사용한다. 평균제곱근오차를 최소화하는 방향으로

경서하강법 함수를 사용한다.

 

이제 tensorflow에서 세션을 열고,

변수들을 초기화 해주고,

경사하강법을 20000만번 for loop으로 돌리면,

세션을 실행하면 결과값을 얻을 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# tensorflow RMSE 함수
rmse=tf.sqrt(tf.reduce_mean(tf.square(y-y_data)))
 
# 학습률 값
learning_rate = 0.1
 
# RMSE 값을 최소로 하는 값 찾기
gradient_descent = tf.compat.v1.train.GradientDescentOptimizer(learning_rate).minimize(rmse)
 
# tensorflow 이용 학습
with tf.compat.v1.Session() as sess:
    # 변수 초기화
    sess.run(tf.compat.v1.global_variables_initializer())
    
    # 2001번 실행
    for step in range(20000):
        sess.run(gradient_descent)
        # 100번 마다 출력
        if step % 100 == 0:
            print("Epoch : {0}, RMSE : {1}, 기울기 : {2}, y 절편 : {3}".format(step, sess.run(rmse), sess.run(a), sess.run(b)))
cs

 

위 코드의 결과값은 다음과 같다.

 

 

 

 

딥러닝 머신러닝 차이, 머신러닝 딥러닝

머신러닝 딥러닝 차이 알파고가 대한민국을 초토화 시킨지 5년이 지났다. 실생활에도 인공지능이 많이 들어 왔고, 무수히 쌓여가는 데이터들을 기반으로 한 새로운 사업들이 계속 등장하고 있

incomeplus.tistory.com

 

 

딥러닝의 층 구조 딥러닝을 배워보자

더보기 딥러닝 기본 구조 신경망 딥러닝의 구조는 크게 3부분으로 나뉘어져 있다. 1. 입력 부분 2. 분석 부분 3. 출력 부분 마지막으로 모델을 만들고 난 후, 컴파일을 하는 부분으로 구성된다. 층

incomeplus.tistory.com

 

 

딥러닝 기본 구조 이해하기 2

딥러닝 기본구조 딥러닝의 근간을 이루는 것은 인공 신경망이라고 불리는 작은 연산장치들의 집합이다. 신경망의 뼈대는 알고리즘에 많은 의존도를 보인다. 그 중 가장 대표적인 것이 선형 회

incomeplus.tistory.com

 

 

반응형

댓글