본문 바로가기

Backup/cs231n

cs231n 6강 Training NN part 2

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