어쩌다보니 경사하강법. 하지만 꼭 하긴 해야함
생각의 흐름
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의 형태임
- f2을 최소화해야하는 문제
- 미분하면 2 x f x f'의 형태가 됨
- f2 인 이유? 유클리디안 거리 = l2 norm
- f(a,b,c,d)
- sum(a+bx+cx2+dx3−sin(x))
- f′편미분=(1,x,x2,x3) ==> a,b,c,d를 변수로 관점을 전환해야함
결국 코드에서 표현하고 싶은 것
- f2의(a′,b′,c′,d′)에서의 편미분 값
- 2∗f∗f′편미분(a′,b′,c′,d′)
=2f∗(1,x,x2,x3)
=2(차이)∗(1,x,x2,x3)
- loss = 각각의차이2의합 => 결국차이2 => f2
미흡한 것들
- sum(f)의 형태에 적용하는 부분의 흐름 이해 미흡
- (x, y)의 쌍은 주어진 상태임 => 상수
- g(x)=a+bx+cx2+dx3으로 표현하고, f(a,b,c,d)=loss=∑all x(g(x)−sin(x))2 로 표현은 되지만 결국 (a, b, c, d)에 대한 다항식으로 정리가 될 것임. 왜냐면 특정 (a,b,c,d)에 대해 loss가 정해지기 때문임
- 편미분을 할 것임. f′(a,b,c,d)=2∑all x(g(x)−sin(x))(g(x)−sin(x))′
=2∑all x(개별차이)(1,x,x2,x3)
(2차이0∗1,2차이0∗x,2차이0∗x2,2차이0∗x3)+(2차이1∗1,2차이1∗x,2차이1∗x2,2차이1∗x3)+...
- 바로 바로 이해가 가면 좋겠다 앞으로
- 경사하강법에서 미분값을 빼주는 것이 느낌으로는 이해가 가는데 수식으로는 모르겠음