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. =
= =
===============================