본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

입력과 출력의 길이가 달라도 처리할 수 있는 모델 Seq2Seq , 정보 병목(Information Bottleneck) (feat. Attention)

Seq2Seq (Sequence to Sequence)
입력 시퀀스(Sequence)를 다른 출력 시퀀스로 변환하는 딥러닝 모델이다.
순서가 있는 데이터를 입력받아, 또 다른 순서가 있는 데이터를 출력하는 모델
주로 LSTM나 GRU기반으로 구성된다. 

https://standout.tistory.com/1842

 

RNN 순환신경망의 한 종류, LSTM이란?: 장기 의존성 문제를 해결하기 위해 개발된 딥러닝 모델

LSTM(Long Short-Term Memory)RNN(Recurrent Neural Network, 순환 신경망)의 한 종류장기 의존성(Long-Term Dependency) 문제를 해결하기 위해 개발된 딥러닝 모델from tensorflow.keras.models import Sequentialfrom tensorflow.keras.laye

standout.tistory.com

 



기존의 DNN이나 CNN은 입력과 출력의 길이가 고정되어 있지만 입력과 출력의 길이가 달라도 처리할 수 있는 모델이 바로 Seq2Seq. 
입력 → Encoder → Context Vector → Decoder → 출력
Encoder는 입력 문장을 읽어 하나의 벡터(Context Vector)로 압축한다.
Context Vector는 입력 문장의 의미를 압축한 벡터 , 벡터 하나에 문장의 의미를 저장한다.
Decoder는 Context Vector를 이용하여 문장을 생성한다.


학습 시 Teacher Forcing이라는 기법을 많이 사용한다.

https://standout.tistory.com/1843

 

학습 기법 Teacher Forcing이란?: 오류 전파(Error Propagation) , Exposure Bias , teacher_forcing_ratio , teacher_force

Teacher Forcing이란?Seq2Seq, RNN, LSTM, GRU와 같은 순차 생성(Sequence Generation) 모델을 학습할 때 사용하는 학습 기법모델이 이전 시점에서 예측한 단어를 다음 입력으로 사용하는 대신, 정답(Ground Truth) 단

standout.tistory.com

 

 

Context Vector 하나에 입력 문장의 모든 정보를 압축해야 한다는 점이 문제점으로 문장이 길어질수록 모든 의미를 담아야 하므로
앞부분 정보가 손실되고,  긴 문장에서 번역 품질이 떨어진다.정보 병목(Information Bottleneck).

 

 

이것을 해결하기 위해 Attention
Decoder가 단어를 생성할 때마다, 필요한 Hidden State를 선택해서 참고하는데 

즉, Context Vector 하나만 보는 것이 아니라 전체 Encoder 정보를 봐 긴 문장도 잘 번역한다.
발전과정: Seq2Seq → Attention → Transformer

import tensorflow as tf
from tensorflow.keras.layers import Input, LSTM, Attention, Dense
from tensorflow.keras.models import Model

# Encoder
encoder_inputs = Input(shape=(10, 128))
encoder_outputs, state_h, state_c = LSTM(
    64,
    return_sequences=True,
    return_state=True
)(encoder_inputs)

# Decoder
decoder_inputs = Input(shape=(8, 128))
decoder_outputs, _, _ = LSTM(
    64,
    return_sequences=True,
    return_state=True
)(decoder_inputs, initial_state=[state_h, state_c])

# Attention
attention = Attention()([decoder_outputs, encoder_outputs])

# 출력층
outputs = Dense(50, activation="softmax")(attention)

model = Model([encoder_inputs, decoder_inputs], outputs)

model.summary()

 

 


Seq2Seq: 입력 시퀀스를 하나의 Context Vector로 압축
Seq2Seq + Attention: 필요한 입력 정보를 매 시점마다 선택적으로 참조
Transformer: RNN/LSTM 없이 Attention만으로 시퀀스를 처리하여 병렬 연산과 긴 문맥 처리를 크게 개선