일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- weight histogram
- DenseNet
- #ubuntu 14.04(LTS)
- Lagrange Multiplier
- Ubuntu동글
- 전체내용
- tensorboard
- 리눅스 비밀번호
- stepsize
- 화면확대고정
- ubuntu 원격
- 포트번호 변경
- 학습성공
- Xpad설치
- canon mf416dw
- 3D convolution
- #python gpu
- VGGNet
- 치환 기능
- #cuda
- log파일
- Ubuntu 설치
- #enviroment variable
- Git branch 보이기
- restnet
- twolay
- Hidden layer output
- Rust설치
- #cudnn
- 듀얼부트
- Today
- Total
save the world
정리 본문
라온피플 강의자료(출처 : http://laonple.blog.me)를 보고 정리하였음.
Batch size
한번의 epoch을 돌릴 때 Batch size 만큼의 데이터를 랜덤하게 샘플링하여 학습시킨다. 이렇게 하는 이유는 망을 학습 시킬 때 모든 데이터를 한 epoch으로 학습 시키기에는 데이터가 너무 방대하여 시간이 오래걸려 optimization이 힘들기 때문에 매번 랜덤하게 샘플링한 데이터 뭉치들을 이용하여 한번의 epoch에 통과시키는 작업을 여러번 반복하면 데이터 전체를 한번의 epoch으로 학습시키는것과 같은 효과를 낼 수 있으면서 빠르기 때문에 적절한 Batch size 가 필요하다.
Stochastic Gradient Descent
기울기가 줄어드는 방향으로 이동을 할때 모든 데이터에 대하여 그래디언트가 감소하는 방향으로 이동하면 좋지만 모든 데이터에 대한 그래디언트를 구하는 것이 힘들기 때문에 랜덤하게 몇개(Batch size만큼)의 샘플을 뽑아 그들의 그래디언트가 감소하는 방향으로 움직이는 작업을 많이 수행하면 할수록 모든 데이터에 대하여 그래디언트를 구한 것과 결과가 비슷해진다.
Batch normalization
망이 깊어지면 vanishing / exploding gradient 문제 때문에 학습이 되지 않는다. 왜냐하면 sigmoid나 hyper-tangent 함수를 쓰기 때문에 대부분의 영역에서 미분값이 0이므로 역전파 과정을 거치면서 대부분 0에 가까운 값들이 전파되므로 망의 깊이가 깊어질수록 w 와 b 의 값이 많이 변하지 않는다. 이를 위해 ReLu를 사용해서 문제를 완화시켰다. (ReLu가 완벽한 해결책은 되지 못한다.)
Batch normalization을 통하여 layer로 들어가는 input을 0~1로 바꾼다.
Stochastic Pooling
Max pooling과 Avg Pooling의 문제점을 해결하기위해 고안된 방법이다. pooling은 하나의 layer에서 나오는 feature map의 크기를 줄여주는 작업을 하는데 max pooling은 해당되는 window 내에서 가장 activation이 큰 값을 추출하고 avg pooling은 해당되는 window 내에 있는 값들의 평균을 추출하는 작업이다. avg pooling의 문제점은 활성함수로 ReLu 를 많이 사용하는데 ReLu 특성에 의해 0이 많이 나오게된다. 그러면 avg를 구할때 0에 의하여 큰 feature 값이 줄어들고 activation func.으로 tanh를 사용하면 양수와 음수의 평균때문에 feature값이 서로 상쇄되어 0으로 될 가능성이 있기 때문이다. 반면에 Max pooling은 학습데이터에 overfitting 되기가 쉬운 문제가 있다.
stochastic pooling은 max pooling의 장점을 유지하면서 overfitting을 피하는 방법으로써 확률에 따라 적절한 activation function을 선택하는 것이다. 마치 Drop out처럼. 확률은 윈도우 내에 있는 모든 activation 값에서 차지하는 비율이다. 즉 가장 큰 값을 고르는 것이 아니기 때문에 윈도우 내에서 하나의 activation 출력값이 크더라도 적은 확률로 낮은 activation 출력값을 pooling할 수도 있다는 것이다.
1 |
2 |
1 |
4 |
5 |
2 |
0 |
0 |
0 |
예로는 위와 같은 윈도우에서 pooling 을 할 때 Max pooling을 적용하면 가운데 픽셀의 '5'라는 값이 pooling 되겠지만 avg 풀링이라면 모두의 평균인 (1+2+1+4+5+2+0+0+0)/9 = 0.6 이 pooling 될 것이고 stochastic pooling을 적용하면 가장 높은확률로 5가 pooling 되고 가장 낮은 확률로 1이 출력 될 것이며 사용자가 부여한 조건에 따라서는 0이 출력되게 할 수도 있다는 것이다. (라온피플의 설명으로는 모든 자극값(activcation value)들을 normalize 시킨 후 크기값 별로 sorting하고, 순번에 따라서 선택을 하는 것이다. (그래서 0이 선택될 수도 있다는건가?))