모두야

CH4) 신경망 학습 - (1) 본문

밑.시.딥/1권

CH4) 신경망 학습 - (1)

미미밍2 2021. 7. 15. 01:18
반응형

신경망 학습 

: 데이터로부터 매개변수 값을 정하는 방법

 

학습 : 훈련 데이터로부터 가중치 매개변수의 최적값자동으로 획득하는 것

손실함수 : 신경망이 학습할 수 있도록 해주는 지표

              : 손실함수의 최소값이 가중치의 매개변수

            => 최소값 찾는 법 : 경사법(함수의 기울기 활용)


4.1 데이터에서 학습한다!

신경망의 특징

: 데이터를 보고 학습할 수 있다. 

== 데이터를 보고 가중치 매개변수 값을 자동으로 결정한다.

 

데이터 주도 학습 

기계학습 => 데이터에서 답을 찾고, 패턴을 발견하며, 이야기를 만든다.

               => 모아진 데이터로부터 규칙을 찾는 역할을 '기계'가 한다.

사람의 개입을 최소화 하여 수집한 데이터의 패턴을 찾는다.

 

이미지의 특징(feature)를 추출하고, 그 특징의 패턴을 기계학습으로 학습 시킨다.

특징 : 입력 데이터(입력 이미지)에서 중요한 데이터를 정확하게 추출하도록 설계된 변환기이다.

이미지의 특징은 보통 벡터이다. 

SIFT,SURF,HOG 의 특징을 사용하여 이미지 데이터를 벡터로 변환하고, 변환된 벡터를 가지고 지도 학습 분류 기법 SVM, KNN 으로 학습시킨다.

 

=> 이미지를 벡터로 변환할 때 사용하는 특징은 '사람'이 설계 해야한다. 문제에 적합한 특징을 사람이 지정해주어야 한다.

 


숫자 '5'를 분류하기 위한 알고리즘 구현

1 ) 사람이 직접 프로그램을 설계

: 숨은 규칙성을 로직으로 풀기엔 시간이 오래 걸림.

 

2) 기계 학습 !

'사람' 이 숫자 5의 특징을 찾아 만들어준다.

이후, 기계학습을 활용해 해당하는 특징의 규칙을 찾아 분류한다.

 

3) 딥러닝 !

사람의 개입 없이 이미지를 보고 스스로 특징과 규칙을 찾아 분류한다.


훈련 데이터와 시험 데이터

기계학습에서 데이터를 훈련 데이터 (training data)와 시험 데이터 (test data)로 나누어 학습과 실험을 수행한다.

  1. 훈련 데이터만 사용하여 학습하면서, 최적화된 매개변수를 찾는다.
  2. 다음, 시험 데이터를 사용해 앞에서 훈련한 모델을 평가한다.

왜 나누는가?

- 처음 보는 데이터 (훈련 데이터에 포함 되지 않는 데이터)로도 문제를 올바르게 풀어내는지 평가하기 위해서이다.

= 범용 능력 향상 및 평가

 

" 특정 사람이 쓴 특정 문자 " 가 아닌, "임의의 사람이 쓴 임의의 문자"

 

하나의 데이터셋만으로 매개변수를 찾는 학습과 평가가 이루어진다면 올바른 평가가 될 수 없다.

나타난 데이터셋은 제대로 맞히더라도, 다른 데이터셋에는 정확도가 엉망일 수 있다.

한 데이터셋에만 지나치게 최적화 되어있는 상태라면, "오버피팅 (overfitting)" 이라고 한다.


4.2 손실 함수

신경망 학습에서 현재의 상태를 지표로 표현한다.

그 지표를 가장 좋게 만들어주는 가중치 매개변수 값을 탐색하는 것이 목표이다.

신경망에서 사용하는 기준의 지표는 손실함수 ( loss function ) 이다.

손실함수에서는 평균 제곱 오차교차 엔트로피 오차를 사용한다.

손실 함수에서는 신경망 성능의 '나쁨'을 나타낸다.
반대로, 손실 함수에 마이너스를 곱한다면 "얼마나 좋으냐" 라는 지표로 바뀐다.
나쁨을 최소화 한다 = 좋음을 최대로 한다 라는 말로 표현할 수 있다. 

평균 제곱 오차 ( Mean Squared Error : MSE )

yk : 신경망의 출력 (신경망이 예측한 값)

tk : 정답 레이블 (원핫인코딩)

k : 데이터의 차원 수

각 원소의 출력(추정값)과 정답 레이블(참 값)의 차를 제곱한 후, 그 총합을 구한다.

# 손실함수 - 평균 제곱 오차
def mean_squared_error(y,t):
    return 0.5 * np.sum((y-t)**2)
# 실제 정답은 2!
t = [0,0,1,0,0,0,0,0,0,0]

# 예1) '2'일 확률이 가장 높다고 추정한다.(0.6)
y = [0.1,0.05,0.6,0.0,0.05,0.1,0.0,0.1,0.0,0.0]
mean_squared_error(np.array(y),np.array(t))
>>0.09750000000000003 

# MSE 값이 적다 = 오차가 적다 = 손실함수값이 적다 = 성능이 좋다 = 얘측이 제대로 되었다
# 예2) '6'일 확률이 가장 높다고 추정한다. (0.6)
y = [0.1,0.05,0.1,0.0,0.05,0.1,0.0,0.6,0.0,0.0]
mean_squared_error(np.array(y),np.array(t))
>>0.5975

# 손실함수 값이 높다 = 오차가 크다 = 성능이 좋지 않다 = 예측이 제대로 되지 않았다.

교차 엔트로피 오차 ( Cross Entropy Error : CEE )

yk : 신경망 출력

tk : 정답 레이블 (원핫인코딩 : 정답만 1)

? 정답일 때의 추정 (tk가 1일 때의 yk)의 자연로그를 계산한다.

?정답일 때의 출력이 전체 값을 정한다.

 

x 가 커질 수록 y 도 커진다. 

신경망의 출력 Yk ( 정답 추정 확률) 이 높을 수록 log Yk는 커진다. 

 

교차 엔트로피 오차는 log 함수 앞에 - 가 있다.

따라서 정답 추정 확률 (yk)가 커질 수록 -logYk는 작아진다. 

= 오차는 작아진다. = 정답이다!!!!

 

 

 

 

 

def cross_entropy_error(y,t):
    delta = 1e-7
    return -np.sum(t*np.log(y+delta))

# delta를 더하는 이유 : 예측 확률이 0이 되면서 -log0 = 무한대 됨을 방지한다.
# 정답은 2!
t = [0,0,1,0,0,0,0,0,0,0]

# 예1) '2'일 확률이 가장 높다고 추정한다.(0.6)
y = [0.1,0.05,0.6,0.0,0.05,0.1,0.0,0.1,0.0,0.0]
cross_entropy_error(np.array(y),np.array(t))
>>0.510825457099338
# 예2) '6'일 확률이 가장 높다고 추정한다. (0.6)
y = [0.1,0.05,0.1,0.0,0.05,0.1,0.0,0.6,0.0,0.0]
cross_entropy_error(np.array(y),np.array(t))
>>2.302584092994546

미니배치 학습 

기계학습 : 훈련 데이터에 대한 손실함수 값을 구하고, 그 손실 함수값을 최대한으로 줄여주는 매개변수를 찾는다.

=> 모든 훈련 데이터에 대한 손실함수 값을 구해야함.

-> 훈련 데이터가 100개면, 그에 따른 손실함수도 100개다. 

데이터 N개 

t_nk : n 번째 데이터의 k번째 값 

y_nk : 신경망의 출력

t_nk : 정답 레이블

=> 데이터 하나에 대한 손실함수를 N개의 데이터로 확장하였다. 

N으로 나누어 정규화 = 평균 손실 함수

 

너무 많은 데이터가 훈련 데이터의 대상이 된다면, 시간이 많이 걸린다.

-> 데이터 일부를 추려, 근사치로 이용한다. 

-> 신경망 학습에서도 훈련 데이터의 일부만 골라 학습을 수행한다. [ 미니배치 ]

60,000장의 훈련 데이터 중, 100장을 무작위로 뽑아 그 100장만 학습시키는 것이다.  [ 미니 배치 학습 ]


Why 손실함수 설정 ?

정확도를 계산하면 되지, 왜 손실함수를 굳이 사용할까?

 

"미분"

 

신경망 학습에서, 최적의 매개변수(가중치와 편향)을 탐색 할 때, 손실함수의 값을 최대한 작게 하는 매개변수를 찾는다.

이때, 매개변수의 미분(기울기)를 계산하여, 그 미분 값을 통해 최적의 매개변수 값을 찾는다.

 

가중치 매개변수의 손실함수의 미분 : 가중치 매개변수 값을 아주 조금 변화시켰을 때, 손실함수가 어떻게 변하느냐~!!!

 

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

반대로, 미분 값이 양수라면 가중치 매개변수를 음의 방향으로 변화시켜 손실 함수 값을 줄인다.

미분 값이 0이라면, 가중치 매개변수를 어느 쪽으로 움직여도 손실함수 값은 변하지 않는다. = 가중치 매개변수 갱신을 멈춘다.

 

신경망 학습 시, 정확도를 지표로 삼으면 안된다.
정확도를 지표로 하면, 매개변수의 미분이 대부분 장소에서 0이 되기 때문이다.
WHY?
???????
정확도는 계단함수? 
매개변수를 고친다고 해서, 크게 정확도가 변하는 것은 아니다.
손실함수는 매개변수 값이 조금 변하면, 그 값도 연속적으로 변한다.

 

반응형

'밑.시.딥 > 1권' 카테고리의 다른 글

CH5) 오차역전파법  (0) 2021.07.24
CH4) 신경망 학습 - (2)  (0) 2021.07.23
CH3) 신경망 - (2)  (0) 2021.07.12
CH3) 신경망 - (1)  (0) 2021.07.08
CH2) 퍼셉트론  (0) 2021.07.08