activation function을 통해 nonlinearity을 줘야됨
gradient가 0이 되어버림
batch norm
cross validation 을 통해 최적의 parameter을 찾아나가야됨
파라미터 업데이트 하는 부분을 주목해보자
단순한 gradient decent
sgd는 매우 느림
너무 느려서 실제상황에서는 잘 사용안함
우리는 지금 저 빨간점이라 하자
이 lossfunction이 수직으로는 매우 높고
수평으로는 경사가 매우 얕은걸 확인할수있음
이떄 경로을 생각해보자
수직으로는 경사가 높기때문에 빨리
수평으로는 천천히
그러다보니 매우 느리게 업데이트됨
첫번째로 볼께 모멤ㅌㅁ
근본적인 차이는
sgd같은경우 x을 직접 업데이트함
momentum은 v을 줌
v을 한번 업데이트하고
v을 통해서 x을 업데이트함
이건 마치 언덕에서 공을 굴리는 상황
f=ma
저기에 있는 mu는 마찰계수
점차 속도가 느려지는 방식으로 계산됨
어떤경우에서는 0.5에서 0.9로 점점 크게해줌
추가 흔들리듯이 움직이다가 가운데에 수렴
처음에는 overshooting 근데 결과적으로는 minimum으로 훨씬 빠르게 찾아감
다음은 nesterov
NAG라고도 함
모멤텀보다 converage rate가 더 좋음
v는 사실 두가지로 나누어짐
momentum step과 gradientstep
momentum 같은경우 이미 momentum step으로 이동한 곳에서 gradient step을 계산해서 이동
gradient을 계산하기전에 미리 momentum을 이동해서 시작점을 저기를 삼아서 이동
차이점은 저 부분이다.
이게 불편한점이 있는데 저 세타
세타와 다른 위치에서의 gradient을 우리에게 요구함
다른 api와 호환성이 떨어짐
공식을 통해 저런 보기좋은 수식으로 표현됨
adagrad는 convex optimization에서 개발되서 NN에 포팅된 개념
캐쉬라는게 있음
저부분에서 케쉬의 루트로 나누어줌
캐쉬는 파라미터와 동일한 크기의 거대한 백터이다
파라미터별로 다른 러닝레이트을 가지고 있다!
하나하나 파라미터들이 다른 러닝레이트을 가지고 잇다.
coparameter learning rate
1e-7은 0으로 나누어주는걸 방지
수직축은 gradient가 크다 => 캐쉬값이 커진다는건 x의 업데이트 속도가 낮아진다.
수평같은경우 캐쉬도 작고 x의 업데이트 속도는 빨라짐.
그래서 수직축같이 업데이트 속도을 줄여주고 수평같은경우 업데이트속도가 올라가서
balancing된 방향으로 업데이트됨
step사이즈가 많아질수록 캐쉬값은 계속 빌딩되면서 증가될것이고 0에 가까워지면서
그러면 learning rate가 0이 되면서 학습이 종류됨
하지만 NN같으경우 학습이 종류되면 문제가 됨
그래서 학습이 종류되지 않게 에너지을 제공함
rmsprop같은경우 decay rate을 줌
하나의 hyperprameter이
decay rate을 도입함으로서 캐쉬의 값이 서서히 leaking하는 장치을 도임한건다.
adagradient의 장점인 경사에 경도되지 않는 그런 효과는 유지하면서 adagradient의 단점인 step size가 0이 되어서 학습이 종류되는 것은 방지하는 그런 효과을 가져옴
재밌는 사실은 제프린힌튼 교수가 cosera의 강의에서 rmsprop이 잘 되더라 라고 해서 유명해짐.
논문으로 나온게 아니라 ㅋㅋ
그래서 다른 논문에서도 인용될때 코세라6.5강의가 출처라고 함 ㅋㅋ
그래서 adagradient는 일찍 학습을 멈추는데 rmsprop는 더 최적화가 진행됨을 확인할수있다,
다음은 adam
조금전에 배운 momentum과 rmsprop을 결합한 형태라 보면됨
위에부분은 momentum, 아래는rmsprop이랑 거의 유사함
최종적인 형태는 bias correction까지 들어감
모든 optimization 함수들은 learning rate을 hyperparameter을 가지고 잇음
이중에 어떤것도 최선은 아니다. 시간이 지나감에 따라 decay시키는게 최선
처음엔 크게했다가 그리고 서서히 learning rate을 decay
많은 경우에 exponential decay가 선택됨
보통 adam이 많이 사용됨
지금까지 배운걸 기울기 정보로만 활용한 first order mopimization methods
second order optimization method는 hessian을 도입해서
기울기뿐만 아니라 이 곡면이 어떻게 구성되어있는지 알수있음
그러면 굳이 학습할 필요도 없이 바로 최저점으로 갈수있음
러닝레이트을 통해서 단계적으로 진행될 필요도 없음
잠점; 매우빠르게최적점도달, 러닝레이트 필요없음
ㅣ
단점 : 현실적으로 불가능,
만약 parameter가 1억개면 hessian은 1억*1억의 크기,
게다가 역행열을 연산해야됨
결국 큰네트워크에서 동작하긴 힘들다.
L-BFgs는 메모리에 저장되지 않음
그래서 가끔 사용됨
L=BFgs을 사용할떄는 full batch환경일때 사용됨.
매우 큰 함수
정리 : 보통 adam사용
L-BFGS는 full batch일떄 사용하라
단일 모델 대신 복수게의 모델을 하습
테스트때 이들의 결과의 평균을 내줌
그럼 성능이 2프로 향상됨
parameter vector간의 ensemble해도 성능향상을 가져올수있다.
dropout은 간단하면서 성능을 높여서 좋음
요즘은 batch norm을 쓰면서 많이 안씀
backprop할때 일부을 연결을 끊음
랜덤으로
'Backup > cs231n' 카테고리의 다른 글
cs231n 8강 Localization, detection (0) | 2017.12.24 |
---|---|
cs231n 5강 Training NN part 1 (0) | 2017.12.05 |
cs231n 7강 CNN (0) | 2017.11.02 |
cs231n 4강 Backpropagation and NN part 1 (0) | 2017.10.20 |
cs231n 3강 Loss fn, optimization (1) | 2017.10.18 |