728x90
반응형
[youtube] Deep Learning Full Tutorial Course using TensorFlow and Keras - 이수안컴퓨터연구소 참고
🧡목차
딥러닝 구조 및 학습
2. 모델(Model)
3) 모델 컴파일
- 손실함수(loss function)
- 최적화(optimization)
- 지표(metrics)
4) 모델 학습, 평가 및 예측
- fit()
- evaluate()
- predict()
딥러닝 구조 및 학습
- 딥러닝 구조와 학습에 필요한 요소
- 모델(네트워크)를 구성하는 레이어(layer)
- 입력 데이터와 그에 대한 목적(결과)
- 학습시에 사용할 피드백을 정의하는 손실 함수(loss function)
- 학습 진행 방식을 결정하는 옵티마이저(optimizer)
2. 모델(Model)
- 딥러닝 모델은 레이어로 만들어진 비순환 유향 그래프(Directed Acyclic Graph, DAG) 구조
2) 모델 컴파일(compile)
- 모델을 구성한 후, 사용할 손실 함수(loss function), 옵티마이저(optimizer)를 지정
# 기본 코드
model.compile(loss='sparse_categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
1. 손실 함수(Loss Function)
- 학습이 진행되면서 해당 과정이 얼마나 잘 되고 있는지 나타내는 지표
- 모델이 훈련되는 동안 최소화될 값으로 주어진 문제에 대한 성공 지표
- 손실 함수에 따른 결과를 통해 학습 파라미터를 조정
- 최적화 이론에서 최소화 하고자 하는 함수
- 미분 가능한 함수 사용
- Keras에서 주요 손실 함수 제공
- sparse_categorical_crossentropy: 클래스가 배타적 방식으로 구분, 즉 (0, 1, 2, ..., 9)와 같은 방식으로 구분되어 있을 때 사용
- categorical_cross_entropy: 클래스가 원-핫 인코딩 방식으로 되어 있을 때 사용
- binary_crossentropy: 이진 분류를 수행할 때 사용
평균절대오차(Mean Absolute Error, MAE)
- 오차가 커져도 손실함수가 일정하게 증가
- 이상치(Outlier)에 강건함(Robust)
- 데이터에서 [입력 - 정답] 관계가 적절하지 않은 것이 있을 경우에, 좋은 추정을 하더라도 오차가 발생하는 경우가 발생
- 해당 이상치에 해당하는 지점에서 손실 함수의 최소값으로 가는 정도의 영향력이 크지 않음
- 회귀 (Regression)에 많이 사용
평균제곱오차(Mean Squared Error, MSE)
- 가장 많이 쓰이는 손실 함수 중 하나
- 오차가 커질수록 손실함수가 빠르게 증가
- 정답과 예측한 값의 차이가 클수록 더 많은 페널티를 부여
- 회귀 (Regression)에 쓰임
MAE와 RMSE 비교 및 각각의 사용처
https://thedatascientist.com/performance-measures-rmse-mae/
https://mizykk.tistory.com/102
원-핫 인코딩(One-Hot Encoding)
- 범주형 변수를 표현할 때 사용
- 가변수(Dummy Variable)이라고도 함
- 정답인 레이블을 제외하고 0으로 처리
교차 엔트로피 오차(Cross Entropy Error, CEE)
- 이진 분류(Binary Classification), 다중 클래스 분류(Multi Class Classification)
- 소프트맥스(softmax)와 원-핫 인코딩(ont-hot encoding) 사이의 출력 간 거리를 비교
- 정답인 클래스에 대해서만 오차를 계산
- 정답을 맞추면 오차가 0, 틀리면 그 차이가 클수록 오차가 무한히 커짐
- y=log(x)
- x가 1에 가까울수록 0에 가까워짐
- x가 0에 가까울수록 y값은 무한히 커짐
- 정답 레이블(yi)은 원-핫 인코딩으로 정답인 인덱스에만 1이고, 나머지는 모두 0이라서 다음과 같이 나타낼 수 있음
- 소프트맥스를 통해 나온 신경망 출력이 0.6이라면 −log0.6≒−0.51 이 되고, 신경망 출력이 0.3이라면 −log0.3≒−1.2 이 됨
- 정답에 가까워질수록 오차값은 작아짐
- 학습시, 원-핫 인코딩에 의해 정답 인덱스만 살아 남아 비교하지만, 정답이 아닌 인덱스들도 학습에 영향을 미침. 왜냐하면 다중 클래스 분류는 소프트맥스(softmax) 함수를 통해 전체 항들을 모두 다루기 때문
▶이진 분류 문제의 교차 크로스 엔트로피(BInary Cross Entropy, BCE)
2. 옵티마이저(Optimizer)
- 손실 함수를 기반으로 모델이 어떻게 업데이트되어야 하는지 결정 (특정 종류의 확률적 경사 하강법 구현)
- Keras에서 여러 옵티마이저 제공
- keras.optimizer.SGD(): 기본적인 확률적 경사 하강법
- keras.optimizer.Adam(): 자주 사용되는 옵티마이저
- Keras에서 사용되는 옵티마이저 종류: https://keras.io/ko/optimizers/
- 보통 옵티마이저의 튜닝을 위해 따로 객체를 생성하여 컴파일
볼록함수(Convex Function)와 비볼록함수(Non-Convex Function)
- 볼록함수(Convex Function)
- 어떤 지점에서 시작하더라도 최적값(손실함수가 최소로하는 점)에 도달할 수 있음
- 비볼록함수(Non-Convex Function)
- 비볼록 함수는 시작점 위치에 따라 다른 최적값에 도달할 수 있음
경사하강법(Gradient Decent)
- 미분과 기울기
- 스칼라를 벡터로 미분한 것
- 변화가 있는 지점에서는 미분값이 존재하고, 변화가 없는 지점은 미분값이 0
- 미분값이 클수록 변화량이 크다는 의미
- 즉, 미분값이 0인 지점을 찾는 방법
학습률(learning rate)
- 적절한 학습률을 지정해야 최저점에 잘 도달할 수 있음
- 학습률이 너무 크면 발산하고, 너무 작으면 학습이 오래 걸리거나 최저점에 도달하지 않음
안장점(Saddle Point)
- 기울기가 0이지만 극값이 되지 않음
- 경사하강법은 안장점에서 벗어나지 못함
3. 지표(Metrics)
- 모니터링할 지표
- mae나 accuracy 사용
- 줄여서 acc로도 사용 가능
- Keras에서 사용되는 지표 종류: https://keras.io/ko/metrics/
4. 오차역전파 (Backpropagation)
- 오차역전파 알고리즘
- 학습 데이터로 정방향(forward) 연산을 통해 손실함수 값(loss)을 구함
- 각 layer별로 역전파학습을 위해 중간값을 저장
- 손실함수를 학습 파라미터(가중치, 편향)로 미분하여 마지막 layer로부터 앞으로 하나씩 연쇄법칙을 이용하여 미분
- 각 layer를 통과할 때마다 저장된 값을 이용
- 오류(error)를 전달하면서 학습 파라미터를 조금씩 갱신
- 오차역전파 학습의 특징
- 손실함수를 통한 평가를 한 번만 하고, 연쇄법칙을 이용한 미분을 활용하기 때문에 학습 소요시간이 매우 단축
- 미분을 위한 중간값을 모두 저장하기 때문에 메모리를 많이 사용
- 신경망 학습에 있어서 미분가능의 중요성
- 경사하강법(Gradient Descent)에서 손실 함수(cost function)의 최소값, 즉, 최적값을 찾기 위한 방법으로 미분을 활용
- 미분을 통해 손실 함수의 학습 매개변수(trainable parameter)를 갱신하여 모델의 가중치의 최적값을 찾는 과정
- 오차역전파의 직관적 이해
- 학습을 진행하면서, 즉 손실함수의 최소값(minimum)을 찾아가는 과정에서 가중치 또는 편향의 변화에 따라 얼마나 영향을 받는지 알 수 있음
3) 모델 학습, 평가, 예측
- fit()
- x: 학습 데이터
- y: 학습 데이터 정답 레이블
- epochs: 학습 회수
- batch_size: 단일 배치에 있는 학습 데이터의 크기
- validation_data: 검증을 위한 데이터
- evaluate()
- 테스트 데이터를 이용한 평가
- predict()
- 임의의 데이터를 사용해 예측
728x90
반응형
'딥러닝 (Deep Learning) > tensorflow, keras' 카테고리의 다른 글
챗봇 실습 - 위로해주는 챗봇 (0) | 2021.10.23 |
---|---|
[tensorflow, keras] 딥러닝 기본 코드(2-2) 모델 가중치 확인 (0) | 2021.10.14 |
[tensorflow, keras] 딥러닝 기본 코드(2-1) 모델의 구성(Sequential, API함수, 서브클래싱) (0) | 2021.10.14 |
[tensorflow, keras] 딥러닝 기본 코드(1) - Layer(Dense, Activation, Flatten, Input) (0) | 2021.10.14 |
[tensorflow] 텐서 기본코드 (0) | 2021.10.14 |