딥러닝은 가중치가 굉장하고 그 안에 아주 복잡한 식들이 있다.
그래서 그런 복잡한 구조에 입력을 넣어, 내가 원하는 예측값이 나오게 해야 하는데 어떻게 그 예측값이 나오게끔 할 것이냐.
그 예측값과 실제 값의 차이를 기반으로 계산할 수 있는 오차값을 계산할 수 있는 loss function을 만든 다음에, 이를 기반으로 해서 핵심적으로 gradient descent 기법을 사용하여 업데이트해야 하는 변수 값을 편미분을 통해 업데이트 해나간다.
이 과정을 여러 번 반복하다 보면, 조금씩 조금씩 오차가 최소가 되는 지점에 가깝도록 딥러닝이 동작한다.
큰 그림으로 학습해야 할 딥러닝 과정 이해하기
- 현실 세계의 데이터를 텐서(행렬)로 표현해야 한다, 즉 숫자 데이터로 변환해야 머신러닝/딥러닝 기술에 적용할 수 있다.
- 뉴런 구조와 유사하다.
- 수많은 Layer들을 거쳐 학습을 진행하며, 결과적으로 내가 원하는 출력을 하도록 구현한다.
- 오차 역전파식을 기반으로 한 학습을 한다.
- 결국, 가중치 업데이트 ~
- 학습 후, 예측을 해봤더니 결과가 좋게 나왔는데, 왜 좋은지는 정확히 모른다.
- 구조를 바꿔보고, 더 복잡하게 구현하니 좀 더 잘되더라
- 학습, 예측에 필요한 수학식을 다양하게 바꿔보니 더 잘되더라 :: 이 부분이 우리가 공부할 부분이다, 따라서 기초적인 수학식, 구조를 이해해야 도움이 된다.
딥러닝 개념 이해에 필요한 수학 기호 정리
함수
- 1차 함수
- y = ax + b => f(x)
- a는 기울기, b는 절편
- 딥러닝에서는? f(x) = wx + b, w(weight)는 가중치, b(bias)는 편향
- w가 변하면 그래프의 기울기가 변함
- b가 변하면 그래프의 높낮이가 변함
- y = ax + b => f(x)
- 2차 함수
- f(x) = x^2
미분 :: 핵심적인 부분
- 가중치를 업데이트하는데 있어 가장 핵심적인 개념으로, 그래프의 한 점에서의 기울기(gradient, 순간 변화량)를 의미한다.
딥러닝 기본 구조 이해를 위해 필요한 선형 회귀 정리
선형회귀 (Linear Regression)
- "시험 공부를 하는 시간이 길면, 성적이 잘 나온다" 등 특정 변수(정보)에 따라, 또 다른 특정 변수 값이 영향을 받음
- 성적을 변하게 하는 정보 요소들을 독립변수(x), 독립변수 값에 따라 종속적으로 변하는 변수를 종속변수(y)라고 함
- 선형회귀는 한 개 이상의 독립 변수와 종속 변수 간의 관계를 선형 모델로 구현한 것
단순 선형 회귀(simple linear regression)
- 독립변수가 하나인 경우, y = wx + b
다중 선형 회귀(multiple linear regression)
- 독립변수가 여러 개인 경우, y = w1x1 + w2x2 + ... + wnxn + b
- 편향은 w1x1, w2x2 등 각각마다 있을 수 있지만, 결과적으로 모두 더하여 b 로 표현 가능하다.
가설(Hypothesis) H(x)
- x와 y의 관계를 유추하기 위해 작성한 식, H(x) = wx + b
선형 회귀가 예측을 하는 방법, 즉 오차를 계산하는 방법?
- 선형 회귀는 실제값과 예측값을 비교하면서 즉, 오차를 계산하면서 예측을 한다.
- 이를 위해서는, 가설식으로 예측된 값과 실제값 간 차이를 가장 작게 만드는 적절한 가중치 w, 편향 b를 구해야 한다.
- 즉, 예측된 값과 실제 값 간 차이를 가장 잘 표현하는 "오차 계산식"을 정의해야 한다.
- 표본으로부터 추정한 예측값과 실제값의 차이 표현
- 이반 통계학과 이를 기반으로 한 머신러닝에서는 잔차(residual)라고도 함
- 오차(잔차)를 표현하는 식을 비용 함수(cost function), 손실 함수(loss function), 목적 함수(objective function)라고도 함
- MAE, MSE, RMSE, RMSLE 등이 있다. 회귀성능평가지표
- 표본으로부터 추정한 예측값과 실제값의 차이 표현
선형 회귀가 "오차를 최소화 하는" 방법
- 실제 값과 예측값의 차이를 계산할 수 있는 loss function을 정의해서, 이를 기반으로 오차를 계산하고, 결과적으로 w 나b 값을 업데이트하는 것이다.
그렇다면, 어떻게 w와 b를 업데이트하는가?
최소제곱법
- 딥러닝은 오차를 최소가 되도록 w와 b 값을 업데이트하는데, w와 b를 업데이트하는 방법으로 최소제곱법이 있다.
- 즉, 그래프에서 기울기가 0이 되는 부분이 오차가 가장 작은 부분이 된다. 즉, Cost function이 최소화되는 부분
- 다만, 최소제곱법의 경우 식이 더 복잡해지면, 즉 가중치가 여러개가 되면 딱 떨어지게 w값이 무엇이어야 한다! 는 것을 구할 수 없게 된다.
- 그래서, 경사하강법이 나옴..!
- 오차가 최소화되는 값을 어떻게 찾아야할지 모르니까, 조금씩 조금씩 이동해 가면서 그 근처로 가보자는 기법이다.
- 위의 식에서 a(알파)가 추가된 것을 확인할 수 있다.
- Learning rate(하이퍼 파라미터, 임의로 설정하는 값, 주로 0.01, 0.05, 0.1 등)
- 미분값(기울기값)이 +면, w는 더 낮은 값으로, 미분값(기울기값)이 -이면, w는 더 큰 값으로 계산되며,
- 기울기값이 0에 근접할때까지 반복 (또는 일정 횟수만큼 반복하기도 함)
- 미분을 위의 그래프를 표현한 식이라고 하면, 그 식을 특정 파라미터로 미분을 했을 때에는 어떤 시점에서의 '기울기'가 되는 것이다.
딥러닝 기본 구조 이해를 위해 필요한 텐서 이해
텐서를 정의하는 용어
- 축(axis)의 갯수(rank): 1D 텐서는 1개의 축이 있고, 2D 텐서는 2개의 축이 있다고 표현한다.
- PyTorch에서는 텐서객체.dim()으로 축의 갯수를 확인할 수 있다.
- 축의 갯수를 다른 말로 rank(랭크)라고도 한다.
- 크기(shape 또는 size): 텐서의 각 축(axis)에 따라, 얼마나 많은 차원이 있는지 나타내는 값으로, 파이썬의 튜플 구조로 표현
[출처] 인프런 처음하는 딥러닝과 파이토치(PyTorch) 부트캠프 [데이터과학 Part3]
'Deep Learning & Machine Learning > PyTorch' 카테고리의 다른 글
[PyTorch] tutorial, 6.최적화(Optimization) (0) | 2024.05.19 |
---|---|
[PyTorch] tutorial, 5.Autograd (0) | 2024.05.19 |
[PyTorch] tutorial, 4.신경망 모델 구성하기 (0) | 2024.05.19 |
[PyTorch] tutorial, 3.변형(Transform) (0) | 2024.05.19 |
[PyTorch] tutorial, 2.Dataset과 DataLoader (0) | 2024.05.19 |