#1 개념

1-1. Seq2seq

  Seq2seq 모델은 문장이 순서와 위치의 영향을 많이 받는 특성을 이용하여 문장을 하나의 시퀀스로 다루고 학습한다. Seq2seq 모델의 원리는 인코더와 디코더를 통해 입력 언어를 문맥 벡터(중간 언어)로 변환하고, 디코더를 통해 문맥 벡터를 출력 언어로 변환한다. 즉, 문맥 벡터라는 중간 언어를 통해 입력 언어와 출력 언어 사이의 모델을 형성하고 인코더 디코더는 각 언어와 문맥 벡터의 관계를 학습하는 것이다. 그리고 시퀀스 데이터를 처리하는 데 특화된 RNN, LSTM 모델을 활용하여 인코더와 디코더의 각 계층을 구성한다. 

그림 1. Seq2seq overview

 

  하지만 seq2seq2 모델은 다음과 같은 단점이 있어 자연어 처리를 위한 새로운 모델의 설계 필요성이 촉구 됐다.

  • RNN 모델이 가지는 장기 의존성 문제로 인해 시퀀스 사이의 장거리 상관관계를 학습하기 어렵다.
  • 시퀀스를 학습하기 위해 RNN 모델과 같이 이전 단계에 의존하기 때문에 병렬화가 어렵다.
  • 인코더 디코더로 인해 모델의 병렬화가 어렵다.
  • RNN 모델의 계층은 컴퓨팅 연산이 복잡하다.

1-2. Transformer

  트랜스포머 모델은 기존 RNN 모델을 이용한 seq2seq 모델의 단점을 극복하기 위해 인코더 디코더가 존재하지만 어텐션이라는 개념을 이용하여 단어 입력을 순차적으로 받지 않는 새로운 모델이다. 이를 통해 모델의 병렬 연산이 가능하며, 이전 단계에 의존하지 않게 되었다. 그리고 트랜스포머 모델의 내부는 인코더 스택으로 이루어진 인코딩 컴포넌트와 인코더 스택과 같은 수의 디코더 스택으로 이루어진 디코딩 컴포넌트 그리고 두 컴포넌트 사이의 연결 컴포넌트로 구성되어 있다. 

그림 2. Transformer overview

 

  트랜스포머 모델의 어텐션 메커니즘은 순차적이지 않은 단어 입력을 위해 위치 정보를 알려주기 위한 메커니즘으로, 입력 시퀀스의 각 요소가 다른 요소에게 주는 중요도를 계산하여 가중 평균을 구하고 문장의 어느 부분에 주의를 기울여야 하는지를 결정한다. 이를 통해 트랜스포머 모델은 seq2seq 모델의 장기 의존성 문제를 효과적으로 해결한다. 트랜스포머의 어텐션은 크게 인코더, 디코더, 인코더-디코더 세 가지가 있다.

#2 모델

  트랜스포머 모델은 하이퍼 파라미터인 num_layers 개수의 인코더 층을 쌓으며, 인코더와 디코더는 self-attention, feed forward neural network 두 하위 계층으로 이루어져 있다. 또한, 인코더와 디코더를 연결하기 위한 인코더-디코더 어텐션 계층이 존재한다.

그림 3. Transformer model architecture

2-1. Embedding

  트랜스포머 모델은 인코더에 입력을 전달하기 전에 먼저 텍스트 데이터인 입력을 수치화하여 모델이 이해하고 처리할 수 있도록 고정된 크기의 벡터로 변환하는 과정을 거친다. 임베딩 과정을 통해 입력 텍스트를 단어 또는 하위 단어로 나누어 토근화 하고, 각 토큰을 고정된 크기의 벡터로 변환한다. 그리고 순차적인 구조를 갖지 않는 트랜스포머 모델을 위해 포지셔널 인코딩을 통해 단어 벡터 사이의 위치 정보를 제공하여 디코딩 후 단어를 재조합 할 수 있도록 한다.

그림 4. Embedding

2-2. Encoder

  • Self-Attention

  트랜스포머 모델의 Self-Attention은 입력 시퀀스의 각 요소가 다른 모든 요소들과의 관계를 고려하여 자신을 재구성하는 메커니즘이다. Self-Attention은 입력 시퀀스의 모든 위치 간 상호 의존성을 모델링하는 데 사용되며, 단어의 문맥을 이해하는 데 매우 유용하여 장기 의존성 문제가 없다. 또한 임베딩 과정을 통해 순차적이지 않은 요소들을 통해 병렬 처리가 가능하다.

  Self-Attention은 하나의 단어가 문맥의 모든 단어와의 관계성을 반영하기 위해 하나의 단어 벡터를 Query, Key, Value 세 가지 벡터로 변환한다. 이 과정은 Wq(쿼리 가중치 벡터), Wk(키 가중치 벡터), Wv(밸류 가중치 벡터)를 하나의 단어에 곱하여 수행되며, 각 벡터의 선형 벡터로 변환되도록 하며, 다음의 역할을 수행할 수 있도록 한다.

  1. 쿼리 벡터: 단어 간의 유사 정도를 질문하기 위한 벡터
  2. 키 벡터: 단어 간의 유사 정도를 나타내기 위한 벡터
  3. 밸류 벡터: 출력 값을 전달하기 위한 벡터

  Self-Attention은 위의 세 가지 벡터를 통해 각 단어들의 문맥 속 의미를 모델링한다. 먼저 한 단어의 쿼리 벡터를 모든 단어의 키 벡터와 어텐션 스코어를 계산하여 단어와 단어 사이의 유사성을 계산한다. 계산된 어텐션 스코어는 소프트맥스 함수를 통해 정규화되며, 이를 어텐션 가중치라 한다. 이를 통해 한 단어와 모든 단어 사이의 유사성을 정규화 된 어텐션 가중치 값으로 나타낼 수 있다. 이러한 과정을 스케일 닷 프로덕트 어텐션이라 하며, 계산된 어텐션 가중치는 하나의 밸류 벡터에 모든 단어에 대한 어텐션 가중치 값을 곱하여 한 단어가 문맥 속에서 다른 모든 단어와의 유사성 정보를 내포하는 벡터의 형태로 출력된다.

  또한 인코더에서 Self-Attention은 주로 병렬적으로 수행하며 이를 Multi-Headed Self-Attention이라 한다. 각 단어들의 쿼리, 키, 벨류 벡터가 여러 개로 나뉘며, 각 벡터 간의 의존성이 없기 때문에 병렬적으로 나뉘어 수행될 수 있다.

그림 5. Scaled Dot-Product Attention

  • FFN (Feed Forward Network)

  앞의 Self-Attentinon에서는 모델의 계산을 위해 입력 벡터를 가중치 벡터의 곱을 통해 벡터의 선형화를 수행하였다. 따라서 Self-Attention의 계산은 관계와 가중합을 기반으로 한 단순 정보만 제공하기 때문에 단어의 특징을 나타내기에는 밸류 벡터의 비선형성이 없어 부족할 수 있다. 따라서 트랜스포머 모델에서는 FFN을 통해 비선형성을 추가하고, 추가적인 특징 추출을 통해 벡터의 표현력을 향상시킨다.  FFN은 가중 벡터를 통해 선형화 된 후, 활성화 함수 ReLU를 통해 비선형성을 추가한 후 다시 가중 벡터를 통해 선형화하는 방식으로 동작한다.

그림 6. Feed Forward Network

2-3. Dedocer

  디코더 또한 인코더와 같이 Self-Attention과 FFN으로 이루어져 있으며, 추가로 인코더와 디코더를 연결하기 위한 Encoder-Decoder Attention이 존재한다.

그림 7. Decoder

  • Masked Multi-Head Self-Attention

  인코더의 Self-Attentnio 계층에서는 입력 시퀀스의 모든 단어를 고려하여 특징을 추출해야 문맥의 의미를 파악할 수 있었다. 하지만 디코더의 Self-Attentnio 계층에서는 문장의 차례대로 생성하는 과정에서 이후의 단어를 고려하는 것이 아니라 이전의 생성된 단어만 고려하여 다음 단어를 예측하여야 한다. 이러한 문제를 해결하기 위해 Masked Multi-Head Self-Attention 계층에서는 이후의 단어에 대한 어텐션을 제한하여 이전 단어를 고려하면서 다음 단어를 예측하도록 한다. 이는 self-attention을 구하기 위한 소프트맥스 함수 계산 전 포지션 마스킹을 통해 계산하여야 할 키와 쿼리를 정하여 수행된다. 

  • Encoder-Decoder Attention

  Encoder-Decoder Attention은 Encoder의 출력과 Decoder의 입력을 연결하는 역할을 수행하며, Attention의 동작을 기본 원리로 한다. 기존의 Attention처럼 쿼리와 키의 어텐션 가중치와 밸류를 곱하여 컨텍스트 벡터를 구한다. 여기서 키와 밸류는 인코더의 출력 벡터에서 가중 벡터를 곱하여 구하고, 쿼리는 디코더의 입력에 가중 벡터를 곱하여 구한다. 이를 통해 디코더는 인코더의 출력과 입력을 고려하는 컨텍스트 벡터를 이용하여 다음 단어를 예측하게 된다.

2-4. Final Linear and Softmax Layer

  • Linear layer: 디코더의 스택에 의해 생성된 벡터를 로짓 벡터라고 하는 훨씬 더 긴 길이의 보캅 크기의 벡터로 투영
  • Softmax layer: 가능한 다음 단어의 확률 분포를 생성

 

 

 

 

참고 자료

'컴퓨터 과학 > 인공지능' 카테고리의 다른 글

다층 퍼셉트론 (ANN, MLP)  (0) 2024.05.07
선형 회귀 (Linear Regression)  (1) 2024.04.30

#1 개념

1-1. 인공신경망

  인공신경망(Arificial Neural Network)는 생물학적 뉴런이 작동하는 방식에서 영감을 받은 수학적 모델이다. 이 모델은 입력 데이터를 받아 처리하여 출력값을 반환하는 것을 목적으로 한다. 인공 신경망은 여러 개의 계층으로 구성되며, 각 계층은 뉴런이라 불리는 단위로 구성 된다.

1-2. 다층 퍼셉트론

  인공신경망의 가장 기본적인 형태는 입력 계층과 출력 계층으로 이루어진 단순 퍼셉트론이다. 여기서 (여러 개의) 은닉 계층이 추가되면 이를 다층 퍼셉트론(Multilayer perceptron, MLP)라 하며, 각 뉴런은 입력과 가중치를 곱하고 편향을 더한 후 활성화 함수를 적용하여 출력을 생성한다. 이런 식으로 입력에서 출력까지 데이터가 전달되며, 학습 알고리즘을 사용하여 신경망이 원하는 출력에 가깝게 학습된다. 우리가 흔히 말하는 딥러닝의 과정이 다층 퍼셉트론인 것이다.

그림 1. 신경망과 인공신경망

#2 모델

2-1. 기본 형태

  인공신경망은 주어진 입력값에 대해 원하는 출력을 생성하는 수학적 모델이다. 인공신경망의 가장 기본적이고 단순한 형태는 선형회귀로 볼 수 있다. 선형회귀는 하나의 계층으로 이루어져 선형 함수를 학습하는 모델으로 다음 입력값을 선형 모델을 통해 예측할 수 있다. 

그림 2. 선형 함수 예

 

  일반적인 모델의 학습은 활성화 함수 -> 손실 함수 -> 최적화 -> 정규화의 과정을 따르며 활성화 함수 단계를 제외 하면 앞서 설명했던 선형회귀와 같은 순서이다. 순서는 엄밀하게 고정되지 않고 유연하게 바뀔 수 있으며, 한 알고리즘이 다른 단계를 포함하기도 한다.

2-2. 활성화 함수

  하지만 실제로 인공신경망이 학습하는 것은 단순히 점 사이의 선을 학습하는 것이 아닌 패턴이나 이미지, 음성, 텍스트 등 다양한 분야에서 학습을 시도한다. 하지만 단일 계층의 선형함수의 형태로는 이러한 학습이 어렵기 때문에 여러 계층으로 비선형 함수를 학습할 수 있어야 한다. 이를 위해 다층 퍼셉트론에서는 비선형 함수를 학습할 수 있도록 선형 함수로 변환하는 역할인 활성화 함수를 사용하고, 변환된 선형 함수들을 다층으로 학습하여 원하는 출력값을 생성하도록 한다.

그림 3. 활성화 함수

 

다양한 활성화 함수의 예시는 다음과 같으며 각각의 원리를 통해 비선형 변환을 수행한다. 

  • Sigmoid: 입력값을 0과 1 범위로 압축, 입력 값이 매우 크거나 작을 때 경사가 급격하게 감소하여 그래디언트 손실 문제가 발생, 주로 이진 분류 문제에서 출력층의 활성화 함수로 사용
  • Hyperbolic Tangent Function (tanh): 입력값을 -1과 1 범위로 압축, 입력 값이 매우 크거나 작을 때 경사가 급격하게 감소하여 그래디언트 손실 문제가 발생, 주로 RNN이나 은닉층의 활성화 함수로 사용
  • Rectified Linear Unit (ReLU): 입력값이 0보다 크면 그대로 반환하고 0보다 작으면 0으로 변환, 학습 속도가 매우 빠르고 구현이 간단하여 일반적으로 은닉층의 활성화 함수로 많이 사용, 입력이 음수일 때 출력이 0이 되어 dying ReLU 문제 발생
  • Leaky ReLU: 입력값이 0보다 크면 그대로 반환하고 0보다 작으면 작은 양수로 반환, 일반적으로 -0.01과 같은 기울기 사용, dying ReLU 문제 해결을 통해 ReLU보다 성능이 좋음

그림 4. 활성화 함수 그래프

2-3. 정규화

  모델은 학습 데이터를 통해 훈련을 하기 때문에 일반적인 상황과의 거리가 멀 수 있다. 따라서 정규화를 통해 모델에서 발생하는 training error가 아닌 generalization error를 감소시켜야 한다.

그림 5. Generalization error

 

  정규화는 아래의 과정을 거쳐 진행한다.

  • Dropout: 신경망의 일부 유닛을 무작위로 선택하여 학습 과정에서 제외, 네트워크가 특정 뉴런에 의존하지 않도록 하여 일반화 성능을 향상시킴, 학습 할 때마다 무작위로 일부 뉴런을 선택하여 학습 참여에 제외하고 테스트 할 때는 모든 뉴런 사용
  • Data Augmentation: 데이터 증강은 학습 데이터셋을 변형하여 모델이 다양한 상황에서 더 강건하게 학습되도록 하는 기법, 예를 들어 이미지의 경우 회전, 이동, 크기 조정, 반전 등의 변환
  • Label Smoothing: 신경망의 출력값에 대한 부정확성을 강제하는 기법

3. 구현

귀찮다....

'컴퓨터 과학 > 인공지능' 카테고리의 다른 글

Transformer  (0) 2024.05.14
선형 회귀 (Linear Regression)  (1) 2024.04.30

#1. 개념

1-1. 정의

  선형 회귀는 지도학습의 한 종류로, 독립 변수(X)와 종속 변수(Y) 간의 선형 관계를 모델링하고 예측하는 데 사용한다. 여기서 종속 변수는 예측하려는 변수로 일반적으로 출력값이고, 독립 변수는 종속 변수에 영향을 주는 변수로 입력값이다. 즉, 선형 회귀는 입력값과 출력값 간의 관계를 선으로 정의하고, 선을 통해 다음 입력값에 대한 출력값을 예측하는 것을 말한다.

1-2. 예시

  선형 회귀의 예시로 키와 몸무게 쌍의 데이터를 통해 남녀 성별을 예측하는 것이 있다. 아래 그림의 왼쪽 그래프를 보면, 남녀 간의 키 몸무게 쌍의 값이 두 가지 영역으로 구분될 수 있는 것을 볼 수 있다. 선형 회귀는 오른쪽 그래프처럼 입력받았던 키, 몸무게 쌍을 통해 남녀 성별을 예측할 수 있는 선을 긋고, 다음 입력값이 어느 영역에 속하느냐에 따라 해당 값의 성별을 예측하는 것이다.

그림 1. 키와 몸무게 쌍과 성별 간의 선형 회귀 예시

#2 모델

2-1. 수학적 정의

  수학적 측면에서 선형 회귀는 아래와 같은 식으로 나타낼 수 있다. 다음 식에서 Y는 예측값, x는 입력값, w는 가중치이다.

그림 2. 선형 회귀 수학적 정의

 

  위의 정의에서는 하나의 가중치가 사용되고 있지만, 실제 모델에서는 여러가지 특성이 고려될 수 있어야 한다. 따라서 여러 가지 특성을 고려하는 특성 함수를 정의하고, 각각의 특성에 대한 가중치를 정의하는 것이 선형 회귀에서는 중요하다. 선형 회귀의 학습은 가중치와 편향을 찾고, 실제값과 예측값의 오차를 가장 적게하는 것을 목표로 한다.

2-2. 손실 함수 (Loss function)

  손실 함수는 예측값과 실제값의 오차를 나타내는 함수이다. 손실 함수의 정의는 예측값에 실제값을 뺀 후 제곱하여 입력값의 개수만큼을 나눈 것이다. 제곱을 하는 이유는 오차를 항상 양수만 사용하여 절대값이 모델로부터 얼마나 벗어나는 지를 비교하고, 손실 함수를 통해 최적의 가중치를 찾을 때 미분을 사용하여 기울기가 0인 점을 찾기 위해서이다. 이에 따른 손실 함수의 수학적 정의는 아래와 같다.

그림 3. 손실함수의 수학적 정의
그림 4. 손실 함수 그래프

 

  위의 손실함수의 정의는 모든 오차를 동일하게 취급하는 평균제곱오차(MSE) 방식의 정의이다. 이외에도 오차를 표현하는 함수는 다양한 방식(평균 절대 오차, 평균 제곱근 오차, 평균 제곱 로그 오차, 후버 손실 등)이 있다.

2-3. 최적화 (Opimization)

  모델의 오차를 최소화 하기 위해, 가중치에 따른 손실함수를 최솟값을 찾아야 한다.

경사하강법

  경사하강법은 함수의 최솟값을 찾는 방법으로 손실함수에서도 최솟값을 찾기 위해 사용되기도 한다. 경사하강법은 초기에 임의의 점을 선택하고, 편미분을 통해 점의 기울기를 찾는다. 이후 기울기의 반대 방향으로 이동하며 최솟값을 찾는다. 점을 이동할 때는 학습률이라는 하이퍼 파라미터를 이용하여 얼마나 큰 단계로 이동할 지 선택할 수 있으며, 충분한 반복을 통해 최적점에 수렴하게 된다. 하지만 학습률이 너무 크거나 작은 경우 수렴하지 못 하기 때문에 학습률을 잘 설정하여야 한다.

그림 5. 경사하강법 수학적 정의
그림 6. 경사하강법 그래프

 

  경사하강법은 크게 세 가지 종류가 있으며 다음과 같다.

  • (Full) batch gradient descent: 전체 데이터에서 기울기를 계산
  • Mini-batch gradient descent: 데이터의 서브셋에서 기울기를 계산
  • Stochastic gradient descent: 하나의 샘플에서 기울기를 계산

학습률

  앞서 말한 것처럼 학습률을 설정하는 것은 중요하다. 이를 최적화 하는 학습률 조절 알고리즘들은 다음과 같다.

  • Adagrad (Adaptive Gradient Algorithm): 과거의 그래디언트를 보존하여 학습률을 조절하는 방식, 학습이 진행됨에 따라 이전 그래디언트의 제곱값을 누적하여 학습률을 조정, 이는 각각의 매개변수에 대해 개별적으로 학습률을 조절하여 자주 등장하지 않는 특성에 대해서는 큰 학습률을 적용하고 자주 등장하는 특성에 대해서는 작은 학습률을 적용하는 효과를 가져옴, 그러나 학습이 진행됨에 따라 누적된 제곱 그래디언트가 너무 커지면 학습률이 매우 작아져서 학습이 멈출 수 있음
  • RMSprop (Root Mean Square Propagation): Adagrad의 한계를 극복하기 위해 제안된 방법, 누적된 제곱 그래디언트의 평균을 사용하여 학습률을 조절, 이전 그래디언트의 제곱값을 지수 이동 평균을 사용하여 계산하여 학습률을 조정, 이를 통해 Adagrad보다는 더 안정적으로 학습
  • Adam (Adaptive Moment Estimation): 모멘텀 최적화와 RMSprop을 결합한 방법으로, 각 매개변수마다 학습률을 조정, 지수 이동 평균을 사용하여 그래디언트와 그래디언트의 제곱값을 추정하고 이를 사용하여 매개변수를 업데이트, 모멘텀 방법을 통해 관성을 고려하여 이전 그래디언트의 영향을 조절, Adam은 다양한 문제에서 효과적으로 작동하며 많은 딥 러닝 모델에서 기본 최적화 알고리즘으로 사용

3. 구현

귀찮다... 언젠간 업로드 함

'컴퓨터 과학 > 인공지능' 카테고리의 다른 글

Transformer  (0) 2024.05.14
다층 퍼셉트론 (ANN, MLP)  (0) 2024.05.07

+ Recent posts