왜 딥러닝이 필요한가?
- 단순한 데이터에 대해서는 선형모델만으로도 괜찮음
- 하지만 분류와 같은 복잡한 문제에 대해서는 신경망 모델을 사용 (비선형 모델)
- 선형모델과 비선형모델의 결합 → 비선형 패턴을 그리는 신경망 모델 구축
(선형 결합) X와 W의 곱을 통해 선형모델 표현 가능
전체 데이터 행렬 X (n × d)
데이터를 다른 벡터 공간으로 보내줄 가중치 행렬 W (d × p)
y절편에 해당하는 벡터들을 모든 데이터행에 대해서 복제한 행렬 b (n × p)
→ 이로인한 새로운 결과 O (n × p)
→ d개의 변수로 p개의 선형 모델을 만듦!
→ 원래 데이터가 모여있는 d 차원에서 출력 벡터와 같은 p 차원으로 바뀌게 됨
→ d 차원에서 p 차원으로 보내주는 가중치 행렬 W(d×p)를 곱해주었기 때문
신경망(Neural Network)
* 선형모델과 활성함수(activation function)을 합성한 함수
* 소프트맥스 함수: 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산 \
* 소프트맥스 함수를 사용하는 이유는 벡터를 확률벡터로 변환하여 학습 시 사용할 수 있도록 해주기 때문
* 하지만 추론을 할 때는 one-hot 벡터로 최대값을 가진 주소만 1로 출력하는 연산 사용 → softmax 사용 필요 없음
* 가중치 행렬의 수에 따라서 신경망의 층이 정해짐
* 그리고 신경망이 여러 층이 합성되어있을 때 다층 퍼셉트론(MLP, Multi-Layer Perceptron)이라고 부름
* 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 효율적 학습이 가능함!
(단, 층이 깊어지면 깊어질수록 학습 및 최적화는 어려워질 수 있음 -- 이 문제 해결을 위해 Residual Block 사용)
활성함수 (Activation Function)
- 실수 값을 입력으로 받아서 다시 실수값을 내놓는 비선형 함수
- 선형함수의 출력물인 Z(확률 실수값)에 일괄적으로 활성화 함수가 적용되어 행렬 H를 내놓음 (이게 한 층의 레이어)
- 딥러닝 모델에 활성화 함수를 적용하지 않는다면, 선형 함수와 다를 바가 없음 -- 꼭!! 적용해주는 것에 유의!!!
- 대표적으로 sigmoid 함수, tanh 함수, ReLU 함수가 있고, 최근 딥러닝에서는 ReLU를 많이 사용하고 있음
- Forward Propagation: 순전파, 순차적인 신경망 계산. (학습이 아니라 단순하게 계산하는 것)
- BackPropagation: 역전파, 경사하강법을 적용해서 각 층에 있는 가중치 행렬의 값을 업데이트!
역전파?
- 경사하강법을 적용해서 각 층에 있는 가중치 행렬의 값을 업데이트!
- 모든 원소의 개수만큼 적용
- 선형 모델보다 훨씬 더 많은 파라미터에 대해서 미분 적용
- 선형 모델은 한 층에서만 미분하지만, 딥러닝은 층이 순차적으로 쌓여있기 때문에 역순으로 Chain-Rule에 따라 계산
- 각각의 가중치 행렬 Wi에서 손실함수 L에 대한 미분을 수행 (손실함수가 줄어드는 방향으로 == 오차 줄이기)
- 역순으로 가는이유? 위층에서 계산한 후, 이를 밑에 층에 전파하여 연쇄법칙을 기반으로 자동 미분을 사용
- 미분을 계산하기 때문에 역전파가 순전파보다 메모리를 좀더 많이 사용함
본 포스트는 부트코스 내 네이버 부스트캠프 AI Tech 5기 강의를 토대로 작성되었습니다