[IBM AI course #2] Introduction to Deep Learning & Neural Networks with Keras
Transformers
Transformer는 자연어 처리(NLP) 및 다양한 분야에서 혁신을 이끈 신경망 아키텍처
기존의 RNN, CNN과 달리 긴 시퀀스 내의 장거리 의존성(long-range dependency)을 효과적으로 처리
기계 번역, 텍스트 요약, 질의응답 시스템, text-to-image 생성에 주로 활용됨
Transformer types
GPT (Generative Pre-trained Transformer) → ChatGPT, Gemini
BERT (Bidirectional Encoder Representations from Transformers) → Google 검색, 번역
Image Transformers → Adobe Photoshop 등
Self-Attention
각 단어가 다른 단어들과 문맥상 어떻게 관련되어 있는지를 파악하는 매커니즘
Query (Q): 현재 단어가 다른 단어에 집중하려는 기준
Key (K): 다른 단어들이 자신에게 얼마나 주목할지 판단되는 기준
Value (V): attention이 일어났을 때 넘겨줄 실제 정보
과정
각 단어는 벡터화된 임베딩으로 표현됨
→ 위치 정보를 위한 포지셔널 인코딩(position encoding) 추가
→ 각 단어에서 Q, K, V 벡터 생성
→ Q와 K의 내적(dot product)을 통해 Attention Score 계산
→ Softmax를 통해 확률화(정규화)
→ V와 Attention Score의 가중합으로 문맥 벡터(Context Vector) 생성
# Define the Self-Attention Layer
class SelfAttention(Layer):
def __init__(self, **kwargs):
super(SelfAttention, self).__init__(**kwargs)
def build(self, input_shape):
feature_dim = input_shape[-1] # 입력 벡터의 feature 차원
# Q, K, V에 대한 가중치 행렬 정의 (모두 [feature_dim, feature_dim] 크기)
self.Wq = self.add_weight(shape=(feature_dim, feature_dim),
initializer='glorot_uniform',
trainable=True,
name='Wq')
self.Wk = self.add_weight(shape=(feature_dim, feature_dim),
initializer='glorot_uniform',
trainable=True,
name='Wk')
self.Wv = self.add_weight(shape=(feature_dim, feature_dim),
initializer='glorot_uniform',
trainable=True,
name='Wv')
super(SelfAttention, self).build(input_shape)
def call(self, inputs):
# Q, K, V 선형 변환 (입력: [batch, seq_len, feature_dim])
q = K.dot(inputs, self.Wq) # Query 벡터 생성
k = K.dot(inputs, self.Wk) # Key 벡터 생성
v = K.dot(inputs, self.Wv) # Value 벡터 생성
# Attention Score 계산: Q와 K의 내적 → [batch, seq_len, seq_len]
scores = K.batch_dot(q, k, axes=[2, 2])
# Scaled Dot Product: 차원 수의 제곱근으로 나누어 수치 안정성 확보
scores = scores / K.sqrt(K.cast(K.shape(k)[-1], dtype=K.floatx()))
# Softmax로 Attention Score를 확률화 → Attention Weights
attention_weights = K.softmax(scores, axis=-1)
# Attention Weights로 V의 가중합 → 최종 출력 (Contextualized Representation)
output = K.batch_dot(attention_weights, v) # [batch, seq_len, feature_dim]
return output
def compute_output_shape(self, input_shape):
# 입력과 동일한 형태의 출력 반환
return input_shape
# ================================
# ENCODER
# 입력 시퀀스를 위한 입력층 정의 (정수 인덱스 형태)
encoder_inputs = Input(shape=(max_input_length,))
# 입력 시퀀스를 임베딩 (단어를 256차원 벡터로 변환)
encoder_embedding = Embedding(input_vocab_size, 256)(encoder_inputs)
# LSTM 인코더 정의: 시퀀스 전체 반환 + 마지막 상태도 반환
encoder_lstm = LSTM(256, return_sequences=True, return_state=True)
encoder_outputs, state_h, state_c = encoder_lstm(encoder_embedding)
# 디코더의 초기 상태로 사용할 인코더의 마지막 hidden/cell 상태 저장
encoder_states = [state_h, state_c]
# ================================
# SELF-ATTENTION ON ENCODER
# 인코더 LSTM 출력에 Self-Attention 적용 (문맥 정보 강화)
attention_layer = SelfAttention()(encoder_outputs)
# ================================
# DECODER
# 디코더 입력 (shifted target sequence, e.g., <start> A B C)
decoder_inputs = Input(shape=(max_output_length - 1,))
# 디코더 입력을 임베딩 (같은 차원 256)
decoder_embedding = Embedding(output_vocab_size, 256)(decoder_inputs)
# 디코더 LSTM 정의: 인코더의 마지막 상태를 초기 상태로 사용
decoder_lstm = LSTM(256, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_embedding, initial_state=encoder_states)
# ================================
# SELF-ATTENTION ON DECODER
# 디코더 출력에 Self-Attention 적용 → 디코더 자체 문맥 강화
decoder_attention = SelfAttention()(decoder_outputs)
# ================================
# DENSE 출력층
# 각 디코더 시점에서 출력 단어 분포 예측 (소프트맥스 확률)
decoder_dense = Dense(output_vocab_size, activation='softmax')
decoder_outputs = decoder_dense(decoder_attention)
# ================================
# FULL MODEL
# 전체 모델 정의: [인코더 입력, 디코더 입력] → 디코더 출력
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
Cross-Attention
Transformer는 text-to-image에서 널리 사용된다.
Self-Attention을 통해 각 단어가 문맥 속에서 어떤 의미를 갖는지 학습함 (문맥화된 임베딩 생성)
→ Transformer Encoder를 통해 텍스트의 Query 생성
→ 이미지 생성 모델(DALL·E 등)은 Q를 기반으로 Cross-Attention를 사용. 이미지 디코더의 각 토큰은, Q를 기준으로 텍스트 내용에 Attention을 두며 다음 이미지 패치를 생성
→ 이미지 생성 모델은 auto-regressive model의 변형을 사용하여 이미지를 생성. (이전에 생성된 이미지 조각을 참고하여 다음 조각을 예측하면서 점차 전체 이미지를 구성함)
특징
DALL·E 같은 모델은 저장된 이미지 중 고르는 게 아니라, 텍스트의 의미를 이해해 새 이미지를 합성함.
따라서, 현실에 존재하지 않는 개념도 생성 가능함
같은 프롬프트로 다양한 이미지 버전 생성 가능함
Transformer vs RNN
항목 | Transformer | RNN |
데이터 처리 방식 | 병렬 처리 가능 | 순차적으로 처리 |
학습 속도 | 빠름 (병렬화 덕분) | 느림 (순차적 처리 때문) |
작업 예시 | 기계 번역, 텍스트 생성, NLP 작업 전반 | 짧은 의존성 작업에 적합 |
장기 의존성 처리 | 잘 처리함 (복잡한 관계 학습 가능) | 어려움 (기울기 소실 문제 발생 가능) |
현재의 선호도 | 선호됨 (더 효과적임) | 덜 사용됨 (제한적 용도) |
Transformer 단점
- 막대한 양의 학습 데이터가 필요하다. (관계를 전적으로 데이터 기반 학습에 의존하기 때문)
- 훈련 데이터의 편향을 그대로 학습하게 된다. (문맥에서 배운다는 특성 때문에 데이터의 bias를 계승)
Autoencoders
Autoencoder는 입력 데이터를 압축(encoding)하고 복원(decoding)하는 비지도 학습 기반의 신경망
입력값을 출력값으로 재구성하는 방식으로 학습되며, 정답(label)이 필요 없음.
학습한 데이터 분포에 특화된 표현을 학습하므로, 유사한 데이터에 대해서만 잘 작동하는 data-specific한 특성이 있음.
예를 들어, 자동차 이미지로 학습한 autoencoder는 건물 이미지에는 부적합
데이터 노이즈 제거 (Denoising), 차원 축소 (Dimensionality Reduction), 시각화에 주로 사용됨
신경망에서 사용되는 비선형 activation 함수 덕분에, PCA나 다른 선형 기법들이 할 수 없는 방식으로 데이터를 변환할 수 있음.
- Encoder: 입력을 낮은 차원 표현으로 압축
- Decoder: 압축된 표현을 다시 원래 형태로 복원
마치 항등 함수(identity function, f(x) ≈ x)처럼 입력을 그대로 출력하려고 함
(실제로는 제약된 표현 공간(latent space) 내에서 가능한 한 입력과 유사한 출력을 복원하도록 학습)
Restricted Boltzmann Machines (RBMs)
RBM은 오토인코더의 일종으로, 입력 데이터를 재생성하는 방식으로 학습하는 신경망 구조
- 불균형 데이터셋 처리
소수 클래스의 분포를 학습하여 새로운 샘플을 생성할 수 있음 → 불균형 데이터셋을 균형 있게 변환 - 결측값 보간 (Missing Value Estimation)
누락된 feature 값을 예측하는 데 사용 - 비정형 데이터의 특징 자동 추출 (feature extraction)
특히 텍스트, 이미지 등 비정형 데이터에서 효과적
'🥇 certification logbook' 카테고리의 다른 글
[Coursera/IBM] Deep Learning & Neural Networks with Keras 코스 소개 (2) | 2025.05.18 |
---|---|
[Coursera/IBM course #2] Using Pretrained Models & Fine-Tuning (0) | 2025.05.18 |
[Coursera/IBM course #2] CNN & RNN (1) | 2025.05.17 |
[Coursera/IBM course #2] Deep Learning Libraries & Keras Models (1) | 2025.05.17 |
[Coursera/IBM course #2] Backpropagation & Vanishing Gradient & Activation Functions (0) | 2025.05.11 |
[Coursera/IBM course #2] Gradient Descent (0) | 2025.05.11 |
[Coursera/IBM course #2] Neurons and Neural Networks & Artificial Neural Networks (0) | 2025.05.10 |
[Coursera/IBM] Introduction to Deep Learning & Neural Networks with Keras 코스 소개 (1) | 2025.05.10 |