목록개발 및 공부/알고리즘 (18)
NeuroWhAI의 잡블로그
※ 실제로 동작하는 전체 소스코드는 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() + ..
Attention 매커니즘을 검색하다가 좋은 코드를 발견해서 공부하면서 좀 다듬었습니다. 링크 : https://github.com/philipperemy/keras-attention-mechanism 학습 데이터는 랜덤한 쓰레기 값이 들어있는 입력 데이터에서 8번째(인덱스 7) 값만 출력(목표) 데이터와 관련이 있는데 이걸 모델이 잘 알아차렸는지 보는 예제입니다. 코드: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970import numpy as npfrom keras import backend as Kfrom kera..
Q 러닝 설명 : https://ko.wikipedia.org/wiki/Q_%EB%9F%AC%EB%8B%9D Q Learning은 DQN의 뼈대가 되는 학습 방법입니다. 저는 공부 순서가 반대로 되어버렸지만 Q Learning을 알고 DQN을 공부했다면 더 쉽게 가지 않았을까.. 싶네요. Q Learning으로 강화 학습의 Hello, World!라고 할 수 있는 Frozen Lake 게임을 학습시켜 보았습니다. 아래 코드에서 대부분은 Frozen Lake 게임을 구현하는 코드(FrozenLake 클래스)나 출력 코드이고중요한 학습은 QLearner 클래스의 learn 메소드에서 이뤄집니다. 코드: 12345678910111213141516171819202122232425262728293031323334..
다른 사람들의 풀이들을 보면 가끔 fio라고 Fast IO의 약자일것 같은 네임스페이스 안에 빠르게 입력을 받고 출력할 수 있는 수제 라이브러리를 사용합니다. 저는 귀찮아서 그렇게 안하다가 오늘 단어 정렬 문제에서 입출력을 cin, cout에서 단순히 scanf, printf로 바꿨을 뿐인데 무려 20배의 속도차이가 나는걸 보고 참...
틱택토 인공지능 입니다. https://www.neverstopbuilding.com/blog/2013/12/13/tic-tac-toe-understanding-the-minimax-algorithm13/ 이거 보고 공부했습니당. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566use std::fmt; struct LinearFunction { a: f64, b: f64,} impl LinearFunction { fn new(a: f64, b: f64) -> LinearFunction { LinearFunction { a: a, b: b, } } fn feed(&self, x: f64) -> f64 { self.a * x + self.b } fn learn(&mut self, input: f64, target_output: f64, learning_rate: f..