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

원본 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. 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

머신러닝 모델은 크게 분류 모델과 회귀 모델로 나눌 수 있으며, 각 모델 유형에 따라 적합한 평가 지표가 다릅니다.

1. 분류 모델

Confusion Matrix

https://d3s0tskafalll9.cloudfront.net/media/images/E-2-3.max-800x600_mMmzi4T.jpg

 

정확도(Accuracy)

: 전체 예측 중 정답을 맞힌 비율

수식: (TN + TP)/(TN + FP + FN + TP)

- 직관적이고 이해하기 쉬움

- 불균형 데이터셋에서는 신뢰도 낮음

 

정밀도(Precision)

: 양성(긍정)으로 예측한 것 중 실제 양성(긍정)인 비율

수식: TP / (TP + FP)

- Positive 예측 결과가 중요할 때 유용 (ex. 스팸 메일 분류)

 

재현율(Recall)

실제 양성(긍정) 중 모델이 양성(긍정)으로 예측한 비율

수식: TP / (TP + FN)

- Positive 데이터를 놓치면 안될 때 유용 (ex. 암 진단)

 

F1 Score

: 정밀도와 재현율의 조화 평균

2 * (Precision * Recall) / (Precision + Recall)

- 클래스 불균형 데이터셋에서 모델의 성능을 종합적으로 평가하는 데 사용

 

ROC Curve

: 민감도(Sensitivity)와 1-특이도(Specificity)로 그려지는 곡선

민감도(SE)(=Recall) = TP / (TP + FN)

특이도(SP) = TN / TN + FP

1-특이도(Specificity)(=False Positive Rate) = FP / (TN + FP)

 

AUC(Area Under the Curve)

: ROC 곡선 아래 영역의 넓이

- 0에서 1 사이의 값을 가지며, 1에 가까울수록 모델의 성능이 좋다는 것을 의미

 

Log Loss

: 예측 확률 분포와 실제 값의 차이를 측정

수식: - (1/N) * ∑[y * log(p) + (1-y) * log(1-p)] (y: 실제 값, p: 예측 확률)

- 확률 기반 모델의 성능 평가에 유용

 

2. 회귀 모델

평균 제곱 오차(Mean Squared Error, MSE)

: 실제 값과 예측 값의 차이를 제곱한 후 평균으로 계산한 값

MSE = Σ(yᵢ - ŷᵢ)² / n (yᵢ: 실제 값, ŷᵢ: 예측 값)

- 제곱하기 때문에 이상치에 민감

 

평균 절대 오차(Mean Absolute Error, MAE)

: 실제 값과 예측 값의 차이의 절대값을 평균한 값

MAE =  Σ|yᵢ - ŷᵢ| / n

- MSE보다 이상치에 덜 민감

 

R제곱(R-squared)

: 회귀 모델이 종속 변수의 변동성을 얼마나 잘 설명하는지를 나타내느 지표

R-squared = 1 - Σ(yᵢ - ŷᵢ)² / Σ(yᵢ - ȳ)² (yᵢ는 실제 값, ŷᵢ는 모델의 예측 값, ȳ는 실제 값의 평균)

                   = 1 - (SSR/SST) (SSR: 오차 제곱합, SST: 총 제곱합)

- 0에서 1 사이의 값을 가지며, 1에 가까울수록 모델이 데이터를 잘 설명한다는 것을 의미

 

Adjusted R-squared

: R제곱의 한계인 독립 변수의 수가 증가함에 따라 R제곱이 증가하는 문제를 보완한 지표로, 변수의 개수에 따른 패널티를 부여

Adjusted R-squared = 1 - [(1 - R²) * (n - 1) / (n - k - 1)] (n은 샘플의 수, k는 독립 변수의 수)

 

평균 백분율 오차(MAPE)

: 예측값과 실제값 사이의 백분율 차이의 평균을 나타내는 지표

MAPE = Σ((yᵢ - ŷᵢ) / yᵢ) / n * 100 ( yᵢ는 실제 값, ŷᵢ는 모델의 예측 값, n은 샘플의 수)

- 양수 또는 음수가 될 수 있음

728x90

1. 활성화 함수란?

활성화 함수는 신경망에서 사용되는 함수로 출력으로 내보내는 신호의 크기를 제한하거나 조정하는 역할을 합니다. 가중치와 편향을 갱신하기 위해 사용되는 주요한 함수입니다. 

활성화 함수는 binary step function(step function), 선형 함수(linear function), 비선형 함수(non-linear function)이 있습니다. 일반적으로 활성화 함수로 사용되는 함수는 모두 비선형 함수입니다.

2. 활성화 함수를 쓰는 이유(활성화 함수의 역할)

  • 비선형성 추가
    신경망은 입력값들에 대한 가중치 합을 계산하는 모델입니다. 비선형 활성화 함수를 기준으로 설명하면, 활성화 함수를 통해 비선형성을 추가함으로써 신경망이 복잡한 비선형 함수를 학습할 수 있게 해줍니다.
  • 출력 데이터 범위 조정
    활성화 함수는 네트워크 출력 값을 제한된 범위로 조정합니다. 이는 네트워크가 예측하는 값이 특정 범위 내에 있어야 하는 문제에 유용합니다.

3. 활성화 함수의 종류

3-1. Binary Step Function

  • 수식
    f(x) = 0 if x < 0
    f(x) = 1 if x ≥ 0

  • 특징
    - 초기 신경망 모델인 퍼셉트론(Perceptron)에서 활성화 함수로 사용했습니다.
  • 장점👍
    - 출력이 0 또는 1이므로 이진 분류 문제에 사용됩니다. 결과 해석이 쉽습니다.
    - 계산이 단순하여 구현이 쉽고 속도가 빠릅니다.
  • 단점 👎
    - 함수가 불연속적이므로 미분이 불가능합니다.
    - 또한, 미분 가능한 지점은 모두 기울기가 0이므로 역전파 과정에서 문제가 생겨 경사하강법과 같은 최정화 방법을 사용할 수 없습니다.
    - 출력이 2개이기 때문에 복잡한 분류 문제에서는 사용하기 힘듭니다.

3-1. Linear Activation Function

  • 수식
    f(x) = wx + b( w는 weight, b는 bias)

  • 장점👍
    - 모든 값에서 미분이 가능합니다.
    - 계산이 매우 단순합니다.
  • 단점 👎
    - 비선형성이 없어 복잡한 함수 모델링이 불가능합니다.
    - 기울기 소실/폭발의 문제가 발생할 수 있습니다.

3-2. Non-Linear Activation Function

앞의 이유 때문에 대부분 활성화 함수로는 비선형 활성화 함수를 사용합니다.

비선형 활성화 함수를 사용함으로써 신경망은 선형 모델로는 해결할 수 없는 복잡한 문제를 해결할 수 있습니다.
대부분의 비선형 활성화 함수는 미분이 가능하므로 역전파를 통해 가중치를 업데이트 할 수 있습니다.

 

Sigmoid


  • 1/{1 + e^{-x}}

  • 특징
    - 모든 입력에 대해 0과 1 사이의 값을 출력합니다.
    - 함수가 연속적이고 미분 가능하기 때문에 역전파로 파라미터 업데이트가 가능합니다.
    - 입력값의 절대값이 클 때 함수의 기울기가 매우 작아집니다. 이는 역전파 과정에서 가중치의 업데이트가 잘 안됩니다.

 

Hyperbolic Tangent


  • tanh(x) = 2 / (1 + exp(-2x)) - 1

  • 특징
    - -1과 1 사이 값으로 출력합니다.
    - 모든 점에서 미분 가능하기 때문에 역전파를 통해 파라미터 업데이트가 가능합니다.

ReLU(Rectified Linear Unit)


  •  f(x) = max(0, x)

  • 특징
    - 학습 속도가 빠릅니다.
    - 출력값의 범위가 넓고 입력값이 양수인 경우, 자기 자신을 그대로 반환하기 때문에 시그모이드에서 발생한 기울기 소실 문제가 발생하지 않습니다.
    - 0에서는 미분이 불가하다.
    - 순전파 과정에서 어떤 뉴런에서든 음수값이 한 번 들어오면 역전파 시에는 0이라는 실수값이 가중치에 곱해지면서 해당 노드가 통째로 죽어버리는 Dying ReLU 문제가 발생할 수 있습니다.

 

Leaky ReLU


  • f(x) = max(0.01x, x)

  • 특징
    - ReLU 함수의 함계점(Dying ReLU)을 해결하기 위해 등장했습니다.
    - 항상 ReLU보다 성능이 향상된 것은 아닙니다.

PReLU(Parameter ReLU)


  • f(x) = max(αx, x)

  • 특징
    - Leaky ReLU와 비슷하지만 α 파라미터를 추가해서 입력값이 음수일 때의 기울기를 학습할 수 있습니다.

 

ELU(Exponential Linear Unit)


  • f(α,x)=α(ex1),x0
                x,x>0

  • 특징
    - ReLU의 장점을 모두 포함하면서 Dying ReLU 문제를 해결했습니다.
    - 양수 영역에서는 선형이지만, 음수 영역에서는 지수적으로 감소합니다.
    - 항상 미분이 가능합니다.
    - exp()에 대한 미분값을 계산해야 하는 비용이 발생합니다.

GELU(Gaussian Error Linear Unit)


  • GELU(x) = x * Φ(x)

  • 특징
    - Φ(x)는 표준 정규 분포의 누적 분포 함수입니다.
    - ReLU와 유사하지만 입력값이 음수일 때 음수를 출력할 수 있습니다.

    - 입력값에 따라 출력을 부분적으로 '억제'하거나 '통과'시킵니다.
    - 기울시 소실 문제를 해결합니다.

Swish

 


  • Swish(x) = x * sigmoid(β * x)(β는 학습 가능한 매개변수이며, 일반적으로 β = 1로 설정)
  • 특징
    - Google Brain팀에서 개발한 자체 게이트 활성화 함수입니다.
    - ReLU와 비슷하지만 음수 출력값도 가질 수 있습니다.
    - 모든 점에서 연속적이고 미분 가능하기 때문에 역전파가 가능합니다.
    - ReLU보다 우수한 결과를 보인다고 하지만 계산 복잡도는 ReLU보다 높습니다.
728x90

1. Loss Function 이란?

모델의 예측값과 실제값 사이의 차이를 수치화하는 함수입니다.

모델 학습의 목표는 손실함수의 값을 최소화하는 파라미터를 찾는 것입니다. 손실함수의 값이 작을수록 모델의 예측이 실제 데이터와 더 가깝다는 것을 의미하기 때문입니다.

 

2. Loss Function 종류

손실 함수는 주로 회귀 문제의 손실 함수 분류 문제의 손실 함수로 나뉩니다.

2-1. 회귀 문제의 손실 함수

회귀는 연속된 값을 예측하는 것을 의미합니다.

 

1. 평균 제곱 오차(Mean Squared Error, MSE)

예측값과 실제값의 차이를 제곱하여 평균을 낸 것입니다. 오차가 클수록 손실이 기하급수적으로 증가해 큰 오차를 더 중요하게 다루게 합니다.

2. 평균 절대 오차(Mean Absolute Error, MAE)

예측값과 실제값의 차이의 절대값을 평균으로 낸 것입니다. 모든 오차를 동일하게 취급하며 이상치에 대해 MSE보다 덜 민감합니다.

 

2-2. 분류 문제의 손실 함수

분류는 카테고리를 예측하는 것을 의미합니다.

 

1. 이진 크로스 엔트로피(Binary Cross-Entropy)

이진 분류에서 사용하는 손실 함수입니다. 이진 분류는 어떤 사진이 주어졌을 때, 사진이 고양이인지 강아지인지 분류하는 것과 같이 카테고리가 2개인 분류 문제를 의미합니다.

 

2. Categorical Cross-Entropy

다중 분류에서 사용합니다.

  • 입력 데이터 형태: 원-핫 인코딩된 벡터
  • 예: 각 클래스에 대한 확률 분포를 나타내는 벡터를 예측값으로 받습니다. 예를 들어, 3개의 클래스가 있고 첫번째 클래스가 정답일 경우, 실제 벡터값은 [1, 0, 0]이고 모델의 예측값은 [0.8, 0.1, 0.1]과 같습니다. 이때 모델의 예측값을 구할 때 softmax를 사용합니다.

2. Sparse Cross-Entropy

Categorical Cross-Entropy와 같이 다중 분류에서 사용하지만 입력 데이터의 형태가 다릅니다.

  • 입력 데이터 형태: 정수 레이블
  • 예: 각 데이터 포인트에 대한 정답 클래스의 인덱스를 받습니다. 예를 들어, 3개의 클래스가 있고 첫 번째 클래스가 정답일 경우, 실제값은 0이 됩니다.
728x90

+ Recent posts