ABOUT ME

-

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

    ■ 학습이란?

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

     

    데이터 주도 학습은 크게 세가지로 분류할 수 있다.

    1. 사람이 생각한 알고리즘을 통한 학습

    2. 사람이 생각한 특징 + 머신러닝(SVM, KNN)을 통한 학습

    3. 신경망(딥러닝)을 통한 학습

     

    신경망을 통한 학습은 종단간 기계학습이라고도 하면 처음부터 끝까지 모든 작업을 기계가 하는 것이다. 사람의 영역 자체가 없는 인공지능 그 자체이다. 우리는 신경망 학습을 위해 필요한 몇 가지 지표들을 알아보려고 한다.

     

    ※ 손실함수(loss function), 비용함수(cost function)

    둘 다 같은 말을 뜻한다. 일반적으로 오차제곱합(SSE)교차 엔트로피 오차를 사용한다.

     

     

    ■ 오차제곱합(SSE)

    - 현재의 신경망 성능의 에러값을 토대로 얼마나 훈련 데이터를 잘 처리하지 못하는지를 지표로 삼아 신경망 성능을 점검한다.

     
    y : 신경망의 출력(추정값)
    t : 정답
    k : 데이터의 차원 수
     
    import numpy as np
    
    def sum_squares_error(y, t):
        return 0.5 * np.sum((y-t)**2)
     

    SSE를 코드로 구현해 보았다.

     

    이제 SSE를 직접 적용해서 어떤식으로 사용될 수 있는지를 살펴보자.

     

    t = [0,0,1,0,0,0,0,0,0,0]     # one-hot-encoding : 1은 정답 위치 원소, 나머지는 0 으로 0과 1만으로 표현하는 기법
    
    # Case1
    y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
    
    SSE1 = sum_squares_error(np.array(y1), np.array(t))
    
    print(SSE1)
    
    # Case2
    y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
    
    SSE2 = sum_squares_error(np.array(y2), np.array(t))
    
    print(SSE2)

     

    이렇게 구현을 해보면 결과값이 SSE1 : 0.09750000, SSE2 : 0.5975 가 나오게 된다.

    SSE1 < SSE2 이므로 error 값이 더 작은 Case1이 Case2 보다 정답에 더 가깝다고 판단할 수 있다.

    Case1이 손실 함수 출력값이 작고 정답과의 오차도 작은 것으로 판단

     

     

    ■ 교차 엔트로피 오차(CEE)

    - 실질적으로 정답일 때의 추정의 자연로그를 계산하는 식, 정답일 때의 출력이 전체 값을 정하게 된다.

     

    y : 신경망의 출력(예측값)

    t : 정답

    k : 데이터의 차원 수

     

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

     

    CEE를 코드로 구현해 보았다.

     

    이제 CEE를 직접 적용해서 어떤식으로 사용될 수 있는지를 살펴보자.

     

    t = [0,0,1,0,0,0,0,0,0,0]     # one-hot-encoding : 1은 정답 위치 원소, 나머지는 0 으로 0과 1만으로 표현하는 기법
    
    # Case1
    y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
    
    CEE1 = cross_entropy_error(np.array(y1), np.array(t))
    
    print(CEE1)
    
    # Case2
    y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
    CEE2 = cross_entropy_error(np.array(y2), np.array(t))
    
    print(CEE2)

    SSE 때와 같은 코드를 그대로 적용시켜 보았다. 결과 값을 살펴보면, CEE1 : 0.51082, CEE2 : 2.30258 의 수치 값을 가지는 것을 확인할 수 있다. 여기서도 CEE1 < CEE2 임을 확인할 수 있고, error 값이 더 작은 Case1이 더 정답일 가능성이 높다고 판단할 수 있다. 해석을 해보면 Case1은 정답일 때의 출력이 0.6인 경우, Case2는 정답일 때의 출력이 0.1인 경우이다.

     

    SSE와 CEE의 정답을 유추하는 결과는 같지만, 해석의 방식에 약간의 차이가 있는 것을 확인할 수 있다.

    SSE는 정답과 오차값의 차이를 확인하여 그 차이가 작은 경우가 정답에 가까운 것으로 판단하고, CEE는 정답일 때의 출력이 높은 경우에 오차가 더 작게 나와 정답을 판단한다.

    오차가 작은 경우에 정답을 판단하는 것은 일맥상통하지만, SSE는 정답과 오차값의 차이를 확인하고(y-t), CEE는 0~1사이로 나오는 y값을 (-log) 값을 통해 확인하여 정답에 가까운 수치일수록 오차값이 작아져 단순하게 판단이 가능하다. 

     

     

    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. 신경망 학습(2)  (0) 2023.01.07
Designed by Tistory.