Skip to content

Instantly share code, notes, and snippets.

@sharanry
Last active August 26, 2019 13:52
Show Gist options
  • Save sharanry/38561f178445eb34c0f35b6137bc87d3 to your computer and use it in GitHub Desktop.
Save sharanry/38561f178445eb34c0f35b6137bc87d3 to your computer and use it in GitHub Desktop.
Normalising Flows VI Prototype
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Info: Recompiling stale cache file /home/sharan/.julia/compiled/v1.1/Bijectors/39uFz.ji for Bijectors [76274a88-744f-5084-9051-94815aaf08c4]\n",
"└ @ Base loading.jl:1184\n",
"WARNING: Method definition forward(Bijectors.TransformedDistribution{D, B, V} where V where B where D) in module Bijectors at /media/sharan/Work/Coding/MachineLearning/Projects/julia/Bijectors.jl/src/interface.jl:680 overwritten at /media/sharan/Work/Coding/MachineLearning/Projects/julia/Bijectors.jl/src/interface.jl:682.\n",
"┌ Info: Recompiling stale cache file /home/sharan/.julia/compiled/v1.1/Turing/gm4QC.ji for Turing [fce5fe82-541a-59a6-adf8-730c64b5f9a0]\n",
"└ @ Base loading.jl:1184\n"
]
}
],
"source": [
"using Bijectors\n",
"using Distributions\n",
"using Turing\n",
"using TrackedDistributions\n",
"using ForwardDiff\n",
"using Random\n",
"using Tracker\n",
"using Flux"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"@model gdemo_d() = begin\n",
" s ~ InverseGamma(2, 3)\n",
" m ~ Normal(0, sqrt(s))\n",
" 1.5 ~ Normal(m, sqrt(s))\n",
" 2.0 ~ Normal(m, sqrt(s))\n",
" return s, m\n",
"end\n",
"model = gdemo_d();"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Composed{Tuple{Bijectors.Scale{TrackedArray{…,Array{Float64,2}}},Bijectors.Shift{TrackedArray{…,Array{Float64,2}}},RadialLayer{TrackedArray{…,Array{Float64,1}},TrackedArray{…,Array{Float64,2}}},PlanarLayer{TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}},RadialLayer{TrackedArray{…,Array{Float64,1}},TrackedArray{…,Array{Float64,2}}}}}((Bijectors.Scale{TrackedArray{…,Array{Float64,2}}}([1.0 0.0; 0.0 1.0] (tracked)), Bijectors.Shift{TrackedArray{…,Array{Float64,2}}}([0.0; 0.0] (tracked)), RadialLayer{TrackedArray{…,Array{Float64,1}},TrackedArray{…,Array{Float64,2}}}([0.309296] (tracked), [-0.499293] (tracked), [-0.748744; -0.274501] (tracked)), PlanarLayer{TrackedArray{…,Array{Float64,2}},TrackedArray{…,Array{Float64,1}}}([0.150945; -1.05697] (tracked), [-2.08069; 0.0515419] (tracked), [-0.432142] (tracked)), RadialLayer{TrackedArray{…,Array{Float64,1}},TrackedArray{…,Array{Float64,2}}}([0.642084] (tracked), [1.37536] (tracked), [0.904648; 0.523422] (tracked))))"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"base = TMVDiagonalNormal(zeros(2), ones(2))\n",
"# flow = Bijectors.compose(Bijectors.PlanarLayer(2, param) Bijectors.PlanarLayer(2, param));\n",
"# flow = Bijectors.PlanarLayer(2, param)\n",
"flow = Bijectors.compose(Bijectors.Scale(2, param), Bijectors.Shift(2, param), [ i%2==1 ? Bijectors.RadialLayer(2, param) : Bijectors.PlanarLayer(2, param) for i in 1:3]...)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"trans_base = transformed(base, flow);"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(x = [0.788159, 1.41118], y = [2.8486; 1.17072] (tracked), logabsdetjac = [0.0100974] (tracked), logpdf = [-4.00457] (tracked))"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"forward(trans_base)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.15383367574095025 (tracked)"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rng = MersenneTwister(1234)\n",
"function F(model, trans_base, num_samples=10)\n",
" logpdf_p = []\n",
" x = rand(rng, trans_base.dist, num_samples)\n",
" _x, y, logjac, logpdf = forward(trans_base, x)\n",
" \n",
" varinfo = Turing.VarInfo(model)\n",
"\n",
" for i in 1:size(y, 2)\n",
" varinfo_new = Turing.VarInfo(varinfo, Turing.SampleFromUniform(), y[:,i])\n",
" \n",
" append!(logpdf_p, varinfo_new.logp)\n",
" end\n",
" \n",
" # logpdf_q = logpdf + logjac\n",
" mean((logjac + logpdf) - Tracker.collect(logpdf_p))\n",
" \n",
"end\n",
"# Sanity Check\n",
"F(model, transformed(base, flow), 100)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10-element Array{Tracker.TrackedReal{Float64},1}:\n",
" 3.0050780322926993 \n",
" 3.5486028826466285 \n",
" 1.0568763041012845 \n",
" 1.2848224461957847 \n",
" 1.086104065266645 \n",
" 1.3335215472759936 \n",
" -0.21375307575439786\n",
" 1.470289223760251 \n",
" 4.078633468643372 \n",
" 0.06802415504225666"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# High variability of F. A pontential problem\n",
"[F(model, transformed(base, flow), 1000) for i in 1:10]"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"get_ϕ! (generic function with 1 method)"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# To extract all tracked params\n",
"function get_ϕ!(flow::Composed, ϕ)\n",
" for i in flow.ts\n",
" if typeof(i) <: Composed\n",
" get_ϕ!(i, ϕ)\n",
" else\n",
" for j in propertynames(i, false)\n",
" append!(ϕ, [getproperty(i,j)])\n",
" end\n",
" end\n",
" end\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"ϕ = []\n",
"get_ϕ!(flow, ϕ)"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"11-element Array{Any,1}:\n",
" [1.0 0.0; 0.0 1.0] (tracked) \n",
" [0.0; 0.0] (tracked) \n",
" [0.309296] (tracked) \n",
" [-0.499293] (tracked) \n",
" [-0.748744; -0.274501] (tracked)\n",
" [0.150945; -1.05697] (tracked) \n",
" [-2.08069; 0.0515419] (tracked) \n",
" [-0.432142] (tracked) \n",
" [0.642084] (tracked) \n",
" [1.37536] (tracked) \n",
" [0.904648; 0.523422] (tracked) "
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ϕ = [flow.b, flow.u, flow.w]\n",
"ϕ"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Info: 1.2741827085508652 (tracked)\n",
"└ @ Main In[68]:7\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"..........\n",
"(100/2000) done; loss=1.3692395655578096\n",
"..........\n",
"(200/2000) done; loss=-4.235651526416241\n",
"..........\n",
"(300/2000) done; loss=-16.918417146979092\n",
"..........\n",
"(400/2000) done; loss=-15.181841429751076\n",
"..........\n",
"(500/2000) done; loss=-17.839565102646546\n",
"..........\n",
"(600/2000) done; loss=-21.033234580804237\n",
"..........\n",
"(700/2000) done; loss=-18.436042242792695\n",
"..........\n",
"(800/2000) done; loss=-16.768170486650888\n",
"..........\n",
"(900/2000) done; loss=-18.672934678640846\n",
"..........\n",
"(1000/2000) done; loss=-20.279867305877353\n",
"..........\n",
"(1100/2000) done; loss=-21.661934070428607\n",
"..........\n",
"(1200/2000) done; loss=-23.026930269130762\n",
"..........\n",
"(1300/2000) done; loss=-25.01184912695476\n",
"..........\n",
"(1400/2000) done; loss=-27.05704607623275\n",
"..........\n",
"(1500/2000) done; loss=-30.870640116511463\n",
"..........\n",
"(1600/2000) done; loss=-36.09219298596677\n",
"..........\n",
"(1700/2000) done; loss=-30.67153315025095\n",
"..........\n",
"(1800/2000) done; loss=-24.371970056545187\n",
"..........\n",
"(1900/2000) done; loss=-25.47244479986402\n",
"..........\n",
"(2000/2000) done; loss=-26.876981343370787\n",
"done; 28.668578288s used\n"
]
}
],
"source": [
"Phi = Flux.Params(ϕ)\n",
"opt = ADAM(2e-3)\n",
"niters = 2_000\n",
"losses = []\n",
"trans_base = transformed(base, flow)\n",
"# Initial F\n",
"@info F(model, trans_base, 10)\n",
"timeused = @elapsed for iter = 1:niters\n",
" iter % 10 == 0 && print(\".\")\n",
"\n",
" loss = F(model, trans_base, 10)\n",
" gs = Tracker.gradient(() -> loss, Phi)\n",
" for p in ϕ\n",
"# println(p, gs[p])\n",
" Tracker.update!(opt, p, gs[p])\n",
"# println(p)\n",
" end\n",
" append!(losses, loss.data)\n",
" \n",
" if iter % 100 == 0\n",
" mean_loss = mean(losses[end-99:end])\n",
" println(\"\\n($iter/$niters) done; loss=$mean_loss\")\n",
" end\n",
"end\n",
"println(\"done; $(timeused)s used\")"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"Figure(PyObject <Figure size 640x480 with 1 Axes>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"1-element Array{PyCall.PyObject,1}:\n",
" PyObject <matplotlib.lines.Line2D object at 0x7fb9971054e0>"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Loss Plot\n",
"using PyPlot\n",
"PyPlot.plot(losses)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"11-element Array{Any,1}:\n",
" [0.47511 0.638481; 0.482729 0.469116] (tracked)\n",
" [-0.0480375; -0.199192] (tracked) \n",
" [4.84201] (tracked) \n",
" [-3.70387] (tracked) \n",
" [-0.345812; -0.437857] (tracked) \n",
" [1.23621; -1.41586] (tracked) \n",
" [-5.33839; 3.05942] (tracked) \n",
" [-0.185727] (tracked) \n",
" [4.71451] (tracked) \n",
" [-2.72279] (tracked) \n",
" [-0.35254; -0.436752] (tracked) "
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ϕ"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Grads(...)\n"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"loss = F(model, trans_base, 500)\n",
"gs = Tracker.gradient(() -> loss, Phi)\n",
"# Gradient of Shift bijector \n",
"# gs[ϕ[8]]"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"11-element Array{TrackedArray{Float64,N,A} where A<:AbstractArray{Float64,N} where N,1}:\n",
" [-41.6567 27.2195; 59.7536 -20.7477] (tracked)\n",
" [3.32351; -3.19856] (tracked) \n",
" [-1.43589] (tracked) \n",
" [0.189733] (tracked) \n",
" [31.3775; -39.8101] (tracked) \n",
" [-17.4285; -20.4151] (tracked) \n",
" [0.207619; -0.1512] (tracked) \n",
" [28.1562] (tracked) \n",
" [-0.712008] (tracked) \n",
" [0.778539] (tracked) \n",
" [0.106055; 3.1436] (tracked) "
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Other gredients\n",
"[gs[ϕ[i]] for i in 1:length(ϕ)]"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(s = 2.0416666666666665, m = 1.1666666666666667)"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(s = 49/24, m = 7/6) # the correct :s and :m"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(s = -0.3151962964746214, m = -0.3885797366600196)"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Posterior Sampling\n",
"(s = mean(flow(rand(rng, base, 10000))[1,:].data), m = mean(flow(rand(rng, base, 1000))[2,:].data)) # what we got"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Tracked 2×1000 Array{Float64,2}:\n",
" -0.354811 -0.314419 -0.353454 … -0.379264 -0.579326 -0.198162\n",
" -0.438809 -0.403711 -0.437605 -0.460286 -0.633093 -0.302403"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flow(rand(rng, base, 1000))"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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XhydswEAABNOYrQ3+OpXv6o333zzt3eQ+Nu7WLt2rX784x9r//79cjgcKi8v17Jly/Tzn/9ckjQ4OKiioiK5XC4dOXJEH3/8sR566CFNmTJFzz333CicDgAAmGiijpXExES5XK7L9gcCAe3evVv19fW66667JEl79uzR/PnzdfToUeXn5+snP/mJ3nvvPb355ptyOp26+eab9fTTT+vJJ59UVVWVkpKSrv6MAADAhBL1a1ZOnz6tjIwMfelLX1JJSYk6OjokSa2trRoYGFBBQYG1dt68ecrKypLX65Ukeb1eLViwQE6n01pTWFioYDCotra2z3zMUCikYDAYsQEAgMkhqljJy8tTXV2dDh06pF27dunMmTP64z/+Y33yySfy+XxKSkpSampqxG2cTqd8Pp8kyefzRYTKpeOXjn2W6upqORwOa8vMzIxmbAAAMI5F9WegJUuWWP++8cYblZeXp+uuu04//OEPlZycPOrDXVJZWamKigrr52AwSLAAADBJXNVbl1NTU/UHf/AH+uCDD+RyudTf36+enp6INX6/33qNi8vluuzdQZd+Hu51MJfYbDbZ7faIDQAATA5XFSsXLlzQf/3Xf2n27NnKzc3VlClT1NTUZB1vb29XR0eH3G63JMntduvkyZPq7u621jQ2NsputysnJ+dqRgEAABNUVH8Gevzxx3X//ffruuuuU1dXl5566iklJCTom9/8phwOh8rKylRRUaG0tDTZ7XatXr1abrdb+fn5kqTFixcrJydHK1asUE1NjXw+nzZs2CCPxyObzTYmJwgAAMa3qGLlww8/1De/+U3993//t2bNmqXbb79dR48e1axZsyRJW7duVXx8vIqLixUKhVRYWKidO3dat09ISFBDQ4NWrVolt9utlJQUlZaWavPmzaN7VgAAYMKIC4fD4VgPEa1gMCiHw6FAIMDrV4DPU+WI9QRRm9tXf8Vrz24pGsNJAIymkf7+5ruBAACA0YgVAABgNGIFAAAYjVgBAABGI1YAAIDRiBUAAGA0YgUAABiNWAEAAEYjVgAAgNGIFQAAYDRiBQAAGI1YAQAARiNWAACA0YgVAABgNGIFAAAYjVgBAABGI1YAAIDRiBUAAGA0YgUAABiNWAEAAEYjVgAAgNGIFQAAYDRiBQAAGI1YAQAARiNWAACA0YgVAABgNGIFAAAYjVgBAABGI1YAAIDRiBUAAGA0YgUAABiNWAEAAEYjVgAAgNGIFQAAYLSripUtW7YoLi5Oa9assfb19fXJ4/Fo5syZmj59uoqLi+X3+yNu19HRoaKiIk2bNk3p6elat26dLl68eDWjAACACWrEsXL8+HF973vf04033hixf+3atXr99de1f/9+NTc3q6urS8uWLbOODw4OqqioSP39/Tpy5Ij27t2ruro6bdq0aeRnAQAAJqwRxcqFCxdUUlKi73//+/rCF75g7Q8EAtq9e7e++93v6q677lJubq727NmjI0eO6OjRo5Kkn/zkJ3rvvff0yiuv6Oabb9aSJUv09NNPa8eOHerv7x+dswIAABPGiGLF4/GoqKhIBQUFEftbW1s1MDAQsX/evHnKysqS1+uVJHm9Xi1YsEBOp9NaU1hYqGAwqLa2tmEfLxQKKRgMRmwAAGBySIz2Bq+++qreeecdHT9+/LJjPp9PSUlJSk1NjdjvdDrl8/msNb8bKpeOXzo2nOrqan3729+OdlQAADABRHVlpbOzU3/3d3+nffv2aerUqWM102UqKysVCASsrbOz85o9NgAAiK2oYqW1tVXd3d36oz/6IyUmJioxMVHNzc3atm2bEhMT5XQ61d/fr56enojb+f1+uVwuSZLL5brs3UGXfr605tNsNpvsdnvEBgAAJoeoYuXuu+/WyZMndeLECWtbuHChSkpKrH9PmTJFTU1N1m3a29vV0dEht9stSXK73Tp58qS6u7utNY2NjbLb7crJyRml0wIAABNFVK9ZmTFjhm644YaIfSkpKZo5c6a1v6ysTBUVFUpLS5Pdbtfq1avldruVn58vSVq8eLFycnK0YsUK1dTUyOfzacOGDfJ4PLLZbKN0WgAAYKKI+gW2n2fr1q2Kj49XcXGxQqGQCgsLtXPnTut4QkKCGhoatGrVKrndbqWkpKi0tFSbN28e7VEAAMAEEBcOh8OxHiJawWBQDodDgUCA168An6fKEesJoja3r/6K157dUjSGkwAYTSP9/c13AwEAAKMRKwAAwGjECgAAMBqxAgAAjEasAAAAoxErAADAaMQKAAAwGrECAACMRqwAAACjESsAAMBoxAoAADAasQIAAIxGrAAAAKMRKwAAwGjECgAAMBqxAgAAjEasAAAAoxErAADAaMQKAAAwGrECAACMRqwAAACjESsAAMBoxAoAADAasQIA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",
"text/plain": [
"Figure(PyObject <Figure size 640x480 with 1 Axes>)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"PyPlot.hist(flow(rand(rng, base, 1000))[1,:].data, bins=10, alpha=1)\n",
"PyPlot.hist(flow(rand(rng, base, 1000))[2,:].data, bins=10, alpha=1)\n",
"show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"@webio": {
"lastCommId": null,
"lastKernelId": null
},
"kernelspec": {
"display_name": "Julia 1.1.0",
"language": "julia",
"name": "julia-1.1"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.1.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment