공부/AIFFEL

풀잎스쿨 - DeepML(CS231N) Lec. 06

dong_dong_2 2021. 2. 1. 20:10

오늘은 6강을 거의 봤다. 시간이 부족하여 전부 보지는 못했다.

1.활성화 함수(Activation Function)의 종류를 보았다.

    - Sigmoid : 이진 분류에 쓰인다. 0 ~ 1의 값이 나온다. vanishing gradient가 생길 수 있다. zero-centered 하지 못하다. exp함수를 이용하므로 계산이 복잡해진다.

    - tanh(x) : sigmoid의 단점을 일부 보완한다. zero-centered 하다. 그렇지만 vanishing gradient가 생길 수 있다.

    - ReLU : max(0, x), vanishing gradient문제를 해결했다. 효율적으로 계산한다. 훨씬 빠르게 수렴한다. 생물학적으로 더 뉴런처럼 행동한다. 그러나 zero-centered하지 못하다. 죽는다 -> (죽는다는 표현은 무엇일까? : x <0 일 때 기울기가 어떻게 되는지 생각해보면 된다)

    - Leaky ReLU : max(0.01x, x), ReLU의 변형으로 ReLU의 장점 + 죽지 않는다. 

    - Parametric Rectifier (PReLU) : max(αx, x), Leaky ReLU와 마찬가지로 변형이다.

    - Exponential Linear Units (ELU) : ReLU의 변형, ReLU의 모든 이점을 다 가져왔지만, exp함수를 사용하여 계산이 복잡해졌다.

    - 우리는 대부분 ReLU를 사용하게 될 것이고, 그의 변형을 쓰는것도 시도해볼만하다. tanh는 시도해도 좋으나 그리 기대하지 않았으면 좋겠다. 그리고 sigmoid는 쓰지 않는걸 추천한다.

2. 데이터 전처리(Data Preprocessing)를 배웠다.

    - 데이터를 평균에서 뺄 것인가, 채널당 평균에서 뺄 것인가에 따라 생각하면 된다.

    - zero-centered를 하고 normalized를 하는 것을 의미한다. 이미지 데이터는 0 ~ 255 값을 가지기 때문에 normalized을 하지 않는다.

    - 차원축소로는 PCA와 Whitening도 있다.

3. 가중치 초기화(Weight Initialization)를 배웠다.

    - 첫번째 생각으로는 매우 작은 랜덤의 값으로 초기화 하는 것이다. 하지만 이는 깊을수록 효과가 없었다.

    - Xavier initialization를 고안했다. 하지만 ReLU에서는 소용이 없었다.

    - Xavier initialization에 /2를 넣어주니까 ReLU에서도 잘 작동했다.

4. Batch Normalization를 배웠다.

    - 보통 Fully Connected 또는 Convolutional layer 이후와 활성화 함수 이전의 사이에 쓴다.

    - gradient 흐름과 학습률이 좋아지고, 의존도가 감소한다. 드롭아웃을 할 필요가 사라진다.