archive
[6주차 (3)] 최적화 - 1 본문
1. 용어 컨셉 정리
(1) Gradient Descent : 내가 정의한 Loss Function에 대해서 줄어들었을 때 optimal을 이룰 것이라는 가정 하에 편미분값을 이요해서 학습을 진행하는 것
-1차 미분한 값을 사용해서, 반복적으로 최적화하여 local minimum을 찾아내는 과정
** Important concepts of optimization
(2) Generalization: 우리는 일반화 성능을 높이는 것이 목적
:일반화란? -> 학습 iteration이 진행됨에 따라 training error는 지속적으로 줄게 되어있음
:training error은 계속 줄어들면 무조건적으로 좋다? 아님, test error와의 최적점을 찾아내야
:Generalization gap ) 학습데이터와 테스트 데이터 사이의 에러 값의 차이를 의미
: 해당 모델의 generalization performance이 좋다는 의미는, 해당 네트워크 성능이 학습 데이터 성능과 비슷하게 나온다!
:그러나 학습데이터 자체의 performance가 아주 좋지 않은 경우, gap이 작다 하더라도 좋은 모델이라고 할 수 없음
-네트워크와 학습데이터 등의 성능에 따라 나타나는 3가지 status
(3) Cross-validation
:따라서 보통은 학습데이터와 validation data를 따로 둠
:따라서 cross-validatio, 혹은 kfold 기법을 활용해서 성능을 측정하게 됨
: kfold -> 학습데이터를 k개로 나눔, 나누어진 region 중 하나를 validation dataset으로 활용하고 나머지는 학습데이터로 활용, 이걸 k-1번 동안 iteration을 돌림
: cross validation을 통해서 최적의 하이퍼파라미터 셋을 주로 찾음
(4) Bias and Variance
: variance: 내가 어떠한 데이터셋을 모델에 투입하였을 때 얼마나 결과값들이 일관적으로 나오는지에 대한 정도
:variance가 크게 되면 overfitting의 위험이 큼
: bias : 평균적으로 보았을 때 true target에 접근하게 됨, 즉 평균에서 많이 벗어나지 않은 정도
:Bias and Variance Tradeoff
:학습데이터에 노이즈가 껴 있다고 가정할 때, 이 노이즈를 minimize할 때, 노이즈는 사실 3가지 (선천적 노이즈, bias, variance)로 이루어져 있어서, 하나를 줄이게 되면 나머지는 증가할 수밖에 없다는 이론
: bias를 줄이면 variance가 높아지고, variance를 줄이면 bias가 높아질 확률이 많다는 것을 예측해볼 수 있음
: 둘 다 줄이는 것은 힘들다라는 것
(5) Bootstrapping : 신발끈을 위로 들어서 하늘을 날겠다는 의미
:학습데이터가 100개가 있으면, 몇 개만 활용을 한 모델을 여러 개 만들어서, 하나의 입력에 대해 모델들의 각각의 예측값들에 대해서의 consensus를 이루어 최종적인 결론값을 도출해내는 것
:학습데이터가 고정되어있을 때, subsampling을 통해 여러 모델 혹은 매트릭을 만들어서 무언가를 하겠다!
(6) Bagging (Bootstrapping aggregating)
:학습데이터가 고정되어있을 때, 여러 개의 학습데이터 쌍을 만들어서 여러 모델을 만들어 각각의 모델의 결과값에 대해 합의를 보는 방식으로 최종적인 결과값을 도출해낼 것이다
:앙상블
: 최종적인 결과는 voting 혹은 averaging을 활용
(7) Boosting
: 간단한 모델 하나를 만들어서, 그 모델을 sequential하게 학습시키되, 에러값 즉 데이터에 대해 예측이 어려워하는 데이터에 대해서만 잘 동작하는 모델을 만들어냄 -> 가중치를 조절
:독립적인 모델들을 보고 판단하는 게 아니라, 각각의 weak learner들을 종합해서 판단
2. Gradient Descent Method
-분류
(1) Stochastic gradient descent : 하나의 싱글 샘플에 대해서 계산된 gradient를 이용해서 업데이트
(2) Mini-batch gradient descent : 전체셋에서 추출된 subset 데이터를 활용해 계산된 gradient를 이용해서 업데이트
:즉 우리가 파라미터로 설정한 batch-size에 맞는 subset을 활용
:가장 흔히 활용되는 메서드임!
(3) Batch gradient descent : 전체 데이터셋을 활용해서 계산된 gradient를 이용해서 업데이
-Batch size가 64 개 혹은 128개 정도를 활용해야겠다고 정하는, 즉 사이즈를 determine하는 것이 중요함
-large batch size를 활용하게 되면, sharp minimizer에 도달하게 되고, small batch size에 도달하면 flat minimizer에 도달하게 되며, 후자가 더 낫다
- 우리의 목적은 testing function의 minimum을 찾는 것
-flat minimizer은 generalization performance가 좋음, sharp minimizer은 트레이닝 단계에서 얻어지는 데이터들이 testing에서는 잘 작동하지 않을 수 있음, 즉 오버피팅
-Gradient Descent의 문제점은 learning rate를 적절하게 잡는 것이 가장 중요함
-Momentum : 더 빨리 학습시킬 수 있는 optimization technizue를 개발하던 도중 만들어낸 하나의 방법
:관성, 베타의 하나의 하이퍼파라미터를 이용해서 t+1번째에는 a라고 불리우는 모멘텀에 해당하는 값이 기존에 진행되던 방향값을 그대로 가지고 있는 것
:따라서 gradient의 방향성을 잡아줌, 잘 학습되는 효과를 제공하게 됨
-Nesterov Accelerated Gradient: Lookahead gradient를 계산하게 됨, momentum은 현재 주어진 파라미터를 가지고 gradient 계산한 뒤 momentum을 accumulation하는 방법으로 방향 설정, 그러나 nestrov accelerated gradient은 한 번 이동해서 계산
:즉, a라고 불리우는 포인트로 한 번 이동해 봄, 한 번 가 보고 gradient를 계산한 것을 가지고 accumulate
:가장 큰 장점은 local minimum에 조금 더 빨리 converge하게 되는 효과를 가지고 있다는 것이다
-Adagrad : Adaptive 방식
: NN의 파라미터가 얼마나 지금까지 많이 변화했는지 고려
: 많이 변화한 파라미터의 경우 조금 덜 변화시키고, 많이 변하지 않은 파라미터의 경우 더 많이 변화시키는 방향으로 학습을 진행하게 된다
:가장 큰 문제는 sum of gradient squares의 값이 계속 커지기 때문에, 결국에는 G가 무한대로 가게 되면 w가 업데이트가 되지 않아서 학습이 멈추게 됨 ---> Adam에서 해결
-Adadelta : G가 무한대로 커지는 현상을 막겠다 해서 나온 모델
:이론적으로 막을 수 있는 가장 쉬운 방법은, 현재의 time step 인 t가 주어졌을 때 얘에 대한 gradient descent 변화 값을 설정하면 된다
:학습률을 가지고 있지 않음, 즉, 바꿀 수 있는 요소가 많이 없기 때문에 실질적으로 많이 사용되지는 않음
-RMSprop : 얘가 Adam 이전에 많이 사용되던 방법론임
: Gradient square을 그냥 더하는 것이 아니라, exponential moving average로 더해줌
: stepsize가 들어감
-Adam: 가장 무난하게 잘 작동한다고, 자주활용되는 모델
: Gradient square을 그냥 더하는 것이 아니라, exponential moving average로 더해줌과 동시에, momentum을 같이 활용
:Gradient 가 증가함에 따라 adaptive하게 변화하는 것을 적용함과 동시에, 이전의 gradient 정보를 적용하는 것을 잘 합한 것이 Adam.
https://velog.io/@freesky/Optimizer
[딥러닝] 옵티마이저(Optimizer)
딥러닝에 이용되는 Optimizer 는 대부분 Adam 을 쓰고 있다. ..딥러닝 은 입력층과 출력층 사이에 여러 개의 은닉층으로 이루어진 신경망이다.층이 깊어질수록 모듈과 함수에 따른 하이퍼파라미터...
velog.io
이건 포스트에 정리를 너무 잘 해 두셨길래 남기는 링크
본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.
'ML_AI > 네이버 부클 AI 엔지니어 기초 다지기 : AI Tech 준비과정' 카테고리의 다른 글
[코드 리뷰 프로젝트] 경사하강법 구현 백업 (0) | 2024.06.06 |
---|---|
[6주차 (4)] 최적화 - 2 (0) | 2024.06.02 |
[6주차 (2)] 뉴럴 네트워크 -MLP (0) | 2024.06.02 |
[6주차 (1)] 딥러닝 기초 (0) | 2024.06.01 |
[5주차 (1)] 확률론 (0) | 2024.05.25 |