머신러닝

6-21 LSTM RNN에 의한 Low Pass Filtering 과정에서 진폭의 영향

coding art 2019. 8. 21. 14:48
728x90



지난해 겨울 텐서플로우 OpenCV 출간 이후 7개월 만에 2권에 해당하는 “Scikit PyTorch 머신러닝을 출간하게 되었다. 각권이 450 페이지이므로 합 900 페이지에 달하는 내용이라 무슨 머신러닝을 공부하는데 분량이 왜 이렇게 많은가? 하고 의문을 가질 수도 있겠으나 그 내용이 튜토리얼성에 가까워 사실 그렇게 큰 부담은 없는 책이다. 물론 책 내부에 파이선 코드를 끼워 넣는 먹통 짓은 지금 세상에서는 할 필요가 없을 것이다. 해당 책의 머리말에 써둔 하이퍼링크 목차를 다운받으면 블로그를 직접 열어 볼 수 있으며 거기서 예제 코드를 다운 받을 수 있다.


 

1권에 해당하는 텐서플로우 OpenCV 머신러닝에서는 20179월경부터 201812월 사이에 머신러닝을 이해하고자 하는 필자의 열공(?) 내용을 담아 보았다면 2권에서는 1권에서 제기되었던 여러 내용들에 대해서 해답을 찾아가는 내용들을 꽤 많이 포함하였다. 2권이라고 해서 내용적으로 완전히 정리된 것은 아니기 때문에 다시 3권의 출발점이 될 수도 있을 것이다.

 

다소 아쉬운 점은 흥미 위주로 시작했던 1, 2권의 Softmax 관련 내용을 완전히 정리하지는 못했는데 이 그 이유는 R&D 영역으로 넘어갔기 때문이다. 2020년에는그 내용까지도 포함하여 출간할 계획이다.

 

본 서의 출간 목적은 작가들과 출판사가 염원하는 베스트셀러 화가 목표가 아니다. 사회적으로 인공지능(머신러닝)에 대한 이해 필요성이 점증하는 시기이며, 인공지능 분야의 발전 속도가 상당히 빠르기 때문에 그에 맞춰서 비전공자라 할지라도 머신러닝에 입문해 볼 수 있도록 경험과 생각을 공유해 보고자 하는 것이다.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


최근 출간한 파이선 코딩 초보자를 위한 ScikitPyTorch 머신러닝6-19 RNN 편에서 이미 고주파 노이즈가 섞인 데이터의 저주파 필터링에 관해서 다루어 보았다. 이번에는 동일한 문제에 대해서 학습용 저주파 파형의 진폭을 변경시켜 학습시킬 경우 일어나는 영향을 조사해 보기로 한다.

  

  

2가지 파형 즉 저주파인 1.0*Sin(2.0*t) 와 상대적으로 고주파인 0.5*Sin(50*t)를 혼합한 파형을 엑셀에서 1000A 컬럼 데이타로 생성한다. 이어서 다시 0.5*Sin(2.0*t) 파형으로 다시 숫자 컬럼 데이타 B를 생성해서 CSV 포맷으로 저장한다. 아울러 RNN 필터링 코드를 엑셀 CSV 데이터 파일과 같은 폴더에 두도록 한다. RNN 필터링 코드는 6-19에서 사용했던 rnn_low_pass_filtering.py를 그대로 사용하기로 한다. 위 그림은 1000개의 데이터에서 20% 200개를 학습에 사용한 결과이다.

 

2가지 파형이 혼합된 파형에서 Sin(2.0*t) 에 해당하는 파형만 필터링 하기로 하자. RNN 필터링 과정에서 진폭(Amplitude) 의 영향을 조사하기 위해 컬럼 데이터 B1.0*Sin(2.0*t) 파형의 진폭을 0.5로 바꾸어 학습시킨 후 제대로 저주파 필터링이 되는지 결과를 관찰해 보도록 하자.

 

위 그림의 오른 쪽 필터링 결과를 관찰해 보면 주파수 자체는 정확히 예측되었지만 필터링 된 파형의 진폭이 원래 1.0 이었음에 반해 학습 파형의 0.5에 연동이 되어 버려 진폭이 0.5인 저주파 파형이 얻어짐을 알 수 있다.