CS231n 6장 배치노말라이제이션
배치단위만큼의 액티베이션이있을떄 이를 유닛가우시안으로 만들수 있다.
학습할때마다 초기화 대신에 유닛가우시안으로 만든다.
이는 미분가능한 함수이다. -> 백프로파게이션이 가능하다.
배치당 N개의 학습데이터가 있고 차원이 Ddlek.
차원별로 평균값을 구해준다.
이값을 FC직전이나 conv 직전에 에 넣어준다.
입력의 스케일만 살짝 조정하는것이기 때문에 어디에나 넣을 수 있다.
같은 채널에 있는 요소들을 노멀라이즈 해준다.
BN은 tanh의 리니어한 영역에만 있게 강제하는것이다.
감마로는 스케일링 효과
베타는 평행이동 효과
입력이 있고 우리는 미니베치에서 평균을 계산하고 모든 미니배치를 계산한다.
평균과 분산으로 노멀라이즈한다.
그레디언트 흐름을 원활하게 해준다
비엔이 레귤러라이제이션 효과도 있다
각레이어의 출력은 해당데이터 하나뿐만아니라 같은차원 데이터에 모두 영향을 준다
감마와베타가 학습가능한 파라미터를 나눈것인지 - 예스
batch 단위로 노멀라이제이션 해주고 파라미터를 다시 학습시키는 것이다.
배치사이즈가 작으면 정확도가 떨어지지만 작동은한다.
CNN에서 많이 쓴다.
레이어 가중치가 아니라 레이어 입력을 노멀라이제이션 해주는 것이다.
레이어의 입력에 평균을 빼고 표준편차로 나누면 가우시안화 된다.
전체적으로 비선형적인 값들을 BN을통해 부드럽게 해주는 윤활제 역할인 것 같다.
유닛 가우시안으로 맞춰주는것이 그렇다고 실제 데이터가 가우시안이 되는것은 아니다.
평균을 빼주면 중심이 0으로 이동하고 루트(분산)은 데이터가 퍼저 있는 최대 크기인데 그 크기로 나눠주면 모든 데이터가 0하고 1사이에 오게 된다. 그러면 각 배치별로 가우스 분포가 N(0,1) 정규분포를 따르게 된다.
<regularization 딥러닝 뜻>
보통 번역은 '정규화' 라고 하지만 '일반화' 라고 하는 것이 이해에는 더 도움이 될 수도 있습니다. Regularization 은 이렇게 특정 가중치가 너무 과도하게 커지지 않도록 하여 모델을 위 그래프처럼 만들어줍니다.
어떻게 러닝 프로세스를 만드는가.
1.전처리 -제로민
2.아키텍쳐선택 -cnn
3. 네트워크 초기화 포워드패스, 초기 로스 확인, regularazation 추가, 백워드 패스,
4. 데이터 작은 일부만 학습시켜보기 - 오버핏, 적은로스, 이때 regularazation은 안함, 에폭마다 loss 내려가는지만 확인
5. 러닝레이트 적용. 러닝레이트가 너무작으면 로스가 잘 안줄어든다. - 로스가 안변했는데 정확도가 20퍼이상 상승할경우가 있다. - 보통 러닝레이트는 1e-3 ~ 1e-5 값을 사용한다. 확률값들이 아직 멀리퍼져있고 떄문에 로스가 높다. 확률은 조금씩 옳은방향으로 가고있다. 정확도는 그저 가장 큰 값만 취하기 때문에 갑자기 뛸 수 있다. NANs는 발산한 것이다. 이는 러닝레이트가 너무 높으면 일어난다. 이럴땐 러닝레이트를 낮춰야 한다.
하이퍼파라미터 옵티마이제이션
하이퍼파라미터를 정하는 정략
1. 크로스벨리데이션을 한다.
- 에폭이 적어도 괜찮은 하이퍼파라미터 값인지 알 수 있다.
-nans으로 발산하는 징조를 미리 감지할 수도있다.
-cost가 엄청 크고 빠르면 정지하고 다른 파라피터를 적용한다.
하이퍼 파라미터 초기화는 너무 크게 바꾸지 말고 10단위로 바꾸는게 좋다.
log를 씌우는게 좋다.
문제는 여기에서 가장 좋은 정확도를 찾았는데 러닝레이트
최적의 값을 중앙 부분에 놓는것이 중요하다.
하이퍼파라미터 정하는 방법에는
random search -랜덤값
grid(격자) search- 정해진 값
두개가 있는데
실제로는 random search가 좋다.
Weight Initalization - xaiver 사용
정확도 validation은 낮은데 train은 높을때
연습문제 100점 시험 50점 - 답을 외웠다.