<딥러닝>
- 머신러닝의 한 종류, 인공 신경망(Aritificial Neural Network, ANN)을 기반으로 중요한 특징을 자동으로 학습하는 방식
- 비정형 데이터에 뛰어난 성능. 데이터가 많아질수록 복잡한 데이터 표현 학습이 가능
- 손실함수를 최소화 하는 것이 목적(방향성)
인공 신경망과 인공 뉴런(neuron)
인공 신경망은 데이터를 통해 중요한 특징을 자동으로 학습하는 인공 뉴런으로 구성
learning-rate(학습률) : 간격
손실함수 : y(실제값)와 y hat(예측값)의 차이
Dense : 모든 노드가 서로 연결된 완전 연결 신경망 층(fully-connected layer)
옵티마이저 = 최적화 기법
- 경사하강법 Gradient Descent(GD)
n 가장 기본적인 최적화 알고리즘. 기울기 Loss(W)를 이용함
n 속도가 너무 느리다는 단점 존재 → SGD 이용 #SGD외에도 RMSprop, Adagrad, Adam 등 # Adam이 최고
하이퍼파라미터(Hyperparameter) : 모델이 학습하기 전 사용자가 직접 설정해야 하는 값들
1Epoch : 모든 과정을 한 바퀴 돌림
batch_size : 한 번에 주는 데이터량 조절
활성화함수
1. Relu : y=0 (x<0) , y=x (x>=0)
2. sigmoid : 0 < y < 1
3. tan h : -1 < y < 1
<각 가중치들의 기울기를 구하는 방법>
순전파: 신경망의 입력에서 출력 방향으로 연산이 진행되는 과정
역전파: 순전파를 통해 얻은 모델의 예측값과 실제값의 오차(손실)를 계산 후 오차 값을 다시 뒤로 전파하며 변수들을 갱신(가중치 조절)
<딥러닝 프레임워크>
왜 딥러닝 라이브러리가 아닐까? 둘의 차이는?
라이브러리: 단순 코드집합. 내가 코드를 불러와서 사용
프레임워크: ‘틀’이 이미 존재해서 내가 쓴 코드를 불러가서 ‘틀’이 사용
# 사용법은 사실 크게 다를 게 없다.
딥러닝 프레임워크의 종류
1. 텐서플로우(TensorFlow)
A. 구글이 개발. 산업용, 기업용으로 배포에 강하다
B. C언어, 파이썬, Matlab 등 다양한 언어에서 사용 가능
C. High-Level, Mid-level, Low-level API 모두 존재
D. # 고수준 일수록 자동화, 저수준은 커스터마이징이 많아서 어려움.
E. Tensor는 NumPy에 딥러닝 기능을 추가한 것과 유사(기능도 유사)
# 수치를 직접 계산하려면 numpy, 학습과 추론만 하려면 Tensor
2. 케라스(Keras)
A. 파이썬 기반으로 간단해서 초보자용 #교육, 학습용 등 사용
B. 텐서플로우 2.0버전부터 텐서플로우에 통합 되서 유용하게 쓰임(굳이 따로 사용X)
3. 파이토치(Pytorch)
A. 파이썬 기반으로 Meta(전 Facebook)에서 개발
B. 매우 직관적이어서 사용 쉽지만 배포가 어려움 # 실험, 연구, 논문구현 등에 사용
< TensorFlow >
- 주요 구성 요소
1. tf.keras (고수준 API)
2. tf.data (데이터 입력 파이프라인)
3. tf.function (그래프 최적화 실행)
4. tf.tensor (텐서 연산 지원)
- 기본 동작 과정
import tensorflow as tf
1. 라이브러리 로딩
2. 데이터 로드
# EDA는 필수
3. 모델 구조 정의
4. 모델 컴파일 model.compile()
5. 모델 학습 model.fit() 어떻게?
6. 모델 평가 model.evaluate() 성능 평가 지표랑 테스트용 데이터 주고 스스로 평가해봐
# 모델 완료
7. 예측 수행 model.predict() 실제 사용
- 대표적인 모델 소개’
1. CNN 모델 (컴퓨터 비전 기본 모델)
A. Convolutional(합성곱) Neural Network
B. 이미지 같은 2D에 특화된 모델
2. LSTM 모델 (자연어 기본 모델)
A. 시퀀스(순서) 데이터 처리에 특화된 모델
B. RNN의 장기의존성 문제를 보완하기 위해 개발(그래도 한계 존재)
3. Transformer 모델
A. 구글에서 번역기 성능을 높이기 위해 개발
B. 데이터를 병렬 처리해서 학습속도 대폭 상승 → 대형 모델 탄생
<딥러닝 학습 프로세스>
1. 필요한 라이브러리 가져오기
2. 데이터 로딩 및 분리
3. 학습/테스트 데이터셋 분리
4. 데이터 스케일링
5. 모델 구조 정의
6. 모델 컴파일
A. 어떻게? 손실+옵티마이저
7. 모델 학습
A. model.fit()
B. Epoch
C. 학습 내용을 history에 저장 → 시각화를 위해
8. 모델 평가
A. model.evaluate
9. 예측 수행
A. model.predict() 예측값 생성
B. 실제값과 비교
10. 시각화
조기 종료 (Early Stopping)
- 모델이 훈련 데이터에서는 성능이 좋아지지만, 검증 데이터에서 성능이 더 이상 개선되지 않을 때 학습을 조기에 멈추는 기법.
n patience = n : 검증 손실이 n번 연속으로 개선되지 않으면 학습 중단
n restore_best_weights=True: 가장 성능이 좋았던 최적의 가중치 복원
- 불필요한 학습을 방지하고 과적합(Ove fitting)을 예방하는 효과.
오버피팅 - 과적합(Overfitting) 문제
- 모델이 학습 데이터에 너무 딱 들어맞게 학습된 나머지, 일반화 성능이 오히려 낮아지는 문제
- 과적합 방지 기법에는 가중치 규제/정규화, 드롭아웃, 배치 정규화, 조기 종료 등이 있음
예측 임계값(Threshold) 조정
- 모델은 기본적으로 0.5를 기준으로 예측 확률을 0 또는 1로 나눔
- 이 기준을 낮추면 재현율(Recall)이 증가 but 정밀도(Precision) 하락 가능성 있음
드롭아웃(Dropout)
- 너무 튀는 노드가 생길 시
- 일정한 단계에서만 무작위 노드를 임의로 drop 하여 비활성화
배치 정규화(Batch Normalization) # Batch = 전체 데이터
- batch가 n개의 mini batch로 나뉘어져 있다면 모든 mini batch마다 순전파, 역전파를 하며 가중치를 갱신하고 총 n번 진행되야(모든 mini batch) 1Epoch이다.
- 따라서 전체 데이터는 정규화를 했더라도 mini batch 각각은 또 정규화 해줄 필요가 있다.
< 분류 + 회귀 모델링 >
- 공통 학습 후 2개의 출력층(분류, 회귀)으로 따로 출력
출력층 활성화
이진 분류 : sigmoid -> 마지막 노드가 1개
다중 분류 : softmax -> 마지막 노드가 컬럼수와 같게
마지막 출력값들의 확률 합은 1이 된다.
손실함수
sigmoid – binary_crossentropy
softmax 원핫 categorical_ crossentropy
softmax 레이블 sparse_ crossentropy
categorical_ crossentropy