본문 바로가기

Deep Learning & Machine Learning/PyTorch

[인프런 데이터과학 Part3]섹션1. 딥러닝 기본 배경지식(이론)

딥러닝은 가중치가 굉장하고 그 안에 아주 복잡한 식들이 있다. 
그래서 그런 복잡한 구조에 입력을 넣어, 내가 원하는 예측값이 나오게 해야 하는데 어떻게 그 예측값이 나오게끔 할 것이냐.
그 예측값과 실제 값의 차이를 기반으로 계산할 수 있는 오차값을 계산할 수 있는 loss function을 만든 다음에, 이를 기반으로 해서 핵심적으로 gradient descent 기법을 사용하여 업데이트해야 하는 변수 값을 편미분을 통해 업데이트 해나간다.  
이 과정을 여러 번 반복하다 보면, 조금씩 조금씩 오차가 최소가 되는 지점에 가깝도록 딥러닝이 동작한다. 

큰 그림으로 학습해야 할 딥러닝 과정 이해하기

  • 현실 세계의 데이터를 텐서(행렬)로 표현해야 한다, 즉 숫자 데이터로 변환해야 머신러닝/딥러닝 기술에 적용할 수 있다.
  • 뉴런 구조와 유사하다.
    • 수많은 Layer들을 거쳐 학습을 진행하며, 결과적으로 내가 원하는 출력을 하도록 구현한다.
  • 오차 역전파식을 기반으로 한 학습을 한다.
    • 결국, 가중치 업데이트 ~

 

 

  • 학습 후, 예측을 해봤더니 결과가 좋게 나왔는데, 왜 좋은지는 정확히 모른다.
    • 구조를 바꿔보고, 더 복잡하게 구현하니 좀 더 잘되더라
    • 학습, 예측에 필요한 수학식을 다양하게 바꿔보니 더 잘되더라 :: 이 부분이 우리가 공부할 부분이다, 따라서 기초적인 수학식, 구조를 이해해야 도움이 된다.

 

 

딥러닝 개념 이해에 필요한 수학 기호 정리

 

함수

  • 1차 함수
    • y = ax + b => f(x) 
      • a는 기울기, b는 절편
    • 딥러닝에서는? f(x) = wx + b, w(weight)는 가중치, b(bias)는 편향
    • w가 변하면 그래프의 기울기가 변함
    • b가 변하면 그래프의 높낮이가 변함
  • 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를 업데이트하는가?

 

최소제곱법

MSE 예시

  • 딥러닝은 오차를 최소가 되도록 w와 b 값을 업데이트하는데, w와 b를 업데이트하는 방법으로 최소제곱법이 있다. 

마우스 포인터가 가리키고 있는 부분이 오차가 가장 작은 부분이다.

 

  • 즉, 그래프에서 기울기가 0이 되는 부분이 오차가 가장 작은 부분이 된다. 즉, Cost function이 최소화되는 부분
  • 다만, 최소제곱법의 경우 식이 더 복잡해지면, 즉 가중치가 여러개가 되면 딱 떨어지게 w값이 무엇이어야 한다! 는 것을 구할 수 없게 된다. 
  • 그래서, 경사하강법이 나옴..! 
    • 오차가 최소화되는 값을 어떻게 찾아야할지 모르니까, 조금씩 조금씩 이동해 가면서 그 근처로 가보자는 기법이다.

 

 

 

 

 

  • 위의 식에서 a(알파)가 추가된 것을 확인할 수 있다. 
    • Learning rate(하이퍼 파라미터, 임의로 설정하는 값, 주로 0.01, 0.05, 0.1 등)
  • 미분값(기울기값)이 +면, w는 더 낮은 값으로, 미분값(기울기값)이 -이면, w는 더 큰 값으로 계산되며,
  • 기울기값이 0에 근접할때까지 반복 (또는 일정 횟수만큼 반복하기도 함)

  • 미분을 위의 그래프를 표현한 식이라고 하면, 그 식을 특정 파라미터로 미분을 했을 때에는 어떤 시점에서의 '기울기'가 되는 것이다. 

 

딥러닝 기본 구조 이해를 위해 필요한 텐서 이해

4차원 이상은 그림으로 표현이 불가하여, 보통 3차원과 동일하게 표기한다.

 

 

텐서를 정의하는 용어

  • 축(axis)의 갯수(rank): 1D 텐서는 1개의 축이 있고, 2D 텐서는 2개의 축이 있다고 표현한다.
    • PyTorch에서는 텐서객체.dim()으로 축의 갯수를 확인할 수 있다.
    • 축의 갯수를 다른 말로 rank(랭크)라고도 한다.
  • 크기(shape 또는 size): 텐서의 각 축(axis)에 따라, 얼마나 많은 차원이 있는지 나타내는 값으로, 파이썬의 튜플 구조로 표현

 

[출처] 인프런 처음하는 딥러닝과 파이토치(PyTorch) 부트캠프 [데이터과학 Part3]