[AI스쿨 7기, 11주차] 딥러닝유튜브영상, weight, bias, dropout, SGD, cross entropy, 시그모이드, 소프트맥스, 옵티마이저

hyemin·2022년 11월 29일

멋쟁이사자처럼

목록 보기
40/51

221129 멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

✅ But what is a neural network?

❓ 28x28 이미지로 학습을 하는데 왜 입력에 784개가 들어갈까?
🅰 28*28=784 여서


완전 연결 신경망 Fully Connected Network
층을 깊게 쌓을 수 있기 때문에 Deep Nueral Network라 불린다.


❓ 1차원형태로 네트워크에 데이터를 주입(Flatten, 벡터로 넣음)해야 하는데 어떻게 비정형 데이터를 잘 다룰까?
🅰 전처리 레이어에서 이미지, 음성, 텍스트 등을 전처리 하는 기능을 따로 제공한다. DNN->CNN->RNN

❓ 왜 28x28 이미지를 입력받을 때 784 로 입력받을까?
🅰 Fully Connected Network 에는 1차원형태로만 주입이 가능하기 때문 네트워크에 데이터를 주입하기 위해서
🅰 CNN, RNN 에서는 데이터 전처리를 어떻게 해줄지를 전처리 기능을 제공하고 마지막에는 Fully Connected Network 를 통과하게 된다.


W==weight의 약자로 보통 가중치로 번역된다.
b==bias의 약자로 보통 편향으로 번역된다.
임계값은 활성화 함수==activation function의 출력 기준이 된다. 이 그림에서 활성화 함수는 무엇일까? 시그모이드

출처 : 유튜브 But what is a neural network?


활성화 함수로 ReLU, swish 등도 있다.
❓ 시그모이드의 단점 ? 🅰 기울기 소실 문제
-> ❓ 이 문제를 해결하기 위해 나온 활성화 함수는? 🅰 ReLu, LeakyRelu


bias는 뉴런이 활성화 되려면 가중치의 합이 얼마나 더 높아야 하는지를 알려준다.


❓ dropout이 무엇일까? 🅰 일부 노드를 제거하고 사용하는 것


❓ 왜 dropout을 사용할까? 🅰 과대적합(과적합, 오버피팅)을 방지하기 위해


✅ Beginner

❓ MNIST 손글씨 이미지 데이터셋은 왜 만들었을까?
🅰 우편번호를 읽어내기 위해서

모델

  • Dense(units=128) : 동그라미의 갯수를 몇개로 설정할 것이냐
    • units(노드) 개수, layer(층) 수는 하이퍼파라미터
  • tf.keras.layers.Dense(units=128, activation='relu')
  • output = activation(dot(input, kernel) + bias) : 위의 공식(a = 시그모이드(Wa+b))
    • dot : 행렬곱
  • tf.keras.layers.Dropout(0.2) : 노드의 개수 * 0.2 만큼의 수를 드랍아웃. 해당 층의 노드(units)만 제거. 128개 중 20퍼센트 제거.
  • optimizer
    • 가장 많이 쓰이는게 SGD(stochastic gradient descent확률적 경사 하강법)
    • 오차가 최소가 되는 지점을 찾기 위한 optimizer
    • 기울기, 방향, learning rate를 고려
  • 손실 함수
    • entropy, cross-entropy, Kullback-Leibler Divergence, Cross-entropy(multi-class)
    • 회귀의 손실 함수 : squared loss, absolute loss, huber loss, quantile loss
    • cross entropy
      • 분류 결과의 품질을 측정하기 위해 Loss 손실함수로 크로스 엔트로피를 사용한다.
      • ❓ 공식 앞에 마이너스는 왜 있을까? 🅰 양수로 만들려고
  • 기본적으로 분류는 cross entropy를 optimizer는 adam을 사용한다.
  • loss 손실율 측정, metrics 평가지표

분류의 출력

  • 시그모이드
    • 이진 분류
  • 소프트맥스
    • 다중 클래스 분류
    • N개로 반환, 모든 확률의 합이 1
    • 확률값으로 np.argmax()에서 가장 큰 0.7에 해당되는 인덱스 순서인 2가 반환
    • ❓ 특정 클래스에 대한 출력이 [0.1, 0.05, 0.7, 0.15] 이렇게 결과가 나왔다면 여기에서 예측값의 답을 무엇으로 하면 될까? 🅰 2
    • ❓특정 클래스에 대한 출력이 [0.1, 0.05, 0.7, 0.15] 이렇게 결과가 나왔다면 이 정답 클래스의 종류의 개수는 몇개일까? 🅰 4

훈련 및 평가

  • 여러 번 학습을 하면 loss가 점점 줄어든다.
  • 학습을 하며, weight, bias 값을 업데이트 하기 때문

✅ Classification 파일

  • min~max 범위를 확인해 보기 위해 출력 : train_images[0].min(), train_images[0].max()
  • 0~255값이 나온다.
  • class_names이 무엇인지 확인해 보기 위해 출력해봄
  • class_names[train_labels[0]]
  • model에서 마지막에 지정 하지 않아도 softmax로 출력된다.
  • loss 값은 보고 label이 어떤 형태인지 알 수 있다. label 값이 바이너리, 원핫, 오디널 인코딩이 되어 있느냐에 따라 loss 값을 지정해야 한다.
    • binarycrossentropy(이진분류)
    • categorical_crossentropy(다중분류: 원핫인코딩)
    • sparse_categorical_crossentropy(다중분류 : ordinal Encoding)
  • 옵티마이저는 경사하강법 외 여러가지를 지정할 수도 있지만 adam에 비해 대부분 속도가 느린 편. 대체적으로 adam 을 사용하면 속도도 빠르고 학습도 잘 하는 편.
    • ❓ 옵티마이저를 사용하는 이유? 🅰 모델이 인식하는 데이터와 해당 손실 함수를 기반으로 업데이트 되는 방식이 옵티마이저. 손실 함수의 최소값을 찾기 위해.

Summary

  • 다른 데이터에 적용한다면 층 구성을 어떻게 할 것인가? 보통 입력-은닉-출력층으로 구성된다.
  • 예측하고자 하는 값이 분류(이진, 멀티클래스), 회귀인지에 따라 출력층 구성, loss 설정이 달라진다.
  • 분류, 회귀에 따라 측정 지표 정하기
  • 활성화함수는 기본적으로 relu를 사용, optimizer로는 adam을 사용하면 baseline 정도의 스코어가 나온다.
  • fit을 할 때 epoch 를 통해 여러 번 학습을 진행하는데, epoch 수가 많을 수록 대체적으로 좋은 성능을 내지만 과대적합이 될 수도 있다.
  • epoch 수가 너무 적다면 과소적합이 될 수 있다.
  • MNIST와 FMNIST의 차이
    • compile loss를 파라미터 스트링 사용, api 사용하기
    • loss=tf.keras.losses.SparseCategoricalCrossEntropy(from_logits=True)
    • loss='sparse_categorical_crossentropy'
    • dropout

✅ 0901번 실습 파일

❓ 당뇨병 여부 예측 문제에서는 출력층을 어떻게 구성해야 할까?
🅰 당뇨병이다, 아니다 이기 때문에 시그모이드

컴파일 할 때 loss도 binary_crossentropy 이진분류이니까.
예측값이 둘 중 하나일 때 : tf.keras.layers.Dense(1, activation='sigmoid')
다중 분류일 때: 활성화함수=softmax, 출력층 노드수 n개
이진 분류일 때: 활성화함수=sigmoid, 출력층 노드수 1개

flatten을 dense로 바꿔준 이유는 1차원으로 바꿔줄 필요가 없어서

callbacks=None : callbacks=[early_stop] 처럼 설정을 할 수 있다.
PrintDot() : 로그가 많이 찍히니까 printdot함수를 불러서 점을 찍겠다.

val_loss 기준으로 값이 나아지지 않으면 멈추게 한다.
early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)

profile
아직 고쳐나가는 중.

0개의 댓글