일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- k8s
- TLS
- linux
- 쿠버네티스 #도커 #MSA #Istio #Service Mesh
- datascience
- Kubernetes
- dadtamining
- dadtascience
- Linear Regression #AI #기계학습 #인공지능 #Lasso #Ridge
- 기계학습#인공지능#AI#ML
- 1*1
- ML
- rest proxy
- k9s
- rolebinding
- https
- Ai
- ipvs
- c
- xff
- Linear Regression #AI #ML #기계학습 #인공지능 #선형회귀
- OS
- embedded rest proxy
- 알고리즘
- 인공지능 #AI #ML #기계학습 #Lasso #Ridge #Regularization #Linear Regression
- Datamining
- AI #ML #Data #datascience #data mining
- NFA #DFA #컴파일러 #Lexical
- 컴파일러
- Data # datamining #datascience #AI #ML
- Today
- Total
solve-my-curiosity
Gradient-Descent - 2 본문
문제 : 이런 objective function이 주어졌을 때 B^0의 gradient를 구하고, update rule이 무엇인가?
답 :
B1에 대해 먼저 생각해보고, 그걸 Bp로 확장하는 식으로 계산을 전개하면 쉽게 구할 수 있다.
update rule은
전 B에서 Bj를 편미분하고 스텝사이즈를 곱한 걸 빼야 Bj(t+1)을 구할 수 있다.
이제부터 왜 가장 "가파르게" 증가하는지를 알아볼 것이다.
먼저, 함수의 방향미분을 해볼 것인데(directional derivative) 어떤 general한 방향에 대해 미분을 한다 하면 general한 미분식이 나올 거다. 그렇게 되면 그 미분한 함수를 maximize하려면 방향이 어디쪽으로 가야하는지가 나올 것이다. 이런 방식으로 진행해볼 예정이다.
방향미분이란 뭐냐! 어떤 방향을 특정하고 그 방향에 대해서 함수의 변화량을 관찰한다는 소리이다. (어떤 산이 있다고 생각해보자. 그 산 위에 내가 서 있고 산의 정상을 쳐다보면서 걸어갈때 변화량과 산을 옆으로 둘러서 갈 때의 산의 높이의 변화량은 차이가 있을 것이다. 이런걸 방향미분이라고 한다.)
먼저 방향에 따라 함수의 변화량을 계산해보자.
특정 방향 u를 따라서 초기 점 x0에서 h만큼 움직일 때 h에 대해 미분을 해보자.
그러면 이런 식이 등장한다. h는 가는 방향의 크기이고, u는 방향이다. 그리고 h를 0으로 보내버리면 u가 가리키는 방향으로의 이 함수의 순간변화량이 나온다.
어떤 u에 대해서 미분가능할 것이다. -> 그에 대한 식이 존재할 것이고 그 식이 general하기 때문에 식이 maximize될 때 어디방향인지를 알 수 있다. 이런 로직으로 flow가 흘러갈 것이다.
이게 대략적인 단면인데 특정 방향 u벡터에 대해서 h만큼 이동하면 새로운 점이 나올 것이다. 그런데 그 점에 대한 함수 f는 결국 h에 대한 함수이다. 왜냐? 점도 특정되어있고, 방향도 특정되어있는데 h에 따라 움직이는 것이기 때문이다.
그러면 그다음부터는 간단하다. 저 f를 미분을 하는 것이다.( h를 0으로 보내고 그 점에서의 순간변화율을 maximize시키는 u를 찾자!)
아까 말했듯이 f가 h에 대한 함수이기 때문에 h에 대해 미분을 한다. 하지만 f는 h를 직접적으로 변수로 가지지 않는다.
그래서 B에 대해서 편미분을 하고 B가 h를 가지고 있기 떄문에 h에 대해 미분을 한다. (여기서 꿀아저씨가 주는 꿀팁! d는 그냥 미분이고, 알파처럼 생긴 거는 라운드라고 읽고 편미분을 한다는 소리이다-꿀아저씨는 개그맨 이선민씨의 밈이다...요즘 꿀아저씨가 너무 웃겨서 따라해보았다...)
근데 여기서 의문이 있다. 왜 B1와 B2에 대해서 미분을 하고 그거를 하필 더할까??
그 증명이 여기 나와있다.
왜 더하냐면... 이렇게 분자에서 w(x(z), y(z+델타z))를 더하고 빼서 식을 조작하고 이러쿵저러쿵 식을 조작하면 아래처럼 예쁘게 정리할 수 있다.
그렇게 미분을 하면 h로 미분한 식은 그냥 방향벡터가 된다.
그래서 잘 써보면 f의 gradient와 u를 내적한 꼴이 된다!
그러면 이제 결론이 나왔다.
저 내적값을 최대로 하려면 방향벡터가 어떤 방향이 되어야 할까??
바로 gradient와 cos값이 0이어야 하고 다시 말하면 gradient와 평행이면 된다. (anti-parallel이여도 상관없다.)
따라서... 정리를 해보자면
왜 gradient가 가장 "가파르게" "증가하는" 방향인지 증명이 되었다.
증가하는 건..미분을 했을 때의 부호를 생각했을 때 x값 기준으로 부호방향으로 움직이면 함수값이 커지기 때문이였고
가파르게는... 함수의 변화량이 최대가 될때인데 그 방향은 gradient와 평행일 때이다. 고로 gradient 방향으로 움직이면 함수의 변화량이 양수든 음수든 최대가 되므로 가파르게 움직일 수 밖에 없다.
추가로 Gradient는 등고선에서 그은 접선에 수직인 성질을 가지고 있다. 왜 그런지 알아보자.
등고선은 같은 f 값들을 가진 점들의 집합으로 이해하면 될 것 같은데
아까 df/dh를 한다고 했다. 근데 여기서 df는 0이다. 왜? 등고선이기 때문에 f의 변화가 없기 때문이다.
고로 항상 저 미분값은 0인데... df/dh가 다시 쓰면 f의 gradient와 u의 내적이였다. 내적값이 0이려면 각각의 값 중 하나가 0이 있거나 각도가 수직이면 된다.
근데 u는 0일 수 없고, f의 gradient는 0일 수 없다. 그래서 각도가 0일 수밖에 없는 결론이 나온다.
(여기서 f의 gradientsms 0이 아니라고 교수님께서 말씀하셨는데 왜 그런지 아시는분 있으시면 댓글로 알려주세요..!)
'기계학습' 카테고리의 다른 글
SVM(Support Vector Machine)-2 (0) | 2023.10.25 |
---|---|
SVM(Support Vector Machine)-1 (0) | 2023.10.25 |
Gradient Descent - 1 (0) | 2023.10.21 |
Linear Regression - 3 (2) | 2023.10.21 |
Linear Regression - 2 (2) | 2023.10.21 |