일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 오차제곱합
- PYTHON
- 신경망
- 수치미분
- 제약조건
- 학습 구현
- Pointwise Convolution
- COUNT
- next.js 튜토리얼
- Depthwise Convolution
- sum
- Next.js
- join
- MIN
- total
- 평균
- AVG
- PyQt5
- 합계
- Depthwise Separagle Convolution
- sqlite3
- 최댓값
- 시험데이터
- 데이터베이스
- 렐루함수
- 교차엔트로피오차
- 밑바닥부터 시작하는 딥러닝
- max
- 미니배치
- sigmoid
- Today
- Total
우잉's Development
Chapter4 신경망 학습 본문
학습 : 훈련 데이터로부터 가중치 매개변수의 최적 값을 자동으로 획득하는 것
4.1 데이터에서 학습한다.
데이터에서 학습한다는 것은 가중치 매개변수의 값을 데이터를 보고 자동으로 결정한다는 뜻
4.1.1 데이터 주도 학습
기계학습 : 데이터에서 답을 찾고 데이터에서 패턴을 발견하고 데이터로 이야기를 만드는 것
알고리즘을 밑바닥부터 설계하지 않고 주어진 데이터를 잘 활용해서 해결하는 방법으로 이미지에서 특징(feature)을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법이 있습니다. 여기서 말하는 특징은 입력 데이터 (입력 이미지)에서 본질적인 데이터 (중요한 데이터)를 정확하게 추출할 수 있도록 설계된 변환기를 가리킵니다.
다만, 이미지를 벡터로 변환할 때 사용하는 특징은 여전히 사람이 설계한느 것임에 주의해야 합니다.
자, 정리해보면 숫자 이미지를 예측하는데 3가지 방법이 있습니다.
1. 사람이 생각한 알고리즘으로 결과 도출
2. 사람이 생각하는 특징 + 기계학습으로 결과 도출
3. 신경망(딥러닝)으로 결과 도출
4.1.2 훈련 데이터와 시험 데이터
신경망 학습은 아래의 데이터로 나누어 학습시킵니다.
- 훈련 데이터 (training data)
- 시험 데이터 (test data)
두 개의 데이터로 나누는 이유는 범용 능력을 제대로 평가하기 위해서 분리합니다.
말 그대로 훈련 데이터는 훈련시키는 데이터이고 테스트 데이터는 훈련된 신경망을 테스트해보는 데이터입니다.
예를 들어, 모든 데이터로 훈련시키고 새로운 데이터가 아닌 같은 데이터로 테스트를 하면 정확도가 높게 나올 수밖에
없으므로 새로운 데이터로 테스트하는 겁니다.
여기서 한 데이터셋에만 지나치게 최적화된 상태를 오버 피팅(Overfitting)이라고 합니다.
4.2 손실 함수 Loss Function
손실함수 (Loss Fuction) : 신경망 성능의 나쁨을 나타내는 지표, 현재 신경망이 훈련 데이터를 얼마나 잘 처리하지 못하느냐를 나타냅니다.
4.2.1 오차 제곱합 (sum of squares for error, SSE)
\(E = {1 \over 2} \sum_{k} (y_k-t_k)^2 \) |
\(y_k\)는 신경망의 출력 (신경망이 추정한 값) \(t_k\)는 정답레이블 (\(t_k\)는 원-핫 인코딩), \(k\) 는 데이터의 차원수 |
오차 제곱합을 python으로 정의해봅시다.
위의 함수를 실제로 사용해보겠습니다. (y = 0, 1, 2,... , 9)
ex1) '2'일 확률이 가장 높다고 추정함
y의 3번째 수인 0.6이 가장 크다. 그러나 0,1,2,... 순이므로 2를 가장 높다고 추정하였다. 그랬더니 0.0975가 나왔습니다.
ex2) '7'일 확률이 가장 높다고 추정함
y의 뒤에서 3번째 수는 7이다. 7로 추정했을 때 0.5975 이입니다.
결괏값이 작을수록 정답과 일치하다고 할 수 있습니다. 왜냐하면 오차라는 것은 정답 값과 예측값의 차이이므로 그 차이가 작을수록 제곱 값도 작기 때문입니다. 위의 예제에서도 t를 보명 2가 정답인데 2를 예측했을 때와 7을 예측했을 때의 값이 7일 때 더 큰 것으로 나옵니다.
4.2.2 교차 엔트로피 오차 (cross entropy error , CEE)
\(E = - \sum_k t_klog{y_k} \) | \(y_k\) : 신경망의 출력 \(t_k\) : 정답레이블 (\(t_k\)는 원-핫 인코딩) |
앞에 마이너스가 붙는 이유는 log함수는 옆의 그림과 같다.
0과 1 사이 \(x\) 값은 마이너스이므로 양수로 만들어주기 위함입니다.
\(log\)는 밑이 \(e\)인 자연로그 (\(log_e\))입니다.
\(x\)가 1일 때 \(y\)는 0이 되고 \(x\)가 0에 가까워질수록 \(y\)의 값은
점점 작아집니다.
그럼 교차 엔트로피 오차를 python으로 구현해봅시다.
cross entropy error로 위의 두 개의 예제를 해보았습니다. 이 또한 값이 작을수록 정확도가 좋은 의미를 가집니다.
4.2.3 미니 배치 학습
기계학습 문제는 훈련 데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾아내는 것입니다.
이렇게 하려면 모든 훈련 데이터를 대상으로 손실 함숫값들을 구해야 합니다. MNIST데이터셋은 6만 장이었습니다. 그럼 6만 장의 데이터를 대상으로 손실 함수의 합을 구하려면 시간이 오래 걸립니다. 이런 경우 데이터 일부를 추려 전체의 근사치로 이용할 수 있습니다. 신경망 학습에서도 훈련 데이터로부터 일부만 골라 학습을 수행합니다. 이 일부를 미니 배치 (mini-batch)라고 합니다. 6만 장의 훈련 데이터 중에서 100장을 무작위로 뽑아 그 100장 만을 사용하여 학습하는 경우를 미니 배치 학습이라고 합니다.
자, 그럼 MNIST데이터셋으로 실습해봅시다. MNIST데이터셋을 읽어옵시다.
load_mnist() 함수는 MNIST데이터셋을 읽어오는 함수이며, one_hot_label=True는 원-핫 인코딩으로 즉, 정답 위치의 원소만 1이고 나머지는 0인 배열을 얻을 수 있습니다.
저번 게시글에 설명한 대로 784는 28x28이며 10은 0~9를 의미합니다. 훈련 데이터에서 무작위로 10장만 빼내려면 np.random.choice() 함수를 사용합니다.
4.2.4 (배치용) 교차 엔트로피 오차 구현하기
\(y\)가 1차원이라면, 즉 데이터 하나당 교차 엔트로피 오차를 구하는 경우 reshape함수로 데이터의 형상을 바꿔줍니다.
그리고 배치의 크기로 나눠 정규화하고 이미지 1장당 평균의 교차 엔트로피 오차를 계산합니다.
4.2.5 왜 손실 함수를 설정하는가?
우리의 궁극적 목적은 높은 정확도를 끌어내는 매개변수 값을 찾는 것입니다.
그럼 왜 정확도라는 지표를 두고 손실함수를 사용할까요? 이 의문은 미분에서 찾을 수 있습니다.
신경망 학습에서는 최적의 매개변수인 가중치와 편향을 찾을 때 손실 함수의 값을 가능한 한 작게 하는 매개변수 값을 찾습니다. 이때 매개변수의 미분 (정확히는 기울기)를 계산하고, 그 미분 값을 단서로 매개변수의 값을 서서히 경신하는 과정을 반복합니다.
만약, 미분 값이 음수면 가중치 매개변수를 양의 방향으로 변화시켜 손실 함수의 값을 줄일 수 있습니다.
반대로 미분 값이 양수면 가중치 매개변수를 음의 방향으로 변화시켜 손실 함수의 값을 줄일 수 있습니다.
그러나 미분 값이 0이면 가중치 매개변수를 어느 쪽으로 움직여도 손실 함수의 값은 줄어들지 않습니다.
그래서 가중치의 매개변수의 갱신은 여기서 멈춥니다.
정확도를 지표로 삼으면 안 되는 이유는 정확도는 불연속적인 값으로 띄엄띄엄 바뀌지만 손실 함수는 0.94562.. 같은 연속적으로 변화합니다. 이 의미는 계단 함수가 아닌 시그모이드 함수 즉, 활성화 함수를 사용하는 의미와 같습니다.
시그모이드 함수는 어느 값에서도 미분이 0이 되지 않아 올바르게 학습할 수 있습니다.
다음 게시글에 이어서 신경망 학습을 공부하도록 하겠습니다.
'Deep Learning 책 리뷰 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
Chapter4 신경망 학습2 (0) | 2022.02.04 |
---|---|
Chapter3. 신경망 2 (0) | 2022.01.25 |
Chaper 3 신경망 (2) | 2022.01.20 |
Chapter2. Perceptron(퍼셉트론) (0) | 2022.01.18 |