본문 바로가기
Data Science/논문리뷰

[논문리뷰] AFS: An attention-based mechanism for supervised feature selection

by Toritol 2023. 12. 22.
728x90

 

Gui, N., Ge, D., & Hu, Z. (2019, July). AFS: An attention-based mechanism for supervised feature selection. In Proceedings of the AAAI conference on artificial intelligence (Vol. 33, No. 01, pp. 3705-3713).

 

 이번 글에서는 변수 선택 기법 중 하나인 AFS(Attention-based supervised Feature Selection)에 대해 살펴보려고 합니다. 현재 만들고 있는 모델의 feature 수가 너무 많아 수를 좀 줄이고자 했고, feature의 의미가 차원 축소를 통해 의미가 희석되면 안 되었기 때문에 변수 선택 기법을 적용하고자 하였습니다. 변수 선택 기법에 대해 리서치를 진행하면, 대부분의 블로그 글들이 1) Filter-based Approach, 2) Wrapper-based Approach, 3) Embedded Approach, 세 가지의 카테고리로 정리하는 내용이 대부분이었습니다. 해당 방법들은 이미 다 적용했던 것들이라 최근에 게재된 변수 선택 관련 논문들을 살펴보게 되었고, 해당 논문이 attention 기법을 적용하기도 했으며, 인용 수도 적지 않았기 때문에 간단한 리뷰를 진행하게 되었습니다.

 

1. Introduction

 변수 선택은 효율적인 전처리 및 모델 학습을 위한 방법으로, 고차원 데이터의 불필요한 변수들을 제거하고 단순화하여 모델의 성능과 설명력을 향상하고자 함이 목적입니다. 하지만 데이터가 너무 방대해짐에 따라 변수 선택을 진행하는 과정에서 계산 복잡성과 안정성에 대한 문제 발생하게 됩니다. 따라서 본 연구에서는 attention-based supervised feature selection(AFS) 방법을 제안하였으며, 해당 방법은 attention mechanism이 변수 선택 과정과 유사하다는 점에서 착안하였습니다. AFS는 다음과 같은 특징을 가집니다.

 

  • 1) 새로운 AFS 아키텍쳐: 해당 아키텍쳐는 attention 기반 변수 가중치 생성 모듈과 학습 모듈로 구성. 이러한 분리형 아키텍쳐는 다른 모듈에도 적용하기 용이
  • 2) Attention 기반 변수 가중치 생성: 변수 선택 패턴 문제를 attention 메커니즘을 통해 해결
  • 3) 계산 최적화를 위한 모델 재사용 메커니즘: 변수 가중치를 생성할 때, 계산 복잡성을 효과적으로 줄이기 위해 존재하는 모델 재사용
  • 4) 작은 데이터셋을 위한 하이브리도 초기화 기법 : 가중치 초기화를 위해 존재하는 기존 변수 선택 기법 활용

 

2. AFS Architecture

1) Architectural design

 AFS는 아래의 그림과 같이 attention module과 learning module로 구성되어 있습니다. attention module에서는 모든 변수들에 대한 가중치가 계산되며, learning module에서는 가중된 변수들과 타겟 간의 최적의 상관관계를 찾는 것이 목표입니다. 각 module은 특정 태스크를 위해 독립적으로 커스터마이즈하는 것이 가능합니다.

 

 

2) Attention module

 Attention module 단계에서는 변수와 타겟 간의 상관관계를 표현하기 위해, 상관관계 문제를 이진 분류 문제로 전환하게 됩니다. 여기서 이진 분류는 타겟의 특정 클래스에 대해 변수가 선택되었는지에 대한 여부를 의미합니다.

 

 위의 그림을 따라 과정을 차례대로 살펴보면, 우선 Tanh 함수를 통해 원본 데이터인 \( X \) 내의 본질적인 관계를 추출하고, 노이즈나 이상치를 제거합니다. 따라서 Tanh의 결과인 \( E \)에는 \( X \)가 압축되어 중요한 정보 위주로 남게 되고, 노이즈는 줄어들게 됩니다. 여기서 Tanh는 다른 함수로 대체가 가능합니다.

 

 다음으로 추출된 \( E \)는 변수 선택 확률을 결정하기 위해 여러 Attention Net에 할당됩니다. 기존처럼 각 변수에 대해 Softmax를 적용하게 되면, 대부분의 변수들이 작은 값을 갖게 되고 소수의 변수들이 큰 값을 갖게 되는 문제가 발생합니다. 따라서 이 연구에서는 다른 구조의 Soft-Attention Mechanism을 제안하였습니다. 해당 과정에서는 selected와 unselected, 두 경우를 고려하고, 최종적으로 selected 값만 활용합니다.

 

 Attention module의 이러한 과정은 다음과 같은 장점을 가집니다.

 

  • 1) 변수 가중치는 단순히 역전파에 의해 갱신되는 값이 아니라, Multi Attention Net을 통해 변수 간의 본질적인 관계에 대해 학습
  • 2) 변수 가중치는 0~1 사이로 수렴되어 훈련 속도를 가속화
  • 3) 불필요한 변수들이 \( E \)와 learning module 과정에서 제거

 

3) Learning module

 Learning module 단계에서는 먼저 \( X \)와 \( A \)의 pair-wised 곱을 통해 가중된 변수들이 담긴 \( G \)를 생성합니다. 이후 학습이 진행되고 역전파 과정이 이루어지면서 attention 가중치가 업데이트됩니다. 이 때, 손실 함수 설정에 따라 분류, 회귀 모두 가능하고, 태스크에 맞는 방법론도 선택 가능합니다.

 

4) Learning model reuse mechanism

 해당 단계부터는 필수로 거쳐야하는 과정은 아니며, 오히려 AFS의 특징에 해당합니다. 해당 특징은 계산 복잡성을 줄이기 위해 이미 학습된 모델을 재사용하는 것입니다. 재사용의 방법은 1) attention module과 learning module, 둘 다 사전학습된 모델을 사용하고 fine-tuning만 적용하는 것과 2) learning module은 fine-tuning, attention module은 학습을 진행하는 것, 두 가지로 구분됩니다.

 

5) A hybrid initialization method

 마지막으로 해당 특징은 샘플이 작은 경우에 활용하는 방법입니다. 샘플이 작으면 충분한 학습이 이루어지기 어렵기 때문에, 위에서 설명한 1) Filter-based Approach, 2) Wrapper-based Approach, 3) Embedded Approach와 같은 기존 변수 선택 기법을 baseline으로 사용하여 가중치를 초기화하고, 작은 데이터로 학습을 진행할 수 있습니다.

 

 AFS를 구현하는 것이 목표였기 때문에 아키텍쳐를 위주로 리뷰하였으며, 뒤에 나오는 내용은 experiments에 관한 내용이 대부분이라 따로 정리하지는 않았습니다. 해당 논문에 대한 코드는 해당 깃허브(https://github.com/upup123/AAAI-2019-AFS)에서 볼 수 있습니다.

 

 추가적으로 논문을 읽으면서 가장 궁금했던 내용은 attention module에서 selected와 unselected, 두 경우를 고려해서 결국 selected 값을 선택하는 부분을 어떻게 구현하는가였습니다. 이 부분은 깃허브의 model.py를 보면 이해할 수 있습니다. 2019년에 작성된 코드인지 tensorflow 1 버전이었습니다. line 11의 A_node는 main.py에서 2로 설정되어 있었는데, 해당 부분이 selected와 unselected를 구분하는 과정이고, line 23에서 attention_out[:,1]을 통해 두 번째 열만 선택하는 부분이 selected만 선택하는 부분입니다. 해당 내용이 개념이 잘 잡히지 않았었는데, 코드는 나름 간단하게 구현하고 있어서 기억에 남습니다.

 

...
    with tf.variable_scope('attention_module') as scope:
        E_W = tf.Variable(
            tf.truncated_normal([FLAGS.input_size, FLAGS.E_node], stddev = 0.1,seed = FLAGS.set_seed))
        E_b = tf.Variable(
            tf.constant(0.1, shape = [FLAGS.E_node]))

        E = tf.nn.tanh(tf.matmul(X,E_W)+ E_b)

        A_W = tf.Variable(
            tf.truncated_normal([FLAGS.input_size,FLAGS.E_node, FLAGS.A_node], stddev = 0.1,seed = FLAGS.set_seed))
        A_b = tf.Variable(
            tf.constant(0.1, shape=[FLAGS.input_size,FLAGS.A_node]))

        A_W_unstack = tf.unstack(A_W, axis=0)
        A_b_unstack = tf.unstack(A_b, axis=0)

        attention_out_list = []
        for i in range(FLAGS.input_size):
            attention_FC = tf.matmul(E, A_W_unstack[i]) + A_b_unstack[i]
            attention_out = tf.nn.softmax(attention_FC)

            attention_out = tf.expand_dims(attention_out[:,1], axis=1)

            attention_out_list.append(attention_out)
        A = tf.squeeze(tf.stack(attention_out_list, axis=1),axis=2)
...

 

리뷰 내용에 대해 틀린 부분이 있다면 언제든지 댓글로 알려주시길 바랍니다.

 

 

<참고>

https://github.com/upup123/AAAI-2019-AFS

 

GitHub - upup123/AAAI-2019-AFS: The code of the AAAI-19 paper "AFS: An Attention-based mechanism for Supervised Feature Selectio

The code of the AAAI-19 paper "AFS: An Attention-based mechanism for Supervised Feature Selection". - GitHub - upup123/AAAI-2019-AFS: The code of the AAAI-19 paper "AFS: An Attention...

github.com

 

 

728x90

댓글