CS231n 6강 ~ rmsprop
가중치 초기화
가중치가 너무 작으면 activation이 사라진다.
너무크면 그래프가 터져버린다.
제로민 하는이유
빨강 파랑 분류를하는데
선을 조금만 움직여도 분류가 잘안된다.
약간의 가중치 변화에도 예민하다.
반면 제로센터를 하면 선이 조금씩 흔들려도 덜 민감하고 최적화 하기 쉽ㄴ다.
이는 선형만 해당되는게 아니고 다양한 경우에도 해당된다.
BN애서 포워드 패스할떄 미니배치에서 평균과 표준편차를 구해 노멀라이제이션을한다.
하이퍼파라미터 random search가 이 의미인가
optimazation- 최적화
Optimization 이라는 단어는 수학적으로 많이 사용되는 단어입니다. 딥러닝에서 Optimization 은 학습속도를 빠르고 안정적이게 하는 것이라고 말할 수 있습니다. ...지금은 adam을 가장 많이쓴다.
fancier optimazation
- 로스값을 어떻게 줄일 수 있는가.
W_1, W_2를 최적화 하는것
지금까지 쓴것 SGD
미니배치에서 로스 구하고 그라디언트의 반대방향으로 내려감
반대방향인 이유는 그레디언트 증가의 반대로 로스 줄여야 해서
Loss taco shell
손실함수가 SGD에서는 지그재그이다
그라디언트가 엄청 지그재그로 간다.
그라디언트가 수천억개면 수천억개의 방향으로 움직일 수 있다.
l로컬미니마 : local minima
새들 포인트 : 왼쪽오른쪽 움직이지 못하여 멈춰버린다.
엑스축
로컬미니마 : 저렇게 골짜기가 있는 부분에서는 그래디언트가 0이되서 멈춰버린다.
새들포인트란 어떤곳에선 증가하고 어떤곳에선 그라디언트. 고차원에서 많이 나타난다. 말의 안장에서 가운데 같은 지점.
큰 네트워크에서는 SGD는 새들포인트에서 취약하다.
가중치가 새들포인트 근처면 엄청 느리게 진행된다.
SGD는 스토캐스트 그레디언트이다.
SGD는 미니배치 데이터만으로 그레디언트를 추정하는데
이는 정확한 값이 아니다.
SGD에 노이즈를 임의로 넣고 실험했는데 엄청 튀는것을 볼 수 있다.
질문 :SGD말고 GD를 쓰면 문제가 해결되나.
해결되지않는다.
SGD+momentum
벨로시티를 잉요한다. 하이퍼파라미터 rho가 추가되었다.
벨로시티 영향력을 rho로 맞춰준다.,
벨로시티 벡터 방향으로 나아간다. 물리적으로 공이 내려가는 느낌이다.
그라디언트0이여도 이전 진행속도가 있어서 진행한다.
로스에 민감한 수직방향의 반동은 줄여준다.
모멘텀을 추가에서 벨로시티가 생기면 로스가
벨로시티 계산법 : rho를 곱하고 이전 그레디언트 더하기 rho는 보통 0.9나 0.99의 값을 쓴다.
이전 그레디언트 방향으로 한번 밀어주는 느낌이다.
벨로시티 초기값은 항상 0이다
벨로시티는 이전 그레디언트의 합이다.
네스트로브 모멘텀: 일단 벨로시티방향으로 이동하고 그다음 그레디언트를 구한다. 벨로시티의 방향이 잘못되었을 경우에 그라디언트 방향을 좀 수정할 수 있다. 현재점과 벨로시티를 더해주고 벨로시티간의 에러보정이 추가됐다. 하지만 NN에서는 성능이 보장되지 않았다.
네스트로브는 모멘텀에서 오버슈팅을 방지한 느낌이다.
아다그라드 : 그레디언트 제곱을 나눠주는 방식 ( 보폭을 조금씩 줄여나가는 느낌?)
업데이트 할때
라지 디미션에선 큰값으로 나눠즈고 작은 디미션에선 작은값으로 나눠주고
이는 계속 할때마다 값이 작아진다. 이는 스텝사이즈가 점점 작은 값이 되게한다.
이는 컨벡스 케이스에는 좋은데 논컨벡스 케이스에서는 안좋다.
rmsprop에서는 아다가드에서 좀거 개선한건데 스텝의 속도를 가속, 감속시킬수 있다.
속도가 점점 줄어드는것을 개선할 수 있다.
아다가드는 이런 그래프에서 불리한데 점점 작아지는 특성떄문인데 러닝레이트를 늘리면 알엔에스크롭과 비슷할 것이다.
벨리데이션을하면 알고리즘별로 러닝레이트를 조절하는것이 좋다.
아다그라드 + 모멘텀 = 아담