티스토리 뷰
오늘 수업 내용 너무 유익했다. 짱 좋다.
어제부터 집안에 일이 뭐가 많았어서 제대로 공부하질 못했다..어제(11일차) 학습 정리는 결국 fail....평일이나 주말에 꼭 해치우자 난 할 수 있다!
우선 매번 하듯이 용어 정리 먼저. 여태 정리했던 내용과 겹치는 부분도 있지만 복습하는 기분으로 다시 한번 보자~
용어정리
Gradient Descent
경사 하강법. 미분하며 값을 변화시킬 방향을 정한다. local한 minimum만 구할 수 있다는 단점이 있다.
Generalization
일반화
그러니까 train data로 학습을 하잖아? 하지만 train data에서만 잘 돌아가는 모델은 의미가 없다.
새로운 data에 대해서도 잘 돌아가야 의미있는 모델이다.
많은 경우에 일반화 성능을 높이는게 목적이겠지?
underfitting vs overfitting
위에서 말했던, train data에서만 잘 돌아가고 test data에서는 제대로 성능을 발휘하지 못하는 케이스가 있다면 그 이유는 overfitting일테다. train data에 너~무 너~무 세밀하게(?) 맞춰진거다.
underfittin은 당연히 반대말이다. train data에서 조차도 제대로 성능을 발휘하지 못한다.
우리는 이 중간 어드매를 잘 찾아야한다.
cross-validation
데이터의 양은 한정되어있다.
그래서 그 데이터를 여러가지 방법으로 쪼개서 모델을 학습시키곤 하는데 그 방법 중 하나이다.
k-fold 방법이라고도 하는데, k개로 data를 쪼개기 때문이다.
k개의 data 덩어리 중에서 k-1개로만 test하고 나머지 한 덩어리로는 validation을 하는거다.
data 덩어리를 fold라고 하는데, 다섯 덩어리러 나눈다면 1~4fold로 test하고 5fold로는 validation을 하는거지,
같은 방식을 다섯번 반복할 수 있으니 데이터를 효율적으로 사용할 수 있다!
Bias and Variance
이건 좀 넘 헷갈린다. 난 원래 둘 중 하나 고르는건 넘 헷갈려한다 ㅎ하
일단 둘다 낮을수록 좋다.
bias는 낮을수록 평균 즉 중앙에 가까운거다. 퍼져있는지 모여있는지는 상관없고 목표지점에 가까운지! 정확성 정도로 보면 되겠다.
높을 수록 중앙이랑 영 안맞는 그런...
variance는 낮을 수록 모여있는거다. 어디에 모여있는지는 상관없고 그냥 모여있는거! 정확성은 아니고 뭐라고 보면 될까..실력은 있지만 정확하진 않은 그런 상태..?ㅋㅋㅋㅋㅋ
그렇다면 높을수록 퍼져있겠지?
Bias and Variance Tradeoff
cost는 한가지로 이루어져있는게 아니다.
분산과 편향 노이즈를 모두 섞어서 모델의 cost를 계산한다.
편향값이 낮은 모델은 일반적으로 더 복잡하기 때문에(예: 더 높은 차수의 회귀 다항식) 트레이닝 셋을 더 정확히 표현한다. 하지만 모델링 과정에서 커다란 노이즈 성분까지 반영할 가능성이 있고, 그런 경우에는 더 복잡함에도 불구하고 덜 정확한 추론을 하게 된다. 반대로 편향값이 높은 모델의 경우 간단한(낮은 차수의 회귀 다항식) 경향이 있는데, 트레이닝 셋의 데이터를 모델에 충분히 포함하지 못해 분산값이 낮게 나올 수가 있다. (wiki)
사실 처음엔 bias가 올라가면 variance가 떨어지는 단순한 tradeoff를 생각했더니, 아니 그럼 정중앙에 완벽히 맞추는건 bias랑 variance 다 낮은거잖아 이건 뭐지? 라는 생각에 조금 헷갈렸었다.
저 설명을 보고 이해를 했는데,
만일 복잡한 모델을 맞추려고 한다면 bias가 낮아져서 정확하게 맞추게 된다. 그렇다면 데이터에 딱~~맞는 선이 그려지기 때문에 variance는 퍼져있게된다. 2차원에서 데이터에 맞춰서 꼬불꼬불한 선이 그려졌다고 생각하면 이해하기 쉽다. 다 맞추기 위해 선이 왔다갔다해서 variance는 높아질 수밖에
variance가 낮다면 그건 선이 퍼져있지 않다는거다. 그만큼 데이터를 정확하게 맞추진 못해서 bias는 낮아지겠지만.
이런게 바로 둘 사이의 tradeoff이다
Bootstrapping
샘플링해서 사용한다는 뜻
Bagging and Boosting
Bagging은 Bootstrapping aggregating으로 샘플링을 여러개하여 모델을 여러개 만들고 그 친구들을 합치겠다(앙상블)
Boosting은 간단한 모델을 만들고 안통하는 데이터에 대한 모델만들고 만들고만들고 이렇게 시퀀셜하게 만드는거다.
이제 실제 경사하강법에 대한 이야기를 나눌 것이다.
Practical Gradient Descent Methods
경사하강법을 여러가지 방법으로 활용할 수 있다.
우선 이전에도 SGD를 배웠었다. 그거다.
Stochastic gradient descent 한번에 샘플 하나씩
Mini-batch gradient descent 덩어리씩
Batch gradient descent 한번에 다
이런식으로 사이즈를 조절할 수 있고 그 이점을 살펴보자면,
👆
사진에 있는 논문에 따르면 큰 사이즈의 배치는 sharp Minimum하고 작은 사이즈의 배치는 flat minimum하다고 설명한다.
flat하다는건 training data에 잘 맞았던 모델이 test data에서도 큰 오차없이 잘 맞을거라는거다.
sharp한건 사진에서 보이듯이 조금만 옆으로 비켜서도 결과가 훅 차이나는걸 볼 수 있다.
그래서 배치사이즈는 작은게 더 좋다고한다.
여기서 우리는 optimizer에 대해서 더 다룰 것이다. 경사하강법을 더욱 성능이 좋게끔 만드는 최적화 방법들말이다.
- Momentum
- Nesterov accelerated gradient
- Adagrad
- Adadelta
- RMSprop
- Adam
이렇게 여섯개를 살펴본다. Adam 넘 궁금했었다 진짜루.
Momentum
관성력 있게 진행된다.
한번 gradient가 방향을 잡으면 그 다음에 한번쯤 방향이 바뀌어도 기존의 방향을 유지한다.
Nesterov Accelerated Gradient
이건 모멘텀과는 방향이 바뀌어도 다르게 일단 한번 가본다. 그리고 거기서 미분한 값을 사용한다.
거기서도 방향이 유지된다면 바뀐 방향을 유지하고 아니라면 원래 방향으로 돌아오겠지?
Adagrad
여지까지의 파라미터의 변화량을 담고 있다.
많은 변화가 있던 파라미터는 적게 변화시키고 별로 안변했던애는 많이 변화시킨다.
변화량을 분모에 지속적으로 더해주기 때문에 반비례하게 움직일 수 있다.
계속 할수록 변화량은 쌓이기 때문에 결국 분모가 무한에 가까워져서 학습을 멈춘다..!
Adadelt
위에서 분모가 무한해지는 문제점을 해결하기 위해
무빙 윈도우를 사용한다. 윈도우 사이즈를 정해놓고 해당 변화량만 보는거지.
learning rate가 없다는 특징이 있다.
RMSprop
위의 방법에서 learning rate를 추가해준거다. 성능이 훨 좋아졌다고한다.
Adam
Momentum과 Adadelta를 합쳤다. 뭐든 좋은건 다 써먹고 봐야한다.
그랬더니 희안하게 성능이 좋댄다. 간-단-
Regularization
이건 오버피팅 되지 않도록 규제를 넣어주는 방법이다.
- Early stopping
- Parameter norm penalty
- Data augmentation
- Noise robustness
- Label smoothin
- Dropout
- Batch normalization
Early stopping
말그래도 멈춰야할 것 같을 때 호다닥 멈춰버리는거다.
additional validation data로 모델 성능을 살펴보다가 포인트를 딱 잡는다.
Parameter Norm Penalty
파라미터들이 너무 커지지 않게 중간중간 L2norm패널티를 주는거다.
이건 모델의 파라미터(weight)가 작을수록 즉 부드러운 함수일수록 좋을거라는 가정이 깔려있다.
Data Augmentation
data가 적으면 딥러닝은 제대로 일을 해내지 못한다 그래서 여러가지 방법으로 내가 가진 데이터를 지지고 볶아서 많은 척한다.
이건 사진 데이터의 방향을 마구마구 조절해서 양을 늘리는 방법이다.
Noise Robustness
input과 weigth에 일부러 노이즈를 낀다
Label Smoothing
data를 섞어주는거다.
세가지 방법정도 있다.
분류문제에서 decision boundary를 부드럽게 만들어주는 효과가 있다고 한다
mix-up은 data 2개를 뽑아서 막 섞은 다음에 한개로 만든다. blending하는건데, 강아지와 양이 사진을 mixup했다고 치면 레이블인 강아지 0.5 고양이 0.5 이런식으로 해준다.
cutout은 데이터의 일정 부분을 아예 없애버린다.
cutmix 일정 부분을 잘라서 다른 데이터와 합친다. 구역별로 나누는 거다
Dropout
파라미터를 랜덤하게 0으로 바꿔준다.
Batch Normalization
내가 적용하고자 하는 layer의 통계값을 가지고와서 그걸 정규화시킨다.
통계량 전체단위, 레이어 단위, instance단위, 혹은 그룹단위로 정규화 시키는 방법들이 있다.
이건 여기까지~ 코드는 나중에 한번에 정리할 것이다.
CNN 배운 내용은 다음 글에서 만나보자.
'boostcamp AITech' 카테고리의 다른 글
[13일차] 나홀로쉬어가기(NN의 파라미터 탐구) (1) | 2021.02.03 |
---|---|
[12일차] CNN 기어가기 (0) | 2021.02.03 |
[11일차] DL Basic / 베이즈 통계학 햘짝 (1) | 2021.02.01 |
[주말]대체 MLE를 왜 배운거야? (0) | 2021.01.31 |
[10일차] 최대가능도 MLE (0) | 2021.01.29 |