Seq2Seq 모델은 입력 시퀀스를 다른 형태의 출력 시퀀스로 변환하는 문제를 해결하기 위해 개발된 딥러닝 아키텍처입니다. 주로 기계 번역, 텍스트 요약, 음성 인식, 이미지 캡션 생성 등에서 사용됩니다. Seq2Seq는 RNN의 변형인 LSTM 또는 GRU와 같은 구조를 사용하며, 인코더와 디코더라는 두 개의 네트워크로 구성됩니다.
Seq2Seq 모델의 핵심 아이디어는 'context vector'입니다. 이는 인코더의 마지막 hidden state로, 입력 시퀀스의 전체 정보를 압축하여 담고 있습니다. 이 context vector는 디코더의 초기 상태로 사용되어, 입력 시퀀스의 정보를 출력 생성 과정에 전달하는 역할을 합니다.
Seq2Seq 모델 구조(LSTM with Peephole Connections 기반 수식 전개)
Seq2Seq 모델의 인코더와 디코더는 LSTM with peephole connections 셀로 구성됩니다. 이 구조는 표준 LSTM에 비해 더 정확한 타이밍 학습이 가능하며, 시계열 데이터나 시간에 민감한 패턴을 학습하는 데 유용합니다.
인코더(Encoder)
인코더는 입력 시퀀스 X=(x1,x2,…,xT)를 받아들여, LSTM 셀을 사용해 숨겨진 상태 ht와 셀 상태 ct를 업데이트합니다.
(1) Forget Gate
Forget Gate는 이전 타임스텝의 셀 상태에서 얼마나 잊을지를 결정합니다.
ft=σ(Wxfxt+Whfht−1+Wcfct−1+bf)
(ft:Forget 게이트의출력값)
(xt:현재입력)
(ht−1:이전타임스텝의숨겨진상태)
(ct−1:이전타임스텝의셀상태)
(Wxf,Whf,Wcf:각각입력, 숨겨진상태, 셀상태에대한가중치행렬)
(bf:Forget 게이트의편향)
(σ:시그모이드함수)
(2) Input Gate & Candidate Cell State
Input Gate는 얼마나 새로운 정보를 받아들일지 결정하며, 새로운 셀 상태의 후보를 계산합니다.
it=σ(Wxixt+Whiht−1+Wcict−1+bi)
c~t=tanh(Wxcxt+Whcht−1+bc)
(it:Input 게이트의출력값)
(c~t:새로운셀상태의후보값)
(tanh:하이퍼볼릭탄젠트함수)
(Wxi,Whi,Wci,Wxc,Whc:가중치행렬들)
(bi,bc:편향)
(3) 셀 상태 업데이트
Forget Gate와 Input Gate의 값을 사용하여 새로운 셀 상태 ct를 업데이트합니다.
ct=ft⊙ct−1+it⊙c~t
(ct:현재타임스텝의셀상태)
(⊙:요소별곱셈 (Hadamard product))
(4) Output Gate & 숨겨진 상태
Output Gate는 현재 타임스텝의 숨겨진 상태 ht를 계산합니다.
ot=σ(Wxoxt+Whoht−1+Wcoct+bo)
ht=ot⊙tanh(ct)
(ot:Output 게이트의출력값)
(ht:현재타임스텝의숨겨진상태)
디코더(Decoder)
디코더는 인코더로부터 전달받은 hT와 cT를 초기 상태로 받아 출력 시퀀스를 생성합니다. 디코더는 인코더와 동일한 LSTM 셀을 사용하며, 입력 시퀀스로는 이전 출력값 yt−1 또는 시작 토큰을 사용하여 새로운 출력 yt를 생성합니다.
디코더의 LSTM 셀 수식은 인코더와 유사하지만, 입력으로 이전 출력 yt−1을 사용합니다.
Seq2Seq의 특징
인코더-디코더 구조
Seq2Seq 모델의 핵심은 인코더-디코더 구조입니다. 이 구조는 다음과 같은 특징을 가집니다.
인코더
입력 시퀀스 X=(x1,x2,...,xT)를 고정 길이 벡터 c로 압축합니다.
ht=f(xt,ht−1)
c=q(h1,...,hT)
여기서 ht는 시간 t에서의 hidden state, f와 q는 비선형 함수입니다.
디코더
압축된 벡터 c를 기반으로 출력 시퀀스 Y=(y1,y2,...,yT′)를 생성합니다.
p(yt∣y1,...,yt−1,c)=g(yt−1,st,c)
여기서 st는 디코더의 hidden state, g는 비선형 함수입니다.
컨텍스트 벡터 (Context Vector)
컨텍스트 벡터 c는 Seq2Seq 모델에서 인코더와 디코더를 연결하는 핵심 요소입니다. 이 벡터는 입력 시퀀스의 전체 정보를 압축하여 담고 있습니다. 컨텍스트 벡터는 두 가지 방식으로 생성될 수 있습니다.
(1) 인코더의 마지막 hidden state를 사용: 이 경우, 컨텍스트 벡터는 입력 시퀀스의 마지막 정보에 더 큰 가중치를 둡니다.
(2) 모든 hidden state의 함수로 표현: 이 방식은 입력 시퀀스의 모든 부분에 대한 정보를 균형 있게 반영할 수 있습니다.
컨텍스트 벡터는 디코더가 출력 시퀀스를 생성할 때 참조하는 "요약본" 역할을 합니다.
Seq2Seq 모델에서의 가변 길이 입출력 처리
Seq2Seq 모델의 큰 장점 중 하나는 입력과 출력의 길이가 서로 다른 경우에도 잘 작동한다는 것입니다. 예를 들어, 짧은 문장을 긴 문장으로 번역하거나, 긴 문서를 짧게 요약할 수 있습니다.