본문 바로가기
딥러닝

신경망 연산: 딥러닝 가중치 계산 방법

by Data Lib 2024. 1. 12.

이번 포스팅에서는 신경망의 연산 방법에 대해 알아보겠습니다. 딥러닝에서 가중치 계산을 어떻게 하는지에 대해 많은 사람들이 궁금해합니다. 저 또한 처음에 어떤 방식으로 계산하는지 알기 위해 선형대수를 다시 공부했던 생각이 납니다. 그만큼 수학과 관련성이 높은 영역이 딥러닝의 계산 방식입니다. 

 

 

신경망의 내적(행렬 곱)

이전 "텐서(Tensor)의 개념"에 대해 배웠습니다. 딥러닝에서는 텐서가 Input으로 들어가기 때문에 계산식이 다차원 배열을  곱하는 방식입니다.

  1. 배열을 곱하려면 먼저 두 행렬의 대응하는 차원의 원소 수를 일치시켜야합니다.
  2. 왼쪽 행렬의 행(가로)과 오른쪽 행렬의 열(세로)을 원소별로 곱하고 그 값을 더해서 계산합니다. 예를 들면, h1 =  W11 X1 + W12 X2 + W13 X3 식입니다. 
  3. 결국 가중치를 차례로 곱해주면 h1 , h2, h3 구할 수 있습니다. 
  4. 이러한 연산을 텐서플로(TensorFlow)에서는 MatMul이라는 함수를 사용하여 수행합니다. 

신경망 연산
신경망 연산


선형대수학을 사용하는 이유

왜 딥러닝을 공부한다고 하면 선형대수를 알아야 한다고 할까요? 그 이유는 신경만 계산 방식에 있었습니다. 딥러닝의 경우 변수가 많아지고 가중치를 반복적으로 곱해줘야 하기 때문에 이런 경우 가장 적합한 계산이 행렬 계산입니다. 일일이 연립 방정식으로  계산할 필요가 없이 행렬(Metrix) 계산으로 모두 가능하고 매우 간결해지죠. 뉴런의 개수를 n개로 확장하여 대량의 데이터에 대해서도 컴퓨터가 계산을 하는데 적합한 방식이 바로 행렬 계산입니다. 

 

그러면 컴퓨터가 계산하면 되는데 왜 내가 계산해 봐야 하나요?라고 의문을 가질 수 있습니다. 내가 수식으로 계산해 보아야  컴퓨터가 어떻게 계산할지를 감각으로 알 수 있습니다. 

 

신경망 연산 방법

은닉층(hidden Layer) 계산

  • 가중치와 속성(Feature) X1과 행렬곱을 하면 a가 나오고 Sigmoid함수에 넣으면 h1 이 결과로 나옴
  • W11 X1 + W12 X2 + W13 X3 = a Sigmoid(a) = h1
  • 반복적으로 작업을 하면 h1 , h2, h3 구할 수 있음

은닉층 계산
은닉층 계산

출력층(Output Layer) 계산

  • 은닉층에서 계산된 결과를 가중치와 3번과 같이 행렬곱을 해주면 임의의 a, b를 구함
  • 역시 Sigmoid함수에 넣으면 출력층 결과인  y1 , y2 구할 수 있음
  • 간단한 계산을 위해 bais를 생략했지만 bais를 넣으면 전체 신경망에 대한 연산임

출력층 계산
출력층 계산

 

브로드캐스팅(Broadcasting) 

머신러닝도 두 행렬 A, B가 있을 때 두 행렬이 곱셈을 할 때에는 A의 마지막 차원과 B의 첫 번째 차원이 일치해야 합니다. 이건 앞에서도 말했던 부분입니다. 물론, 이런 규칙들이 있지만 딥러닝을 하게 되면 불가피하게 크기가 다른 행렬 또는 텐서에 대해서 사칙 연산을 수행할 필요가 있는 경우가 생깁니다. 이를 위해 자동으로 크기를 맞춰서 연산을 수행하게 만드는 브로드캐스팅이라는 기능을 제공합니다. 형상이 다른 배열 연산을 자동으로(스마트하게) 할 수 있습니다.

 

브로드캐스팅 단계

  1. 큰 텐서의 차원에 맞도록 작은 텐서에 축이 추가됨
  2. 작은 텐서가 새 축을 따라서 큰 텐서의 크기에 맞도록 반복됨

브로드캐스팅이 일어날 수 있는 조건

  • 차원의 크기가 1일 때 가능하다
  • 두 배열 간의 연산에서 최소한 하나의 배열의 차원이 1이라면(0번 축이든 1번 축이든; 1행이든 1열이든) 가능하다.
  • 차원의 짝이 맞을 때 가능하다
  • 차원에 대해 축의 길이가 동일하면 브로드캐스팅이 가능하다.

브로드캐스팅
브로드캐스팅