1D sinyalini sınıflandırmak için CNN kullanmak iyi bir fikir mi?


20

Uyku aşaması sınıflandırması üzerinde çalışıyorum. Birçoğu SVM veya topluluk yöntemi kullandığı bu konuyla ilgili bazı araştırma makalelerini okudum. Tek boyutlu EEG sinyalini sınıflandırmak için evrişimli sinir ağını kullanmak iyi bir fikir mi?
Bu tür işlerde yeniyim. Yanlış bir şey sorarsam özür dilerim?


Bir 1D sinyali, sinyali çerçevelere ayırarak ve her çerçevenin FFT'sini alarak bir 2D sinyale dönüştürülebilir. Ses için bu oldukça nadirdir.
MSalters

Yanıtlar:


23

Sanırım 1D sinyali ile, değerler arasında zamansal bağımlılık olduğunu varsaydığınız zaman serisi verileri anlamına geliyorsunuz. Bu gibi durumlarda, evrişimli sinir ağları (CNN) olası yaklaşımlardan biridir. Bu tür verilere en popüler sinir ağı yaklaşımı tekrarlayan sinir ağlarını (RNN) kullanmaktır, ancak alternatif olarak CNN'leri veya Bradbury ve arkadaşları (2016) tarafından tartışıldığı gibi hibrit yaklaşımı (yarı tekrarlayan sinir ağları, QRNN) ve ayrıca kullanabilirsiniz. aşağıdaki şekilde gösterilmiştir. Vaswani ve arkadaşları (2017) tarafından tarif edilen Transformer ağında olduğu gibi, zamanla ilgili bilginin Fourier serisi özellikleri ile aktarıldığı , sadece dikkati kullanmak gibi başka yaklaşımlar da vardır .

resim açıklamasını buraya girin

İle RNN , çok, çıkış ve başka gizli devlet dönmek için, giriş önceki gizli devlet ve mevcut giriş değeri olarak alan bir hücreyi kullanmak istiyorsunuz bilgiler gizli devletler aracılığıyla akar . CNN ile, verilerdeki belirli (öğrenilmiş) desenleri görecek bazı genişlikteki sürgülü pencereleri kullanır ve bu pencereleri üst üste yığınlarsınız, böylece daha üst düzey pencereler alt düzeydeki desenleri arar kalıpları. Bu tür kayan pencerelerin kullanılması, veriler içinde tekrarlanan kalıplar (ör. Mevsimsel kalıplar) gibi şeyler bulmak için yardımcı olabilir. QRNN katmanları her iki yaklaşımı da karıştırır. Aslında, CNN ve QRNN mimarilerinin avantajlarından biri, RNN'den daha hızlı olmalarıdır .


12

1D sinyalini sınıflandırmak için kesinlikle bir CNN kullanabilirsiniz. Uyku aşaması sınıflandırmasıyla ilgilendiğiniz için bu makaleye bakın . DeepSleepNet olarak adlandırılan derin bir sinir ağıdır ve EEG sinyallerini uyku aşamalarında sınıflandırmak için 1D evrişimsel ve LSTM katmanlarının bir kombinasyonunu kullanır.

İşte mimari:

DeepSleepNet

Ağın iki bölümü vardır:

  • Temsili öğrenme katmanları: Paralel olarak iki evrişimsel ağdan oluşur. İki ağ arasındaki temel fark çekirdek boyutu ve maksimum havuzlama penceresi boyutudur. Soldaki çekirdek boyutu =Fs/2 (nerede Fs sinyalin örnekleme oranıdır), sağdaki çekirdek boyutunu kullanır = Fsx4. Bunun arkasındaki sezgi, bir ağın "ince" (veya yüksek frekans) özellikleri öğrenmeye çalışması ve diğer ağın "kaba" (veya düşük frekans) özelliklerini öğrenmeye çalışmasıdır.
  • Sıralı öğrenme katmanları: Katlamalı katmanlardaki düğmeler (veya öğrenilen özellikler) birleştirilir ve düğmeler arasındaki zamansal bağımlılıkları öğrenmek için LSTM katmanlarına beslenir.

Sonunda, zaman serisini uyku evrelerine karşılık gelen beş sınıftan birinde sınıflandırmak için 5 yollu bir softmax katmanı var.


4

Uzun dizileri işlemek için bir yığın hibrit yaklaşımın (CNN + RNN) kullanımını vurgulamak istiyorum :

  • Bildiğiniz gibi, 1D CNN'ler zaman adımlarının sırasına duyarlı değildir (yerel bir ölçekten daha fazla değil); elbette, çok sayıda kıvrım ve katmanları üst üste istifleyerek, son katmanlar orijinal girdinin daha uzun alt sekanslarını gözlemleyebilir. Ancak, bu uzun vadeli bağımlılıkları modellemek için etkili bir yaklaşım olmayabilir. Bununla birlikte, CNN'ler RNN'lere kıyasla çok hızlıdır.

  • Öte yandan, RNN'ler zaman adımlarının sırasına duyarlıdır ve bu nedenle zamansal bağımlılıkları çok iyi modelleyebilir. Bununla birlikte, çok uzun dönemli bağımlılıkların modellenmesinde zayıf oldukları bilinmektedir, burada bir zaman çizelgesi, girdideki çok uzak zaman aralıklarına geçici bir bağımlılığa sahip olabilir. Ayrıca, timestep sayısı yüksek olduğunda çok yavaştırlar.

Bu nedenle, etkili bir yaklaşım CNN'leri ve RNN'leri bu şekilde birleştirmek olabilir: ilk önce girdinin boyutsallığını azaltmak için evrişim ve havuz katmanlarını kullanırız. Bu bize orijinal girdinin daha üst düzey özelliklere sahip oldukça sıkıştırılmış bir sunumunu verecektir. Daha sonra, bu daha kısa 1D dizisini daha fazla işlem için RNN'lere besleyebiliriz. Bu nedenle, CNN'lerin hızından ve aynı zamanda RNN'lerin temsil yeteneklerinden faydalanıyoruz. Diğer herhangi bir yöntem gibi, etkili olup olmadığını öğrenmek için özel kullanım durumunuzda ve veri kümenizde bunu denemelisiniz.

İşte bu yöntemin kabaca bir örneği:

--------------------------
-                        -
-   long 1D sequence     -
-                        -
--------------------------
            |
            |
            v
==========================
=                        =
=  Conv + Pooling layers =
=                        =
==========================
            |
            |
            v
---------------------------
-                         -
- Shorter representations -
-     (higher-level       -
-      CNN features)      -
-                         -
---------------------------
            |
            |
            v
===========================
=                         = 
=  (stack of) RNN layers  =
=                         =
===========================
            |
            |
            v
===============================
=                             =
= classifier, regressor, etc. =
=                             =
===============================

4

FWIW, bu yazıda Geçici Evrişim Ağı'na bakmanızı tavsiye ederim (ben yazar değilim). CNN'yi zaman serisi verileri için kullanma konusunda düzgün bir fikirleri vardır, zaman sırasına duyarlıdır ve keyfi olarak uzun dizileri modelleyebilir (ancak bir belleği yoktur).

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.