[미래연구소] 딥러닝 17기 week6

qw4735·2022년 3월 3일

http://futurelab.creatorlink.net/

Softmax

1) output layer와 class의 연관성
-> output layer node는 각각 class가 될 확률이다.
즉, output layer node개수 = class 개수
2) softmax의 연산과정 (y_hat)

3) one-hot encoding (y) : multiclass classification의 label 표현법
class의 표현 : vector
-> 서로 연관성이 존재하지 않는 class 간의 독립성을 표현하기 위해 class를 vector로 표현한다.
=> 이 때 사용하는 것이 one-hot encoding
4) loss 계산 : L(y, y_hat)

overfitting 과 underfitting의 해결방법

  • underfit(train set error가 클때) 해결책
  1. try bigger network (뇌를 키운다?)
  2. train longer (epoch를 늘린다)
  3. and so on....
  • overfit(val/dev set error가 클때) 해결책
  1. get more data (일반화 필요)
  2. regularization
  3. dropout
  4. and so on...

Regularizaiton

  • 정의 : cost에 일정 값을 더해서 fit의 시점을 늦추는 방식
    -> model이 과도하게 복잡해지는 것 방지
    즉, term을 더해서 weight값을 줄여주고, weight값을 줄임으로써 모델을 단순하게 만들어서 overfitting을 방지한다.
  • 일반적으로 L2 Regularization을 주로 사용
  • 람다 : hyperparameter이며, 람다가 클수록 regularization 효과가 크다.(즉, weight의 절댓값을 줄여준다.)

but, 사실 딥러닝에서는 Dropout을 더 많이 사용

Dropout

  • 매 학습마다 설정한 drop rate만큼 랜덤하게 node를 지워서 학습
  • 매 학습마다 다른 node들이 지워졌다가 복원되었다가를 반복
  • (구현) Dropout Layer가 따로 존재
    -> 바로 위의 layer를 dropout한다.
    -> dropout layer의 rate를 결정(버릴 unit의 비율, 보통 0.2 ~0.5)
    -> 이 drop_rate를 크게 할수록 overfitting 방지효과가 크다.
  • drop_rate : hyperparameter
    1) layer 별 다른 drop_rate 설정 가능
    2) weight의 shape이 클수록, drop_rate를 높게 설정하는 것이 좋다.
    3) input layer dropout은 권장x

Deep Learning Tutorial

1. 데이터 업로드 및 확인
2. data preprocess
-형변환 : tensorflow는 기본적으로 'float32'를 사용해서 astype을 사용해 형변환
-normalizaiton : 0~255 -> 0~1
-flatten : dense layer는 vector만 input으로 받을 수 있어서, 3D-array를 flatten
-one-hot encoding : 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식
(tensorflow.keras.utils에서 to_categorical로 실행 가능)
loss선택
1) 원핫인코딩 안한경우 -> sparse_categorical_crossentropy
2) 원핫인코딩 한 경우 ->categorical_crossentropy

3. 모델 만들기
-Seuquential을 함수 안에 넣기

4. 모델의 학습과정 설정(compile)
compile은 3가지 argument가 핵심!!
1) optimizer
2) loss
3) metrics(평가지표) : 대표적으로 accuracy가 존재,
-s가 들어간 건 list자료형으로 argument를 구성
5. 모델 학습 (fit)
fit의 기본 parameter
1) x:feature = input
2) y: label
3) epochs : 전체 데이터를 몇 번 학습할 것이냐
4) verbose : train할 때 표시되는 bar
5) validationsplit : 여기서 data split 가능, but random하게 나눔으로 재현 불가능
6) validation_data : train_test_split으로 미리 data를 잘라 두었다면 'validation_data = (x_val, y_val)' 식으로 할당 가능
6. 학습과정 graph -> underfit,overfit 판단가능, 이를 바탕으로 수정
7. 최종 test(evaluate) : test set으로 마지막 검증하는 과정 ( y값을 넣어 y와 비교)
_vs.
predict : 정답(label,y)를 모르고 주어진 x에 대해서 예측

+holdout validation : fit에서 data split이 가능하나, 랜덤하게 분할하므로 재현 불가능 하다는 단점이 있다.
따라서 train_test_split으로 미리 분할하는 것을 추천! (재현 가능)
stratify를 통해 계층화

++ 2D 이상의 ndarray flatten하는 법
-1) numpy.ndarray.reshape == numpy.ndarray.flatten == numpy.ndarray.ravel
-2) tensorflow.keras.layers.Flatten

0개의 댓글