딥러닝은 인간의 뉴런과 비슷한 인공신경망(Artificial Neural Network, ANN) 방식으로 정보를 처리한다. 따라서 이 신경망을 학습시키는 것이 딥러닝의 핵심이다.
예를들어,집값을 결정하는 요인에는 평수, 방의 개수, 주변 환경 등 여러 가지가 있다. 집값을 y라 하고 집값을 결정하는 요인(특성) 중 하나를 x1이라 하자. 그렇다면 x1에 의해 결정된 y의 데이터가 여러 개 쌓이면, 어떤 함수를 도출해낼 수 있을 것이다. 이 함수를 노드(node)라고 하고, x1이 노드를 거쳐서 y가 되는 일련의 과정(x1 → node → y)을 뉴런(neuron)이라 한다.
노드는 선형 함수일 수도 있고 비선형 함수일 수도 있지만, 보통 신경망에서 많이 보이는 형태는 선형 회귀곡선 중 하나인 ReLU(Rectified Linear Unit) 함수 형태이다. ReLu의 Rectify는 결과값과 0 중 큰 값을 취하라는 의미로, 뉴런은 입력받은 x1으로 선형 함수를 계산한 결과값과 0 중 큰 값을 집값 y로 예측한다.
x2, x3, x4...도 x1과 같은 방법으로 뉴런을 생성하고, 이 뉴런들이 쌓이면 신경망이 형성된다. 입력되는 데이터의 양은 많을수록 좋은데, 해당 뉴런과 관계없는 데이터도 입력으로 넣어주면 신경망은 학습을 통해 관계 여부를 알아서 조정한다.
결과적으로 신경망이란 x와 y 사이의 관계를 나타내는 함수를 찾는 과정이다.
ReLU 함수는 활성화 함수의 한 종류이다.
활성화 함수란, 개별 뉴런에 들어오는 입력 신호의 총합을 출력 신호로 변환해주는 함수이다. 활성화 함수로는 대부분 비선형 함수를 사용하며, 대표적으로 시그모이드(Sigmoid) 함수가 있다.
시그모이드 함수는 입력 신호의 총합을 0에서 1 사이의 값으로 변환해주는 함수이다. 입력 신호의 값이 커질수록 1에 수렴하고, 입력 신호의 값이 작아질수록 0에 수렴한다.
인공신경망의 Layer들은 파이썬에서 NumPy 배열로 표현되며 가중치 매트릭스를 나타낸다. 인공신경망은 기본적으로 이 배열들 간의 곱 연산을 통해서 출력 계층에서 목표로 했던 값을 구한다.
배치라 함은 묶음이라고 보면 되는데, 일반적으로 100개의 샘플에 대해서 예측을 한다면 각 샘플에 예측식을 계산하여 예측을 하는데 이 때 약 총 100번의 계산을 하게 된다.
배치를 적용해서 약 배치의 개수를 50이라 한다면 예측식에 50개의 샘플을 넣어 계산하도록 하여 결과적으로 컴퓨터가 총 2번의 계산을 하게 된다.
이는 컴퓨터의 과부화를 줄여 원래 배열보다 큰 배열로 계산을 하게 하여 연산을 빠르게 해준다. 배치를 처리하면 데이터를 효율적으로 빠르게 적절하게 묶어서 학습할 수 있게 된다
예를 들어 신경망의 내적으로 본다면
[[ Batch 1 ]]
(1, 784) → (784, 50) → (50, 100) → (100, 10) → (10, 1)
하나의 샘플(행)에 대해서만 한다면 위와 같이 신경망이 구성될 것이다
[[ Batch 100 ]]
만약 배치를 100으로 한다면
(100, 784) → (784, 50) → (50, 100) → (100, 10) → (10, 100)
위와 같이 최종 결과는 100개 샘플에대한 10개 뉴런에 대한 아웃풋이 나온다.
앞에서 말했던 것처럼 (a,b) 와 (c,d)의 행렬 곱에서는 b와 c가 같아야하고, 결과는 (a,d)의 형태로 나온다.