이번 장에서는 인공신경망을 이용한 딥러닝에 대해서 배웠다. 이걸론 혼공은 마지막이지만.. 책은 끝까지 봐야지 😊
노트북 링크 : 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
- sparse_categorical_crossentropy
- metrics : epoch 마다 출력할 값
- accuracy : 정확도
- Sequential : 신경망 모델을 만드는 클래스 About Keras models – Keras Documentation
- compile
미션 1: 7장-1절 확인 문제
- 입력 특성이 100개 이고 밀집층에 있는 뉴런 개수가 10개일 때 모델 파라미터의 개수는?
- 각 뉴런(10개)에서 입력 특성 100개를 사용한 방정식의 가중치(100개)와 절편(1개)를 모델 파라미터로 구성한다.
- 101개 * 10개 = 1010개
- 이진 분류 모델에서 적절한 활성화 함수(activation)은?
- sigmoid : 이진 분류에서는 방정식의 출력값을 0과 1사이의 확률로 만들기 위해 시그모이드 함수를 적용. 0.5 이상인 값은 양성 클래스로, 0.5 미만인 값은 음성 클래스로 분류.
- 케라스에서 손실 함수와 측정 지표 등을 지정하는 메서드는?
- compile : 신경망을 구성하고 나서 compile 메서드로 손실함수(loss)와 측정 지표(metrics)를 지정
- 정수 레이블 타겟을 가지는 다중 분류 문제에서 손실 함수로 적절한 것은?
- sparse_categorical_crossentropy : 다중 분류에서는 categorical_crossentropy 손실 함수를 사용하는데, 원핫인코딩 없이 정수값을 바로 쓸 때는 sparse_categorical_crossentropy를 사용.
심층 신경망
- 신경망에 여러 층을 두면? → 심층 신경망(DNN)
- 은닉층(hidden layer) : 입력층 ~ 출력층 사이의 층들
- 활성화 함수를 포함한다.
- 출력층에 적용하는 활성화 함수는 제한되어 있음. 하지만 은닉층은 자유로움.
- 은닉층에 있는 활성화 함수는 무슨 의미일까??
- 활성화 함수가 없으면..그냥 방정식이 연속되는 거라 층을 나누는 게 의미가 없음.
- 비선형적으로 비틀어 주는 것..
- 은닉층의 뉴런 개수는 어떻게 정할까? 특별한 기준은 없음..
- 적어도 출력층의 뉴런보다는 많아야..
- 훈련
- 미니배치 경사 하강법을 사용(기본 배치 크기는 32, batch_size)
- 학습되는 파라미터의 수
- summary() → Total params
- 레이어의 param 수 : Weight(Input 갯수 * Output 갯수) + Bias(Output 갯수)
- 2개 층으로 바꾸고 성능이 조금 나아졌다.
렐루 함수
- ReLU
- 이미지 처리에 있어 시그모이드보다 좋은 성능을 낸다고..
- 다른 활성화 함수들.. ML — Sigmoid 대신 ReLU? 상황에 맞는 활성화 함수 사용하기
옵티마이저
- ANN의 하이퍼파라미터들..
- 은닉층의 개수 : 모델 파라미터
- 각 은닉층의 뉴런 개수
- 각 은닉층의 활성화 함수
- 층의 종류
- 옵티마이저 = 학습 알고리즘
- 배치 사이즈
- epoch
- 종류…
- 은닉층의 개수 : 모델 파라미터
- 옵티마이저 : 얘도 영향이 있음..
- SGD : 기본 경사 하강법
- 적응형 : LR이 가변(최적점에 가까이 갈수록 천천히..LR 낮춰가기..)
- RMSprop (기본값)
- Adam
- Adagrad
- Hands-on ML 2판 11장 참고…
미션 2: 7장-2절 확인 문제
- add 메서드 사용법 : model.add(keras.layers.Dense(,,,))
- 300×300 배열을 펼칠 때 사용할 층(layer)은? : Flatten
- 이미지 분류에 널리 사용되는 활성화 함수는? : ReLU
- 적응적 학습률을 사용하지 않는 옵티마이저는? : SGD
신경망 모델 훈련
- 사이킷런이 제공하는 알고리즘들과 딥러닝의 차이..
- 사이킷런은 어느정도 고정된 모델 vs 딥러닝에서는 모델의 구조를 직접 만든다
- History 객체 : 에포크별 손실과 정확도 기록 model.fit → history
- 정확도 vs 손실
- loss 값은 뭐지? 손실합수 sum 인가..
- 모델이 최적화 하는 것은 손실 함수. 정확도가 아님.
- 정확도는 참조값으로만 써야.. 평가는 손실 값으로 쓰는 게 맞다.
- 드롭아웃 규제
- 일부 유닛을 랜덤하게 꺼서 과대적합을 피하기..
- 특정 유닛에 너무 집중하지 않도록..
- 서로 다른 신경망으로 학습하는 효과도..
- keras.layers.Dropout
콜백
- 과정 중간에 어떤 작업을 넣고 싶을 때..
- k.callbacks.ModelCheckpoint : 에포크마다 모델을 저장함.
- 조기 종료 early stopping : 과대적합 되기 전에 학습을 마치자. 일종의 규제..
- k.callbacks.EarlyStopping
- cb.stopped_epoch : 멈춘 에포크 횟수