ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 신경망 학습(2)
    AI 모델(딥러닝 기초)/3. 신경망 학습 2023. 1. 7. 16:54
    728x90

    ※ 미니 배치 학습

     

    ■ 미니 배치 학습이란?

    - 훈련 데이터가 엄청나게 방대해 질 경우 데이터 일부를 추려서 학습시키고 전체의 근사치로 이용하는 방법

     

    앞에서 사용했던 MNIST 데이터셋을 통해 미니 배치를 구현해보자.

     

    import sys, os
    sys.path.append(os.pardir)
    import numpy as np
    from dataset.mnist import load_mnist
    
    (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)
    
    print(x_train.shape)
    print(t_train.shape)
    (60000, 784)
    (60000, 10)

     

    train_size = x_train.shape[0]
    batch_size = 10
    batch_mask = np.random.choice(train_size, batch_size)
    x_batch = x_train[batch_mask]
    t_batch = t_train[batch_mask]
    
    print(np.random.choice(x_train.shape[0], batch_size))
    [50619 20712 44403 48005 53345 29333 58996 56481 27982 16520]
     
    이런식으로 np.random.choice() 함수를 사용하여 batch_size = 10개로 설정하고 10개의 훈련 데이터만을 뽑아 낼 수 있다.
    총 60000개의 데이터셋을 지정한 batch_size 만큼 무작위로 뽑아낸 것이다.

     

     

    ■ 교차 엔트로피 개선

     

    훈련 데이터의 값이 엄청나게 커질 경우 우리는 훈련 데이터 모두에 대한 손실 함수의 합을 통해 평균을 구하는 식으로 손실함수를 계산한다. 평균을 통해 훈련 데이터를 구하게 되면 데이터 갯수에 상관없이 평균적인 손실 함수를 구해 낼 수 있다.

     

     

    이렇게 손실함수를 개선해 보았다.

    y : 신경망의 출력값

    t :  정답

    N : 데이터 갯수

     

    def cross_entropy_error(y, t):
        if y.dim == 1:
            t = t.reshape(1, t.size)
            y = y.reshape(1, y.size)
            
        batch_size = y.shape[0]
        delta = 1e-7
        return -np.sum(np.log(y[np.arange(batch_size), t] + delta)) / batch_size

     

    교차 엔트로피 오차를 미니 배치 논리를 적용시켜 개선해 보았다.

    여기서 np.arrange(batch_size)는 0 ~ batch_size - 1까지의 배열을 생성하고 t에 저장된 레이블이 [1,2,3,4, 5] 라면 현재 코드에서 표현될 수 있는 numpy 배열은 [y[0,1], y[1,2], y[2,3], y[3,4], y[4,5]] 이다.

     

     

    ■ 손실 함수 설정의 이유

     

    정확도를 표현하지 않고 우회적으로 손실 함수 오차값으로 최적의 매개변수를 찾는 방법을 택하는 이유는 무엇일까?

    미분의 역할에 주목해야한다. 정확도를 지표로 하게 될 경우 매개변수가 계단함수처럼 불연속적으로 뚝뚝 끊어져서 나타나게 된다. 예를 들어 100개의 훈련 데이터 중 40장을 올바로 인식한다면 정확도는 40%이다. 하지만, 매개변수를 미세하게 조정해서 개선시킬 경우 올바로 인식된 정확도가 지표가 될 경우 41.123% 이런식의 표현이 아닌 40%, 41%, 42% 이런식으로 정확한 값의 표현만이 가능해진다. 그렇다면 불연속적으로 지표가 형성되고 미분값은 0으로 나타나버린다.

     

    손실함수의 경우 잘못된 지표를 기준으로 삼기 때문에 정확하지 않은 모든 값을 연속적으로 나타내어줄 수 있다. 신경망에서 우리가 Step 함수를 사용하지 않고 Sigmoid 함수를 사용했던 것과 유사한 논리라는 것을 알 수 있을 것이다. 이러한 연속적인 값에 미분을 취할 경우 0이 아닌 특정한 기울기를 가질 수 있어 신경망 구축의 메리트를 가질 수 있다.

     

     

    728x90

    'AI 모델(딥러닝 기초) > 3. 신경망 학습' 카테고리의 다른 글

    3. 신경망 학습(6)  (0) 2023.01.15
    3. 신경망 학습(5)  (0) 2023.01.10
    3. 신경망 학습(4)  (0) 2023.01.09
    3. 신경망 학습(3)  (0) 2023.01.07
    3. 신경망 학습(1)  (2) 2023.01.05
Designed by Tistory.