티스토리 뷰
이번 글에서는 시퀀스를 인풋으로 받아 시퀀스를 아웃풋으로 리턴하는 아키텍처인 Seq2Seq에 대해 알아보겠습니다.
Seq2Seq
영어 문장을 한국어로 번역하는 모델은 어떻게 만들 수 있을까요?
Seq2Seq모델에서는 Source 문장인 영어 문장을 인코딩하고 Target 문장인 한국어로 디코딩하게 됩니다.
쉽게 말해, 인풋으로 들어온 문장의 정보를 잘 모델링하여 hidden vector에 담아내고 이 의미에 기반해 토큰을 하나씩 꺼내면 됩니다.
Encoding 원본의 의미를 잘 담은 벡터를 생성 ▶▶▶ Decoding 부합하는 단어를 하나씩 추출
✅ 2개의 RNN을 인코더-디코더 구조로 사용하는 구조
아래와 같은 2개의 RNN을 사용해 활용합니다.
(💡 두 개의 RNN을 사용하는 이유는?
원본 문장을 인코딩할 때 사용되는 파라미터와 디코딩에 사용되는 파라미터가 다르기 때문입니다.)
(예시)
I'm / on / the / subway / now ▶ 난 / 이제 / 지하철 / 안 / 이야
Encoder RNN
- 원본 문장의 정보를 인코딩하는 인코더
- 원본 문장(인풋)의 문맥(의미)을 잘 담은 hidden state(vector)를 만들고
Decoder RNN의 초기 hidden state로 전달합니다.
Decoder RNN
- 원본의 의미에 맞는 토큰을 추출하는 디코더
- 인코딩 된 hidden state의 정보와 디코더 RNN의 인풋의 정보를 처리하여
해당 타임스텝의 토큰을 예측합니다.
(💡 예측 : RNN 유닛이 리턴한 hidden state를 통해 타겟 언어의 단어사전 크기에 해당하는 확률값 벡터를 만드는 것
이렇게 하면 확률값이 가장 큰 인덱스에 해당하는 토큰이 해당 타임스텝의 예측치가 됩니다.)
- [디코더 RNN의 기본 순서]
(1) 먼저 첫 번째 타임 스텝에서 인풋으로 문장의 시작을 알리는 스페셜 토큰(예. <sos>)을 입력받습니다.
(2) 인코더 RNN이 넘겨준 정보(hidden state)를 가공하여 첫 번째 토큰을 디코딩
(3) 두 번째 타임 스텝에서는 이전 타임 스텝에서 디코딩된 토큰을 인풋으로 받아
hidden state를 가공하여 두 번째 토큰을 디코딩
(4) (...(3) 순차적으로 계속 반복...)
(5) 번역을 완료하면 <eos> (end of sentence)에 해당하는 스페셜 코튼을 디코딩
▶ Input Feeding : 이전 타임 스텝에서 번역한 단어(아웃풋)를 현재 타임 스텝의 인풋으로 받아 토큰을 생성합니다.
[인풋] 이전 타임스텝에 디코딩된 단어
[아웃풋] 타겟 단어의 단어사전 개수 차원으로 매핑 됨
Seq2Seq 학습방법
- 두 개의 RNN을 사용한 Seq2Seq모델은 하나의 시스템으로서, 작동합니다.
- 인코더 임베딩부터 디코더 아웃풋레이어까지 End-to-End back-propagation을 수행하며
파라미터들이 업데이트됩니다.
- Loss : 디코더 RNN이 각각의 타임 스텝에서 예측한 확률 분포에 대해
'sparse_cross_entropy_loss'를 계산한 것을 모두 합하여 계산합니다.
(예시)
I'm / on / the / subway / now ▶ 난 / 이제 / 지하철 / 안 / 이야
Seq2Seq 모델이 잘 학습될 수 있도록 도와주는 '선생님 알고리즘'
Teacher Forcing
- (배경) : 잘못 디코딩된 토큰을 Input Feeding을 통해 다음 스텝에 넘겨주면, 모델은 이상한 답을 내 놓게 됩니다
그래서 모델을 학습시키는 동안에 모델이 학습을 좀 더 쉽게 할 수 있도록 도와주는 기능이 필요합니다.
(예시)
"나는 수국을 보러 가고 싶어" 영어로 번역할 때,
▶ '수국'이라는 단어가 뭔지 모를 때, 옆에 있던 선생님이 <hydrangea> 라는 힌트를 줍니다.
▶<I> <want> <to> <go> <see> <the> <hydrangea> 문장 완성
▶<수국> = <hydrangea> 라고 번역할 수 있다는 것을 학습
- 학습을 안정적으로 하기 위해 디코딩 타임스텝에서 실제 정답을 알려주는 "선생님"이 필요합니다.
- Input Feeding에 실제 정답(Ground Truth) 토큰을 인풋으로 주어 학습을 도와줍니다.
Seq2Seq 활용예시
(1) 대화 : 이전 발화 텍스트 → 현재 발화 텍스트
(2) 요약 : 긴 원본 텍스트 → 짧은 요약문
(3) 기계 번역 : 원본 언어 텍스트 → 번역 언어 텍스트
(4) 코드 생성 : 코드를 설명하는 자연어 문장 → 파이썬 구문
'Data Science&AI' 카테고리의 다른 글
[딥러닝] BERT와 GPT의 기본인 Transformer의 A to Z (1) | 2023.02.26 |
---|---|
[딥러닝] Attention에 대한 설명 (0) | 2023.02.18 |
[딥러닝] GRU(Gated Recurrent Unit)에 대한 이해 (0) | 2023.02.13 |
[딥러닝] LSTM(Long-Short Term Memory)에 대한 이해 (0) | 2023.02.13 |
[딥러닝] RNN(Recurrent Neural Network)에 대한 이해 (0) | 2023.02.13 |
- Total
- Today
- Yesterday
- On-premise BI vs Cloud BI
- 모델 배포
- AutoEncoder
- Model Drift Detection
- Data Drift Detection
- SQLD자격증
- Tableau vs QuickSight
- Data Drift와 Concept Drift 차이
- SQLD 정리
- 영화 인턴
- 추천시스템
- amazon Q
- SQLD
- Model Drift
- 오토인코더
- pandas-gpt
- data drift
- Generative BI
- 시계열딥러닝
- NHITS설명
- 영어공부
- 생성형BI
- 최신시계열
- 비즈니스 관점 AI
- 데이터 드리프트
- pandas-ai
- amzaon quicksight
- 모델 드리프트
- Concept Drift
- 모델 드리프트 대응법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |