목록전체보기 (408)
NeuroWhAI의 잡블로그
※ 실제로 동작하는 전체 소스코드는 GitHub에서 보실 수 있습니다. 이번에는 이때까지 구현한 기능을 조합하여 2층 신경망을 만들어봅니다. 다만 수치 미분을 사용했기에 매우 느려 학습이 잘 되는지는 확인하지 못했으니 대충 흐름만 보시면 되겠습니다. 코드에서 MNIST 데이터셋과 관련된 부분은 포함하지 않았으니 관심있으신 분은 GitHub에서 보시면 되겠습니다.또한 속도를 높히기 위하여 데이터셋의 일부만 학습에 사용하였고테스트를 위해 사용했던 해석적 미분을 이용한 부분은 주석 처리 해두었습니다. 코드: use std::f32; use rulinalg::matrix::{Matrix, BaseMatrix, BaseMatrixMut}; use rand; use ch03::activation; use commo..
※ 실제로 동작하는 전체 소스코드는 GitHub에서 보실 수 있습니다. 이전에 신경망의 학습은 손실 함수의 값을 최소화하는 방향으로 파라미터를 조정한다고 했습니다. 그럼 파라미터를 어떻게 조절해야 손실이 줄어드는지 알 수 있을까요? 저는 미적분을 제대로 배우지 않았지만 미분은 값의 변화와 관련이 있다는건 압니다. 그러니까 L = f(x)이고 x가 d만큼 변했을때 L은 d의 몇 배만큼 변하는지가 미분이라고 대충 알고 있습니다. 여기서 L을 손실, f를 손실 함수 + 신경망, x를 파라미터라고 하면 대충 윤곽이 보이죠. 우리는 f 함수를 미분하여 기울기를 구해 x를 올바른 방향으로 조절할 수 있습니다. 그런데 저 같은 수포자에게 함수를 미분하라는건 힘든 일입니다. 그러나 수치 미분이란 방법을 쓰면 해석적 미..
※ 실제로 동작하는 전체 소스코드는 GitHub에서 보실 수 있습니다. 손실 함수는 신경망의 학습 정도를 수치화하는데 사용되는 함수입니다. 손실 함수의 값을 최소화하는 방향으로 신경망의 파라미터들을 조정하는게 학습입니다. 여러 종류가 있는데 보통은 어떤 문제를 푸느냐에 따라 다른 함수를 사용하는 것 같습니다. 아래 코드는 대표적인 손실 함수인 MSE와 Cross entropy를 구현하고 손실값을 계산해보는 예제입니다. 코드: use rulinalg::matrix::{Matrix, BaseMatrix, BaseMatrixMut}; pub fn mean_squared_error(y: &Matrix, t: &Matrix) -> f32 { let mut err = y - t; err = err.apply(&|v..
※ 실제로 동작하는 전체 소스코드는 GitHub에서 보실 수 있습니다. 활성화 함수는 뉴런에서 입력을 받아 합산한 값을 출력으로 내보낼때 거치는 함수입니다. 어떤 활성화 함수를 사용하느냐도 학습에 중요한 요소로 작용합니다. 책에서는 계단 함수, 시그모이드, ReLU(렐루?)를 소개하고 있습니다. 코드: use rulinalg::matrix::{Matrix, BaseMatrixMut}; pub fn step_function(x: Matrix) -> Matrix { x.apply(&|value| if value > 0.0 { 1.0 } else { 0.0 }) } pub fn sigmoid(x: Matrix) -> Matrix { x.apply(&|value| 1.0 / (1.0 + (-value).exp(..
1장은 건너뛰고 책에서 미리 준비된 코드를 사용해서 진행하는 실습도 건너뛰었습니다. 남은건 퍼셉트론 뿐... 예제는 퍼셉트론으로 AND, OR, NAND 그리고 이를 조합하여 XOR 게이트를 구현한 코드입니다. 코드: use rulinalg::matrix::BaseMatrix; pub fn and_gate(x1: f32, x2: f32) -> f32 { let x = matrix![x1, x2]; let w = matrix![0.5, 0.5]; let b = -0.7; let out = x.elemul(&w).sum() + b; if out > 0.0 { 1.0 } else { 0.0 } } pub fn or_gate(x1: f32, x2: f32) -> f32 { let x = matrix![x1, x..
Rust에 익숙해질겸 '밑바닥 부터 시작하는 딥러닝' 책을 Rust로도 실습해서 올릴 생각입니다. 다만 본인도 Rust를 잘하는게 아니므로 Rust 공부용으로 보시진 말아주세요. 일단 되나 안되나 테스트 용도로 2장의 퍼셉트론 AND 게이트를 구현해본 코드입니다. 라이브러리는 'rulinalg'를 사용했습니다. 코드: #[macro_use] extern crate rulinalg; use rulinalg::matrix::{BaseMatrix, Matrix}; fn and_gate(x1: f32, x2: f32) -> f32 { let x = matrix![x1, x2]; let w = matrix![0.5, 0.5f32]; let b = -0.7; let out = x.elemul(&w).sum() + ..
PASSEPIED의 Last Dance입니다.가사 의미는 모르지만 목소리에 여운이 있어서 좋네요. あなたが居なくなってなぜかなぜだか 少し寂しいよわたし一人になったなっちゃったみたいだなそれでも今思うことは わたしがわたしで 誰にも奪えはしない世界が壊れてしまってもこれまでこれから その後が続けばいい共鳴してる どこかで生まれ変わって 生きているならそんなのもいいねどこかでふたりが会って会ったって気付かないなそれでも今思うことは わたしがわたしで なによりかけがえのない世界が壊れてしまっても何にも知らずに回り続けてればいい目覚めるまで 終わりが先にやってくる明けない夜に横たわる0と1のダンスホールこぼれ落ちた わたしがわたしで 誰にも奪えはしない世界が壊れてしまってもこれまでこれから その後が続けばいい共鳴してる あなたがあなたで なによりかけがえのない世界が壊れてしまって..
기상청 발표에 따르면 2018년 7월 7일 20시 23분 일본 지바현 지바 남동쪽 72km해역 지하 50km에서 규모 6.0의 지진이 발생하였다고 합니다. 이 지진으로 일본 기상청 기준 최대 5弱의 진도가 측정되었고 국내 포털 사이트에서도 실시간 검색어 1위에 올랐습니다. 도쿄 인근 지진이라 매우 많은 사람들이 이 지진을 느꼈을 것으로 추정되며 실제로 트위터와 같은 게시물 기반으로 동작하는 텔레그램 지진희 알림 채널에서도 메세지가 송출되었습니다. 국내 지진계에도 진동이 눈에 띄게 감지되었지만 사람이 느낄 수 있고 국내에 영향이 있을만한 수준은 아닙니다.
저 혼자 쓸거면 디자인은 신경쓰지 않지만 그래도 사람이 쓰는 도구(?)처럼은 보여야 양심상 배포를 할 수 있으므로 평소에 쓰던 것들(WinForms, 그림판) 말고 다른걸 선택해서 배워가며 만들었습니다. 1. MockFlow 이때까지는 그냥 바로 개발에 착수해서 UI도 즉흥적으로 수정했지만 프로토타이핑을 해보자 생각해서 검색하다가 찾은 사이트입니다. 돈을 내면 더 많은 기능을 지원해주지만 저에겐 무료 플랜으로도 충분했습니다. 아래는 실제로 제가 VRChat Stalker를 개발하기 전에 사용해본 모습입니다. 사실 제 기술의 한계로 100% 반영은 못했지만 이 도구를 쓰지 않았으면 지금의 디자인보다 훨씬 구린게 튀어나왔거나 오래 걸렸을거에요. 2. WPF + Material Design 사실 WPF는 이전..