728x90
반응형




👉이전글에서 봤던 것처럼 RNN이라는 딥러닝 모델은 자연어 문장과 같은 시퀀스 데이터를 입력으로 받아 학습시킬 수 있도록 설계된 모델입니다. 이를 통해 자연어처리 분야에 딥러닝 모델이 활용될 수 있었습니다.


이러한 RNN 모델을 활용하여 자연어 기반의 분류 모델을 구현하고자 하는데,
구현에 앞서 딥러닝이 무엇인지 짚어보겠습니다.


딥러닝 개요




딥러닝 모델은 위 그림과 같이 표현될 수 있습니다.
위 구조를 이루고 있는 파란색 원을 퍼셉트론이라고 하는데,
입력층에서 입력으로 들어온 데이터가 다수의 퍼셉트론을 거쳐 사전 학습된대로 출력층에서 데이터를 출력하게 됩니다.


딥러닝이란?

딥러닝은 위 그림의 구조와 같은 심층신경망에 학습시키는 것을 가리키는 말입니다.



  • 심층신경망 : 위 그림과 같이 다수의 퍼셉트론으로 이루어진 은닉층이 2개 이상인 신경망


딥러닝의 등장

위 그림과 같이 단층퍼셉트론을 활용해도 AND 게이트 연산을 위한 직선의 선형함수를 찾으면 AND 게이트 구현이 가능했습니다.


하지만 위 그림의 XOR 게이트는 직선의 선형함수로는 구현이 불가능한 게이트이고,
XOR 연산을 위해 다수의 은닉층으로 구성된 심층신경망이 등장하게 됩니다. 그리고 이러한 심층신경망을 학습시키는 일련의 과정인 딥러닝이 대두됩니다.


심층신경망의 학습 (딥러닝)



학습과정

👉이전글에서 봤던 것처럼 머신러닝의 학습과정은 각 뉴런의 가중치 W를 찾아가는 과정입니다.
이러한 학습과정은 딥러닝에도 동일하게 적용됩니다. (퍼셉트론의 가중치 W를 찾아가는 과정)


  1. 학습데이터 입력 : 학습데이터가 입력되면 심층신경망을 이루는 각 퍼셉트론을 단계별로 거치게되고, 거칠 때마다 초기화된 가중치 W와 바이어스b를 기반으로 출력값이 계산되어 다음 층 퍼셉트론의 입력값으로 전달됩니다.
  2. 예측값과 실제값 비교 : 심층신경망을 통해 출력된 예측값과 실제값의 차이를 기반으로 하는 Loss Function을 통해 차이를 최소화하는 가중치W와 바이어스b를 찾게됩니다. 어떤 모델이냐에 따라 최적의 Loss Function이 달라집니다. (회귀모델은 MSE(평균제곱오차)가 최적이라고 함) (👉Cost Function 글 참고)
  3. Back Propagation : 출력층부터 은닉층을 역방향으로 진행하면서 실제값-예측값 오차 기반의 미분 값을 활용하여 가중치W와 바이어스b를 업데이트 합니다. 해당 과정이 반복되면서 Loss가 최소가 되는 지점을 찾게되면, 최적의 가중치W/바이어스b 값을 찾을 수 있습니다.
  4. Optimizer : 어떤 Optimizer를 사용하느냐에 따라 결정되는 Loss의 최솟값이 달라집니다. Optimizer의 성능이 좋을수록 정확한 최솟값을 찾을 수 있습니다. 아래 그림을 예시로 잘못된 Optimizer를 선정했을 경우, 로컬 미니멈을 최솟값으로 선정하게될 것입니다. Optimizer의 예로 기본적인 경사하강법(Gradient Descent)과 좀 더 응용된 Adam이 있습니다.



  • 수치기반 실제 학습과정 예시 (순전파->역전파)
    : 수치를 통해 실제 학습되는 과정에 대한 예시는 아래 링크를 참고하면 됩니다.
    https://wikidocs.net/37406


에포크/배치크기/이터레이션

아래 개념은 실제 모델에 학습을 시킬 때 모델의 성능을 좌우할 수 있는 파라미터입니다.

  1. 에포크 : 전체 학습데이터에 대해 순전파와 역전파 과정이 진행되는 단위입니다. 예를들어 50에포크는 전체데이터를 50번 학습한다는 의미입니다. 에포크가 너무 크거나 작으면 과적합이나 과소적합 현상이 발생할 수 있습니다.
  2. 배치크기 : 전체 데이터에서 몇 개 데이터 단위로 학습시킬지 결정하는 단위입니다.
  3. 이터레이션(step) : 전체 데이터를 모두 학습시키기 위해 배치크기 단위로 몇 번 학습 loop를 돌려야하는지 결정하는 단위입니다.


활성화 함수 (Activation Function)

  • 활성화함수란? 심층신경망 은닉층/출력층의 출력값을 결정하는 함수입니다. 이러한 매커니즘은 실제 뇌를 구성하는 신경 세포 뉴런이 전위가 일정치 이상이 되면 시냅스가 서로 화학적으로 연결되는 모습을 모방한 것입니다.


  • 사용이유 : 퍼셉트론의 출력 값은 보통 wx + b 함수의 형태로 선형함수의 출력 값으로 이루어짐 -> 인공신경망의 능력을 높이기 위해 은닉층을 계속 추가해줌 -> 활성화 함수 없이 선형함수의 출력 값이 중첩되기만 한다면 1개층의 은닉층을 사용하는 것이 여러층의 은닉층을 사용하는 것과 크게 차이가 없음 (ex. 0.20.20.2x 출력 값의 3개 은닉층은 0.004x 출력 값의 1개 은닉층과 차이가 없음) -> 비선형함수의 활성화 함수를 각 퍼셉트론의 연산에 활용하여 은닉층을 여러개 쌓았을 때 능력을 극대화시킬 수 있음 (각 퍼셉트론의 특성을 잘 살릴 수 있음)


활성화 함수 종류

  1. 시그모이드 함수 (Sigmoid function)

# 시그모이드 함수 그래프를 그리는 코드
def sigmoid(x):
    return 1/(1+np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)

plt.plot(x, y)
plt.plot([0,0],[1.0,0.0], ':') # 가운데 점선 추가
plt.title('Sigmoid Function')
plt.show()

위 그림의 그래프는 시그모이드 함수의 그래프입니다.
양수 값이 클수록 1의 가까운 값을, 음수 값이 클수록 0에 가까운 값을 출력하게 됩니다.


  • Vanishing Gradient (기울기 소실)

인공신경망을 Back Propagation(역전파)을 통해 학습시킬 때, Vanishing Gradient (기울기 소실) 문제가 발생할 수 있습니다.
학습시키는 과정에서 시그모이드 활성화 함수를 미분하게 되는데, 미분 최댓값은 0.25로 작은 값이고,
역전파가 진행되면서 미분 최댓값(0.25) 이하의 값이 중첩되어 곱해지면 0으로 수렴하게 되어
기울기가 앞단으로 잘 전달되지 않게 됩니다.


기울기 소실 문제를 방지하기 위해 가중치 초기화나 배치 정규화, 층 정규화 등의 기법이 활용될 수 있습니다.


그래서 시그모이드 함수는 은닉층에서의 사용은 지양되고, 이진 분류를 위해 출력층에서 활용하게 됩니다.


  1. 하이퍼볼릭탄젠트 함수 (Hyperbolic tangent function)

x = np.arange(-5.0, 5.0, 0.1) # -5.0부터 5.0까지 0.1 간격 생성
y = np.tanh(x)

plt.plot(x, y)
plt.plot([0,0],[1.0,-1.0], ':')
plt.axhline(y=0, color='orange', linestyle='--')
plt.title('Tanh Function')
plt.show()

하이퍼볼릭탄젠트 함수는 미분했을 때의 최댓값이 1로
은닉층에서 시그모이드 함수보다는 선호되는 함수입니다.


  1. 렐루 함수 (ReLU)

def relu(x):
    return np.maximum(0, x)

x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)

plt.plot(x, y)
plt.plot([0,0],[5.0,0.0], ':')
plt.title('Relu Function')
plt.show()

렐루 함수는 음수는 0을 출력하고, 양수는 입력값 그대로 반환하는 함수입니다.
그리고 양수일 때의 기울기는 항상 1이라서 깊은 신경망의 은닉층에서 시그모이드 함수보다 훨씬 더 잘 작동합니다.
또한, 단순 임계값을 반환하는 연산이라서, 연산 속도도 빠릅니다.


그러나 음수일 때 기울기는 항상 0입니다. 그래서 기울기가 0인 경우는 퍼셉트론이 죽게되어 다시 회생하는 것이 매우 어렵게 되는 죽은 렐루(dying ReLU) 현상이 발생할 수 있습니다.


  1. 리키 렐루 (Leaky ReLU)

a = 0.1

def leaky_relu(x):
    return np.maximum(a*x, x)

x = np.arange(-5.0, 5.0, 0.1)
y = leaky_relu(x)

plt.plot(x, y)
plt.plot([0,0],[5.0,0.0], ':')
plt.title('Leaky ReLU Function')
plt.show()

리키 렐루 함수는 죽은 렐루 현상을 보완하기 위해 등장한 함수 중 하나입니다.
입력 값이 음수일 경우에 0이 아니라 매우 작은수를 반환하도록 하여 0이 아닌 아주 작은 값의 기울기를 갖게됩니다.
이를 통해 ReLU는 죽지 않습니다.


Reference

반응형

'개발 > AI' 카테고리의 다른 글

[LLM] LLM 발전기  (2) 2025.01.05
[AI] pandas/sklearn을 활용한 머신러닝 모델링  (0) 2024.04.12
[AI] pandas를 활용한 데이터 핸들링 및 전처리  (2) 2024.04.10
KT AI 해커톤 회고 (2)  (2) 2023.11.02
KT AI 해커톤 회고 (1)  (2) 2023.10.27
728x90
반응형




Open LLM Model을 활용하여 Fine Tuning한 모델을 가지고 실제 비즈니스에 적용한 서비스를 만들기 위해
LLM을 테마로 하여 LLM 모델에 대한 개요와 원리 등을 공부하여 블로그로 연재하겠습니다.


먼저 본 글에서는 현재까지의 LLM 발전기에 대해 다뤄보겠습니다.


딥러닝 기반 언어모델의 등장

LLM(Large Language Model)이란? 인간이 활용하는 수많은 자연어를 학습한 딥러닝 기반의 언어모델입니다.



LLM은 딥러닝 기술을 통해 더욱 효율적이고 개선된 성능으로 자연어 처리 및 생성을 수행하기 때문에 위 사진과 같은 벤다이어그램으로 표현할 수 있습니다.


딥러닝의 자연어 처리 분야 적용

RNN(Recurrent Neural Network)이란? 순환신경망, 자연어 문장과 같은 시퀀스한 입력데이터를 받는 모델입니다. 입력으로 주어지는 시퀀스한 데이터의 순서가 달라질 경우, 모델이 의미를 다르게 해석하여 출력도 달라질 수 있습니다.



RNN의 개념부터 다른 이유는 RNN이 자연어 문장과 같은 시퀀스 데이터를 처리하기 위해 처음 등장한 모델이기 때문입니다. (1986년 등장)


위 그림에서 볼 수 있는 것처럼 RNN모델은 토큰(단어) 단위 현재 시점의 입력 정보와 과거 시점의 출력 정보 두 개의 정보를 입력하여 연속적으로 학습시킬 수 있습니다. 하지만 입력 정보의 길이가 길어짐에 따라 학습도 길어지게 되면 오래된 정보일수록 의미가 희미해지는 현상이 발견됩니다. (Vanishing Gradient) 그래서 1997년 아래와 같은 아키텍처의 모델이 등장하게 됩니다.


  • LSTM (Long Short Term Memory)




입력 정보가 길어질수록 과거 정보의 의미가 희미해지는 현상을 보완하기 위해 LSTM 아키텍처가 등장하게 됩니다.
위 그림에서 볼 수 있는 것처럼 LSTM 아키텍처는 각 노드마다 과거 시점의 입력 정보를 추가로 받고,
게이트 단에서 세 개의 입력정보 (과거 시점 입력정보/과거 시점 출력정보/현재 시점 입력정보)를 입력받아서 데이터 활용여부와 방법을 결정하게 됩니다.
자세한 내용은 추후 작성될 RNN글에서 다뤄보겠습니다.


그럼에도 불구하고 과거 시점의 의미가 희미해지는 현상이 완전히 해소되지 않아서 숙제로 남게됩니다.


딥러닝의 대두

2012년 이미지 인식 대회인 ImageNet에서 딥러닝 기술을 활용한 AlexNet 모델이 우승하였습니다.
당시에 AlexNet 모델은 기존 방식을 활용한 이미지 인식 모델의 오류율을 크게 개선하였는데요.
뿐만 아니라 해당 모델을 특정 문제를 해결하는데 뿐만 아니라 다른 문제를 해결하는 데에도 범용적으로 활용할 수 있어서
해당 사건을 계기로 딥러닝 기술에 대한 사람들의 관심이 다시 높아졌습니다.


AlexNet 모델은 대표적은 CNN(Convolutional Neural Network) 모델입니다. 다음에 기회가 된다면 상세히 살펴보겠습니다.


Word2Vec 기술 등장

2013년, 구글의 연구원들은 Word2Vec 이라는 기술을 개발하게 됩니다.
Word2Vec 기술은 단어를 실수벡터 형태로 변환하는 기술입니다. 그리고 실수벡터 형태로 변환하는 과정을 Embedding이라고 합니다.




  • 등장 배경

컴퓨터가 이해할 수 있도록 자연어를 숫자로 변환하는 방식인 One-Hot 인코딩은 표현하고자 하는 단어의 인덱스를 1로, 나머지 단어의 인덱스는 0으로 세팅하는 방식입니다. 하지만 해당 방식은 단어 간의 유사성을 확인할 수 없다는 단점이 있었습니다.
이러한 단점을 보완하기 위해 Word2Vec 기술이 등장하게 됩니다.


  • 유사성을 벡터화하는 방법

단어간의 유사성 정보를 어떻게 벡터에 담을 수 있을까요?
Word2Vec을 관통하는 핵심 개념은 "비슷한 문맥에서 등장하는 단어들은 비슷한 의미를 가진다." 입니다.
강아지라는 단어는 귀엽다, 예쁘다 등의 단어가 주로 함께 등장하는 것처럼요.


위 개념을 기반으로 하는 분포 가설이라는 것을 정의하고,
정의한 분포 가설을 활용하여 학습한 모델에 자연어를 입력하면,
해당 자연어는 유사성 정보가 담긴 벡터로 변환됩니다.


자세한 내용은 👉Embedding글에서 참고 바랍니다.


Transformer 모델의 등장

2017년, 자연어 처리 분야의 딥러닝 연구가 지속되고 있는 중에 구글의 연구진은 "Attention is All you need"라는 논문을 통해 Transforemer 모델 아키텍처를 공개하게 됩니다. 해당 모델은 학습 텍스트가 길어질수록 과거의 정보가 희미해지는 RNN의 고질적인 문제를 획기적으로 해결하였습니다.
RNN의 순차 처리방식을 버리고 맥락을 모두 참조하는 Attention 연산을 이용한 것입니다.


그리고 현재까지 해당 트랜스포머 모델을 기반으로 구글, 메타, OpenAI 등 주요 테크기업을 중심으로 여러 LLM 모델이 개발되거나 개발중이고,
OpenAI의 ChatGPT 서비스가 일반 사용자에게 공개됨에 따라 AI에 대한 대중의 관심이 크게 증가하여
다양한 분야에 LLM을 접목하는 시도가 많이 나타나고 있습니다.


트랜스포머 모델의 자세한 내용은 다음 글에서 다뤄보겠습니다.


Reference

반응형

+ Recent posts