본문 바로가기
AI/딥러닝

[AI 부트캠프] DAY 75 - 딥러닝 11

by HOHHOH 2023. 11. 7.

오늘의 일지]

딥러닝 녹화 강의 - TabNet, AutoEncoder

[상세 내용]

TabNet

-  TabNet은 트리 기반의 해석 가능한 딥러닝 모델로, 특히 표 형태의 데이터(탭규칙 형태의 데이터)에 적합한 모델입니다. TabNet은 트리 기반의 모델과 딥러닝 모델의 혼합으로, 각각의 특성을 선택하고 중요한 패턴을 학습하는 데 사용됩니다. TabNet은 탭 네트워크 (Tabular Attention Network)의 약어로, 표 형식 데이터를 처리하기 위해 디자인된 네트워크 구조를 나타냅니다.

 

원리

  • 피처 선택 및 중요성: TabNet은 각 레이어에서 특성 선택과 특성 중요도를 학습합니다. 이것은 입력 데이터의 각 특성이 얼마나 중요한지를 알려주며, 중요하지 않은 특성은 무시됩니다.
  • 트리 기반 아키텍처: TabNet은 기본적으로 트리 기반의 아키텍처를 사용합니다. 트리의 노드는 특성을 선택하거나 무시하는 데 사용되며, 레이어 간에 특성의 중요도를 전파하면서 트리가 확장됩니다.
  • 스프래스(sparsity): TabNet은 스프래스한 모델이며, 각 레이어에서 오직 일부 특성만 선택합니다. 이것은 모델의 해석 가능성을 향상시키며, 불필요한 특성을 배제함으로써 모델의 복잡성을 줄입니다.
  • 마스크 기반 선택: TabNet은 특성을 선택하기 위해 마스크(mask)를 사용합니다. 마스크는 각 특성에 대해 선택 여부를 나타냅니다. 마스크는 학습 중에 자동으로 업데이트되며, 중요한 특성에 가중치를 높이게 됩니다.
  • 지수선형 활성화(Exponential Linear Unit, ELU): TabNet은 ELU 활성화 함수를 사용하여 비선형성을 도입합니다. ELU는 흔히 사용되는 ReLU(Rectified Linear Unit)와 유사하지만, 음수 부분에 대해 부드러운 곡선을 가집니다.

 

예시

import tensorflow as tf
from pytorch_tabnet import TabNetClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 데이터 로드 및 전처리
# 데이터를 로드하고 필요한 전처리를 수행하세요. 예를 들어, 데이터를 특성과 레이블로 나누고 범주형 특성을 인코딩합니다.

# 데이터 분할
X_train, X_valid, y_train, y_valid = train_test_split(features, labels, test_size=0.2, random_state=42)

# TabNet 모델 정의
clf = TabNetClassifier(
    n_d=64,        # Decision step의 차원
    n_a=32,        # Attention 메커니즘의 차원
    n_steps=5,     # 결정 트리 단계 수
    gamma=1.5,     # Regularization 파라미터
    n_independent=2,   # Independent decision layer의 수
    n_shared=2,   # Shared decision layer의 수
    lambda_sparse=1e-3,  # Sparsity regularization 파라미터
    optimizer_fn=tf.keras.optimizers.Adam,
    optimizer_params=dict(learning_rate=2e-2),
    scheduler_fn=tf.keras.optimizers.schedules.ExponentialDecay,
    scheduler_params=dict(decay_rate=0.9, decay_steps=100),
    mask_type='entmax'  # Attention mask 형태
)

# 모델 훈련
clf.fit(X_train, y_train, eval_set=[(X_valid, y_valid)], max_epochs=100)

# 모델 평가
y_pred = clf.predict(X_valid)
accuracy = accuracy_score(y_valid, y_pred)
print(f"Validation Accuracy: {accuracy}")

 

 

AutoEncoder

- 오토인코더(Autoencoder)는 비지도 학습(Unsupervised Learning) 기반의 인공 신경망 모델로, 데이터의 효율적인 표현(representation)을 학습하고, 이를 통해 데이터를 압축하거나 복원하는 데 사용되는 신경망 아키텍처입니다. 오토인코더의 주요 목표는 입력 데이터를 가능한 한 잘 재구성하는 동시에, 잠재 표현의 차원을 줄이는 것입니다. 이렇게 함으로써 모델은 데이터의 주요 특성과 구조를 학습하고, 불필요한 정보나 잡음을 제거하게 됩니다. 이러한 능력은 데이터의 특성 추출, 차원 축소, 노이즈 제거, 생성 모델링 등 다양한 응용 분야에서 유용하게 활용됩니다.

  • 인코더(Encoder): 입력 데이터를 저차원의 잠재 표현(latent representation)으로 매핑(mapping)하는 역할을 합니다. 인코더 네트워크는 입력 데이터를 저차원 특성 벡터로 압축합니다.
  • 디코더(Decoder): 인코더에서 얻은 잠재 표현을 사용하여 원본 입력 데이터를 재구성(reconstruction)합니다. 디코더 네트워크는 인코더의 출력을 사용하여 원본 데이터를 복원하는 역할을 합니다.

원리

  • 입력 데이터를 사용하여 인코더를 통해 잠재 표현을 얻습니다. 즉, 입력 데이터를 저차원의 표현으로 인코딩합니다.
  • 얻은 잠재 표현을 디코더를 통해 원본 데이터의 복원을 시도합니다. 즉, 인코딩 된 표현을 디코딩하여 원본 데이터의 재구성을 생성합니다.
  • 재구성된 데이터와 원본 데이터 간의 차이를 최소화하는 방향으로 모델을 학습합니다. 이를 위해 주로 평균 제곱 오차(Mean Squared Error) 또는 교차 엔트로피(Cross-Entropy)와 같은 비용 함수를 사용합니다.

 

[마무리]

 오늘은 딥러닝 모델인 tabnet과 딥러닝 학습을 시키기 위해서 EDA 과정에서 중요하게 사용되는 autoencoder에 대해서 수업을 들었습니다. 잘 알려져 있는 모델들인 만큼 앞으로 프로젝트에서 유용하게 사용할 수 있으면 좋겠습니다. 이제 내일부터 딥러닝 프로젝트인데 이전과 비슷하게 타임라인 순서로 일지를 작성하게 될 거 같습니다.

반응형

댓글