딥러닝의 학습 방법
1. 인공 신경망은 입력에 대해서 순전파 연산을 함
2. 순전파 연산을 통해 나온 예측값과 실제값의 오차를 손실 함수(loss function)을 통해 계산
3. 이 손실(오차, loss)을 미분해서 기울기를 구함 -> 최솟값 찾기위해
4. 이를 통해 출력층 -> 입력층 방향으로 가중치와 편향을 업데이트 하는 역전파(옵티마이저)를 수행
: 인공신경망의 학습 단계
개념 정리
.
.
순전파(Forward Propagation)
- 인공 신경망에서 입력층에서 출력층 방향으로 연산을 진행하는 과정
- 주어진 입력이 입력층으로 들어가서 은닉층을 지나 출력층에서 예측값을 얻는 과정
행렬로 순전파 이해해해보기
아래의 예시에선 매개변수(가중치, 편향)이 총 6+2 = 8개 임을 알 수 있음
행렬로 다중 퍼셉트론의 순전파를 이해해보기
입력층, 은닉층1, 은닉층2, 출력층
자세한 순전파 예시(편향은 고려하지 않음)
x1 = 0.1
x2 = 0.2
가중치 w1,w2,w3,w4를 적용해서 은닉층의 입력 값 z1,z2 나옴
z1, z2는 각각의 은닉층 뉴런에서 활성화함수(시그모이드 함수)를 지남
활성화함수가 리턴하는 값이 은닉층 뉴런의 최종 출력값 : h1, h2
h1,h2에 가중치 w5,w6,w7,w8을 적용해서 출력층의 입력값 z3,z4 나옴
z3, z4는 각각의 은닉층 뉴런에서 활성화함수(시그모이드 함수)를 지남
활성화함수가 리턴하는 값이 출층 뉴런의 최종 출력값 : o1,o2
o1,o2(예측값)와 실제값(target)의 오차를 손실함수(MSE)로 계산
손실함수(Loss function)
- 실제값과 예측값의 차이(오차)를 수치화해주는 함수
- 오차가 클수록 값이 크다
- 회귀에서는 주로 MSE
- 분류에서는 주로 크로스 엔트로피
- 손실함수의 값을 최소화하는 두 매개변수(가중치, 편향)의 값을 찾는 것이 딥러닝의 학습 과정
MSE (Mean Squared Error)
- 회귀, 연속형 변수를 예측할 때 사용
- 예측값과 실제값 차이의 평균
이진 크로스 엔트로피 (Binary Cross-Entropy)
- 출력층에서 시그모이드함수를 사용하는 이진분류일 때 사용
카테고리 크로스 엔트로피(Categorical Cross-Entropy)
- 출력층에서 소프트맥스 함수를 사용하는 다중 클래스 분류일 때 사용
그 외에 다양한 손실 함수들 아래 참고
https://www.tensorflow.org/api_docs/python/tf/keras/losses
옵티마이저(최적화)
- 손실함수를 통해 구한 차이를 이용해 기울기를 구하고, 매개변수(가중치, 편향)를 학습에 어떻게 반영할 것인지를 결정하는 방법
배치
- 가중치, 편향 등의 매개변수 값을 조정하기 위해 사용하는 데이터의 양
- 전체 데이터를 가지고 매개변수의 값 조정 or 정해준 양의 데이터만 가지고 매개변수의 값 조정
배치 크기에 따른 경사하강법
배치 경사 하강법(Batch Gradient Descent, GD)
- 오차를 구할 때 전체 데이터를 고려
- 한 번의 에포크에 모든 매개변수 업데이트를 단 한 번 수행
- 오래 걸림, 메모리 크게 요구
배치 크기가 1인 경사하강법(Stochastic Gradient Descent, SGD)
- 확률적 경사하강법
- 랜덤으로 선택한 하나의 데이터에 대해서만 계산
- 빠르게 계산 가능
- 아래 그림처럼 SGD는 매개변수의 변경폭이 불안정
미니 배치 경사하강법(Mini-Batch Gradient Descent)
- 배치 크기를 지정하여 매개변수의 값을 조정하는 경사하강법
- 전체 데이터를 계산하는 것보다 빠름
- SGD 보다 안정적
- 가장 많이 사용
- 2의 n제곱에 해당하는 숫자로 선택하는 게 보편
경사하강법의 한계
- Saddle Point(안장점) : 기울기가 0 이지만 극값이 아닌 지점
- 경사하강법은 미분이 0 이면 더이상 파라미터를 업데이트 하지 않음 -> 안장점 못벗어남
- 함수의 형태 : 볼록함수, 비볼록함수
- 볼록함수는 초기 파라미터 값이 어떻게 설정되어도 경사하강법을 통해 최적의 값 도달 가능
- 비볼록함수는 파라미터 값의 시작 위치에 따라 최적의 값이 달라짐
- 글로벌 미니멈 : 전체 함수에 걸친 최솟값
- 로컬 미니멈 : 특정 구역에서의 최솟값
- 로컬 미니멈에 빠질 수 있음. 최적의 값인 줄 알았는데 사실은 아닌 것.
모멘텀(Momentum)
- 경사 하강법 + 관성
- 경사하강법에서 계산된 접선의 기울기에 한 시점 전의 접선의 기울기 값을 일정한 비율만큼 반영
- 로컬 미니멈에 도달하였을 때 글로벌 미니멈으로 잘못 인식하여 탈출은 못한다면?
- 관성을 통해(이전 기울기의 크기를 고려해) 추가로 이동하여 빠져나
아다그라드(Adagrad)
- 변수들은 각자 의미하는 바가 다름 - > 모든 변수에 동일한 학습률을 적용시키는 것은 비효율적
- 각 변수에 서로 다른 학습률을 적용
- 변화가 많은 변수는 학습률이 작게 설정
- 변화가 적은 변수는 학습률을 높게 설정
- 학습을 계속 진행하면 나중엔 학습률이 지나치게 떨어짐
알엠에스프롭(RMSprop)
- 아다그라드와 마찬가지로 각 변수에 서로 다른 학습률 적용
- 아다그라드의 단점 개선
아담(Adam)
- RMSprop + momentum
- 방향과 학습률 두 가지를 모두 잡은 방법
- 중요. 유명함
학습
- 실제값과 예측값의 오차로부터 옵티마이저를 통해서 가중치를 업데이트
에포크(Epoch)
- 인공신경망에서 전체 데이터에 대해서 순전파와 역전파가 끝난 상태
- 예를들어 에포크가 30이면 순전파와 역전파를 총 30번 한다
- 너무 크거나 작으면 과대적합 과소적합 문제 발생
배치
- 가중치, 편향 등의 매개변수 값을 조정하기 위해 사용하는 데이터의 양
- 전체 데이터를 가지고 매개변수의 값 조정 or 정해준 양의 데이터만 가지고 매개변수의 값 조정
배치 크기
- 몇 개의 데이터 단위로 매개변수를 업데이트 하는지
- 배치의 수와 배치의 크기는 다르다
- 전체 데이터 2000일 때, 배치 크기가 200이라면 배치 수는 10
이터레이션(Iteration) or 스텝(Step)
- 한 번의 에포크를 끝내기 위해서 필요한 배치의 수
- 전체 데이터 2000일 때, 배치 크기가 200이라면 이터레이션은 10
- 한번의 에포크 당 매개변수 업데이트가 10번 이루어진다는 뜻
역전파(BackPropagation Propagation)
- 순전파와 반대로 출력층에서 입력층 방향으로 연산을 진행하는 과정
- 계산하면서 가중치를 업데이트해간다
위의 순전파 예시를 역전파로 이해해보면
처음에 업데이트 해야할 가중치는 w5,w6,w7,w8
w5에 대해서만 설명하자면
가중치 w5를 업데이트 하기 위해 위에서 MSE로 계산된 오차를 w5로 편미분
o1은 활성화함수(시그모이드함수)의 출력값
시그모이드 함수의 미분은 f(x)*(1-f(x))
h1에 가중치 w5를 곱해서 z3이 되었으니
z3(h1 * w5)을 w5에 대해 미분하면 h1
경사하강법을 통해 가중치 업데이트
학습률 알파는 0.5라고 가정
역전파 1단계를 마무리해서 2단계 진행
w1,w2,w3,w4를 업데이트 해야함
w1에 대해서만 설명하자면
가중치 w1를 업데이트 하기 위해 위에서 MSE로 계산된 오차를 w1로 편미분
위의 방법과 동일하게 진행!
w5이 w1을 업데이트 하는 데에 영향을 주는 걸 확인할 수 있음
-> 기울기 소실 문제와 연결
업데이트 된 가중치에 대해서 다시 한 번 순전파를 진행하여 오차가 감소하는지 확인한다!
'Python > DL' 카테고리의 다른 글
CNN 이해하기 (2) (0) | 2023.05.08 |
---|---|
CNN 이해하기 (1) (0) | 2023.05.02 |
활성화 함수, 과적합, 기울기 소실 (0) | 2023.03.19 |
퍼셉트론 , ANN vs DNN (0) | 2023.03.19 |
tensorflow 설치 과정에서 오류 해결 (0) | 2023.02.08 |