혼공 머신러닝/딥러닝 #7

이번 장에서는 인공신경망을 이용한 딥러닝에 대해서 배웠다. 이걸론 혼공은 마지막이지만.. 책은 끝까지 봐야지 😊

노트북 링크 : https://github.com/samsee/hgmldl2023

인공 신경망

  • ANN(Artificial Neural Network), DNN( Neural Network)
  • 가장 기본적인 인공 신경망은 확률적 경사 하강법을 사용하는 로지스틱 회귀와 같다.
  • 뉴런이란? z값(선형 계산)을 처리하는 단위, 유닛 이라고도 부름
    • 로지스틱 회귀에서의 분류 함수랑 비슷한거?
  • 입력층 : 딱히 하는 일은 없음. 입력을 통과시키는 역할. 이미지에서는 픽셀의 갯수
  • 출력층 : 분류에서는 클래스의 수
  • 매컬러-피츠 뉴런
  • 딥러닝에서는 보통 교차 검증을 사용하지 않고 검증 세트를 별도 떼어내서 사용
    • 데이터셋이 충분히 크기 때문에 검증 점수가 안정적
    • 교차 검증 하기에는 훈련 시간이 너무 오래 걸림

TensorFlow and Keras

  • Keras : TF의 고수준 API, 현재는 통합
  • 케라스는 프론트엔드 역할, 직접 연산은 안함, 백엔드에 연결
  • 밀집층(dense layer) OR 완전 연결층(Fully Connected Layer)
    • 출력에 사용할 때 unit의 수는 클래스의 수
  • 활성화 함수
    • 다중 분류면.. softmax
    • 이진 분류면.. sigmoid
    • 회귀면? → None
  • 손실 함수
    • sparse_categorical_crossentropy
      • 각 클래스에 확률 중..타깃에 해당하는 확률만 남겨놓기 위해. 나머지 확률에는 모두 0을 곱해줌.
      • sparse : 원핫 인코딩 없이 정수로 분류된 값을 사용.
    • 다중 분류 : categorical_crossentropy
    • 이진 분류 : binary_crossentropy
  • metrics : epoch 마다 출력할 값
    • accuracy : 정확도
  • Sequential : 신경망 모델을 만드는 클래스 About Keras models – Keras Documentation
  • compile

미션 1: 7장-1절 확인 문제

  1. 입력 특성이 100개 이고 밀집층에 있는 뉴런 개수가 10개일 때 모델 파라미터의 개수는?
    • 각 뉴런(10개)에서 입력 특성 100개를 사용한 방정식의 가중치(100개)와 절편(1개)를 모델 파라미터로 구성한다.
    • 101개 * 10개 = 1010개
  2. 이진 분류 모델에서 적절한 활성화 함수(activation)은?
    • sigmoid : 이진 분류에서는 방정식의 출력값을 0과 1사이의 확률로 만들기 위해 시그모이드 함수를 적용. 0.5 이상인 값은 양성 클래스로, 0.5 미만인 값은 음성 클래스로 분류.
  3. 케라스에서 손실 함수와 측정 지표 등을 지정하는 메서드는?
    • compile : 신경망을 구성하고 나서 compile 메서드로 손실함수(loss)와 측정 지표(metrics)를 지정
  4. 정수 레이블 타겟을 가지는 다중 분류 문제에서 손실 함수로 적절한 것은?
    • sparse_categorical_crossentropy : 다중 분류에서는 categorical_crossentropy 손실 함수를 사용하는데, 원핫인코딩 없이 정수값을 바로 쓸 때는 sparse_categorical_crossentropy를 사용.

심층 신경망

  • 신경망에 여러 층을 두면? → 심층 신경망(DNN)
  • 은닉층(hidden layer) : 입력층 ~ 출력층 사이의 층들
    • 활성화 함수를 포함한다.
    • 출력층에 적용하는 활성화 함수는 제한되어 있음. 하지만 은닉층은 자유로움.
    • 은닉층에 있는 활성화 함수는 무슨 의미일까??
      • 활성화 함수가 없으면..그냥 방정식이 연속되는 거라 층을 나누는 게 의미가 없음.
      • 비선형적으로 비틀어 주는 것..
  • 은닉층의 뉴런 개수는 어떻게 정할까? 특별한 기준은 없음..
    • 적어도 출력층의 뉴런보다는 많아야..
  • 훈련
    • 미니배치 경사 하강법을 사용(기본 배치 크기는 32, batch_size)
  • 학습되는 파라미터의 수
    • summary() → Total params
    • 레이어의 param 수 : Weight(Input 갯수 * Output 갯수) + Bias(Output 갯수)
  • 2개 층으로 바꾸고 성능이 조금 나아졌다.

렐루 함수

옵티마이저

  • ANN의 하이퍼파라미터들..
    • 은닉층의 개수 : 모델 파라미터
      • 각 은닉층의 뉴런 개수
      • 각 은닉층의 활성화 함수
      • 층의 종류
    • 옵티마이저 = 학습 알고리즘
      • 배치 사이즈
      • epoch
      • 종류…
  • 옵티마이저 : 얘도 영향이 있음..
    • SGD : 기본 경사 하강법
    • 적응형 : LR이 가변(최적점에 가까이 갈수록 천천히..LR 낮춰가기..)
      • RMSprop (기본값)
      • Adam
      • Adagrad
    • Hands-on ML 2판 11장 참고…

미션 2: 7장-2절 확인 문제

  1. add 메서드 사용법 : model.add(keras.layers.Dense(,,,))
  2. 300×300 배열을 펼칠 때 사용할 층(layer)은? : Flatten
  3. 이미지 분류에 널리 사용되는 활성화 함수는? : ReLU
  4. 적응적 학습률을 사용하지 않는 옵티마이저는? : SGD

신경망 모델 훈련

  • 사이킷런이 제공하는 알고리즘들과 딥러닝의 차이..
    • 사이킷런은 어느정도 고정된 모델 vs 딥러닝에서는 모델의 구조를 직접 만든다
  • History 객체 : 에포크별 손실과 정확도 기록 model.fit → history
  • 정확도 vs 손실
    • loss 값은 뭐지? 손실합수 sum 인가..
    • 모델이 최적화 하는 것은 손실 함수. 정확도가 아님.
    • 정확도는 참조값으로만 써야.. 평가는 손실 값으로 쓰는 게 맞다.
  • 드롭아웃 규제
    • 일부 유닛을 랜덤하게 꺼서 과대적합을 피하기..
    • 특정 유닛에 너무 집중하지 않도록..
    • 서로 다른 신경망으로 학습하는 효과도..
    • keras.layers.Dropout

콜백

  • 과정 중간에 어떤 작업을 넣고 싶을 때..
    • k.callbacks.ModelCheckpoint : 에포크마다 모델을 저장함.
  • 조기 종료 early stopping : 과대적합 되기 전에 학습을 마치자. 일종의 규제..
    • k.callbacks.EarlyStopping
    • cb.stopped_epoch : 멈춘 에포크 횟수

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다