[Deep Learning] Conv1D에 관하여

2020. 9. 29. 15:27DeepLearning

CNN은 일반적으로 이미지에서 계층적 특징 추출을 위해 사용된다. CNN의 이러한 장점을 활용하여 2차원 이미지가 아닌 1차원의 sequential 데이터에도 CNN이 사용된다. 주어진 sequence data에서 중요한 정보를 추출해낼 수 있다.

  • 1D filter
    • shape: [height, n]
      • n: input data embedding dim (fixed value)
        • filter size에서 변경 가능한 값은 height
    • filter는 수직 방향으로만 움직인다.
    • NLP에서는 height는 몇 개 단어를 고려할 지 결정하는 값

Pros and Cons

Pros

  • 시간에 따라 기록된 센서 데이터를 처리하는 데 용이하다 (Ex. audio signals)
  • 고정된 길이의 데이터를 처리하는 데 용이하다
  • "Spatial" 정보를 담고 있는 1D signal 데이터에 적합하다.
  • 즉, 만일 데이터의 정보를 섞는 것이 문제 된다면 (정보의 순서가 중요하다면) 1D CNN은 더 좋은 효과를 가져온다.
  • 일반적으로 audio processing에서 첫 번째 단계에서 적용되어 중요한 특징을 추출한다
  • RNN에 넣기에 너무 긴 정보를 담고 있는 경우, CNN - RNN 구조를 따라 효율적으로 처리할 수 있다.
  • Fully connected layer를 사용하지 않고, 1D conv를 사용해도 된다. ("there are no fully connected layers, only 1d convolutions" - LeCun)
  • Sequence down sampling

Cons

  • 자연어 처리와 같이 인접한 데이터 간의 정보가 중요할 경우 RNN/LSTM 구조가 더 낫다.

How to use

  • 1d CNN은 더 큰 filter size를 써도 된다.
  • 1D CNN은 더 큰 window size를 써도 된다.
  • filter size로 일반적으로 7 or 9가 선택된다.

pytorch example

m = nn.Conv1d(in-channels=128, out_channels=32, kernel_size=2)
input = Variable(torch.randn(10, 128, 5)) # 10: batch_size, 128: embedding_dim, 5 = seq_len
feature_maps = m(input) # feature_maps size = [10, 32, 4=5-2+1] (bs, out_channels, out_dim)

References