반응형

학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것 을 뜻합니다.

손실함수 

손실함수의 결괏값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표입니다.

 

손실함수의 값을 가급적 적게 만드는 기법으로 , 함수의 기울기를 활용하는 경사법을 소개합니다.

 

4.1 데이터에서 학습한다. !

데이터에서 학습한다는 것은 가중치 매개변수의 값을 데이터를 보고 자동으로 결정

 

4.1.1 데이터 주도학습

사람의 개입을 최소화 하고 수집한 데이터로부터 패턴을 찾으려 하는 것이 기계학습

 

이미지에서 특징feature을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법이 있습니다.여기서 말하는 특징은 입력 데이터(입력 이미지)에서 본질적인 데이터(중요한 데이터)를 정확하게 추출할 수 있도록 설계된 변화기를 가리킵니다.

 

데이터로부터 규칙을 찾아내는 역할을 기계가 담당하는 방식이지만

이미지를 벡터로 변환할 때 사용하는 특징은 여전히 사람이 설계

 

적합한 특징을 쓰지 않으면 좋은 결과 얻기 힘들다.

 

딥러닝을 종단간 기계학습 end-to-end machine learning 이라고 도 합니다. 여기서 종단간은 '처음부터 끝까지 '라는 의미로 , 데이터 (입력) 에서 목표한 결과(출력)를 사람의 개입 없이 얻는다는 뜻  => 처음 부터 끝까지 사람이 개입을 안한다.

 

신경망은 모든 문제를 주어진 데이터 그대로를 입력 데이터로 활용해 'end-to-end'로 학습할 수 있습니다.

 

4.1.2 훈련 데이터와 시험 데이터

training data

test data

우선 훈련데이터만 사용하여 학습하면서 최적의 매개변수를 찾습니다.

그런 다음 시험 데이터를 사용하여 앞서 훈련한 모델의 실력을 평가하는 것입니다.

 

데이터 나누는 이유 :

벙용적으로 사용할 수 있는 모델을 만들려고 하기 때문에

범용능력을 제대로 평가하기 위해 훈련 데이터와 시험데이터를 분리하는 것이죠 

범용능력은 아직 보지 못한 데이터(훈련 데이터에 포함되지 않는 데이터)로도 문제를 올바르게 풀어내는 능력입니다.

 

오버피팅overfitting : 한 데이터셋에만 지나치게 최적화된 상태

 

4.2 손실 함수 

신경망 학습에서는 현재의 상태를 '하나의 지표'로 표현합니다. 

 

loss function  신경망 학습에서 사용하는 지표 

손실 함수는 임의의 함수를 사용할 수 도 있지만 일반적으로는 평균 제곱 오차와 교차 엔트로피 오차를 사용합니다.

손실 함수는 신경망 성능의 '나쁨'을 나타내는 지표로 , 현재의 신경망이 훈련 데이터를 얼마나 잘 처리 하지 '못'하느냐를 나타냅니다.

 

4.2.1 평균제곱오차 mean squared error MSE 

회귀 문제에서 손실 함수로 사용

MSE는 단순히 예측값과 목표값의 차이의 제곱에 대한 평균

yk는 신경망의 출력(신경망이 추정한 값), tk는 정답 레이블 , k는 데이터 차원 수를 나타냅니다. 

 

원-핫 인코딩 : 한 원소만 1로 하고 그 외는 0으로 나타내는 표기법

 

4.2.2 교차엔트로피 오차 cross entropy error CEE 

분류 문제에서 손실 함수로 사용

log는 밑이 e인 자련로그 입니다. 

yk는 신경망의 출력, tk는 정답 레이블입니다. 

또 tk는 정답에 해당하는 인덱스의 원소만 1이고 나머지는 0입니다. (원-핫 인코딩)

 

x가 1일때 y는 0이 되고 x가 0에 가까워질 수록 y의 값은 점점 작아집니다. 

마찬가지로 정답에 해당하는 출력이 커질 수록 0에 다가가다가 , 그 출력이 1일 때 0 이 됩니다.

반대로 정답일 때의 출력이 작아질수록 오차는 커집니다. 

 

Predicted probability가 실제 label 값으로 부터 멀어질수록 값이 증가

 

4.2.3 미니배치 학습 

 

모든 데이터를 대상으로 손실 함수의 합을 구하려면 시간이 오래 걸림

 

그래서  미니배치 사용 mini-batch

6,000장의 훈련 데이터 중에서 100장을 무작위로 뽑아 그 100장 만을 사용하여 학습 하는 것입니다.

 

훈련 데이터데이터 일부를 추려 전체의 근사치로 이용

np.random.choice()로는 지정한 범위의 수 중에서 무작위로 원하는 개수만 꺼낼 수 있습니다.

 

4.2.3 (배치용)교차 엔트로피 오차 구현하기

y는 신경망의 출력, t는 정답 레이블입니다. 

y가 1차원이라면, 즉 데이터 하나당 교차 엔트로피 오차를 구하는 경우는 reshape함수로 데이터의 형상을 바꿔줍니다. 

그리고 배치의 크기로 나눠 정규화하고 이미지 1장당 평균의 교차 엔트로피 오차를 계산합니다. 

 

4.2.5 왜 손실 함수를 설정하는 가 ?

가중치 매개변수의 손실함수의 미분이란' 가중치 매개변수의 값을 아주 조금 변화시켰을 때 , 손실함수가 어떻게 변하나'라는 의미입니다.

만약 이 미분값이 음수면 그 가중치 매개변수를 양의 방향으로 변화시켜 손실함수의 값을 줄일 수 있습니다.

반래도 ,  이 미분값이 양수면 그 가중치 매개변수를 음의 방향으로 변화시켜 손실함수의 값을 줄일 수 있습니다. 

그러나 미분 값이 0이면 가중치 매개변수를 어느쪽으로 움직여도 손실함수의 값은 줄어들지 않습니다. 그래서 그 가중치 매개변수의 갱신은 거기서 멈춥니다.

 

계단 함수를 이용하면 손실 함수를 지표로 삼는게 아무 의미가 없습니다.

매개변수의 작은 변화가 주는 파장을 계단 함수가 말살하여 손실 함수의 값에는 아무런 변화가 나타나지 않기때문입니다.

 

4.3 수치 미분 numerical difference

4.3.1 미분

미분은 특정 순간의 변화량을 뜻합니다.

한순간의 변화량

f(x)의 x에 대한 미분: x에 대한 f(x)의 변화량

x의 '작은 변화'가 함수 f(x)를 얼마나 변화시키는가

 

반올림 오차 rounding error : 작은 값( 가령 소수점 8자리 이하)이 생략되어 최종 계산 결과에 오차가 생기게 합니다.

 

너무 작은 값을 이용하면 컴퓨터로 계산하는 데 문제가 된다.

아주 작은 차분으로 미분하는 것을 수치미분 이라 합니다.

 

수치 미분에는 오차가 포함됩니다.

(x+h)와 (x-h) 일 떄의 함수 f의 차분을 계산하는 방법을 쓰기도 합니다. 

중심 차분 혹은 중앙 차분이라 합니다. 

전방 차분: (x + h)와 x의 차분

중앙 차분: (x + h)와 (x -h)의 차분

 

아주 작은 차분으로 미분하는 것을 수치 미분이라 합니다.

 

4.3.2 수치 미분의 예

 

=>밉분으로 하면  df(x)/dx = 0.02x + 0.1

 

4.3.3 편미분

변수가 여럿인 함수에 대한 미분

미분하려면, 변수가 2개이기에 어느 변수에 대한 미분이냐를 구별

여러변수 중 목표 변수 하나에 초점을 맞추고 다른 변수는 값을 고정합니다.

 

4.4 기울기 gradient

모든 변수의 편미분을 벡터로 정리한 것 

 

기울기가 가리키는 쪽은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방향입니다. 

가장 낮은 장소(최솟값)

4.4.1 경사법(경사 하강법)

신경망은 학습 단계에서 최적의 매개변수를 찾아야 함

 

최적 : 손실함수가 최솟값이 될 때의 매개변수 값

매개변수 공간이 광대하여 어디가 최솟값이 되는 곳인지를 짐작할 수 없습니다.  

함수가 극솟값, 최솟값,  또 안장점 saddle point이 되는 장소에서는 기울기가 0입니다.

기울어진 방향이 꼭 최솟값을 가리키는 것은 아니다, 그 방향으로 가야 함수의 값을 줄일 수 있습니다.

경사 하강법 gradient descent method : 최솟값 찾는것 

경사 상승법 gradient ascent method: 최댓값 찾는 것 

 

학습률  에타 는 갱신하는 양 

하이퍼파라미터 hyper parameter 초매개변수 학습룰 같은 매개변수

 

4.4.2 신경망에서의 기울기 

신경망 학습에서도 기울기를 구해야 함

가중치 매개변수에 대한 손실함수의 기울기

 

4.5 학습 알고리즘 구현하기

확률적 경사 하강법 stochastic gradient descednt,  데이터를 미니배치로 무작위로 선정하기 때문 

'확률적으로 무작위로 골라낸 데이터'에 대해 수행하는 경사 하강법이라는 의미 SGD

 

1단계 - 미니배치 훈련 데이터 중 일부를 무작위로 가져옴

2단계 - 기울기 산출 각 가중치 매개변수의 기울기(손실 함수의 값을 작게 하는 방향)를 구함

3단계 - 매개변수 갱신 가중치 매개변수를 기울기 방향으로 조금 갱신

4단계 - 반복 1~3단계를 반복

 

 

4.5.1 2층 신경망 클래스 구현하기

오차역전파법을 사용하여 기울기를 효율적으로 빠르게 계산 할 수 있습니다. 

 

4.5.2 미니배치 학습 구현하기

확률적 경사 하강법을 수행해 매개변수를 갱신합니다. 

 

4.5.3 시험 데이터로 평가하기 

훈련 데이터의 손실 함수 값이 작아지는 것은 신경망이 잘 학습하고 있다는 방증이지만, 

이 결과만으로는 다른 데이터셋에도 비슷한 실력을 발휘할지는 확실하지 않습니다. 

 

범용 능력

 

1 epoch 별로 훈련 데이터와 시험 데이터에 대한 정확도를 기록

epoch은 학습에서 훈련 데이터를 모두 소진했을 때의 단위

 

1 epoch 마다 모든 훈련 데이터와 시험 데이터에 대한 정확도를 계산

epoch이 증가할수록 훈련 데이터와 시험 데이터 모두 정확도 상승

Overfitting이 일어나지 않았음을 알 수 있음

 

 

반응형

' > 밀바닥부터 시작하는 딥러닝' 카테고리의 다른 글

06. 학습 관련 기술들  (0) 2020.10.20
05. 오차역전파법  (0) 2020.10.16
03. 신경망  (0) 2020.09.23
02. 퍼셉트론  (0) 2020.09.21
01. 헬로 파이썬  (0) 2020.09.18

+ Recent posts