딥러닝에서 데이터 normalization 범위

상념 2018. 11. 7. 09:50

 

 

딥러닝에서 데이터 전처리시 가장 궁굼한 것 중 하나가, normalization의 대상 범위를 어떻게 정할 것인가? 인데 신경망을 연구하는 사람들은 이미 다 알고 있는 것인지도 모르겠다.

normalization 방법을 단순히 try and error 방법으로 실험으로만 결정할 문제는 아닌것이다. 

아래 이미지는 UCI EEG에서의 normalization을 이거 저거 해보면서 만든 슬라이드 중 일부인데. 이 이외에도 여러 가지 있고 각각 결정해야할 변수들이 많다. 또 실제 각 normalization 시 참고 백데이터 범위를 global 데이터를 대상으로 할 것인가 현재 인스턴스만을 대상으로 할 것인가까지 고려해야 하므로 더 다양한 조합의 방법이 있으므로 이거 저거 다 실험해 보는것은 만만치 않다.

그런데 요즘 몇가지 실험을 해보면서 확인한 바로는 뉴럴넷에 사용되는 액티베이션 펑션에 따라 결정이 되어야한다는 것이다. 액티베이션 펑션이 출력하는 범위의 데이터로 전처리 해야만 전파 중 정보 손실이 없는 것이다. 예를 들어 sigmoid 같은 경우는 0.0~1.0, tanh 같은 경우는 -1.0~1.0 정도이다. 따라서 이러한 펑션을 사용하는 신경망에서 z-score normalization은 다시 한번 생각해 봐야한다.

 

 

 

 

posted by Dr.Deeeep

딥러닝에서 노이즈의 중요성??

상념 2017. 1. 12. 00:59

 

 

위 그림은 이글과 아무 관련이 없고 구글에서 퍼온 그림임.

뇌파를 보다보면 점점 노이즈 처리의 어려움으로 분석의 한계에 봉착하게 된다.아니 노이즈 처리의 어려움까지 가기전에 어디까지를 노이즈로 할것이고 어느 영역까지를 뇌파로 할것인지 결정하는 것부터 큰문제거리다. 그만큼 뇌파라는게 온갖 생체,환경,장비시그널의 결합체인것이다. 뇌파에는 뇌파이외에도, 심전도, 관측장비시그널, 근육움직임파동, 눈깜빡임, 눈동자 움직임, 턱근육 움직임, 전류, 저항잡음, 주변환경신호,등등이 섞여 있는데. 이건 마치 수백명이 물장구치는 수영장에서 철수가 만드는 파형만을 뽑아분석하려는 것과 같다... 어쩄든 그런 얘기를 하려는 건 아니고.

노이즈가 극히 적다는 가정하에 노이즈가 러닝에 어떤 영향을 끼지는지 조사를 해보았다. 몇가지 실험을 해보면 노이즈가 있는 데이터는 러닝 효율이 좋다. 내가 가진 정신착란 생쥐의 뇌파의 경우는 96퍼센트의 정확률로 분류하기까지 한다. 어마어마하게 뭔가 잘못된것이다. 물론 오버피팅이 되는 것이다. 첨부 이미지처럼 저렇게 electric pop 노이즈의 경우는 특히 그렇다. 쉽게 말해 저렇게 특이한 데이타(노이즈)가 들어오면 기계가 기억하기 쉽기 때문에 오버피팅이 되는 것이다. 마치 학생들 이름을 잘 못외우는 교사가 코에 유난히 큰 점이 있는 학생의 이름은 잘 기억하는 것과 같다( 맞는 예인가? ) 이러한 노이즈는 학습된 기계의 지능자체를 올려주는 것은 아니기때문에 지양해야한다.

하지만 저런 노이즈 말고 좀더 부드러운 노이즈는 어떨까? 몇몇 논문에서는 마일드한 노이즈를 섞어서 학습하는 것이 기계의 지능을 높이는 바람직한 학습을 가능하게 한다고 밝히고 있다. 즉, 앞의 예를 이용하면, 거의 대부분의 학생들 얼굴에 적절히 주근깨와 점들이 있다면 그 교사는 주근깨와 점에 집중하지 않고 학생들의 얼굴과 그외 본질에 연관하여 이름을 기억하게 되므로 더 많은 학생의 이름을 오래 기억할 수 있다. 딥러닝에 드롭아웃을 주는 이유도 아마 이와 같은 맥락인듯하다. 데이터에 노이즈를 넣을 수는 없으니까 학습할 때 노이즈를 줘서 학습 효과를 떨어뜨리는 것이다.

현실로 돌아와서..  뇌파에서는 저 그림과 같은 노이즈를 지우는 것은 사실 큰 의미는 없어 보인다. 이미 뇌파는 앞서 말한 노이즈 아닌 불필요 데이터들과 섞여 크게 요동치고 있고 자동화된 노이즈 제거 노력은 오히려 데이터를 일그러뜨려 망칠뿐이다. 그 보다는 뇌파와 섞이는 다른 신호들도 모두 저장하고 모두 같이 분석하는 기술의 개발이 필요한듯하다. 그럴려면 엄청난 양의 데이터 분석이 필요하겠지만..

 

posted by Dr.Deeeep

딥러닝에서 Epoch의 중요성

상념 2016. 9. 29. 08:40

 

 

 

 

epoch는 전체 데이터에 대한 한번의 학습(forward 와 backward 포함)을 의미. 네트웍의 웨이트는 학습 시작시 초기값이 무엇이냐에 따라 학습 결과가 다르므로 매 epoch시마다 weight값이 수정되도록 한다면 매번 학습을 수행할때마다 전체 네트웍의 포텐셜이 달라짐. 그러나 항상 포지티브하게 달라짐을 보장할 수는 없으므로 매번 sum of loss 곡선을 확인 하면서 적당한 epoch의 수를 결정하는 것이 좋겠음.

batch size 한번의 학습시 사용되는 데이터의 수로 전체 데이터의 수보다 작거나 같음. batch size가 학습 효율에 어떤 영향을 끼칠지는 연구해봐야 하지만 큰 영향이 없을 것 같음(citation needed). 단지 사용하는 메모리의 문제일듯(?) [수정] 학습되는 모델의 성능으로의 영향보다는 학습 속도와 학습 효율에 영향을 줌. 한번의 batch 내에서의 학습된 내용은 batch 종료시까지 네트워크에 반영이 되지 않기 때문임. 따라서 학습 초기에는 적은 batch size로 빈번히 업데이트 해주고 학습 후기로 갈 수록 batch size를 크게 잡아주는 것이 효율적이지 않을까 생각됨. [여기까지 수정]

iteration은 정해진 batch size를 이용하여 학습(forward + backward)를 반복하는 횟수로 epoch와는 다른 의미. 한번의 epoch를 위해 수번의 iteration이 필요.

 

epoch는 학습 결과가 포지티브한 방향성이 관찰된다면 높은수를 정해줄 수록 좋은 결과를 얻을 수 있기 때문에 딥러닝에 좋은 하드웨어가 필요한 이유임. 그러나 높은 epoch는 데이터 자체를 머신에 학습시키는 것이므로 오버피팅의 문제가 있음. 적절한 epoch와 overfitting을 피하기 위한 기술 적용 필요.

posted by Dr.Deeeep