네박자대로
[모두의 딥러닝2] 3Lab. Simple linear regression 본문
지난 시간 배웠던 simple linear regression을 tensorflow를 활용하여 직접 코드로 작성해보는 수업이다.
여기서 잠깐!
본 강의는 tensorflow와 pytorch로 나누어 실습 수업을 진행하는데, 둘의 차이는 무엇일까??
[딥러닝 프레임워크]
[출처] https://wikidocs.net/156950
텐서플로우와 파이토치 모두 오픈 소스이다.
다만, 텐서플로우는 구글에서 개발했고, 파이토치는 페이스북에서 개발했다.
이 둘의 가장 큰 차이는 "계산 그래프 정의하는 방식"
텐서플로우는 정적 그래프를 생성하지만 (먼저 모델의 전체 계산 그래프 정의 후, ML모델을 실행)
파이토치는 동적 그래프를 생성한다. (동작 중에 그래프를 정의, 조작할 수 있음)
아무래도 텐서플로우가 상대적으로 먼저 등장했기 때문에 리소스가 훨씬 많다.
(그렇다고 텐서플로우가 더 우수한 것이 아님)
둘의 상세한 비교는 웹상에 많지만, 일단 강의 영상이 짧고 이미 어느 정도 익숙한 텐서플로우를 선택했으므로
텐서플로우를 조금 더 자세히 들여다보도록 하자.
[TensorFlow란?]
구글에서 만든 딥러닝 라이브러리로, C++로 구현되어 있으며 다양한 언어 지원하기는 하지만 파이썬을 최우선으로 지원.
Tensor란 딥러닝에서 데이터를 표현하는 방식이다.
Tensor는 matrix로 표현할 수 있는 2차원 형태의 배열을 고차원으로 확장한 다차원 배열이다. 즉, matrix의 집합.
(무슨 말인지 이해가 안가므로 예시를 통해 살펴보도록 하자)
[Hypothesis and Cost]
지난 시간 살펴봤듯이, hypothesis와 cost 공식은 위와 같다.
이를 코드로 나타내려면 어떻게 할까?
x_data = [1,2,3,4,5]
y_data = [1,2,3,4,5]
가 있다고 할 때, 이에 따른 hypothesis가 되는 선형방정식을 구해보자.
(사실 암산으로 y=x 임을 알 수는 있지만, 이보다 더 복잡하고 많은 데이터들 사이의 선형식은 더 이상 암산으로 구할 수 없다)
weight와 bias는 일단 임의로 정해준다.
이 때 적절한 값으로 초기화해주지 않으면 overfitting / underfitting 혹은 local minimization 문제를 겪을 수 있다.
덧붙여 bias는 보통 작은 값으로 초기화하는데, 예전엔 0.01 등의 값으로 초기화 했다면, 요즘은 훈련기법의 발전 덕에 0으로 초기화해도 문제가 없다고 한다. (https://deepestdocs.readthedocs.io/en/latest/002_deep_learning_part_1/0025/)
최적의 가중치로 초기화하는 기법들이 있으나, 이번 시간에는 임의의 실수로 초기화하도록 하겠다.
(weight = 2.9, bias = 0.5 초기화)
※잠깐!
cost함수에서, 평균과 제곱에 대한 함수가 왜 굳이 tf.reduce_mean(), tf.square()일까??
이 연산이 tensor, 그러니까 n차원의 matrix끼리의 연산임을 잊지말자.
reduce_mean() 이란 사용자 지정에 맞게 차원을 축소하며 평균을 구하는 함수이다.
square() 은 matrix 요소끼리 제곱할 수 있게 해주는 함수이다.
[Gradient descent _ 경사하강법]
cost를 minimize하는 기법에 대해서는 다음 강의에서 살펴볼 것이므로, 이번 실습에는 대략 이해하고 넘어가도록 하자.
경사하강법은 학습 시 사용하는 optimizer (최적화 방법) 중 하나이며,
다음과 같은 과정을 통해 비용을 최소화하는 지점을 찾아나간다.
그렇다면 이러한 알고리즘을 tensorflow에서는 어떻게 구현하느냐?
tf.gradientTape를 이용한다.
= 자동 미분 해주는 API로, 자동 미분이란 결국 gradient를 계산한다는 것이다.
그렇다면 tape 변수는 뭐냐?
tf.gradientTape 안에서 실행된 모든 연산을 기록한 변수다.
tape.gradient(reg_loss, w)는 cost를 w에 대해 미분한 값, tape.gradient(reg_loss,b)는 bias에 대해 미분한 값이다.
이 과정이 epoch 1사이클이다.
최종 코드는 다음과 같다.
'딥러닝 공부' 카테고리의 다른 글
[모두의 딥러닝2] 3. Simple linear regression (0) | 2022.07.14 |
---|---|
[모두의 딥러닝2] 2. 기본적인 ML의 용어와 개념 설명 (0) | 2022.07.13 |
[모두의 딥러닝2] 1. Docker Instruction (0) | 2022.06.28 |