안녕하세요,
오늘은 Lecture 5강 두번째 Data Preprocessing부터 학습해보도록 하겠습니다.
2) Data Preprocessing (데이터 전처리)
original data를 zero-centered로 맞춰준다.(방법은 각각에 대해서 전체의 평균값을 빼준다.)
정규화 작업 : 표준편차로 나눠줌으로써 수행한다. (ex -1~1 사이의 특정 범위 안에 들어가도록)
이미지에서 zero-centered는 일반적으로 해주고, 다만 normalization은 일반적으로 수행하지 않는다.
normalization 목적 자체가 특정 범위에 들어가도록 해주는 것인데 이미지는 0에서 255 사이의 픽셀이라는 이미 특정 범위에 들어있는 것이라서
주성분 분석 PCA : 데이터를 비상관화해서 차원을 줄이는 것
Whitening : 이미지라면 인접한 필셀간의 중복성(redundency)을 줄여주도록 squashing 해주는 역할을 해주는 것이다.
이미지 분석에서는 PCA랑 Whitening을 쓰지는 않음
이미지에서는 Zero-centered만 신경쓰면 된다.
ex) 알렉스넷 : 오렌지색을 가지는 블랍인데, 오랜지색을 가지는 블랍을 빼거나
VGGNet : 채널별로 (rgb) mean 값을 빼주는 방법
VGG가 더 편리함 왜? rgb 3개만 생각해주면 되니까
3) Weight Initialization(가중치 초기화) 매우 중요함!!
모든 가중치가 0으로 초기화 된다면?
모든 뉴런이 동일한 연산을 수행하고
backprop의 경우에도 동일한 Gradient 연산을 수행하게 된다.
가중치 초기화하는 가장 기본적인 아이디어는 random number를 사용하되 매우 작은 random number를 사용한다.
0.01의 표준편차를 가지는 가우시안 정규분포 형태로 구성한다는 것이다.
0.01을 식에서 곱해주고 normalize해주는 함수를 사용한 것이다.
이렇게 구성하면 network이 작은 경우에는 문제가 없으나, 큰 경우에는 문제가 생긴다.
가중치를 0.01 곱해주고 정규분포를 생성하게 만들었다.
평균과 표준편차를 구해주고
분포를 히스토그램으로 그려주었다.
그림을 보게되면 하이퍼볼릭 탄젠를 사용하였으니, 평균값은 0으로 수렴.
std는 급속하게 0으로 수렴하는 것을 확인할 수 있다.
따라서, 히스토그램도 점점 가운데로 모인다.
gradient가 너무 작아져서 누적되지 못하는 vanishing gradient가 발생하는 결과가 도출된다.
0.01대신 1을 적용하면 w의 값이 너무 크기때문에 오버슈팅이 발생하면서
거의 모든 뉴런들이 saturation된다.
Weight를 처음부터 너무 크게 잡으면 안된다.
input의 개수가 많게 되면 weight 값이 작아지고
input의 개수가 작게 되면 weight 값이 커지는 합리적인 방법이다.
하이퍼볼릭 탄젠트에 잘 적용되는 결과를 볼 수 있게 되었는데,
ReLU를 사용할 때 문제가 생겨서 2015년 카이밍헤가 새로운 것을 발표함
2로 나누고 진행하였더니 activation function이 ReLU일 때 잘 작동함.
initialization에 너무 의존하지 않아도 되는 좋은 방법이 한가지 있다.
Batch Normalization
vanishing gradient가 일어나지 않도록 하는 방법 중 한가지
핵심 아이디어 : layer를 거칠때마다 normalize해주자! (수식에서 보이는 것처럼 정규분포 해준다)
ReLU를 적용하거나, 가중치 초기화를 신중하게 하는 방법등으로 해결을 해왔는데
Batch Normalization은 이러한 간접적 방법이 아니고 학습하는 과정 자체를 전반적으로 안정화시키며
학습속도를 가속화시키면서도 안정적으로 학습이 이루어지게 하겠다.
전체적인 normalize를 한꺼번에 적용하는 것이 아니라 mini batch를 뽑아서
평균과 분산을 계산해주고 정규화 한다.
위의 그림에서처럼 FC - BN - tanh 로 구성된다.
Do we necessarily want a unit gaussian input to a tanh layer ? 판단 조차도 학습에 의해서 가능하다.
첫번째 단계 : normalize
두번째 단계 : 정규화 된 것을 다시 조정할 수 있는 기회를 준다. (감마라는 것이 scaling을 하는 변수, b라는 것은 shift하는 요소) 감마와 비는 학습을 통해 결정을 하게 되고 batch normalization을 언룰 할지 결정
트레이닝과 테스트할 때 다르게 동작한다.
mean과 variance 값을 구할 때 training은 batch 기준으로 구하고, test할 경우에는 전체를 기준으로 구한다.
Babysitting the Learning Process
전처리 - 뉴럴 네트워크 아키텍트 결정 - 로스 체크 - 일부분으로 오버피팅 확인 - 러닝레이트 찾아가는 단계
데이터 전처리 : 이미지 제로센터 수행
아키텍쳐 결정 : 히든 레이어 몇개? 가각 레이어에 노드 몇개?
더블 책해주고, 로스 올라감 확인
본격적 학습 시작 전에
학습데이터 중 일부만 취해가지고 학습시키면 반드시 오버피팅이 발생함
200번 중 마지막 200번에서 cost(로스)가 매우 작고 train val이 1인 오버피팅이 이뤄났다.
로스가 감소하지 않는데도 트레이닝 정확성이 어느수준까지 올라가는 현상은 일반적으로 발생함.
반대로 learning rate을 큰 수로 주게 되면 어떻게 되는가? not a number가 나옴
learning rate을 조정해보았더니 여전히 너무 높다.
우리의 learning rate은 1e-3~1e-5사이가 아닐까 따라서 cross-validation을 통해서 결정해야 할 것이다.
Hyperparameter Optimization
Coarse > fine (반복한다)
하나의 스칼라 값 리턴하도록 했고
10의 자승으로해서 로그 스페이스 처리를 해준 것을 잘 봐야함. (로그 스페이스가 연산에 유리하다)
값을 좁혀서 돌려보았더니 val이 올라감을 알 수 있고 제대로된 범위로 hyperparameter를 찾구있구나!
하지만 아래 14는 걱정되는 값이다. -3에 근접하는 수치에 가까워졌기에 범위 설정이 잘못되었다!
그리드 서치가 문제가 있다는 것은 많은 상황에 있어서 특정 파라메터가 다른 파라메터보다 중요하다는 것.
이를 무시하고 등간격으로 진행하면 최적화된 파라메터를 찾지 못하게 된다.
하이퍼파라메터의 최적값을 구하는 경우에 그리츠서치 사용하지 말고 랜덤서치를 사용하자.
다양하게 존재한다.
network architecture : 히든레이어 몇개, 노드 몇개
learning rate : decay 어떻게?
regularization : drop out? L2?
디제이가 믹싱작업하듯이 작업을 해야한다.
이 경우에 learning rate이 너무 낮다. 알파(learning rate)를 높여야 하지 않느냐
1. 로스 모니터링 필요
loss가 정체하다 어느 순간부터 제대로 내려가기 시작하는 경우도 있다.
왜? 초기화가 잘못된 경우(weight의 초기화 실패)
지그재그가 발생하는 이유? 로스가 올라가고 강화를 통해 적응하면서 로스가 내려가는 현상이 반복되어서
2. accuracy 모니터링 필요
그래프처럼 training과 validation accuracy gap이 있는건 당연하나
위의 그림처럼 너무 차이가나면 overfitting의심 해야하고 regularization strength 해줘야 한다.
파라메터 한번 업데이트 할 때의 크리를 전체 파라메터의 크기로 나눠준 것.
전반적으로 약 1/1000 수준이 이상적이다.
가중치 초기화 : 어떤 상황에서도 통하는 것은 없으나 합Xavier init사용
'7. 수학공부 > 기타' 카테고리의 다른 글
Lecture 5 Training Neural Networks, Part I (0) | 2024.12.06 |
---|---|
Lecture 4 Introduction to Neural Networks (3) | 2024.12.05 |
Lecture 3 | Loss Functions and Optimization (0) | 2024.12.03 |
CS231 Lecture 2 | Image Classification (1) | 2024.12.02 |
CS231N, Lecture 1 | Introduction to Convolutional Neural Networks for Visual Recognition (0) | 2024.11.30 |