DL 공부를 시작하기에 앞서 전체적인 딥러닝의 흐름을 키워드를 사용하여 정리해보았다.
거의 배낀거지만... 출처는 하단에 표기
딥러닝은 연속된 층(Layer)에서 점진적으로 의미 있는 표현을 배우는데 의의가 있다. 얼마나 많은 Layer를 사용했는지가 그 모델의 Depth가 된다.
이러한 Layer를 겹겹이 쌓아 올려 구성한 신경망(neural network)이라는 모델을 사용하여 표현 층을 학습한다.
Layer 에서 Layer로 데이터가 [ 입력-> weight 계산 -> 출력 ] 되는 과정을 딥러닝에서는 Feed-Forward라 부른다.
Layer에서 입력 데이터가 처리되는 상세 내용은 일련의 숫자로 이루어진 층의 가중치(Weight)에 저장되어 있다. 어떠한 Layer에서 일어나는 변환은 그 층의 가중치를 파라미터(Parameter)로 가지는 함수로 표현된다.
이러한 맥락을 볼 때 학습이란 주어진 입력을 정확한 타깃에 매핑하기 위해 신경망의 모든 층에 있는 가중치 값(Weight Matrix)을 찾는 것을 의미한다.
어떤 심층 신경망은 수천만 개의 파라미터Parameter를 가지기도 하기 때문에 모든 파라미터의 정확한 값을 찾는것이 어렵다. 파라미터 하나의 값을 바꾸면 다른 모든 파라미터에 영향을 끼치기 때문이다. 이 모든 파라미터를 고려하여 일일히 사람이 계산하는것이 불가능하기 때문에 딥러닝이 필요한 듯 하다.
어떤 것을 조정하려면 일단 관찰이 필요하다. 신경망의 출력(Output Score)를 제어하려면 출력이 기대하는것보다 얼마나 벗어났는지를 측정해야한다. 이때 필요한것이 신경망의 손실함수(Loss Function) 또는 목적함수(Objective Function)이다.
신경망이 한 샘플에 대해 얼마나 잘 예측했는지 측정하기 위해 loss function가 신경망의 예측과 진짜 target(신경망의 출력으로 기대하는 값)의 차이를 점수로 계산하는데 이것을 loss 값이라고 흔히들 부른다.
우리는 일반적으로 이 점수(loss값)를 피드백 신호로 사용하여 현재 샘플의 loss값이 감소되는 방향으로 가중치 값을 조금씩 수정한다.
초기에는 네트워크의 Weight가 랜덤한 값으로 할당되므로 랜덤한 변환을 연속적으로 수행한다. 이렇다보니 자연스럽게 출력은 기대한 값과 멀어지고 loss값이 매우 높을것이지만, 네트워크가 모든 샘플을 처리하면서 Weight가 조금씩 올바른 방향으로 조정되고 loss값이 감소한다.
이러한 수정 과정은 딥러닝의 핵심 알고리즘은 역전파(Backpropagation)알고리즘을 구현한 옵티마이저(Optimizer)가 담당한다.
역전파 알고리즘을 이야기 하기에 앞서 경사 하강법Gradient descent에 대해 알아야 한다.
일반적으로 Tensor에서 수행하는 모든 연산(weight)은 미분이 가능하고, 미분 가능한 함수가 주어지면 이 함수의 최소값을 구할 수 있다. 함수의 최소값은 변화율이 0인 지점이 되고 변화율이 0인(꼭지점)지점을 모두 찾고 이 중에서 어떤 포인트의 함수값이 가장 작은지(loss값) 확인하는것이다. gradient(f)(w) = 0
위 식은 N개의 변수로 이루어진 다항식이고 여기에서 N은 네트워크 weight의 개수이다. 실제 신경망에서는 파라미터의 개수가 수만개가 되기 때문에 이를 사람이 계산으로 풀기는 어렵다.
이 gradient descent또한 loss값을 토대로 조금씩 파라미터를 수정할텐데, 처음에는 무작위로 시작위치를 정해야 했다.
이것을 확률적 경사 하강법(Stochastic Gradient descent)이라 한다. 이때 학습률(step)을 적절히 정해야 하는데, 너무 작으면 local minimum에 갇힐 수 있으니 조심해야하고 너무 크면 loss function곡선에서 완전히 임의의 위치로 이동해버릴 수 있어 주의해야한다.
이러한 문제는 모멘텀을 사용하여 피할수 있다는데 아직 모멘텀에 대한 개념은 이해해도, 함수를 자세하게 이해하진 못했다.
모멘텀이란 현재의 기울기값 뿐 아니라 과거의값까지 고려하여 현재 Gradient값 뿐만 아니라 이전에 업데이터 한 파라미터에 기초하여 weight를 업데이트 하여 local minumum에 빠지지 않도록 하는것이라고 한다.
흔히들 예제로 언덕위에서 공을 굴릴 때 관성과 빗대어 표현하곤 한다.
역전파(Backpropagation) 알고리즘은 연쇄 법칙(Chain Rule)을 신경망의 Gradient 계산에 적용하여 탄생하였다. = 후진 모드 자동 미분(reverse-mode automatic differentiation)
역전파 알고리즘은 최종 손실 값에서부터 시작한다. 손실 값에 각 파라미터가 기여한 정도를 계산하기 위해 연쇄 법칙을 적용하여 최상위 층에서 하위층까지 거꾸로 진행한다.
이를 반복하는것을 훈련 반복(Training loop)라고 하며, 충분한 횟수(epoch, iteration)만큼 반복하면 loss function을 최소화하는 weight값을 산출(update weight matrix)한다. 최소한의 loss를 내는 네트워크가 target에 가장 가까운 출력을 만드는 모델이 되는데, 이것이 DeepLearning이다.
딥러닝을 이해하기 위해서는 여러가지 수학 개념(텐서, 미분, 경사 하강법(Gradient Descent) 등)과 친숙해져야 한다.
신경망의 핵심 구성요소는 일정의 데이터 처리 필터라고 생각할 수 있는 층(Layer)이다. 어떤 데이터가 들어가면 더 유용한 형태로 출력이 된다. 층을 거쳐갈수록 주어진 문제에 더 의미있는 표현(Representation)을 입력된 데이터로부터 추출한다.
대부분의 딥러닝은 간단한 Layer를 연결하여 구성되어있고, 점진적으로 데이터를 정제하는 형태를 띠고 있어 마치 데이터 정제 필터(층)가 연속되어 있는 데이터 프로세싱을 위한 여과기와 비슷하다.
PS1.
예전에는 텐서(Tensor)라 부르는 다차원 넘파이 배열에 데이터를 저장하는것 부터 시작했다. 최근의 모든 Machine Learning은 일반적으로 Tensor를 기본 데이터 구조로 사용하고, 이 Tensor는 머신러닝의 기본 구성요소이다. 이때 이 Tensor란 무엇일까?
핵심적으로는 Tensor란 데이터를 위한 Container이다. 거의 항상 수치형 데이터를 다루므로 숫자를 위한 Container이다. 아마 2D Tensor인 Matrix에 대해 이미 본적이 있을것이다. Tensor는 임의의 차원(dimension) 개수를 가지는 행렬의 일반화된 모습이다.(Tensor에서는 차원을 종종 축(axis)라고 부름)
출처: tensorflow.blog
'공부 > AI' 카테고리의 다른 글
[DL] TypeError: TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]] (0) | 2021.09.29 |
---|---|
[DL]활성화 함수 (Activation Function) 개념 (0) | 2021.06.22 |
[DL기초] batch_size, epoch, step 개념 그리고 iteration (1) | 2021.06.09 |
[DL] 경사하강법(Gradient Descent) 직접 구현하기 (0) | 2021.06.04 |
댓글