목록전체 글 (55)
기억보다 기록을
지난번 포스팅 (1), (2)에 이어, 이번에는 Reservoir Computing (RC)에서의 Bayesian Optimization (BO)을 MATLAB으로 구현해보고자 한다 $$ \mathbf{r}(t + \Delta t) = (1 - \alpha)\mathbf{r}(t) + \alpha \tanh(\mathbf{A}\mathbf{r}(t) + \mathbf{W}_{in}\mathbf{u}(t) + \xi \mathbf{1}), $$ RC는 hyperparameter의 값에 따라 예측 성능이 꽤나 달라지는데, hyperparameter 목록은 크게 다음과 같다 :\( N \) : Reservoir network의 노드 개수\( \alpha \) : Leakage rate\( D \) : ER..
요즘에는 Arizona State University의 Zheng-Meng Zhai 아저씨가 작성한 이런 저런 논문을 읽는 중인데, Reservoir Computing (RC)을 사용할 때 필요한 hyperparameter들을 optimize할 때 Bayesian Optimization (BO)을 자주 사용했다고 한다. 그의 논문을 리뷰하기 위한 초석을 다지는 의미로, Bayesian Optimization에 대한 아주 기본적인 컨셉과 코드 실습, 추후에는 RC에서의 BO를 해보고자 한다. 머신러닝에서의 Hyperparameter optimization 기법은 아주 다양하다 [1]. 대표적으로 Grid search, Random search 등이 있는데, BO는 두 방법과는 달리 바로 직전의 ..
오늘은 MATLAB으로 Next Generation Reservoir Computing (NG-RC)를 구현해보려고 한다. 코드의 전체적인 구성은 다음과 같다.Lorenz attractor 데이터셋 생성Feature vector 구성Ridge regression을 통해 가중치 계산시계열 예측이번 실습에서는 Fig 2의 결과를 재현해보고자 한다.즉, \( x,\,y,\,z \) 를 모두 넣어서 전체 시스템을 forecasting하는 것을 목표로 한다. 1. Lorenz attractor 데이터셋 생성 코드clear; clc; close all;%% 1. 데이터 생성 (Ground Truth: Lorenz System)sigma = 10; rho = 28; beta = 8/3;lorenz = @(t,s..
Next Generation Reservoir Computing (NG-RC) 에 대해 알아보자. Reservoir computing (RC)의 고질적인 문제점은...행렬 \( A \)나 \( W_{in} \) 을 랜덤하게 설정했기 때문에 성능이 들쭉날쭉함\( \alpha \) 등의 parameter 값에 따라 성능이 달라지기 때문에 tuning하는데 드는 cost가 많았음 그래서 저자들이 NG-RC를 소개하며 이야기하고 싶은 것이 무엇인가?RC에서처럼 행렬을 랜덤하게 만들어서 학습할 필요 없이, Time-delayed data와 약간의 nonlinear term정도만 가지고도 좋은 성능을 낼 수 있다기존의 RC에서 parameter tuning에 소요가 많이 들었던 반면 NG-RC는 그 정도가 ..
논문의 예제처럼 Lorenz system에서의 Reservoir Computing (RC)를 MATLAB으로 구현해보려고 한다. 코드의 전체적인 구성은 다음과 같다.샘플 데이터 생성 및 정규화RC 모델 구축 (행렬 \( A, W_{in}\ 등)Ridge regression을 통해 \( W_{out}\) & \(c \) 계산\( s(t) \) 추론 및 시각화 1. 샘플 데이터 생성 및 정규화Lorenz system의 샘플 데이터 생성 (초기조건 : \( (x(0),\,y(0),\,z(0)) = (1,\,1,\,1) \) )$$ \begin{aligned} \frac{dx}{dt} &= a(y - x), \\ \frac{dy}{dt} &= x(b- z) - y, \\ \frac{dz}{dt} &= xy -..
Main Question : dynamical system에서 특정 시점 \( 0 \leq t \leq T \) 까지의 데이터는 가지고 있지만, \( t > T \)부터는 일부 관측 데이터만 가지고 있다고 했을 때, 나머지 관측 데이터를 추론할 수 있는가? Example) : Lorenz system에서 \( T \) 시점까지는 모든 정보가 있지만 \( T \) 이후부터 \( x \)에 대한 time series가 있을 때 \( y,\, z\) 값을 추론할 수 있는가? 구성 요소를 하나씩 보자 : \( u(t) \in \mathbb{R}^M \) : 입력값 (알고있는 정보) \( s(t) \in \mathbb{R}^P \) : 추론값 (모르는 정보, \(t>T\) 이후로는 관측x )\( r(t) ..
참고 자료 : https://kr.mathworks.com/help/matlab/creating_plots/graph-with-multiple-x-axes-and-y-axes.html 여러 개의 스케일과 좌표축 제한을 사용하여 데이터 표시하기 - MATLAB & Simulink - MathWorks 한국 이 예제의 수정된 버전이 있습니다. 사용자가 편집한 내용을 반영하여 이 예제를 여시겠습니까? kr.mathworks.com 스케일이 다른 두개의 데이터를 동시에 그리고싶을 때 사용한다 예제 코드 x1 = 1:10; y1 = rand(length(x1), 1); x2 = 100:150; y2 = rand(length(x2), 1); x축의 스케일이 다른 두 그림을 한 figure에 담고싶을 때, figur..
Julia using MAT a = rand(3,3) 3×3 Matrix{Float64}: 0.435371 0.669335 0.487994 0.352952 0.728679 0.664149 0.586168 0.11393 0.400745 matwrite("julia_data.mat", Dict("data"=>a)) MATLAB >> mydata = matfile('julia_data.mat') Properties: Properties.Source: 'julia_data.mat' Properties.Writable: false Properties.ProtectedLoading: false data: [3x3 double] >> mydata.data ans = 0.4354 0.6693 0.4880 0.3530 ..
JLD 패키지 : https://github.com/JuliaIO/JLD.jl GitHub - JuliaIO/JLD.jl: Saving and loading julia variables while preserving native types Saving and loading julia variables while preserving native types - GitHub - JuliaIO/JLD.jl: Saving and loading julia variables while preserving native types github.com 간단한 예시 using JLD a = [1,2,3] save("my.jld", "MyKey", a) my.jld는 Dictionary 형태로 저장되었으며, "MyKey" 에..
예전 버전에서는 sortrows였고, 현재는 sortslices를 사용한다고 한다 원하는 것은 행렬이 주어져있을 때, 우선순위를 정해 여러개의 열에 대해 정렬을 하는 것이다. 예시로 행렬이 다음과 같이 주어졌을 때, julia> t = [1 0 3 ; 1 1 2; 0 0 5; 0 1 10] 4×3 Matrix{Int64}: 1 0 3 1 1 2 0 0 5 0 1 10 아래와 같이 1번 열 → 2번 열의 순서로 데이터를 정렬하고 싶다. 4×3 Matrix{Int64}: 0 0 5 0 1 10 1 0 3 1 1 2 이를 위해 sortslices 함수를 사용한다. 인수의 by 부분에 정렬하고자 하는 열의 우선순위를 적어준다. julia> sortslices(t, dims=1, by=x->(x[1], x[2])..