NeuroWhAI의 잡블로그

[Rust] 손실 함수 - '밑바닥부터 시작하는 딥러닝' 4장 본문

개발 및 공부/알고리즘

[Rust] 손실 함수 - '밑바닥부터 시작하는 딥러닝' 4장

NeuroWhAI 2018. 7. 15. 12:17


※ 실제로 동작하는 전체 소스코드는 GitHub에서 보실 수 있습니다.


손실 함수는 신경망의 학습 정도를 수치화하는데 사용되는 함수입니다.
손실 함수의 값을 최소화하는 방향으로 신경망의 파라미터들을 조정하는게 학습입니다.
여러 종류가 있는데 보통은 어떤 문제를 푸느냐에 따라 다른 함수를 사용하는 것 같습니다.
아래 코드는 대표적인 손실 함수인 MSE와 Cross entropy를 구현하고 손실값을 계산해보는 예제입니다.

코드:
use rulinalg::matrix::{Matrix, BaseMatrix, BaseMatrixMut};

pub fn mean_squared_error(y: &Matrix<f32>, t: &Matrix<f32>) -> f32 {
    let mut err = y - t;
    err = err.apply(&|v| v * v);
    
    err.sum() * 0.5
}

pub fn cross_entropy_error(y: &Matrix<f32>, t: &Matrix<f32>) -> f32 {
    let temp = y + 1e-7;
    let temp = t.elemul(&temp.apply(&|v| v.log(10.0)));
    
    -temp.sum() / y.rows() as f32
}
fn test_loss() {
    let y = matrix![0.2, 0.1, 0.7;
        1.0, 0.0, 0.0;
        0.4, 0.5, 0.1f32];
    let t = matrix![0.0, 0.0, 1.0;
        1.0, 0.0, 0.0;
        1.0, 0.0, 0.0];
        
    println!("MSE: {}", loss::mean_squared_error(&y, &t));
    println!("CEE: {}", loss::cross_entropy_error(&y, &t));
}

결과:
MSE: 0.38
CEE: 0.18428057


Comments