Self Normalizing Neural Network (Fully Connected Layer 의 희망?)

2019. 11. 9. 23:13관심있는 주제

728x90

도움이 되셨다면, 광고 한번만 눌러주세요.  블로그 관리에 큰 힘이 됩니다 ^^

2017년도 Feed Forward NN (FNN)에 관한 논문
CNN, RNN은 성공하고 있지만, FNN 쪽은 성능이 잘 안 나오고 있다.
FNN 은 shallow layers 에서는 잘 되지만, 점점 깊어질수록 성능이 떨어지는 단점이 있다.
이 논문에서는 high level representation을 할 수 있게 하는 self-normalizing nn(SNN)을 제안한다.
batch norm을 쓰면 명시적으로 정규화를 할 수 있지만  SNN을 쓰면 자동적으로 소말 라이징 하게 된다. 
snn의 활성화함수는 scaled exponential linear units(selu)를 사용한다. 
바나흐 고정점 정리를 이용하여 우리는 그것을 증명한다. 0 평균 및 단위 분산에 가까운 활성화(많은 것을 통해 전파됨)
네트워크 계층이 0 평균 및 단위 분산을 향해 수렴됨 (심지어 노이즈나 변동이 존재함에도 불구하고)

SNN의 수렴 성질을 3가지를 가능하게 한다.

1. many layers를 사용할 수 있게 한다.
2. 강한 정규화 역할을 배치시킬 수 있다.
3. 매우 강건한 학습을 하게 해 준다.
 그리고 upper bound와 lower bound가 존재해서 gradient 가 죽거나 폭발하는 것이 불가능하다고 한다.

uci 데이터로 설명한다고 함.
일단 2017년도 논문이라 조금 오래될 수도 있지만, 코드도 있으니, 한번 적용해보고 잘되는지 체크해보고 싶다.
kaggle 데이테서 tabular 데이터 같은 경우 tree 나 svm 같은 것이 더 잘된다. 
놀랍게도, 비록 그들이 입력의 다른 수준의 추상적 표현을 허용하기는 하지만, 많은 숨겨진 층을 가진 FNN들로 성공 스토리를 찾는 것은 어렵다.
normalization 기술이 cnn에서 많은 성공을 보였지만, SGD에 의해서 학습하면서 왔다 갔다 하기 때문에(perturbed)  파라미터들을 추정하는데 교란되게 할 수 있다. 

RNN, CNN 같은 경우에는 weight를 공유하기 때문에 안정적이어서 그러한 흔들리는 것에 덜 영향을 받는다고 저자는 주장한다. (먼가 그럴듯하다)

하지만 FNN 같은 경우에는 이러한 흔들리는 것으로 고통을 많이 받는다.  높은 분산을 학습을 더 오히려 힘들게 한다고 함. 게다가 dropout 같은 강한 정규화는 학습을 할 때 분산이 더 커지게 해서 수렴을 오히려 더 어렵게 한다. (오...)

그래서 저자는 이러한 흔들리는 것에 더 강경하게 하기 위해 Self-Normalizing Neural Network를 안 한다.  

시간이 없고 머리는 안돼서 논문의 타당성에 대한 것은... 일단 접고,,, 받아들이는 자세로...

 저자는 selu를 제안 

초기화 함수

MSRA initialization 라는 것을 하라고 함. 

Uniform and truncated Gaussian distributions with these moments led to networks with similar behavior.

Uniform이나 Truncated Gaussian 분포와 유사하다고 함

평균이 0이고 분산은 2/n

 

New Dropout Technique.

새로운 드롭아웃 방식도 제안함. (alpha dropout)

기존 dropout은 랜덤 하게 activation을 랜덤 한 선택 한다. 그래서 binomal을 따라서 결국은 기존이랑 바뀌고 나서도 같은 평균을 유지하게 된다.  그러 모르0이 낮은 분산 영역에 있고 기본 값에 해당하므로 드롭아웃은 정류된 선형 단위(relurectified linear units)에 적합하다. 0이 낮은 분산 영역에 있고 기본 값에 해당하므로 드롭아웃은 정류된 선형 단위(relurectified linear units)에 적합하다.

하지만 scaled exponential linear unit 같은 경우 작은 분산을 가지고 있다. 그러므로 alpha dropout을 젠한다고 함.

새로운 평균과 분산을 가질 수 있게 한다. 저자의 목표는 alpha dropout 후에 그 기존 값들의 평균과 분산을 유지하는 것이다. (그다음에는 머 여러 공식이 나오면서 같다고 하는 것을 증명함) 

경험적으로 0.05 , 0.1이 성능이 좋았다고 함.

 

실험 테스트한 아키텍처

결과물

다른 아키텍처에 비해 layer을 많이 쌓아도 정확도가 유지됨. (그렇다고 성능이 좋지는?....)

그냥 빠르게 코드만 쓰려다가, 관심있는 주제라서 논문을 슥 읽어봤다! 

코드도 잠깐보니 머 별거 없는게

selu -> alpha dropout 이 다인 것 같다!

 

 

 

https://arxiv.org/pdf/1706.02515.pdf

불러오는 중입니다...

 

https://github.com/bioinf-jku/SNNs

 

bioinf-jku/SNNs

Tutorials and implementations for "Self-normalizing networks" - bioinf-jku/SNNs

github.com

 

728x90