[Week3] Day12 최적화

이규호·2021년 2월 2일
0

부스트캠프 U Stage

목록 보기
12/30

📒 Optimization


모델의 최적화를 위한 다양한 방법론들을 배웠다.
이런것들이 있다라고 설명하고 넘어가는 방식이라 직접 하나하나 찾아봐야 될 것 같다.
한번씩 들어본 개념들이라서 수식을 제외하면 이해하기가 어렵지 않았다.

📝 Generalization


  • 학습이 반복되면 Training error는 일반적으로 줄어든다.
  • 학습에 사용하지 않은 Test error에 대해서는 시간이 갈수록 커진다.
  • 학습 data의 성능이 안좋으면, test data의 성능도 나빠진다.
  • 학습 data에는 적합하지만, traning에는 적합하지 않은 모델이 overfitting이다.

✏️ Cross-validation

  • validation data : 학습시키지 않은 데이터
  • 학습 데이터를 K개로 나눠서 K - 1개로 학습시키고, 나머지로 test를 하는 것이다.

✏️ Bias and Variance

  • Variance : 데이터를 넣었을 때 출력이 얼마나 일관적으로 나오는가?
  • Bias : target과 얼마나 벗어났는가?
  • 학습 데이터에 noise가 있는 경우 bias와 variance는 반비례할 확률이 크다.

✏️ Bootstrapping

학습 데이터가 고정되어 있을때 subsampling을 통해 학습 데이터를 여러개로 만들고 그것을 가지고 여러 모델을 만들어서 무언가를 하는 방법

📝 Gradient Descent Methods


✏️ Gradient Descent

  • Linear Network가 있을 때, loss functon에 대한 gradient를 구해서 parameter를 빼주는 방법
  • 줄었을 때 optimal이라고 기대하는 loss function이 존재
  • 찾고자하는 parameter에 대해 loss function의 편미분 값을 이용해 학습
  • 극소적으로 작은 local minimum만 찾을 수 있다.

✏️ Kind of Gradient Descent

  • Stochastic gradient descent
    • 한번에 한개의 gradient를 구해서 update를 반복
    • single sample을 통해서 gradient를 구한다.
  • Mini-batch gradient descent
    • Batch size의 sample을 통해서 gradient를 구하고 update
    • 일반적으로 딥러닝에서 많이 사용하는 방법이다.
  • Batch gradient descent
    • 데이터를 한번에 다 써서 gradient를 update한다.

✏️ Gradient Descent Method

  • Momentum : 이전 batch의 gradient 정보를 활용한다. (관성)
  • Nesterov Accelerated Gradient : 한 번 이동한 후 계산
  • Adagrad : 많이 변한 parameter를 적게 변화, 아닌 경우는 많이 변화
    • 뒤로 갈수록 W가 커져 변화량이 적어짐
  • Adadelta : Adagrad의 Gt가 커지는 현상을 막기 위한 방법
    • Window size(시간)에 대한 gradient 제곱의 변화를 확인한다.
    • learning rate가 없어 바꿀 수 있는 수단이 별로 없다.
  • RMSprop : gradient squares를 단순히 누적하지 않고, 최신 값들이 더 크게 반영
  • Adam : gradient squares를 가져가면서, momentum도 활용한다.

📝 Regularization


학습을 방해하는게 목적으로, 학습 데이터에서만 잘 동작하는 것이 아니라 테스트 데이터에서도 잘 동작할 수 있게 만들어주는 기법

✏️ Early stopping

  • validation error를 활용해서 loss가 커지기 시작할 때 멈추는 방법

✏️ Parameter Norm Penalty

  • parameter가 너무 커지지 않게 하는 방법 (모두 줄인다.)
  • 크기(abs)는 작으면 작을수록 좋기 때문이다.
  • 부드러운 함수일 수록 Generalization 가능성이 높을 것이다.

✏️ Data Augmentation

  • 주어진 데이터를 이용해 데이터를 최대한 늘리는 방법
  • label이 바뀌지 않는 한도내에서 데이터를 조금씩 바꿔서 활용한다.

✏️ Noise Robustness

  • 입력 데이터, weight에 noise를 넣으면 테스트 단계에서 더 잘 될수 있다?

✏️ Label Smoothing

  • 분류 문제를 풀 때 데이터가 한정적이면 쓸만한 방법

✏️ Dropout

  • 학습을 진행하면서 각 Layer에 존재하는 노드들을 무작위로 On / Off를 반복한다.
  • 무작위로 선택된 노드들의 weight만 사용해서 다음 layer에서 전파된다.
  • Overfitting을 방지할 수 있는 효과를 얻는다.

✏️ Batch Normalization

  • Layer 간의 Internal Covariate Shift 문제를 해결하기 위해 고안되었다.
  • 각 Layer들마다 Normalization을 해서 변형된 분포가 나오지 않게 작업하는 것이다.
  • minibatch들마다 정규화를 실시한다.

📒 CNN 첫걸음


교수님의 보폭이 너무 큰 것이 아닌가 하는 생각이 든다..
앞부분은 크게 어렵지 않았는데, 역전파 부분에서 굉장히 빠르게 지나갔다.
적당히 복습하면 이해할 수 있을 것 같긴 하다.

📝 Convolution


  • 고정된 가중치인 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조
  • 활성화 함수를 제외한 Convolution 연산도 선형변환에 속한다.
  • i번째 위치에 따라 가중치 행렬이 따로 존재하지 않으므로 parameter size가 많이 줄어든다.
  • signal을 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출하는 것이다.
  • 1차원뿐만 아니라 다양한 차원에서 계산 가능하다.

📝 2D Convolution


  • 이미지 위에서 stride 값 만큼 filter를 이동
    👉 겹쳐지는 부분의 각 원소의 값을 곱해서 모두 더한 값을 출력으로 하는 연산
  • 각 인덱스에서 두 행렬을 mul 한 뒤, sum 연산을 취한다고 생각하면 될 듯 하다.
  • stride : filter를 한번에 얼마나 이동할 것인가
  • padding : 0으로 이미지 상하좌우에 padding 값 만큼 감싼다.
  • 입력 크기가 (H, W), 커널 크기가 (Kh, Kw), 출력 크기가 (Oh, Ow)일 때 식
  • 채널이 여러개인 2차원 입력(3차원)의 경우 2차원 Convolution을 채널 개수만큼 적용

📝 역전파


  • 역전파를 계산할 때도 convolution 연산이 나온다.




📒 [퀴즈] CNN 첫걸음- 1~5


5/5 Solve

📝 Q1


Q) 다음 보기 중, 연속적인 변수에 대한 함수 f, g 사이의 convolution을 나타내는 수식으로 가장 적절한 것을 고르시오.

A) 3

📝 Q2


Q) 입력 벡터 x 와 가중치 벡터 V가 다음과 같이 주어질 때, 다음 보기 중 올바른 h를 고르시오.

✔️1. h = [-14, -20, -26, -32, -38, -44, -52, -60]
  2. h = [-6, -12, -18, -24, -30, -36, -42, -48, -54, -60]
  3. h = [-3, -8, -14, -20, -26, -32, -38, -44, -52, -60, -29, -10]
  
  h[0] = -1 * 1 + -2 * 2 + -3 * 3 = -14

📝 Q3


Q) 벡터 x와 h가 다음과 같이 주어질 때, y1 값을 구하시오.

A) 14

y1 = 1 * 4 + 2 * 5 = 14 (식에 오류가 있다.)

📝 Q4


Q) 입력 행렬 X와 커널 K가 다음과 같이 주어질 때, Y(1,2) 값을 구하시오

A) 5

Y(1,2) = 0 * 1 + 1 * 2 + 1 * 3 + 0 * 4 = 5

📝 Q5


Q) 입력 행렬 X와 커널 K가 다음과 같이 주어질 때, Y(2,2) + Y(3,3) 값을 구하시오

A) 9

Y(2,2) = 1 * 1 + 0 * 2 + 1 * 3 + 0 * 4 = 4
Y(3,3) = 0 * 1 + -1 * 2 + 1 * 3 + 1 * 4 = 5
profile
Beginner

0개의 댓글