경사하강법

newbieski·2022년 6월 15일
0

머신러닝

목록 보기
2/14

어쩌다보니 경사하강법. 하지만 꼭 하긴 해야함

생각의 흐름

kaggle -> 머신러닝 -> jupyter notebook -> pytorch -> quickstart -> 어렵네 -> 예제로 배우는 파이토치(PYTORCH) -> 이해가 안감

예제로 배우는 파이토치

https://tutorials.pytorch.kr/beginner/pytorch_with_examples.html 의 준비운동

  • 해야하는 일 : sin함수를 3차 다항식으로 근사
  • 가중치를 조절해서 (근사-sin)차이를 적게 => 경사하강법

경사하강법 - 기록하고 싶은 것

  • 3차다항식 근사 : a, b, c, d 계수를 구하는 것
  • 경사하강법 : 최적의 "x"를 찾는 것 (다차원인 경우는 여러개)
  • 이 경우에는 최적의 (a,b,c,d)를 찾는것
  • f(a,b,c,d) = 격차 = 최소화시키기
  • 경사하강법 관련 글을 보면, x'에서 미분값을 구해서, 그 값을 적절하게 빼고.....
    • 다차원 => 편미분
    • 빼기 => vector => gradient
  • 그런데 대상 함수가 f2{f^2}의 형태임
    • f2{f^2}을 최소화해야하는 문제
    • 미분하면 2 x f x f'의 형태가 됨
    • f2{f^2} 인 이유? 유클리디안 거리 = l2 norm
  • f(a,b,c,d)
    • sum(a+bx+cx2+dx3sin(x)){sum(a + bx + cx^2 + dx^3 - sin(x))}
    • f편미분=(1,x,x2,x3){f'편미분 = (1, x, x^2, x^3)} ==> a,b,c,d를 변수로 관점을 전환해야함

결국 코드에서 표현하고 싶은 것

  • f2(a,b,c,d){f^2의 (a',b',c',d')}에서의 편미분 값
  • 2ff편미분(a,b,c,d){2 * f * f'편미분(a',b',c',d')}
    =2f(1,x,x2,x3){= 2f * (1,x,x^2,x^3)}
    =2(차이)(1,x,x2,x3){= 2(차이) * (1,x,x^2,x^3)}
  • loss = 각각의차2의합{각각의 차이^2의 합} => 결국차2{결국 차이^2} => f2{f^2}

미흡한 것들

  • sum(f)의 형태에 적용하는 부분의 흐름 이해 미흡
    • (x, y)의 쌍은 주어진 상태임 => 상수
    • g(x)=a+bx+cx2+dx3{g(x) = a + bx + cx^2 + dx^3}으로 표현하고, f(a,b,c,d)=loss=all x(g(x)sin(x))2{f(a,b,c,d) = loss = \sum_{all \ x} (g(x)-sin(x))^2} 로 표현은 되지만 결국 (a, b, c, d)에 대한 다항식으로 정리가 될 것임. 왜냐면 특정 (a,b,c,d)에 대해 loss가 정해지기 때문임
    • 편미분을 할 것임. f(a,b,c,d)=2all x(g(x)sin(x))(g(x)sin(x)){f'(a,b,c,d) = 2 \sum_{all \ x} (g(x)-sin(x))(g(x)-sin(x))'}
      =2all x(개별차이)(1,x,x2,x3){= 2 \sum_{all \ x} (개별차이)(1, x, x^2, x^3) }
      (201,20x,20x2,20x3)+(211,21x,21x2,21x3)+...{(2차이_0 * 1, 2차이_0*x, 2차이_0*x^2, 2차이_0*x^3) + (2차이_1 * 1, 2차이_1*x, 2차이_1*x^2, 2차이_1*x^3) + ...}
    • 바로 바로 이해가 가면 좋겠다 앞으로
  • 경사하강법에서 미분값을 빼주는 것이 느낌으로는 이해가 가는데 수식으로는 모르겠음
profile
newbieski

0개의 댓글