
이번 포스팅은 6강에 대한 내용 입니다.
6강에 대한 전체적 내용은
1. Activation Functions
2. Data Preprocessing
3. Weight Initialization
4. Batch Normalization
5. Babysitting Learning Process
6. Hyperparameter Optimization
이렇게 총 6가지 였습니다.
Activation Functions


위 함수는 Sigmoid 함수이고, 음수로 내려가는 값이 아닌, 0 ~ 1사이의 범위로 숫자를 밀어넣습니다.
그래프를 보면, 0 중심이 아니며, exp계산 때문에, 시간이 오래 걸린다는 문제가 있습니다.

위의 함수는 tanh함수입니다. sigmoid와 다르게 -1 ~ 1값의 범위를 갖고, 0을 중심으로 갖는 것을 확인할 수 있습니다.
하지만 기울기를 죽이는 문제는 그래프를 보아하면 똑같이 알 수 있습니다.

잘 알고 있는 ReLU함수 입니다.
y축 0 이상의 값에서 x축에 평행하게 그려지지 않아(포화되지 않아) 계산할 때 효과적입니다.
또한 sigmoid, tanh보다 훨씬 빠르고, 현실과 더 잘 맞습니다.
다만 0줌심으로 출력하지 않고, y축 음수 방향은 버리는 경향이 있기 때문에, 데이터 전부를 고려하지 못한다는 단점이 있습니다.

다음은 Leaky ReLU함수 입니다.
x축 y축에 평행하지 않고,(포화되지 않음), 계산할때 매우 효과적이라고 합니다.
위에와 동일하게, sigmoid, tanh보다 훨씬 빠르고, 기울기가 죽는 문제를 개선했습니다.

다음은 ELU함수 입니다.
ReLU함수의 좋은점만 갖고온 함수 입니다.
평균 출력이 0에 가깝고, Leaky ReLU보다 음의 방향쪽에 포화 영역이 있어, 좀 더 견고합니다.
다만, exp계산이 들어가서, 시간이 더 오래걸립니다.

그리고 그간 들어본적 없는 Maxout함수에 대해 언급했습니다.
Data Preprocessing(데이터 전처리)
머신러닝에서는 PCA, 화이트닝이 자주 쓰이는 것을 확인할 수 있습니다.
평균 이미지 뺴기(AlexNet)
채널당 편균 빼기(VGGNet)
Weight Initialization

위 코드는 난수 설정하는 코드인데, random해서 딥러닝에서 문제 발생 가능성이 큽니다.
난수 생성값 0.01

결국엔 0으로 줄어드는 것을 확인 할 수 있습니다.
난수 생성값 1.0

활성화 함수로 tanh를 통과시킨 것입니다.
포화상태가 되고, 결국 모든 경사가 0이 됨을 확인할 수 있습니다.
Xavier

Xavier를 사용하니, 가장 이상적인 W값을 갖고,
ReLU

ReLU함수 사용 시, 다 깨지는 것을 확인할 수 있습니다.
2로 나누었을 때

2로 나누었을 때의 경우입니다.
상대적으로 잘 작동하는 것을 알 수 있습니다.
Batch Normalization(배치 정규화)

self.layer = nn.Sequential(
nn.Conv2d(1,16,3,padding=1),
nn.BatchNorm2d(16), #
nn.ReLU(),
nn.Conv2d(16,32,3,padding=1),
nn.BatchNorm2d(32), #
nn.ReLU(),
nn.MaxPool2d(2,2),
파이토치로 구현하면 이렇게 됩니다.
Babysitting Learning Process


위의 예시를 들면서 설명을 했습니다.
학습률에 변화를 준 내용인데, Loss값이 더 떨어진 것을 알 수 있습니다.
Hyperparameter Optimization
하이퍼파라미터 Optimization에서는
Random Search
Grid Search
이렇게 두가지에 대해 설명을 했습니다.
Random Search는 하이퍼파라미터 값을 랜덤하게 넣고, 값 좋은 것을 따와서 모델 생성하는 방식을 말합니다.
--> 불필요한 탐색 횟수 감소
--> 시간이 오래 걸린다는 단점...
감사합니당 ~ 🦾