NeuroWhAI의 잡블로그

[Rust] 활성화 함수 - '밑바닥부터 시작하는 딥러닝' 3장 본문

개발 및 공부/알고리즘

[Rust] 활성화 함수 - '밑바닥부터 시작하는 딥러닝' 3장

NeuroWhAI 2018. 7. 14. 18:11


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


활성화 함수는 뉴런에서 입력을 받아 합산한 값을 출력으로 내보낼때 거치는 함수입니다.
어떤 활성화 함수를 사용하느냐도 학습에 중요한 요소로 작용합니다.
책에서는 계단 함수, 시그모이드, ReLU(렐루?)를 소개하고 있습니다.

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

pub fn step_function(x: Matrix<f32>) -> Matrix<f32> {
	x.apply(&|value| if value > 0.0 { 1.0 } else { 0.0 })
}

pub fn sigmoid(x: Matrix<f32>) -> Matrix<f32> {
	x.apply(&|value| 1.0 / (1.0 + (-value).exp()))
}

pub fn relu(x: Matrix<f32>) -> Matrix<f32> {
	x.apply(&|value| if value > 0.0 { value } else { 0.0 })
}
mod activation;

use rulinalg::matrix::{Matrix, BaseMatrix};
use common::plot;

fn test_function(f: fn(Matrix<f32>) -> Matrix<f32>) {
	let data: Vec<_> = (-50..50).map(|n| n as f32 / 10.0).collect();
	let out = f(Matrix::new(1, data.len(), data));
	
	let graph_data: Vec<_> = out.iter().map(|v| *v).collect();
	plot::print_graph(&graph_data[..], 50, 20);
}

pub fn tests() {
	println!("Step function");
	test_function(activation::step_function);
	
	println!("Sigmoid");
	test_function(activation::sigmoid);
	
	println!("ReLU");
	test_function(activation::relu);
}

결과:

Step function ------------------------- ------------------------- Sigmoid ---------- ---- -- -- -- - - - - - - -- - - - -- -- ---- ----------- ReLU -- - - -- - - -- - - - -- - - -- - - - -- - -------------------------


구름 IDE같이 GUI가 없는 환경에서 그래프를 띄울만한 라이브러리를 못찾아서
그냥 텍스트로 그리는 함수를 직접 만들어서 한번 띄워봤습니다...
대충 모양은 보이네요... ㅠ




Comments