Data/개념 정리

DL/ML Definition & Description

neulvo 2022. 10. 25. 11:53

DL abstract

딥러닝 모델 학습은 모델 출력과 정답 사이의 오차(error)를 최소화하는 방향을 구하고 
이 방향에 맞춰 모델 전체의 파라미터(parameter)들을 업데이트하는 과정입니다. 
이때 오차를 손실(loss), 오차를 최소화하는 방향을 그래디언트(gradient)라고 합니다. 
오차를 최소화하는 과정을 최적화(optimization)라고 합니다.

회귀분석에서 손실함수로 사용되는 -노름은 예측 오차의 분산을 가장 최소화하는 방향으로 학습을 유도합니다.

분류문제에서 사용되는 교차엔트로피(cross-entropy)는 모델 예측의 불확실성을 최소화하는 방향으로 학습을 유도합니다.

데이터가 특정 확률 분포를 따른다고 선험적으로(apriori) 가정한 후 그 분포를 결정하는 모수(parameter)를 추정하는 방법을 모수적(parametric) 방법론이라 합니다.

특정 확률 분포를 가정하지 않고 데이터에 따라 모델의 구조 및 모수의 개수가 유연하게 바뀌면 비모수(nonparametric) 방법론이라 부릅니다.

최종 결과물을 얻고 / feed forward and prediction
그 결과물과 우리가 원하는 결과물과의 차이점을 찾은 후 / cost function
그 차이가 무엇으로 인해 생기는 지 / differentiation (미분)
역으로 내려가면서 추정하여 / Back propagation
새로운 Parameter 값을 배움 / Weight Update

pooler : cls vector를 output으로 projection 시켜주는 부분
같은 차원으로 projection 해주고 activation function을 적용

classifier : label의 숫자 만큼 다시 projection 시켜주는 부분, 차원을 줄여준다.

NN abstract

Neural networks are function approximators that stack affine transformations followed by nonlinear transformations

Affine transformation

One way of interpreting a matrix is to regard it as a mapping between two vector spaces

선형성을 가지는 변환이 있을 때 그 변환은 항상 행렬로 표현된다.

행렬을 해석한다는 것은 두 개의 (벡터 스페이스) 차원 사이의 선형 변환을 찾겠다는 것.

Nonlinear transform

X라는 입력에서 Y라는 출력으로 가는 이 맵핑이 표현할 수 있는 그 어떤 proximity, 표현력을 극대화하기 위해서는 단순히 선형 결합을 n 번 반복하는 것이 아니라 선형 결합 뒤에 ativation function을 이용해서 비선형 변환을 일으킨 후 그렇게 얻어지는 feature vector를 다시 선형 변환을 하고 비선형 변환을 거치고 얘를 n번 반복하게 되면 더 많은 표현력을 갖게 되는 거죠.

Universal Approximators

히든 레이어가 한 개만 있는 뉴럴 네트워크의 표현력은 우리가 일반적으로 사용하는 대부분의 Conitnuous functions를 다 포함한다. 하지만 존재성만을 보장함. 이것을 만족하는 뉴럴 네트워크가 어딘가에 있다는 거지 만능은 아니다.

Convolution feature

우리가 convloution feature 맵의 한 겹, 하나의 채널을 만들기 위해서는
기본적으로 내가 convolution을 하고 싶은 kernel의 spatial dimension 3*3이 있어야 되고
자동으로 숨겨져 있죠. 자동으로 각각의 커널의 채널 크기는 내가 가지고 있는 input dimension과 똑같게 되죠.
그래서 하나의 convolution filter 혹은 kernel의 크기는 3*3*128이 되요
그래서 3*3*128을 찍게 되면 내가 stride가 1이고 padding이 1이 되면 40*50 짜리 spatial dimension의 채널이 한 겹 나오죠.
근데 우리가 궁극적으로 원하는 건 채널이 64니까
결국 이런 convolutional filter가 혹은 kernel이 64개 필요한 거죠.
그래서 parameter 숫자는 3*3*128*64 = 73,728이 되는 거죠.

dense layer가 일반적으로 훨씬 더 많은 파라미터를 갖게되는 이유는 
convolution operator가 각각의 하나의 kernel이 모든 위치에 대해서 동일하게 적용되기 때문에 그래요.
그래서 convolution operator는 일종의 shared parameter죠.
같은 convolution kernel이 이미지의 오른쪽 위 이미지의 왼쪽 위 오른쪽 아래 모두 다 동일하게 적용이 됩니다.

NN 발전 혹은 성능을 올리기 위해선 파라미터를 줄이는 것이 중요한데
대부분의 파라미터가 이런 식으로 fully connected layer에 들어가 있기 때문에
네트워크가 발전되는 성향이 뒷단에 있는 fully connected layer를 최대한 줄이고
앞단에 convolution layer를 깊게 쌓는 것이 일반적인 트렌드예요.

1*1 convolution 이미지에서 어떤 영역을 보진 않아요 한 픽셀만 보는 거예요 그리고 채널 방향으로 뭔가 줄이는 거예요.
- dimension reduction
1*1 convolution 이라는 context에서 dimension은 채널을 말해요.
nn 를 깊게 쌓는데 파라미터 숫자를 줄일 수 있게 되는 거예요.

Word Emedding

단어 임베딩은 텍스트 분석을 위한 단어 표현에 사용되는 용어로,
보통 실수 벡터의 형태로,
벡터 공간에서 가까운 단어들은 의미적으로 유사할 것으로 기대되도록
단어의 의미를 인코딩(부호화)하는 것입니다.

옵티마이저(Optimizer)

최적화는 각 학습 단계에서 모델의 오류를 줄이기 위해 모델 매개변수를 조정하는 과정입니다. 최적화 알고리즘은 이 과정이 수행되는 방식(여기에서는 확률적 경사하강법(SGD; Stochastic Gradient Descent))을 정의합니다. 모든 최적화 절차(logic)는 optimizer 객체에 캡슐화(encapsulate)됩니다. 여기서는 SGD 옵티마이저를 사용하고 있으며, PyTorch에는 ADAM이나 RMSProp과 같은 다른 종류의 모델과 데이터에서 더 잘 동작하는 다양한 옵티마이저가 있습니다.

학습하려는 모델의 매개변수와 학습률(learning rate) 하이퍼파라미터를 등록하여 옵티마이저를 초기화합니다.

optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

학습 단계(loop)에서 최적화는 세단계로 이뤄집니다:

  • optimizer.zero_grad()를 호출하여 모델 매개변수의 변화도를 재설정합니다. 기본적으로 변화도는 더해지기(add up) 때문에 중복 계산을 막기 위해 반복할 때마다 명시적으로 0으로 설정합니다.
  • loss.backwards()를 호출하여 예측 손실(prediction loss)을 역전파합니다. PyTorch는 각 매개변수에 대한 손실의 변화도를 저장합니다.
  • 변화도를 계산한 뒤에는 optimizer.step()을 호출하여 역전파 단계에서 수집된 변화도로 매개변수를 조정합니다.
728x90