본문 바로가기
NLP/AI 이론

[AI Math] 딥러닝 수식 뽀개기

by ㅣlㅣl 2024. 4. 16.

네이버 부스트코스에서 제공하는 임성빈 님의 강의를 참고하여 작성된 포스팅입니다.


신경망 (neural network)

지난 번에 다룬 포스팅에서는 선형회귀 분석에 대해 간략하게 다뤘었다.

신경망은 이와 달리 비선형적인 모델이다.

  • 선형모델 : 계수들이 선형결합의 관계에 있을 때의 모델
  • 비선형 모델 : 어떤 변형을 거쳐도 파라미터를 선형 결합으로 표현할 수 없는 모델
    • ex. sigmoid를 거친 값은 선형 결합으로 표현 불가 
    • sigmoid는 이후 activation function에서 따로 다룰 예정이다

 

비선형 모델은 어떤 이점을 가지는가?

  • 신경망의 표현력을 높일 수 있다
    • 현실 세계 대부분의 문제는 비선형이므로, 문제 풀이에 더 유리하다
  • 심층 신경망
    • 선형 함수의 경우 여러 개의 레이어를 통과해도 결국 하나의 선형 결합으로 표현됨
    • 심층 신경망을 쌓는 의미가 희석된다

 

왜 심층 신경망을 만들어야 할까?

  • 깊은 신경망을 쌓으면 점진적으로 더욱 복잡하고 추상적인 특징을 학습
  • 단일 레이어의 신경망은 선형 변환만 수행할 수 있지만, 여러 개의 레이어를 쌓음으로써 더 복잡한 비선형 변환을 학습 -> 더 복잡한 함수 근사 가능
  • 더 많은 데이터 패턴을 학습하고 더 정확하게 모델링할 수 있음
  • 이론적으로는 2층 신경망으로도 임의의 연속함수 근사 가능 (=universal approximation theorem)
  • 층이 깊을수록 목적 함수를 근사하는 데 필요한 뉴런의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적 학습이 가능

 

 

신경망을 수식으로 분해해보자

신경망을 간단하게 수식으로 나타내면 다음과 같다.

O = X*W + b
  • O : 출력 (nxp)
  • X : 입력  = 데이터 (nxd)
  • W : 가중치 (dxp)
  • b : 절편 (nxp)

 

이를 행렬 형태로 나타내면 다음과 같다.

 

분류 태스크에 적용하기 위해, 출력 벡터 O에 softmax를 합성해 확률벡터를 만든다

  • softmax

각각의 행벡터를 확률값으로 변환 -> 해당 행벡터가 특정 클래스 k에 속할 확률 해석 가능

 

 

다층 퍼셉트론 (MLP)

 

활성 함수 (Activation function)

신경망 모델도 결국 비선형화를 시켜주는 함수를 거치지 않으면 선형 계산을 여러 번 한 것에 불과하다.

따라서 깊은 신경망을 쌓기 위해서는 비선형화 진행이 필수적이다.

 

이렇게 비선형화를 진행해주는 함수를 신경망에서는 활성 함수라고 지칭한다.

  • 활성함수 예시

 

 

순전파 (forward propagation)

MLP에서 순차적으로 신경망이 계산되는 과정을 알아보자.

  • 다층 퍼셉트론 구조도

 

역전파 (Back propagation)

딥러닝의 가장 큰 이점 중 하나

 

학습을 반복할 때마다 역전파 알고리즘을 이용해 각 층의 파라미터 (W, b)를 학습할 수 있다!

즉, 문제를 풀이하기 위한 최적 함수에 점점 가까워지는 것이다.

 

역전파는 순전파의 진행 방향과 반대순서로 그래디언트 벡터를 전달한다.

손실함수 L에 대해, dL / dW 를 구하는 것이 목표이다.

계산 시에는 합성함수 미분법인 Chain-rule 기반 자동 미분을 사용한다.

 

 

chain rule

y에 대한 z의 미분값, x에 대한 y의 미분값을 구하면 x에 대한 z의 미분값을 구할 수 있다

 

다음과 같은 수식이 있다고 가정하자.

 

chain rule에 따라, x에 대한 z의 미분값은 다음과 같이 계산된다.

 

 

이제 직접 2층 신경망의 역전파 알고리즘을 계산해보자!

 

여기서 dL / dW(1) 의 값을 구해보자.

chain rule을 이용해 수식을 나타내면 다음과 같다.

 

이를 계산하기 위해, 구성하는 각각의 값을 구해보자.

 

 

'NLP > AI 이론' 카테고리의 다른 글

다양한 디코딩 전략 : model.generate()에 관한 고찰  (0) 2024.08.08
[AI Math] 기본 확률론 정리  (0) 2024.04.16
[AI Math] 경사하강법  (1) 2024.01.28
[AI Math] 벡터와 행렬의 개념  (1) 2024.01.28
[Python] NumPy & Pandas  (1) 2024.01.28