통신

노이즈 탄 데이터 식별을 위한 Autoencoder 알고리듬 이용

coding art 2022. 3. 1. 18:00
728x90

autoencoder 알고리듬은 학습 데이터에 포함되어 있는 노이즈 제거 특성임을 잘 알고 있다. autoencoding  알고리듬 활용을 위해서는 주어진 데이터를 학습용과 validation 용으로 split 한 다음 학습을 실시하여 autoencoder 를 생성하자. 학습된 autoencoder를 validation  데이터에 적용하면 일반적으로 90% 이상의 정확도 즉 Accuracy를 확인할 수 있다. 아울러 10%남짓 오차를 보여주는 validation 데이터에서 autoencoder로 학습된 validation 데이터와의 차이 즉 mae(mean absolute error) 분포를 조사해 볼 필요가 있다. 

 

특히 학습과정에서 충분한 에포크(epoch) 수를 취하면 보다 정확도를 올려줄수 있는 autoencoder 를 얻어낼 수 있다. 이와같이 충분한 수의 에포크를 적용할 경우 mae 분포의 평균값은 점차 작아지며 분포 또한 폭이 좁은 즉 표준편차가 작은 분포를 보여준다.

 

한편 validation 데이터에만 한정하여 백그라운드 노이즈가 아닌 specific 랜덤노이즈를 심하게 타는 사례를 검토해 보자. 이러한 노이즈는 validation 데이터에 tf.random.normal 명령을 사용하여 생성이 가능하다. 특히 amp 즉 진폭 값을 조절하여 랜덤함의 크기를 조절할 수 있다.

noise_test = amp * tf.random.normal([1000,140,1], mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, seed=None, name=None)
 
아래그림의 오른편에서 처럼 랜덤성이 강화된 그래프를 볼 수 있다.

물론 autoencoder 가 백그라운드 노이즈를 제거할 수 있다고는 하지만 이와같이 특별하게 추가된 노이즈를 필터링할 수는 없으므로 이러한 validation 데이터를 이미 학습시켜 얻어둔 autoencoder 에 적용하여 mae 를 평가할 경우 추가 노이즈가 없을 경우와는 완전히 차별화되는 결과를 얻을 수 있다.

 

아래 분포 그래프에서 첫번째 사례는 validation 데이터에 추가 노이즈를 넣지 않은 경우로서 autoencoder 를 사용한 학습된결과와 validation 데이터 적용 결과의 차이에서 거의 유사한 분포를 보여준다. 즉 피크내지는 평균이 서로 일칳하지만 표준 편차가 조금 차이가 난다.

 

반면에 두본째 경우는 validation 데이터에 일정 진폭을 가지는 랜덤 노이즈가 추가된 경우로서 피크내자는 평균이 완전히 어긋나있음을 관찰할 수 있다. 이러한 결과는 anomay 데이터를 사용한 경우와 흡사한 측면이기도 하다.

세번째도 마찬가지인데 이번에는 피크 내지는 평균값이 서로 어긋나 있데 두번째 경우와는 반대이다.

따라서 autoencoder 를 사용한 머신 러닝에서 validation 데이터에 노이즈를 타게 되면 mae 오차 분포가 현격히 달라짐을 감지할 수 있게 된다.

하지만 amp 값이 더 커지게 되면 validation 데이터 자체가 학습 데이터와의 찹이가 지나치게 커져 validation 데이터로 비교가 어려워짐에 유의하자. 아울러 매번 계산때 마다 autoencoder 를 계산하는데 이를 한번 계산 후 불러 쓰는 것이 결과를 비교해 보는데 도움이 될 것이다.

 

코드 상에서 노이즈를 추가하는 부분이다.

첨부된 코드를 다운받아 실행해 보자.

autoencod_noise.ipynb
0.24MB