1. 오디오 데이터의 특징

음파(sound wave)는 매질을 통해 전파되는 진동으로 연속적인 신호입니다. 음파 자체는 아날로그 신호입니다. 따라서 이를 컴퓨터에서 사용할 수 있도록 이산적인 디지털 신호로 변환해야 합니다.

 

디지털 음향 파일의 포맷으로 .wav(Waveform Audio File), .flac(Free Lossless Audio Codec), .mp3(MPEG-1 Audio Layer 3)등이 있습니다. 이 포맷들은 오디오 신호의 디지털 표현을 압축하는 방식에서 차이가 있습니다.

 

우리가 말을 하거나 악기를 연주하면 공기 중에 진동이 발생합니다. 이러한 아날로그 신호는 마이크에 의해 포작되어 음파에서 전기 신호로 변환됩니다. 이 전기 신호는 아날로그-디지털 컨버터(Analog-to-Digital Converter)를 거치며 샘플링을 통해 디지털 표현으로 디지털화됩니다.

 

2. 샘플링과 샘플링 속도(Sampling Rate, Sampling Frequency)

샘플링은 연속적인 신호를 고정된 시간 간격으로 측정하는 과정을 의미합니다.

샘플링 속도는 1초동안 수집된 샘플의 수로 헤르츠(Hz)단위로 측정됩니다. 예를 들어 44,100Hz의 샘플링 속도를 갖는다면 초당 44,100번의 샘플이 수집된다는 뜻입니다. Hz가 높을 수록 고해상도 오디오입니다. 음성 모델 학습에 주로 쓰이는 샘플링 속도는 16,000Hz(16 kHz)입니다.

 

음성 모델 학습 시, 데이터셋에 있는 모든 오디오가 동일한 샘플링 속도를 가지고 있는지 확인해야 합니다. 만약 모델을 finetuning할 것이라면 사전학습 시 사용한 데이터의 샘플링 속도와 현재 사용하려는 데이터의 샘플링 속도가 일치해야 합니다. 예를 들어 16,000Hz의 샘플링 속도를 가진 5초 길이의 소리는 80,000개의 값으로 표현되지만, 동일한 길이의 소리여도 8,000Hz 소리라면 40,000개의 값으로 표현됩니다. 서로 다른 샘플링 속도를 일치시켜주기 위해 리샘플링(오디오 데이터 전처리 과정 중 하나)을 거쳐야 합니다.

 

3. 진폭(amplitude)과 비트뎁스(bit depth)

https://support.apple.com/ko-kr/guide/mainstage/lgsife418f71/mac

 

진폭은 소리의 세기(특정 순간의 소리의 압력 수준)를 의미하며 데시벨(dB)로 측정됩니다. 일반적인 말소리는 60dB미만입니다.

오디오 샘플은 특정 시점의 오디오 파동의 진폭을 기록합니다.

샘플의 비트뎁스는 각 샘플의 진폭을 표현하는 데 사용되는 비트 수를 의미합니다. 이진 용어(binary term)로, 진폭값을 연속값에서 이산값으로 변환할 때 양자화할 수 있는 수를 나타냅니다. 양자화는 아날로그 신호 값을 가장 자까운 디지털 값으로 근사화하는 과정입니다. 실제 아날로그 값과 디지털 값 사이에는 미세한 차이가 발생하는 데 이를 양자화 오류라고 합니다. 양자화 오류는 원래 신호에는 없던 무작위적인 신호를 만들어냅니다. 이렇게 원치 않는 신호 성분을 양자화 노이즈라고 합니다.

비트뎁스가 높을수록 더 많은 비트를 사용해 진폭을 표현하므로 디지털 표현이 원래의 연속 음파에 더 가까워지고 양자화 노이즈가 작아집니다. 반대로, 낮은 비트뎁스는 적은 비트를 사용하여 진폭을 표현하므로 세밀한 소리 표현이 어렵고, 음질 저하가 발생할 수 있습니다. 일반적인 오디오 비트뎁스는 16bit와 24bit입니다.

 

4. 오디오 표현 방법

4-1. 파형

파형은 시간에 따라 변화하는 신호의 모양을 시각적으로 나타낸 것입니다. 음파의 경우, 시간에 따른 진폭의 변화를 그래프로 표현한 것을 말합니다. 소리를 시각화하면 특정 사운드 이벤트가 언제 발생했는지, 전체적인 음량은 어떤지, 오디오에 어떤 노이즈나 불규칙성이 있는지 오디오 신호의 특징을 식별하는데 유용합니다.

 

4-2. 주파수 스텍프럼

오디오 데이터를 시각화하는 또 다른 방법으로 오디오 신호의 주파수 스펙트럼이 있습니다. 빛을 파장별로 분해하듯이 시간신호를 주파수 별로 분해하여 보여주는 것입니다. 쉽게 말해, 어떤 소리가 어떤 주파수들을 얼마만큼의 세기로 포함하고 있는지를 한눈에 보여주는 그래프입니다.

https://support.apple.com/ko-kr/guide/logicpro/lgsife41973e/mac

 

오디오 신호의 파형과 주파수 스펙트럼은 동일한 정보를 지닙니다. 단지 같은 데이터를 바라보는 두 가지 방법일 뿐입니다. 파형은 시간에 따른 오디오 신호의 진폭을 표시하며, 주파수 스펙트럼은 고정된 시점의 개별 주파수들의 진폭을 시각화합니다.

 

4-3. 스펙트로그램(spectrogram)

스펙트로그램은 소리의 주파수가 시간에 따라 어떻게 변화하는지 보여주는 시각적 표현입니다. 시간, 주파수, 주파수의 세기를 한 눈에 보여주는 2차원 그래프입니다.

X축은 시간을 의미하며 소리 신호의 시간적 흐름을 나타냅니다. -> 방향으로 시간이 흐릅니다.

Y축은 주파수로 위쪽일수록 높은 주파수를 의미합니다.

각 시간과 주파수 시점에서의 색상은 해당 주파수 성분의 세기를 나타냅니다. 밝은 색은 강한 세기를, 어두운 색은 약한 세기를 나타냅니다.

4-4. 멜 스펙트로그램(mel spectrogram)

멜 스펙트로그램은 스펙트로그램의 한 종류로 사람의 청각 시스템을 고려하여 주파수를 멜 스케일(mel scale)로 변환한 후 스펙트로그램을 생성하는 방법입니다. 쉽게 말해, 기존 스펙트로그램과 다른 주파수 축을 사용합니다. 음성 작업이나 머신러닝 작업에 주로 쓰입니다.

4-4-1. 멜 스케일

사람의 청각은 모든 주파수에 동일하게 민감하지 않습니다. 높은 주파수 대역에서는 상대적으로 덜 민감합니다. 이 민감성은 주파수가 증가함에 따라 로그함수적으로 감소합니다. 멜 스케일은 사람의 청각 특성을 반영하여 만든 주파수 스케일입니다. 사람이 실제로 느끼는 주파수 차이를 기반으로 주파수를 나타냅니다.

4-4-2. 멜 스펙트로그램 생성 과정

먼저 원본 오디오 신호에서 특정 시간 프레임 단위로 주파수 스펙트럼을 계산합니다.

계산된 주파수 스펙트럼을 멜 스케일을 기반으로 만든 Mel filterbank라고 불리는 필터를 적용시켜 주파수를 멜 스케일로 변환합니다.

각 filterbank 출력 값에 로그 변환을 적용하여 사람의 청각이 소리의 세기를 로그적으로 인지하는 특성을 반영합니다.

위 과정을 거친 결과를 시간, 멜 주파수, 세기를 나타내는 2차원 그래프 형태로 표현합니다.

 

멜 스펙트로그램은 인간의 청각 특성을 반영하기 때문에 음성 인식, 화자 식별, 음악 정보 검색 같은 작업에 널리 사용됩니다

 

References

https://huggingface.co/learn/audio-course/ko/chapter1/audio_data

728x90

선형 변환을 했을 때, 방향은 변하지 않고 크기만 변하는 벡터를 고유벡터(eigenvector), 크기가 변한 배율을 고유값(eigenvalue)이라고 합니다.

 

1. 선형 변환

선형 변환은 벡터 공간에서 다른 벡터 공간으로 변환하는 함수입니다.

 

2. 고유벡터와 고유값 개념

앞서 말했듯이, 벡터에 행렬을 곱해 다른 벡터 공간으로 변환할 때, 어떤 벡터들은 크기만 다를 뿐 방향이 다른 벡터들이 존재합니다. 이 벡터를 고유벡터라고 하고 달라진 크기 비율고유값이라고 합니다.

위키벡과에 따르면 두 단어에 대해 다음과 같이 정의되어 있습니다.

선형 변환의 고유벡터(eigenvector)는 그 선형 변환이 일어난 후에도 방향이 변하지 않는, 0이 아닌 벡터이다. 고유 벡터의 길이가 변하는 배수를 선형 변환의 그 고유 벡터에 대응하는 고윳값(eigenvalue)이라고 한다. 선형 변환은 대개 고유 벡터와 그 고윳값만으로 완전히 설명할 수 있다.

 

아래 영상 1분 20초 ~ 3분 39초까지 고유값과 고유벡터의 정의에 대해 시각적으로 볼 수 있습니다.

 

 

두 그림은 모나리자 그림을 오른쪽으로 기울어진 모양으로 변하는 선형 변환을 보여줍니다. 빨간 벡터는 방향이 달라졌습니다. 하지만 파란 벡터는 선형 변환 뒤에도 방향은 똑같습니다. 따라서 파란 벡터는 고유벡터이고 파란 벡터의 크기가 변하지 않으므로 고유값은 1입니다. 만약 파란 벡터의 크기가 1에서 2로 증가했다면 고유값은 2가 됩니다.

https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%9C%B3%EA%B0%92%EA%B3%BC_%EA%B3%A0%EC%9C%A0_%EB%B2%A1%ED%84%B0

 

3. 고유벡터와 고유값 구하기

고유벡터와 고유값의 정의에 따라 행렬 A(n x n), 벡터 v, 스칼라 λ가 있을 때, 행렬 A에 고유벡터 v를 곱한 것(선형 변환)이 고유벡터 v에 스칼라 λ배만큼 한 것과 같아야 합니다. 고유값과 고유벡터는 모두 정방행렬(n x n)에 대해서만 정의됩니다. 

식으로 정리하면 아래와 같습니다. 이때 I는 항등 행렬입니다.

 

식을 좀 더 풀어서 이해해봅시다.

 

(A-λI)x = 0 에서 λ와 x를 구하면 됩니다. 만약 (A-λI)이 존재한다고 가정하고 양변에 곱해봅시다.

 

따라서 고유값과 고유벡터를 구하기 위해서는 |A-λI|=0으로 만드는 λ(고유값)를 먼저 찾고 (A-λI)x = 0에 대입해 x(고유벡터)를 구하면 됩니다.

따라서 행렬 A에 대해서는 2개의 고유값이 존재합니다. 고유값이 1일 때의 고유벡터는 [1, -1] 이고, 고유값이 3일 때의 고유벡터는 [1, 1] 입니다.

728x90

원본 Transformer는 Encoder-Decoder 구조를 기반으로 합니다. Encoder와 Decoder 블록이 독립적인 모델이 되면서 Transformer 모델의 유형을 Encoder 유형, Decoder 유형, Encoder-Decoder 유형으로 나눌 수 있습니다.

1. Encoder 유형

input sequence를 압축하여 고정된 길이의 벡터로 변환합니다. 이 모델은 주로 크기가 고정된 입출력 문제에 사용됩니다.

1-1. BERT(Bidirectional Encoder Representations from Transformers)

2018년 구글이 개발한 언어 모델로, masking된 토큰을 예측하는 것(Maksed Language Modeling, MLM)과 한 텍스트 구절이 다른 텍스트 구절 뒤에 나올 확률을 계산(Next Sentence Prediction)하는 task로 훈련된 모델입니다. 상대적으로 무거운 모델입니다.

1-2. DistilBERT(Distilled version of BERT)

BERT를 경량화하고 속도를 향상시킨 모델입니다. Pre-training 단계에서 Knowledge Distillation이라는 기술을 사용해서 BERT보다 40% 더 적은 메모리를 사용하고 60% 더 빠르면서 BERT 성능의 97%를 달성합니다.

1-3. RoBERTa(Robustly Optimized BERT approach)

더 많은 훈련 데이터로 더 큰 배치에서 더 오래 훈련하며 NSP task는 하지 않았습니다. BERT에 비해 성능이 향상되었습니다.

1-4. XLM (Cross-lingual Language Model)

다국어 학습을 위해 개발된 모델입니다. XLM의 논문에서는 MLM을 다중 언어 입력으로 확장한 Translation Language Modeling(TLM)을 소개했습니다. 이런 Pre-training 단계를 실험한 저자들을 번역 작업을 포함해 여러 가지 다중 언어 NLU 벤치마크에서 최상의 결과를 얻었습니다. XLM 모델은 다국어 번역, 다국어 분류 등 다양한 다국어 작업에 활용될 수 있습니다.

 

2. Decoder 유형

Decoder 유형 모델은 문장에서 다음 단어를 예측하는 데 뛰어나므로 대부분 text 생성 작업에 사용됩니다. 

2-1. GPT (Generative Pretrained Transformer)

2018년에 등장했으며 Pre-trained Language Model 개념을 처음으로 제시했습니다. GPT는 이전 단어를 기반으로 다음 단어를 예측하도록 훈련되었습니다.

2-2. GPT-2

2019년에 등장했으며 GPT보다 훨씬 많은 양의 데이터를 학습하여 더욱 자연스러운 텍스트를 생성할 수 있게 되었습니다. 

2-3. CTRL (Code TransOrmers with Listops)

Salesforce가 개발한 모델입니다. GPT-2같은 모델은 생성된 시퀀스의 스타일은 거의 제어하지 못합니다. CTRL은 시퀀스 시작 부분에 '제어 토큰'을 추가해 이 문제를 해결했습니다. 이를 통해 생성 문장의 스타일을 제어해 다양한 문장을 생성합니다.

2-4. GPT-3

GPT-2를 100배 늘려 1750억 개의 파라미터를 가진 모델입니다. few-shot learning능력이 크게 향상되어 적은 양의 데이터만으로도 새로운 작업을 빠르게 학습할 수 있게 되었습니다.

 

3. Encoder-Decoder 유형

3-1. T5 (Text-to-Text Transfer Transfomer)

모든 텍스트 기반 task를 "Text-to-Text" 형식으로 변환해서 처리합니다. 

3-2. BART

BERT의 양방향 인코딩과 GPT의 단방향 디코딩 방식을 결합하여 학습합니다. 입력 시퀀스는 마스킹, 문장 섞기, 토큰 삭제, 문서 순환(document roation)에서 가능한 한가지 방식을 거칩니다. 변경된 입력이 인코더를 통과하면 디코더는 원본 텍스트를 재구성합니다. 모델을 유연하게 만들어 NLU, NLG 작업에 모두 사용할 수 있습니다.

3-3. M2M-100

Meta에서 2020년에 발표한 모델로 100개의 언어를 번역하는 최초의 번역 모델입니다. 희귀하거나 잘 알려지지 않은 언어에서 고품질의 번역을 수행합니다. 저자원 언어에 대한 번역 성능이 뛰어납니다.

3-4. BigBird

Sparse attention을 사용하여 기존 Transformer 모델보다 훨씬 긴 문맥(512->4096 토큰)을 처리할 수 있습니다. 따라서 텍스트 요약과 같이 긴 의존성을 보존해야 할 때 유용합니다.

728x90

'Artificial Intelligence' 카테고리의 다른 글

[Audio] Audio Data  (1) 2024.06.27
[Transformer] Masked Self-Attention  (0) 2024.06.13
[Transformer] Self-Attention  (2) 2024.06.10
지도학습 vs 비지도학습  (0) 2024.05.31
[인공지능 기초 지식] 평가지표  (0) 2024.05.20

1. 데이터

  • 일반적으로 train dataset에만 샘플링 전략(over sampling, undersampling)을 사용합니다. 따라서 train/test split하기 전에 sampling을 하지 않고 split한 뒤에 train dataset에 샘플링을 적용합니다.

2. hugging face

  • 사전 훈련된 모델을 사용할 때, 모델 훈련에 사용한 것과 동일한 토크나이저를 사용해야 합니다. 토크나이저를 바꾸는 것은 모델 입장에서 어휘사전을 뒤섞는 것과 다름 없습니다. 주변 사람들이 'house'를 'cat'이라 하는 상황처럼 마음대로 단어를 바꾼다면 도대체 무슨 일인지 상황을 이해하지 못할 것입니다.
728x90

'프로젝트 setup' 카테고리의 다른 글

[Hugging Face 🤗] Load Datasets  (0) 2024.06.15
zsh 및 oh-my-zsh 설치(vscode)  (1) 2024.01.24
requirement.txt 설치  (2) 2024.01.03

1. Hugging Face Hub 내 데이터셋 확인

Hugging Face에서 현재 제공하는 데이터셋의 개수와 정보를 불러옵니다.

from datasets import list_datasets

all_datasets = list_datasets()
print(f'현재 허브에는 {len(all_datasets)}개의 데이터셋이 있습니다.')
print(f'처음 10개 데이터셋: {all_datasets[:10]}')

 

2. Hugging Face Hub 내 데이터셋 불러오기

특정 데이터셋을 불러오고 싶으면 다음과 같이 작성하면 됩니다.

from datasets import load_dataset

# load_dataset('파일 path')
ag_news = load_dataset('fancyzhx/ag_news')

 

다음과 같은 파라미터가 있습니다.

https://huggingface.co/docs/datasets/package_reference/loading_methods#datasets.load_dataset

 

3. 내 컴퓨터에 있는 데이터셋 불러오기

from datasets import load_dataset

# 파일명 = load_dataset('file format', data_files='file path')
csv_file = load_dataset('csv', data_files='my_files.csv')
text_file = load_dataset('text', data_files='text_files.text')
json_file = load_dataset('json', data_files='my_files.json')

# sep, column명 지정
csv_file = load_dataset('csv', data_files='my_files.csv', sep=';', names=['userid', 'age', 'label'])

 

References

1. https://huggingface.co/docs/datasets/package_reference/loading_methods#datasets.load_dataset
2. 루이스 턴스톨 외, 트랜스포머를 활용한 자연어 처리⌟, 2022

728x90

'프로젝트 setup' 카테고리의 다른 글

Tips  (0) 2024.06.15
zsh 및 oh-my-zsh 설치(vscode)  (1) 2024.01.24
requirement.txt 설치  (2) 2024.01.03

1. Masked Self-Attention이란?

Masked Self-Attention이란 Self-Attention의 변형으로 Transformer 모델의 Decoder 부분에서 사용되며 sequence 생성 작업에 활용됩니다.

Decoder는 현재까지 생성된 토큰들을 기반으로 다음 토큰을 예측해야 합니다. 만약 Masked되지 않은 Self-Attention을 사용하면 Decoder가 미래의 정보를 사용할 수 있게 됩니다. 따라서, Decoder에서는 Masked Self-Attention을 이용해 모델이 미래의 정보를 사용하지 않고 현재까지 생성된 토큰들만을 기반으로 예측하게 합니다.

 

2. Masked Self-Attention 과정

Decoder의 Self-Attention layer는 반드시 자기 자신보다 앞쪽에 위치한 토큰들의 attention score만 볼 수 있습니다. 미리 attention score을 다 구해놓고 사용할 때 가립니다.

Attention Score를 구하는 과정은 Self-Attention과 같습니다. 행렬 연산의 이점을 누리기 위해 attention score를 구한 뒤, i 번째 행에 대해 i+1 이상의 열에 대해 -inf(-∞)로 변경합니다. softmax를 취했을 때 결과값인 attention weight를 0으로 만들기 위해서 입니다. Attention weight를 0으로 만들면 미래 시점의 값을 고려하지 않게 됩니다.

728x90

'Artificial Intelligence' 카테고리의 다른 글

[Audio] Audio Data  (1) 2024.06.27
[Transformer] Transformer 모델 종류  (0) 2024.06.17
[Transformer] Self-Attention  (2) 2024.06.10
지도학습 vs 비지도학습  (0) 2024.05.31
[인공지능 기초 지식] 평가지표  (0) 2024.05.20

2017년 'Attention Is All You Need' 논문에서 Transformer 구조를 소개하면서 딥러닝 세계에 많은 영향을 주었습니다.

Transformer에는 3가지 Attention이 있습니다.

  1. Encoder Self-Attention
  2. Encoder-Decoder Attention
  3. Decoder Masked Self-Attention

1. Encoder Self-Attention

"고양이가 생선을 맛있게 먹었다"라는 문장이 있을 때, "먹었다"라는 단어의 의미를 제대로 파악하기 위해서는 "고양이가", "생선을" 등의 다른 단어들과의 관계를 잘 이해해야 합니다. Self-Attention은 이런 방법처럼 문장 내 단어 간의 관계를 스스로 학습해서 문장 내에서 어떤 단어가 중요한지 스스로 판단해 문맥을 이해합니다.

Encoder-Decoder Attention과 차이점은 Self-Attention은 '나는 사과를 먹는다' -> 'I eat an apple'에서 '먹는다'를 번역할 때, 'I', 'apple'등 관련된 단어들에 더 높은 가중치를 부여해 문맥을 반영합니다. 즉, 하나의 시퀀스(Query)를 기준으로 다른 시퀀스(Key, Value)에서 관련된 정보를 찾아 집중합니다.

반면, Self Attention은 단인 데이터 시퀀스 내부의 관계를 파악하는 데 사용됩니다. 문장 내 단어 간의 관계를 분석하여 문맥을 이해하는 데 효과적입니다. "고양이가 생선을 맛있게 먹었다"에서 "먹었다"이라는 단어의 Query, Key, Value 벡터를 생성하고 같은 문장 내 다른 단어들과의 관계를 계산합니다. "고양이가", "생선을" 과의 연관성이 높게 나타날 것입니다. 즉, 하나의 시퀀스 내에서 각 단어가 다른 단어들과 얼마나 관련되어 있는지 파악합니다.

  Encoder-Decoder Attention Self-Attention
데이터 시퀀스  2개 이상 단일 시퀀스
목적 시퀀스 간 관계 파악 시퀀스 내부 관계 파악
활용 예시 번역 모델(encoder-decoder) 문맥 이해

 

2. Self-Attention 작동 방식

Self-Attention은 Query, Key, Value를 사용해 단어 간의 관계를 파악합니다. 아래의 순서에 따라 Self-Attention이 작동합니다.

 

1. 입력 문장의 각 단어를 Query, Key, Value 벡터로 변환합니다.

2. 각 단어의 Query 벡터와 문장 내 모든 단어의 Key 벡터를 비교유사도(Attention Score)를 계산합니다.(Scaled Dot-Product)

3. 유사도를 기반으로 각 단어의 Value 벡터에 가중치를 부여하고 가중치가 부여된 Value 벡터들을 합산하여 문맥 정보가 반영된 벡터를 만듭니다.

2-1. 입력 문장의 각 단어를 Query, Key, Value 벡터로 변환합니다.

Query, Key, Value는 입력 데이터(단어)를 임베딩한 후, 각각의 Linear Layer를 통과시켜 계산됩니다. 

Query의 Linear Layer, Key의 Linear Layer, Value의 Linear Layer은 모두 다른 가중치를 갖고 있습니다.

입력 벡터에 가중치 행렬을 곱해 Query, Key, Value를 만듭니다. (bias는 더하지 않습니다.)

결국 Self Attention의 Query, Key, Value는 모두 동일한 정보로부터 선형변환을 통해 만들어졌다고 할 수 있습니다. 시작 값이 단어의 이메딩 값으로 같기 때문에 Self를 붙이는 겁니다.

 

      • Query: 지금 당장 처리하고 있는 토큰의 벡터(현재 단어가 다른 단어들에게 던지는 질문(ex. "나랑 관련 있는 단어 있어?"))
      • Key: 다른 모든 토큰의 벡터(다른 단어들이 Query에 대한 답변으로 내놓는 정보(ex. "난 고양이야", "난 생선이야"))
      • Value: 다른 모든 토큰의 벡터(각 단어가 가진 정보 자체(ex. "고양이는 귀엽지", "생선은 맛있어"))

2-2. 각 단어의 Query 벡터와 문장 내 모든 단어의 Key 벡터를 비교해 유사도(Attention Score)를 계산합니다. (Scaled Dot-Product)

Attention Score은 Query 벡터와 Key 벡터 사이의 유사도를 나타내는 점수입니다. 다시 말해, 현재 처리 중인 단어(Query)가 입력 데이터에 있는 단어들(Key)과의 유사도를 구하는 과정입니다. Attention Score가 높을수록 두 단어가 서로 관련성이 높다는 것을 의미합니다. "😋"라는 Query는 "😺"와 "🐟"의 key와 높은 점수를 가질 것입니다.

 

🧮 수식

예를 들어, "😺"과 나머지 단어들("😺", "🐟", "😋", "🍽️")과의 유사도를 구한다고 해봅시다.

Attention Score(q, K) = (q*K^T) / sqrt(d_k)

  • q: ("고양이가"의)Query 벡터
  • K^T: Key matrix transpose
  • d_k: Key matrix 차원

나머지 단어들도 한번에 계산한다고 하면 수식은 다음과 같이 됩니다.

Attention Score(Q, K) = (Q*K^T) / sqrt(d_k)

  • Q: Query matrix
  • K^T: Key matrix transpose
  • d_k: Key matrix 차원

📌 sqrt(d_k)로 나누는 이유

여기서 Key matrix 차원의 제곱근으로 나누는 이유는 Scaling하기 위해서입니다. Scaling하지 않고 softmax 함수에 통과하면 큰 값들로 인해 softmax 분포가 지나치게 편향될 수 있습니다. 특정 Key에 대한 확률값이 1에 매우 가까워지고 나머지는 0에 가까워질 수 있습니다. Scaling을 했기 때문에 그냥 dot-product attention이 아니라 scaled dot-product attention입니다.

2-3. 유사도를 기반으로 각 단어의 Value 벡터에 가중치를 부여하고 가중치가 부여된 Value 벡터들을 합산하여 문맥 정보가 반영된 벡터를 만듭니다.

Attentions score를 softmax 함수에 통과해 확률 분포로 변환합니다. 각 단어에 대한 Attention Weight의 합이 1이 되도록 합니다.

 

🧮 수식

Attention Weight(Q, K) = softmax(Attention Score(Q, k))

 

각 단어에 대한 Attention Weight를 각 단어의 Value와 곱합니다. 즉, 현재 처리하고 있는 단어(Query)에 대한 각 단어들의 가중치(Attention Weight)를 구하고 이를 각 단어들의 Value와 곱함(가중합)으로써 현재 처리 중인 단어와 단어 사이의 관계에 대해 계산합니다. "먹었다"라는 단어는 "고양이"와 "생선"의 Value에 높은 가중치를 부여하고 다른 단어들의 Value에는 낮은 가중치를 부여하게 됩니다.

가중치가 부여된 Value들을 모두 더하면 문맥 정보가 담긴 최종 벡터가 만들어집니다. "먹었다"라는 단어는 "고양이"와 "생선"의 정보를 충분히 반영하게 되었습니다.

🧮 수식

Attention(Q, K, V) = Attention Weight(Q, K)V

 

3. Self-Attention의 장점

  • 문장의 전체 문맥 파악 가능: RNN처럼 순차적으로 정보를 처리하지 않고 문장 전체를 한 번에 고려하여 RNN보다 문맥을 잘 파악할 수 있습니다.
  • 병렬 처리 가능: 각 단어의 Attention Score을 한번에 계산할 수 있어서 빠르게 연산할 수 있습니다.
  • 장기 의존성 해결: 문장 길이에 제한 없이 멀리 떨어진 단어 간의 관계도 효과적으로 파악할 수 있습니다.

 

Reference

https://wikidocs.net/31379

https://ffighting.net/deep-learning-basic/%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90/attention-and-self-attention-in-deep-learning/

https://velog.io/@nkw011/transformer

 

 

 

728x90

머신러닝 알고리즘은 크게 지도학습, 비지도학습 나눌 수 있습니다.

1. 지도학습 Supervised Learning

  • 개념: 이미 정답(label)이 있는 데이터셋을 사용하여 데이터를 분류하거나 결과를 정확하게 예측하는 알고리즘을 학습시키는 것입니다. 알고리즘은 손실함수를 통해 정확도를 측정하고 오류가 충분히 최소화될 때까지 조정합니다. 아이에게 사과와 배 사진을 보여주고 각각의 이름을 알려주는 것과 같습니다.
  • 목표: 주어진 데이터를 기반으로 입력과 출력 사이의 관계를 학습하여 새로운 데이터에 대한 예측 또는 분류를 정확하게 수행하는 것입니다.
  • 종류
    - 분류(Classification): 선형 분류기, 서포트 벡터 머신(SVM), 의사 결정 트리, K-Nearest Neighbor, Random Forest 등
    - 회귀(Regression): 선형 회귀, 로지스틱 회귀, 다항식 회귀
  • 예시
    - 스팸 필터: 스팸 메일과 일반 메일을 구분하도록 학습
    - 질병 진단: 환자의 증상을 기반으로 질병 예측
    - 손글씨 인식: 손으로 쓴 글씨를 컴퓨터가 인식하도록 학습

2. 비지도학습 Unsupervised Learning

  • 개념: 정답(label)이 없는 데이터를 사용하여 모델을 학습시키는 방식입니다. 모델은 스스로 데이터의 특징과 패턴을 파악해야 합니다.
  • 목표: 데이터에 숨겨진 의미 있는 정보(구조, 패턴, 특징 등)를 찾아내는 것입니다. 아이에게 여러 종류의 과일 사진을 보여주고 스스로 비슷한 과일끼리 분류하도록 하는 것과 같습니다.
  • 종류
    - 군집화(Clustering): 유사한 특징을 가진 데이터들을 그룹으로 묶습니다. -> K-means clustering
    - 연관: 특정 데이터셋에서 변수 간의 관계를 발견하기 위한 규칙 기반 학습 방법 -> Apriori 알고리즘
    - 차원 축소(Dimensionality Reduction): 복잡한 데이터를 간단하게 표현합니다. -> 주성분 분석, 비정칙 값 분해(SVD), 오토인코더
  • 예시
    - 고객 세분화: 고객들의 구매 패턴을 분석하여 비슷한 특징을 가진 고객들끼리 그룹화
    - 이상 탐지: 평소와 다른 패턴을 가진 데이터 찾아냄(ex. 금융 사기 탐지, 신용카드 부정 사용)
    - 추천 시스템: 사용자의 취향을 분석하여 선호할 만한 상품 추천

 

728x90

+ Recent posts