트FFT 기반 노이즈 필터링 모델과 ML 기반 노이즈 필터링 모델의 효율 비교 (3)
(2)를 먼저 보고 이 글을 보는 것을 추천한다.
https://mharry345.tistory.com/9
FFT 기반 노이즈 필터링 모델과 ML 기반 노이즈 필터링 모델의 효율 비교 (2)
(1)을 먼저 보고 이 글을 보는 것을 추천한다.https://mharry345.tistory.com/8 FFT 기반 노이즈 필터링 모델과 ML 기반 노이즈 필터링 모델의 효율 비교 (1)우리가 통신을 하다 보면 주변 잡음이 함께 전달되
mharry345.tistory.com
이제 마지막으로 기계학습 기반 모델을 만들어보고 둘의 효율 및 오차를 비교해 보려고 한다.
노이즈 필터링 모델에 기계학습을 어떻게 쓸 것인가? 푸리에변환 노이즈 필터링 모델의 아이디어 그림을 들고 와 보자.
연두색 2번 Step에서 푸리에변환 기반 모델은 3,4,5번 과정을 통해 6번 Step을 갈 수 있었다.
하지만 기계학습 기반 모델은 좀 더 간단하게 가려고 한다.
2번에서 바로 6번으로 가는 방법이다.
다시 말해 노이즈가 있는 신호를 보고 냅다 바로 1 또는 0임을 판단해 버리자는 것이다.
이게 될까? 일단 지켜봐라. 데이터의 힘을 보게 될 것이다.
일단 기계학습에서 가장 중요한 것이 무엇인가? 바로 데이터이다.
데이터를 어떻게 확보할 것인지에 많은 고민을 하였다. 고민의 결과는 다음과 같다.
1) 일반적인 모델을 만들기 위해 train data set의 진동수를 200 ~ 400Hz 중에 랜덤으로 뽑아서 정규화를 거친 뒤 학습에 이용함
2) 그리고 noise의 진폭 또한 0~1 사이의 실수를 랜덤하게 뽑아서 사용 (송신 파동의 진폭이 1이라 했을 때)
train_x : 랜덤한 진동수, 노이즈 진폭 10000개에 대한 정규화를 마친 신호
train_y : 10000개의 0 또는 1
학습 횟수 : 10000번
자꾸 위에서 정규화 정규화 하는데, 이게 뭘 하는 건가 궁금할 거다.
아래 그림과 함께 설명하도록 하겠다.
시간 t 축에 대한 함숫값(빨간 점) 들이 입력값이 되는 이진 분류기 Binary classification이 결국 "기계학습 기반 노이즈 필터링 모델"이다. (결국 함숫값들을 통해 0 또는 1을 구별하는 이진분류기라고 생각할 수 있음)
그런데… 진동수에 따라 하나의 주기에 존재하는 빨간 점의 개수가 달라진다.
하지만 인공지능 모델에 들어가는 변수의 개수는 고정시켜야 하므로 정규화 과정을 거친다.
이렇게 마련한 데이터들을 통해서 "기계학습 기반 노이즈 필터링 모델"을 만들 수 있었고
이제부터는 " 푸리에변환 기반 노이즈 필터링 모델"과 "기계학습 기반 노이즈 필터링 모델"의 효율 및 오차를 비교해 보자.
총 두 가지를 변수로 하여 비교해 보려고 한다. (Carrier frequency에 따른 효율과 Noise amplitude에 따른 효율)
1) Carrier frequency에 따른 효율
푸리에변환 기반의 경우 당연하게도 Carrier wave의 진동수에 관련이 없이 거의 오차가 없는 완벽한 모델임을 보여준다.
하지만 기계학습 기반의 경우 조금의 오차가 있음을 알 수 있다.
이는 데이터의 부족이 그 원인일 것이라고 추측한다.
또 train data의 개수를 늘려가며 기계학습 기반 모델을 평가해 보았다.
data의 개수를 늘릴수록 양끝에서의 오차는 더욱 커짐을 알 수 있었다.
이는 데이터의 편향 ( 양 끝의 진동수에 대한 학습의 부족 ) 이 원인일 것이라고 추측한다.
지금까지만 봐서는 푸리에변환 기반 모델이 조금 더 좋아보인다.
2) Noise amplitude에 따른 효율
송신 진폭이 1일 때 노이즈의 진폭 0에서 1에 따른 오차를 확인하니, 이 또한 푸리에 변환 기반 모델이 훨씬 더 오차가 적은 모델임을 확인할 수 있었다.
그럼 푸리에변환 기반 모델이 좋다고 끝낼까...?
아니 뭔가 빠뜨린거 같다.
여기서 끝내지 않고 학습 데이터의 노이즈 진폭을 0~2로 하여 새로운 모델을 만들고 다시 둘을 비교해 보았다.
아주 놀라운 결과였다.
학습 데이터의 노이즈 진폭을 0~2로 지정하고 학습 횟수를 변경해 가며 여러 모델을 만들었다.
그리고 이들을 푸리에 변환 기반 모델과 비교해 보았는데 노이즈 진폭이 1보다 큰 상황에서는 기계학습 기반 모델이 훨씬 높은 정확도를 보여주었다.
뿐만 아니라 일부 모델들은 0~1 사이의 노이즈에서도 푸리에 변환보다 높은 정확도를 보여주었다.
결국 데이터의 질 Quality와 양 Quantity가 좋아지고 많아질수록 기계학습 기반 모델은
완벽에 가까웠던 수학적 기법인 푸리에변환 기반 모델의 정확도를 뛰어넘을 수 있다는 것을 알 수 있었다.
그저 학생인 내가 만든 모델도 이렇게 좋은 효율을 보여줄 수 있는데, 좀 더 공을 들여서 만든 모델은 얼마나 더 뛰어날지 상상이 안 된다. 어쩌면 송신 진폭보다 노이즈가 큰 상황에서도 높은 정확도로 노이즈를 필터링하는 모델을 만들어낸다면 아낄 수 있는 전기세가 얼마인가... 세상이 떠들썩해질 수도 있을 거 같다 ㅎㅎ
반론이나 질문은 환영입니다.
그리고 특히 이번 주제의 글은 파이썬 소스코드를 제공합니다.