머신러닝이 머신데

2. 딥러닝 (DL) 기초 및 심화 본문

ML

2. 딥러닝 (DL) 기초 및 심화

xooooooj 2025. 3. 27. 12:55

 

필수 개념

1. 신경망의 개념 및 학습 원리
2. CNN이란?
3. RNN이란?
4. Transformer란?
5. Generative Models란?

1. 신경망의 개념과 학습 원리는?

더보기

신경망의 기본 개념

  • 뉴런 : 여기서 말하는 뉴런은 생물학적인 뉴런을 수학적으로 모델링한 것인데, 실제 뉴런이 입력 값을 받아 세포체에 저장하다가 자신의 용량이 넘어서면 외부로 출력값을 보내는 것처럼, 인공신경망 뉴런도 여러 입력값을 받아 일정 수준이 넘으면 활성화되어 출력값을 내보낸다. 
  • 가중치: 
  • 활성화 함수(Activate Function): 위 뉴런 설명에서 입력값의 총합을 활성화하여 출력값을 내보낼 때 이 함수를 통해 계산된 값을 출력하게 된다. 이러한 활성화 함수는 신경망이 비선형 문제를 해결할 수 있게 하며, 복잡한 패턴을 학습할 수 있게 한다. 입력 신호를 비선형적으로 변환하여, 신경망이 선형 회귀나 로지스틱 회귀로는 해결할 수 없는 복잡한 문제를 해결할 수 있게 한다. 
    → 여기서! 비선형성이라는 키워드가 중요한데.. 비선형성은 신경망이 단순 선형 변환만으로 해결할 수 없는 복잡한 문제를 다루게 하며, 현실 속 데이터는 대부분 비선형적이기 때문에, 비선형 활성화 함수는 이러한 복잡한 패턴을 학습하고 예측할 수 있게 한다.
    • ReLU: 입력 값이 0보다 작으면 0을 출력하고, 0보다 크면 입력값을 그대로 출력하는 함수로, 주로 심층 신경망에 사용한다. 0으로 출력하면서 장단점이 있는데 단점은 dead neuron 문제가 생길 수 있음. 장점은 시그모이드 활성화에서 생길 수 있는 기울기 소실(Gradient vanishing) 문제를 완화할 수 있음.
    • Sigmoid: 출력 값을 0과 1 사이로 변환하는 함수로, 주로 이진 분류 문제에 사용한다. x 값이 크거나 작을 경우, 기울기가 매우 작아져 학습 속도가 느려지는 기울기 소실(Gradient vanishing) 문제가 생길 수 있음.
    • Tanh: 출력 값을 -1에서 1로 변환하는 함수로, 시그모이드 함수보다 학습 속도가 빠르다. 
    • Softmax: 다중 클래스 분류 문제에서 사용되며, 출력 값을 확률로 변환하여 각 클래스에 속할 확률을 출력한다.
     

신경망의 구조

신경망의 구조
  • 입력층: 데이터를 입력받는 계층
  • 은닉층: 입력 데이터를 처리하고, 모델이 학습할 수 있는 특성을 추출하는 계층, 이 은닉층이 2개 layer 이상일 경우 DNN이라 함
  • 출력층: 최종 결과를 출력하는 계층

이러한 구조가 기본 구조이며, 어떤 계층이 변형되고 추가되느냐에 따라 CNN, RNN이 될 수 있음. 

학습 원리

Foward propagation(순전파)

1. 입력층에서 받은 입력값(x 값)을 은닉층에서 가중치와 편향 연산과 활성화 함수를 통해 각 레이어에서 계산함.

2. 은닉층에서 계산한 예측 값들을 출력층으로 보냄.

--------

3. 출력층에서 받은 예측 값(y' 값)을 실제 값(y 값)과의 차이를 손실 함수로 구함.

--------

backward propagation(역전파)

4. 손실 함수를 최소로 하기 위해 경사 하강법을 통해 가중치를 업데이트함.

5. 다시 입력에서 받은 입력값들을 업데이트된 가중치와 활성 함수로 연산하여 출력층에 보내고 손실 함수를 구함. 
이 과정을 손실 함수가 최소가 되도록 정해진 Epoch만큼 반복함.


그럼 여기서 ☝️ 가중치를 업데이트하는 경사 하강법이 무엇일까?

  • 경사 하강법: 손실 함수의 기울기를 따라 가중치를 업데이트하여 손실 함수를 최소화하는 방법

1. 현재 가중치에 대한 손실 함수의 기울기를 계산.
2. 기울기를 바탕으로 가중치를 업데이트하는데, 이 때 학습률(learning rate)를 통해 업데이트의 크기를 조절함.
3. 손실 함수의 값이 충분히 작아질 때까지 위 프로세스 반복.

경사 하강법을 통해 정확한 예측 모델을 구현하게 되는데, 이러한 경사 하강법에는 여러 가지 방식이 있음. 이러한 방식들을 Optimizer라고도 부른다. 손실 함수를 최적화하여 예측을 정확하게 맞추기 위한 프로세스이기 때문에 최적화 알고리즘이라 부르는 것 같다.

원래 Gradient Descent는 전체 데이터셋에 대해 기울기를 계산하고 가중치를 업데이트한다. 이렇게 되면 큰 데이터셋에서는 너무 많은 연산량으로 인해 오래 걸려 효율적이지 않은 방법이라 할 수 있다. 이러한 문제를 해결하기 위한 방식들이 아래와 같다.

  • SGD(Stochastic Gradient Descent): 전체 데이터셋이 아닌 무작위로 선택된 일부 데이터에 대해 기울기를 계산하고 가중치를 업데이트함.
  • Mini-batch gradient descent: 데이터셋을 작은 배치로 나누어 각 배치에 대한 기울기를 계산하고 가중치를 업데이트.
  • Momentum: 이전 기울기의 방향을 고려하여 가중치를 업데이트하는 방법, 진동을 줄이고 수렴을 향상시킴.
  • Adam(Adaptive Moment Estimation): 학습률을 적응적으로 조절하여 가중치를 업데이트하는 방법으로, 학습 속도와 안정성을 동시에 향상시킴.

모델의 성능은 경사하강법과 더불어 학습률, 또다른 최적화 기법으로 향상시킬 수 있다. 각 데이터와 모델에 맞게 최적화 기법을 적용하며 모델의 성능을 향상시킨다. 학습률의 크기를 크게 하면 학습과정이 불안정해질 수 있고, 너무 작으면 학습 속도가 느려지기 때문에 적절히 조정하며 모델을 최적화시킬 수도 있고, 또 다른 방법으로는 아래와 같은 방법이 있다. 학습을 하다보면 너무 깊은 네트워크나 너무 많거나 적은 편향된 데이터로 인해 과적합이 올 수 있는데 이러한 과적합을 막기 위한 방식들이다. 

  • 드롭아웃(dropout): 학습 과정에서 일부 뉴런을 무작위로 제거하여 과적합을 방지하는 방법.
  • L2 정규화(L2 Regularization): 손실 함수에 가중치의 제곱합을 추가하여 과적합을 방지하는 방법.
  • 배치 정규화(Batch Nomarlization): 각 배치마다 입력 데이터를 정규화하여 학습 속도를 향상시키고, 과적합을 방지하는 방법.

2. CNN 이란?

더보기

: CNN(Convolution Neural Network)이란 이미지 인식과 처리에 많이 사용되는 합성곱 신경망으로, Convolution layer, Pooling layer, Fully Connected layer로 구성되어 있다. CNN은 이미지의 공간적 특성을 효과적으로 학습하여 높은 성능을 발휘함.

 

1) CNN 프로세스

CNN process

Convolution layer

1. 입력값으로 받은 이미지에서 특정 크기의 kernel(ex. 3x3 filter)이 이미지를 stride 값만큼 이동하면서 전체 이미지를 돌며 합성곱 연산을 하여 이미지의 특정 패턴을 인식할 수 있는 feature map을 만들고 여기에 Activation function을 계산하여 Convolution layer를 만듦.

Pooling layer

2. 이렇게 생성된 Convolution layer는 너무 많은 값들이 생성되어 연산이 오래 걸리며, feature를 추출하기 어렵기 때문에 Convolution으로 생성된 feature map의 차원을 축소해주는 Pooling 과정을 진행함. feature map에서 corelation이 낮은 값은 소거하며 더욱 간소화된 feature map을 얻음.

위 과정을 반복하여 다시 Convolution을 하고, Pooling을 하여 더 작아진 feature map을 얻음.

Flatten layer

이 feature map을 한 개의 열로 flatten하게 만드는 과정으로 텐서를 일 자형태로 펼친 vectorization된 값을 얻음.

Fully Connected layer

이전 층에서 추출된 특징을 기반으로 최종 출력을 생성하는 역할을 함. 완전 연결 층에서는 모든 입력 뉴런과 출력 뉴런이 연결된 구조, 이 층에서 주로 softmax 활성화 함수를 사용해 각 클래스에 속할 확률을 계산함.

 

3. RNN 이란?

더보기

: RNN(Recurrent Neural Network)은 입력과 출력을 시퀀스 단위로 처리하는 Sequence model, 순환 신경망이라 하는데 그 이유는 유닛 간의 연결이 순환적 구조를 갖는 특징을 가지고 있기 때문임. 다른 네트워크들은 전부 은닉층에서 출력층으로 향하는 feed foward 방식이지만, RNN의 경우, 은닉층에서 나온 활성화 값을 출력층으로 보내면서도 다시 은닉층으로 보내 입력값으로 활용하는 특성을 가짐. 이러한 재귀적 특성이 자기 자신을 참조하기 때문에 현재 결과가 이전 결과와 연관성을 갖게 되어 연속적인 값을 처리할 때 효과적이다. 그렇기 때문에 시간의 연속성이 있거나, 문맥이 있는 데이터를 처리할 때 특화된 신경망이다.

RNN에는 다양한 구조들이 있는데, 이 구조는 일대다 구조, 다대일 구조, 다대다 구조이다.
그림으로 살펴보면, 아래와 같은데, 이들의 구조는 어떤 input을 통해 어떤 output이 나오느냐에 따라 어떤 태스크에 활용할 수 있을지 알 수 있다. 일 대 다의 경우 하나의 이미지가 들어왔을 때 하나의 문장으로 이미지를 설명하는 image captioning 작업을 할 수 있고,
다 대 일의 경우, 여러 텍스트가 들어왔을 때 이 텍스트에 대한 하나의 카테고리를 분류하는 분류 작업을 할 수 있고,
다 대 다의 경우, 여러 텍스트가 들어왔을 때 이 텍스트들에 맞는 대답을 하는 챗봇이나 번역, 품사 태깅 등의 작업을 할 수 있다.

RNN 프로세스를 각각의 구조에서 어떻게 학습되는지를 확인해보려 한다.

1) RNN 프로세스

1. 문장을 단어 단위로 받게 되면 이 단어에 대해 하나씩 계산을 하게 된다. 여기서 I, work, at, google을 각각 x1, x2, x3, x4라고 하면, h_1 = tanh(W_{xh}x1 + b) 로 연산이 되게 됨.

2. 다음 단어에서는 앞 단어의 메모리를 가지고 연산하기 때문에 h_2 = tanh(W_{hh}h_1 + W_{xh}x2 + b)로 이전 값 h_1을 넣어 연산하게 됨. 이렇게 이어서 다음 단어에서도 반복을 하며 값을 계산함.

3. 이러한 연산 값들을 softmax로 계산하면 각 클래스에 속할 확률을 출력할 수 있음. 이 출력값을 통해 각 단어들이 어떤 품사인지를 예측할 수 있음.

4. 학습에서는 이러한 예측 값들을 실제 타겟 값과 비교하며 차이를 줄여가도록 Gradient descent를 통해 가중치 Whh, Wxh와 b 값을 제어하며 최적화함. 
여기서 RNN에서의 특별한 back propagation 개념이 등장하는데, RNN에서는 각 time seriese마다에 있는 동일한 변수를 바꾸는 것이기 때문에 back propagation through time(줄여서 BPTT)이라고 함. 

: 마지막 ht 값을 softmax 계산하여 각 클래스에 속할 확률을 구하며, 위 품사 태깅 과정과 학습 방식은 동일함. 

- RNN의 단점: 이전 시점의 값을 반영하여 연산하기 때문에 시점이 뒤로 갈수록 앞의 정보가 충분히 전달되지 않기 때문에 정보량의 손실이 발생함. 이를 RNN의 장기 의존성 문제라고 함.

이러한 문제를 해결하기 위해 장단기 LSTM과 게이트 순환 유닛 GRU라는 발전된 RNN 모델이 있음.

4. Transformer 란?

더보기

: Transformer는 구글이 발표한 "Attention is all you need(2017)"이라는 유명한 자연어 처리 관련 논문에서 나온 모델로 기존 seq2seq 구조의 encoder-decoder 구조를 따르면서도, Attention만으로 구현한 모델, 이 모델은 특히 RNN이 다루는 텍스트 데이터에 우수한 성능을 보이는데 RNN 구조와 다른 구조로 설계되었음에도 좋은 성능을 보임. 쉽게 말해 Transformer는 문장의 의미를 이해하고 생성하는데 탁월한 능력을 가진 AI 모델. 오늘날의 ChatGPT, BERT 등의 기술 근간이 되는 모델.

순차적으로 데이터를 처리하는 기존의 RNN, LSTM, GRU와 달리 문장의 모든 단어를 동시에 처리할 수 있음. (병렬 처리 가능)

부연 설명
☞ 여기서... Seq2seq는 또 무엇이냐? 한다면, 번역 작업에서 대표적으로 사용되는 모델로, RNN을 조립한 형태인데 이는 인코더와 디코더 구조로 되어 있음. 인코더와 디코더 내부는 RNN 아키텍쳐로 이루어져 있다 생각하면 됨. 인코더에서는 입력 문장을 단어 토큰화로 쪼개고 각 단어들이 RNN으로 들어가 마지막에 이 모든 단어 정보들을 압축해 하나의 컨텍스트 벡터(Context vector)로 만듦. 이를 디코더로 전송해 디코더는 컨텍스트 벡터를 받아 번역된 단어를 한 개씩 순차적으로 출력하는 형태. 

그러니까 seq2seq와 transformer는 같은 인코더-디코더 구조를 가지지만, 내부 구조가 attention으로 되어 있으면 transformer, RNN으로 되어 있으면 seq2seq라는 것. 왜 attention이 더 좋은 성능을 보일까? RNN의 단점중에 장기 의존성 메모리라는 특성 때문에 앞의 단어에 대한 정보를 잃을 수 있어 성능이 낮다는 것을 보완한 걸까?라고 의심했는데 맞다.

디코더에서 인코더의 마지막 타임스텝에서 나온 수치 정보를 활용해 target 문장을 복원하려다 보니 정보 손실이 발생했다고 한다. 그래서 뒤에 Self-attention이라는 구조가 추가되면서 길이에 구애받지 않는 번역이 가능해지게 되었다고 한다. 

그럼 또, Self attention은 무엇인가? 
일단 이 attention의 기본 아이디어는 인코더의 마지막 타임스텝에서 나온 수치 정보만으로는 부족하닌 디코더에서 출력 단어를 예측하는 매 시점마다 인코더의 전체 입력 문장을 다시 한 번 참고한다는 것이라 한다. 단, 전체 입력 문장의 단어를 동일한 비율로 참고하는 것이 아닌 해당 시점에서 예측해야 할 단어와 가장 연관이 있는 단어를 좀 더 집중(attention)해서 보겠다는 것. 

어떤 기준으로 집중한다는 건지?
- 단어를 Query, Key, Value 벡터로 변환하는데 이 단어의 쿼리 벡터와 다른 모든 단어의 키 벡터 사이에서 내적(두 벡터의 유사도, 가리키는 방향)을 계산하여 해당 단어가 다른 단어들에 얼마나 "attention"해야 하는지 수치적인 정도를 나타냄.
Query → 무엇을 찾는지, Key → 어떤 정보를 가지고 있는지, Value → 실제로 어떤 정보를 전달하는지
- 계산한 점수에 softmax를 적용해 확률 분포로 변환하여 각 단어들 간의 관계를 강조하며 상대적 중요도를 수치화함.
- 이 확률을 각 단어의 값 벡터와 곱하고 모두 더해 최종 출력을 만드는데, 최종 출력은 현재 단어의 의미를 주변 단어들과의 관계를 고려해 새롭게 표현한 것으로 단순히 단어의 의미뿐 아니라 문맥 속에서의 의미를 포함하게 됨.

요약하자면, Self-attention은 문장 내 모든 주변 단어와의 관계를 통해 어떤 단어가 중요한지 문맥 속에서 파악하며 중요한 단어의 가중치를 올리며 전체 문장의 더 정확한 의미를 반영할 수 있음.

1) Transformer의 구조

(left) Encoder - (right) Decoder

 

 1. input embedding을 거쳐 positional encoding을 하는데, 이는 RNN과 달리 순차적으로 데이터를 입력 받는 것이 아닌 동시에 입력 받음으로써, 순서 정보가 사라지게 될 수 있기 때문에 위치 정보를 입력하는 임베딩인 positional encoding을 하는 것.

2. positional encoding이 된 input 데이터는 Encoder로 들어가 Self attention 연산을 통해 데이터를 변환하게 됨. 그림에서와 같이 Multi-head self attention하는데 이는 Self attention을 여러번 수행하는 구조를 말함.

3. Encoding을 거친 입력 데이터를 출력 데이터와 같이 연산해 최종 결과를 출력하는 Decoder 모듈에 넣게 되는데, 이 때 Decoder에는 두 가지 self attention 변형 버젼이 포함되어 있음. Masked Multi head attention은 학습 시, target 데이터를 못보도록 masking 처리를 하여 prediction 하도록 번역해야 하는 단어부터는 모두 masking 처리를 순차적으로 함. → 이렇게 masking한 뒤 번역된 정보에 대해 self attention 연산을 수행함.

다음은 Cross self attention으로 위 그림에서 Multi head attention이라고 표현된 부분을 말하며, 이 모듈은 input으로 번역할 정보와 output으로 번역된 정보를 받도록 되어 있음. 이 두 가지 정보의 관계를 고려해 Self attention을 수행해야 함. 따라서, Query와 Key는 번역할 정보, Value는 번역된 정보로 구성.

4. 마지막으로 Line

 

5. Generative model 이란?

더보기

: Generative model은 뜻 그대로 생성형 모델로, 기존 데이터를 학습해 새로운 데이터를 생성하는 모델이다. 형태에 따라 다양한 생성 모델들이 있는데, Image로는 유명한 diffusion model, GAN, VAE 등이 있고, Text로는 더 유명한 LLM 모델들이 있다. 요즘은 Audio, Video, 이들을 합친 Multi-modal 생성 모델들이 있는데, 여기서는 보다 전통적인 개념들을 다뤄보려 한다.

Image에서는 GAN, VAE, Diffusion / Text에서는 LLM / Multi-Modal에서는 stable diffusion 등의 기본 구조, 학습 원리를 공부하려 한다.

이어서 작성 예정....!

'ML' 카테고리의 다른 글

1. 머신러닝 기초 [필수 개념]  (0) 2025.02.14
ML/DL 부족한 개념을 채워보자.  (0) 2025.02.12