본문 바로가기

ML

구글 ML 스터디 잼 6] Encoder-Decoder Architecture

Encoder-Decoder

: Large Language Model의 핵심이고 sequence-to-sequence 구조이다.

input은 large language model에게 보내 프롬프트를 형성하 단어들의 sequence이다.

ouput은 이 프롬프트에 대한 large  language model의 반응이다.

 

encoder과 decoder 구조는 recurrent neural network나 더 복잡한 transformer blcok(attention mechanism을 기반)으로 구성될 수 있다.

- encoder stage

: input 문장에 대한 벡터 표현을 만들어내고 decoder stage를 따라한다.

recurrent neural network encoder는 한번에 input sequence에 있는 각각의 토큰을 취하고 이 토큰이 나타내는 상태를 생산한다. 그리고 이 상태는 다음 encoding 단계에서 다음 토큰과 같이 input으로 사용된다. 이 상태를 반복하고 RNN에서 모든 input 토큰을 소화했을 경우, input sentence가 핵심적으로 나타내는 vector를 output으로 도출해낸다.

- decoder stage

: sequence output을 만들어낸다.

decoder은 위 단계에서 나온 벡터를 취하고 이것을 통해서 output 문장을 만들어낸다.  RNN decoder의 경우에 현재 상태와 지금까지 무엇이 decode되었는지를 이용해서 하나의 output 토큰을 decoding한다.

 

모델을 훈련시키는 법

먼저 훈련시키기 위해서는 input/output pair의 데이터 집합이 필요하다. 모델에 데이터 집합을 넣으면, 모델은 해당 데이터 집합에서 발생하는 오류(input과 output문장의 다른)를 기반으로 훈련하는 동안 자체 가중치를 수정합니다.

? 훈련시키기 위한 데이터 집합은

번역의 경우에 데이터 집합은 source language(원어)와 번역의 문장으로 이루어져야 한다. encoder은 실제 번역과 output의 차이점을 계산하고 decoder은 올바르게 번역된 전 토큰을 input으로 주면 다음 토큰을 생성하는 훈련과정을 거친다. 이 훈련과정을 teacher forcing 이라고 한다. 따라서 encoder에 줄 오리지널 문장과 decoder에게 줄 왼쪽으로 이동할(?) 오리지널 문장, 즉 두가지 문장이 필요하다.

디코더가 각 단계에서 당신의 어휘에 있는 각 토큰이 다음 토큰일 확률을 생성하고 이것을 통해 다음 단어를 선택한다. 이 단어 선택 방법에는 Grid search(:가장 높은 확률의 단어를 선택), Beam Search(: 각각의 단어보다 문장 덩어리의 확률을 계산하고 가장 잘 어울리는 문장 덩어리를 보관)이 있다.

 

제공하는 방법

프롬프트에 대해 새로운 반응이나 반역을 만들어내고 싶다면, 디코더 프롬프트의 인코더 표현을 주면 된다. 처음 토큰은 내장된 레이어를 사용해서 벡터에 의해 표현되어야 한다. 그리고 recurrent 레이어는 이전의 상태를 업데이트한다. 이 상태는 위에서 언급한 각 단어에 대한 확률을 생성하기 위해 정밀한 softmax 레이어를 지나가고 각각의 단어 선택 기준에 따라 단어를 선택하면 된다. 위 과정을 반복하면 문장이 완성된다.

 

+) 머신러닝을 공부해도 흥미가 생기지 않는다. 이론상으로는 흥미로운데 막상 구현하는 건 너무 어려움. 다른 분야 공부해야지!


▼출처

https://www.cloudskillsboost.google/course_templates/543?catalog_rank=%7B%22rank%22%3A1%2C%22num_filters%22%3A0%2C%22has_search%22%3Atrue%7D&search_id=25863292

asl-ml-immersion/notebooks/text_models/solutions/text_generation.ipynb at master · GoogleCloudPlatform/asl-ml-immersion (github.com)