์ฌ์ฉ ์ด์
- ์ ๋ ฅ์ด RNN์ฒ๋ผ ์์๋๋ก ๋ค์ด์ค๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ์ด ๋ฌธ์ฅ ๋ด ๋จ์ด์ ์์น๋ฅผ ํ์ ํ ์ ์๋๋ก ํ๊ธฐ ์ํด Positional Encoding ์ฌ์ฉ
- ์์ฑ๋ ๊ณ ์ ํ Positional Encoding์ ๋จ์ด ์๋ฒ ๋ฉ ๋ฒกํฐ์ ๋ํ ๊ฒฝ์ฐ ๋ชจ๋ธ์ด ๋จ์ด์ ์ ๋ ์์น ํ์ ๊ฐ๋ฅ
๋์ ๋ฐฉ์
- N๋ฒ์งธ Positional Encoding์ด ๊ฐ ๋ฌธ์ฅ์ N๋ฒ์งธ ๋จ์ด ์๋ฒ ๋ฉ์ ๋ํด์ง๋ค.
- ๋ ผ๋ฌธ ์ ์๋ค์ sin ํจ์, cos ํจ์๋ฅผ ์ฌ์ฉ → pos: ๋ฌธ์ฅ ๋ด ์๋ฒ ๋ฉ ๋ฒกํฐ์ ์์น, i: ์๋ฒ ๋ฉ ๋ฒกํฐ ๋ด ์์น
- Positional Encoding์ ๋จ์ด ์๋ฒ ๋ฉ ๋ฒกํฐ์ ๋ํด์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ $d_{positional encoding}$=$d_{embedding vector}$
๐ง sin ํจ์, cos ํจ์๋ฅผ ์ฐ๋ ์ด์ ๋?
์์ฃผ ๊ด์ฐฎ์ ๊ธ์ ํ๋ ๋ฐ๊ฒฌํด์ ๋ฐ๋ก ์ ๋ฆฌ ํ ๋งํฌ ์ถ๊ฐ ์์
๐ง sin ํจ์, cos ํจ์๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ์ด์ ๋?
sin ํจ์๋ฅผ ํํ์ด๋์ํค๋ฉด cos ํจ์๊ฐ ๋์ค๊ณ ๋จ์ด ์์น ๊ฐ ์๋์ ์ธ ๊ด๊ณ๊ฐ ๋ด๋ถ์ ์ผ๋ก๋ ํ๋ ฌ์ ํ์ ๋ณํ์ ์ํด ์ํธ ๋ณํ๋ ์ ์๋๋ฐ, ํ๋ ฌ์ ํ์ ๋ณํ์ sin ํจ์์ cos ํจ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๐ง Word embedding, Positional encoding์ ๊ณฑํ์ง ์๊ณ ๋ํ๋ ์ด์ ๋?
Positional encoding ๋ฒกํฐ์์ 0์ธ ๋ถ๋ถ์ด ์๋ค๋ฉด ๊ณฑ์ ์ ํ ๊ฒฝ์ฐ word embedding์ ์ ๋ณด๊ฐ ์ฌ๋ผ์ง ์ ์๋ค. ๋ง์ ์ ํ๋ฉด word embedding์ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉด์ ์์น ์ ๋ณด๊น์ง ์ถ๊ฐํ ์ ์๋ค.
์ฝ๋ ๊ตฌํ
class PositionalEncoding(nn.Module):
def __init__(self, d_model: int, dropout: float = 0.1, max_len: int = 5000):
super().__init__()
self.dropout = nn.Dropout(p=dropout)
position = torch.arange(max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model))
pe = torch.zeros(max_len, 1, d_model)
pe[:, 0, 0::2] = torch.sin(position * div_term)
pe[:, 0, 1::2] = torch.cos(position * div_term)
self.register_buffer('pe', pe)
def forward(self, x: Tensor) -> Tensor:
"""
Args:
x: Tensor, shape [seq_len, batch_size, embedding_dim]
"""
x = x + self.pe[:x.size(0)]
return self.dropout(x)
โญ ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ผ๋ก๋ ํ์ดํ ์น ํํ ๋ฆฌ์ผ๋ณด๋ค https://github.com/hyunwoongko/transformer์ ์ฌ๋ผ์ ์๋ ์ฝ๋๊ฐ ๋ ์ง๊ด์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ๊ฒ ๊ฐ๋ค. ํ์ดํ ์น ํํ ๋ฆฌ์ผ ์ฝ๋์ ๋น๊ตํด๋ณด๋ฉด์ ๋ถ์ํด๋ด์ผ์ง
์ฐธ๊ณ ์๋ฃ
ํธ์ฆ์จ ๋จธ์ ๋ฌ๋
https://yngie-c.github.io/nlp/2020/07/01/nlp_transformer/
https://www.youtube.com/watch?v=1biZfFLPRSY&ab_channel=AICoffeeBreakwithLetitia
http://www.aitimes.kr/news/articleView.html?idxno=17442
https://tutorials.pytorch.kr/beginner/transformer_tutorial.html
'Artificial Intelligence > NLP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NLP ์ฌํ] encode() / encode_plus() (0) | 2022.09.28 |
---|---|
[NLP ๊ธฐ์ด] Vocab (0) | 2022.09.02 |
[NLP ๊ธฐ์ด] ๋์ ์ถํ ํ๋ ฌ(Co-occurrence Matrix) (0) | 2022.06.30 |
[NLP ๊ธฐ์ด] ํ ํฐํ(Tokenization, ํ ํฌ๋์ด์ง) (0) | 2022.06.28 |
[NLP ๊ธฐ์ด] BoW(Bag of Words) (0) | 2022.06.27 |