2023/2023-1

[5월 18일(목)] 인공지능 입문(이론) - Build CNN, Avoid Overfitting

JWonK 2023. 5. 18. 14:08
728x90
반응형

H : 150, W : 150

 

  • H : 150, W : 150, cn : 3, cw: 3, S : 1
    • (150 - 3) / 1 + 1 = 148로 32개의 겹겹
    • -> 148 x 148 x 32 : 1단계
  • MaxPooling(2, 2) -> 74 x 74 형태로

계속해서 하다가 마지막 layers.Dense는 1, binary Data(고양이, 개) 이므로

 

MNIST는 10이었음

 

 

  • 2번째 conv할 때는 (3, 3)적용 -> (74 - 3) / 1 + 1 = 72가 됨
  • 64개의 Filter였으므로  (3x3x32+1)x64
  • 이거 꼭 해봐야함
  • dense layer(512) 계산하면 Parameter 값은 3211776

 

  • train data set은 200개
  • optimizer : 파라미터 찾는 것
  • loss는 binary -> 데이터도 binary였으므로

2000개를 100번 나눠서

스텝당 100번, 전체 30번 -> 3000번

  • 더 중요한 Validation acc가 72임
  • 무슨 문제가 있을까 -> overfitting

 

  • loss를 봤을 때 validation의 경우 loss가 어느 순간부터 다시 상승
  • 더 나은 학습 방법이 필요함

 

  • 데이터 Train을 할 때 마지막에 도달한 후 일치하지 않을 때 50% 양을 back propagation(mask)함

  • 학습할 때만 mask를 함

  • Yellow Layer에서 Dropout 적용
  • 1/2개를 0으로 두고 나머지는 (x2)함

 

  • Batch를 할 때마다 다른 노드를 랜덤하게 새로 결정하여 mask를 함

  • w(0)의 사이즈는 [input 5개 : out 4개]  -> 따라서 사이즈는 20개 + 거기에 Rele(R^4) 적용하면 x(1)
  • w(1)의 사이즈는 12개, softmax를 적용, fully connected

  • 4개 사이즈의 m값을 통해 mask를 적용시킴

  • keras에서 한 줄만 적용시키면 됨
  • 위에서 보았듯이 첫 번째 dense layer에서 너무 많은 트레이닝 parameter가 존재하였기 때문에 적용

  • 일부러 noise를 주어 strength를 높이는 느낌

  • Network이 데이터의 일부만 사용하여 결정을 하게 함
  • 정규화의 방법으로 볼 수 있음
    • 오버피팅을 줄임
    • L1 : [weight] 절대값 ; 너무 커지지 않게
    • L2 : [weight]^2 절대값
    • w값이 너무 커지면 트레이닝 데이터에 편향되어 이를 너무 커지지 않게 하기 위해

  • 데이터를 2000개 사용하는데 Dropout 적용 전 1's Dense Layer에서 param이 300만이 넘었음
  • 데이터의 수를 더 늘려줄 필요가 있음
  • flip, rotation, crop, shift, random noise를 사용하여 데이터를 다른 방식으로 늘리는 것

  • method임 : 한 줄만 추가하면 적용 가능

  • 한 줄만 주가해주면 됨
  • 결과가 확실히 좋아질 여력이 존재

  • 이미지 데이터는 항상 사용하는 것을 권장
  • layer 사용하면 너무 많은 param이 나올 경우, dropout도 적용하는 것 권장

  • 학습하기 전 Train 기법

  • 16개 layer로 2000개의 데이터를 적용하면 학습이 잘 될까?
  • 300만개보다 훨 많아질 것 -> 학습 잘 안될거임
  • pretrain 적용하면 해결 가능
  • dropout, dat augmentation, pretain은 무조건 써야하는 기법들

  • 이미 다른 데이터로 학습된 모델을 가져와 사용

  • 우리는 판단하는 네트워크를 구축
  • 따라서 Top layer를 제거하고 우리가 사용하고 하는 classfier적용시켜야함

  • 랜덤하게 initailzer하고 랜덤 학습

  • optional하게 Trainable시킴

  • 두 가지를 같이 학습하는 것은 좋은 생각이 아님
  • 많은 변경사항이 생기는 것은 학습에 악영향
  • 맨 처음에 맨 마지막 layer를 한 후 Convol layer를 Train하는 형태

  • low level layer는 이미 fix되어 학습할 파라미터가 적어짐
  • overfitting 될 가능성도 줄어듦

  • 위에서 정리한 학습 기법을 적용하면 더 나은 결과를 만들어낼 수 있다는 것을 볼 수 있음

  • 학습할 수 있는 범위가 줄수록 좋음
  • 일단 데이터도 많을 수록 좋음

  • bagging : 모델을 만들고 또 다른 모델을 만들어나가서 적용시키는 방법

  • assemble하는 게 더 좋은 결과를 만들어낼 수 있음
  • data sample, parameter 초기값 변경, optimizer 변경 등 많은 방법을 적용할 수 있음

  • network deep이 깊어질 수록 네트워크는 불안정
  • Ensemble을 통해 variance를 reduce하여 이를 완화하고자 하는 것

  • 사진을 통해 추출할 수 있는 정보가 다름
  • 이미지는 같은데 모델을 다르게 만들어야하나?

  • Conv Base를 통해 하나로 묶고 마지막 layer만 다르게 하여 결과 추출나이 (0 ~ 100)

  • sex (Binary)
  • Race(인종 : 0-5)
  • 서로 range가 다름
  • 똑같이 loss를 합치는 것이 아님
  • hyper-parameter를 적용하여 비슷한 loss값으로 맞춤

  • Back propagation했을 떄 균등하게 될 수 있도록

-> 오늘 배운 5가지

  • 추가적인 기법 매우 많음
728x90
반응형