統計解析R たぶんpart3くらい (587レス)
統計解析R たぶんpart3くらい http://mevius.5ch.net/test/read.cgi/tech/1340339592/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
302: デフォルトの名無しさん [] 2019/09/21(土) 00:43:04.47 ID:MLPk5U2Q ## Zigzag on Rails [ブログ](http://blog.mirkoklukas.com/finite-sample-expressivity/)の内容を 実装してみる。 ``` {r} zigzag_on_rails = function (xi, yi) { js = order (xi); xi = xi [js]; yi = yi [js]; y0 = yi [1]; ai = diff (c (0, diff (yi) / diff (xi), 0)); f = function (x) { purrr::reduce (.init = y0, .x = seq_along (xi), .f = function (out, j) { out + ai [j] * prelu (x - xi [j]); }); }; big_data $ add (big_data, xi = xi, yi = yi, y0 = y0, ai = ai, zigzag = f); }; dog_data = with (dog_data, { yi = c (2, 0, - 1, 1); rails = zigzag_on_rails (xi, yi); x = seq (min (xi) - 1, max (xi) + 1, len = 1e+3); plot (x, rails $ zigzag (x), type = 'l'); points (xi, yi); add (dog_data, yi = yi); }); ``` 観測値からの外延の仕方がブログとは異なると思うが、こんな感じじゃないかと 思う。[区分線形関数](https://en.wikipedia.org/wiki/Piecewise_linear_function) を式にすると、自然とReLUの和が現れる。折れ線の変化`ai`を正と負の成分に 分けると、それぞれが凸 on Railsに乗る。 続く http://mevius.5ch.net/test/read.cgi/tech/1340339592/302
303: デフォルトの名無しさん [] 2019/09/21(土) 00:44:03.23 ID:MLPk5U2Q ``` {r} convex_on_rails = function (xi, ai) { js = order (xi); xi = xi [js]; ai = ai [js]; bi = cumsum (ai); ci = cumsum (ai * xi); f = function (j, x) bi [j] * x - ci [j]; d_f = function (j, x) ai [j] * (x - xi [j]); i_f = function (j, x) (x + ci [j]) / bi [j]; convex = function (x) { js = seq_along (xi); purrr::reduce (.init = 0, .x = js, .f = function (out, j) { pmax (out, f (j, x)); }); }; resnet = function (x) { js = rev (seq_along (xi)); purrr::reduce (.init = f (js [1], x), .x = js, .f = function (out, j) { out - plure (d_f (j, i_f (j, out))); }); }; list (convex = convex, resnet = resnet); }; resnet_on_rails = function (xi, yi) { out = zigzag_on_rails (xi, yi); with (out, { xi = out $ xi; ai = out $ ai; js = which (ai > 0); fp = convex_on_rails (xi [js], ai [js]); js = which (ai < 0); fm = convex_on_rails (xi [js], - ai [js]); convex = function (x) y0 + fp $ convex (x) - fm $ convex (x); resnet = function (x) y0 + fp $ resnet (x) - fm $ resnet (x); add (out, convex = convex, resnet = resnet); }); }; ``` 続く http://mevius.5ch.net/test/read.cgi/tech/1340339592/303
304: デフォルトの名無しさん [] 2019/09/21(土) 00:44:40.99 ID:MLPk5U2Q ``` {r} with (dog_data, { rails = resnet_on_rails (xi, yi); x = seq (min (xi) - 1, max (xi) + 1, len = 1e+3); plot (x, rails $ resnet (x), type = 'l'); points (xi, yi); doit = function (xi, yi) { rails = resnet_on_rails (xi, yi); x = seq (min (xi) - 1, max (xi) + 1, len = 1e+3); equal (rails $ zigzag (xi), rails $ convex (xi)); equal (rails $ zigzag (xi), rails $ resnet (xi)); }; doit (xi, yi); n = 10; doit (c (rnorm (n, 0, 1), rnorm (n, 2, 3)), c (rnorm (n, 0, 2), rnorm (n, 0, 1))); }); ``` 区分線形関数は二本のResNet with ReLUの [アフィン写像](https://en.wikipedia.org/wiki/Affine_transformation)で 書けたことになる。 おしまい http://mevius.5ch.net/test/read.cgi/tech/1340339592/304
305: デフォルトの名無しさん [] 2019/09/21(土) 00:50:33.16 ID:MLPk5U2Q と思ったけどバグを見つけた 誤: equal (rails $ zigzag (xi), rails $ convex (xi)); equal (rails $ zigzag (xi), rails $ resnet (xi)); 正: equal (rails $ zigzag (x), rails $ convex (x)); equal (rails $ zigzag (x), rails $ resnet (x)); http://mevius.5ch.net/test/read.cgi/tech/1340339592/305
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.408s*