ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 최적화 (Optimization)
    CS 공부/AI 2023. 1. 11. 23:30
    • Gradient Descent : 미분 가능한 함수의 극소값을 찾기 위한 1차 미분값 최적화 알고리즘

    중요 용어


    • Generalization: 일반화 성능, 학습데이터와 테스트 데이터에서 성능이 얼마나 차이가 나는지
    • Overfitting: 학습데이터에서 잘 동작하지만 테스트 데이터에서 잘 동작하지 않음 (과적합)
    • Underfitting: 네트워크가 너무 간단하거나 학습을 너무 조금시켜서 잘 동작하지 않음
    • Cross-validation: 모델 유효성 검사 기법, 데이터를 나눠서 train, valid에 사용, 최적의 hyperparameter 찾는데 사용(test 데이터는 절대 쓰면 안됨)
    • Variance: variance가 큰 모델은 비슷한 입력이 들어와도 출력이 많이 달라짐, variance가 낮으면 간단한 모델
    • Bias: bias가 낮으면 원하는 값에 대부분 근사함, bias가 높으면 원하는 값과 많이 달라짐
    • Bias and Variance Tradeoff: 학습 데이터에 noise가 있을 경우, bias와 variance는 둘다 낮거나 높을 수 없음, bias가 낮으면 variance가 높아짐
    • Bootstrapping: 100개 데이터중 80개씩 무작위로 뽑아서 여러 모델을 만들어 돌렸을 때 얼마나 일치하는지 확인 -> 교체 시 무작위 샘플링을 사용하는 모든 metric
    • Bagging: bootstrapping으로 훈련된 여러 모델, 랜덤 부분집합(투표 또는 평균)에 적합
    • Boosting: 분류하기 어려운 특정 훈련 샘플에 사용, 이전의 weak learner를 sequential하게 합쳐서 strong learner(모델)을 만듦

     

     

    Gradient Descent 방법


    • Stochastic gradient descent: 하나의 샘플을 통해서 gradient 구해서 업데이트
    • Mini-batch gardient descent: 데이터의 일부분에서 gradient 구함 (가장 많이 활용)
    • Batch gradient descent: 전체 데이터에서 gradient 구해서 평균냄
    • flat minimum은 train과 test 값의 차이가 별로 없지만 sharp minimum은 큼 → generalize performance가 떨어짐

     

    경사하강법 적용하기


    • Gradient Descent: learning rate 정하기 어려움, learning rate가 너무 크면 학습이 안되고 너무 작으면 학습을 아무리 시켜도 안됨

     

    • Momentum : gradient가 왔다갔다 해도 학습이 잘됨, gradient 유지시켜줌

    오래된 데이터일수록 현재의 경향에 미치는 영향이 줄어듦

    더보기
    #python
    v = beta * v - learning_rate * gradient
    weight[i] += v
    • Nesterov Accelerated Gradient: 극소점에 더 빠르게 도달

    모멘텀 스텝에 의해서 움직인 상태에서의 기울기 상태를 계산하여 이동함

     

    • Adagrad: 학습 속도를 조정하여 매개 변수에 대한 더 큰 업데이트와 더 작은 업데이트를 수행 (조금 변한 파라미터는 많이 변화시키고, 많이 변한 파라미터는 조금 변화시킴)

    뒤로 가면 갈수록 학습이 멈춘다는 단점이 있음

     

    • Adadelta: Adagrad의 확장 버전, accumulation window를 제한하여 단조롭게 감소하는 학습률을 줄임

    learning rate가 없어 많이 활용 안됨

     

    • RMSprop: 적응형 학습속도, 기울기 강하 속도를 증가시킴

    Adadelta에서 step size(learning rate) 추가

    더보기
    #python
    beta = beta * s + (1 - beta) * gradient**2
    weight[i] += -learning_rate * gradient / (np.sqrt(s) + e)
    • Adam(Adaptive Moment Estimation): 과거의 gradient와 제곱 gradients를 둘다 사용

    Momentum과 RMSprop을 효과적으로 결합

    더보기
    # tensorflow2.x
    tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.99, epsilon=None)

    Regularization - Overfitting 완화 방법


    • Early stopping: validation error가 커지기 전에 멈춤

    validation error와 training error 차이가 커지기 전에 stop

     

     

    • Parameter Norm Penalty:  parameter가 너무 커지지 않도록 함수의 공간을 더 부드럽게  함

    • Data Augmentation: 데이터 증강, 각도를 회전시키거나 확대 축소 등..
    • Noise Robustness: 노이즈를 신경망의 weight나 데이터에 추가
    • Label Smoothing: 학습데이터 두개를 섞음  mixup- 강아지 고양이 곂치게 섞음, cutmix-사진 잘라서 합침

    데이터가 한정적이거나 적을 때 사용

    • Dropout: 일부 뉴런을 무작위로 0으로 설정
    • Batch Normalization: 각 계층에 대해 경험적 평균과 분산을 독립적으로 계산하고 정규화
    • L1 regularization: 기존의 cost function에 가중치의 크기가 포함되면서 가중치가 너무 크지 않은 방향으로 학습 되도록 함
    • L2 regularization (Weight decay): 기존의 cost function에 가중치의 제곱을 포함하여 더함으로써 L1 Regularization 과 마찬가지로 가중치가 너무 크지 않은 방향으로 학습되게 된다

     

     


    + 지수 가중 평균 (Momentum & RMSprop)

     

    [딥러닝]Optimization Algorithm (최적화 알고리즘)

    Gradient Descent[경사하강법], Momentum[모멘텀], RMSprop, Adam, Learning rate decay[학습률 감쇠법]

    velog.io

     

    'CS 공부 > AI' 카테고리의 다른 글

    CNN  (0) 2023.01.12
    Convolution 연산  (0) 2023.01.12
    베이즈 통계학  (0) 2023.01.10
    선형변환  (0) 2023.01.10
    Neural network  (0) 2023.01.09
Designed by Tistory.