<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    
    <title>My Blog</title>
    
    
    <link>https://minyu-shen.github.io/</link>
    <atom:link href="https://minyu-shen.github.io/feed.xml" rel="self" type="application/rss+xml" />
    
    
      <item>
        <title>Day-to-day dynamics and FW algorithm</title>
        <description>
          Connections &amp; differences - 
          Traffic equilibrium It is well-known that when link cost functions are symmetric, finding the user-equilibrium flow pattern is equivalent to solving the following optimization problem: \[\min z(\mathbf{v}) = \sum_{a\in A} \int_{0}^{v_a}t_a(w)dw \\ \mathbf{v}\in\Omega_l \\ \Omega_{l} := \{ \mathbf{v}\mid v_a=\sum_{w\in W}\sum_{r\in R_w}{\delta_{a}^{rw}x_{rw}, \mathbf{x}\in \Omega_{p}, \forall a\in A} \} \\ \Omega_p:= \{\mathbf{x}\mid...
        </description>
        <pubDate>Tue, 09 Mar 2021 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2021-03-09-FW-Algorithm-Day-to-day/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2021-03-09-FW-Algorithm-Day-to-day/</guid>
      </item>
    
      <item>
        <title>Feasible link and path flow set</title>
        <description>
          Convexity and underdetermination - 
          This blog reviews some basic concepts in the traffic assignment. The focus will be on the network structure. A person wishing to travel must have a certain pair of origin and destination (OD). Conventionally, we will divide the entire city into different traffic zones, which can be regular or regular,...
        </description>
        <pubDate>Sun, 07 Feb 2021 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2021-02-07-Traffic-Assignment-Set-And-Matrix/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2021-02-07-Traffic-Assignment-Set-And-Matrix/</guid>
      </item>
    
      <item>
        <title>Value iteration process converges to an optimal policy</title>
        <description>
          Why? - 
          In the last policy iteration blog, we prove that starting from an initial pocliy, the iteration process of “evaluation -&amp;gt; greedy improvement -&amp;gt; evaluation -&amp;gt; greedy improvement …” can guarantee an optimal policy. We note that at each step of evaluation, we have to iterate it many times to get...
        </description>
        <pubDate>Fri, 05 Feb 2021 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2021-02-05-Value-Iteration/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2021-02-05-Value-Iteration/</guid>
      </item>
    
      <item>
        <title>A copy of online tutorial for Pytorch autograd framework</title>
        <description>
          Self record only - 
          Autograd，自动微分，是整个pytorch框架的核心功能。我一直是只了解原理，但却不知框架是如何实现的，这次看到一个非常好的教程，所以打算把理解总结一下。 用pytorch实现微分计算的基本流程是： 定义需要进行计算的tensor。其中一部分的tensor只是纯粹用来计算，并不需要更新，比如说输入的数据；而另一部分的tensor是参数，它们会参与到计算中，但同时我们也想对其进行更新。对于需要更新的参数，设置requires_grad = True来要求自动微分框架计算grad。 利用定义好的tensor，对其进行forward（前向）计算，比如算loss。这个过程中，计算的结果会保存在tensor的data属性中。 在前向计算的过程中，自动微分框架会隐式地构建一张backward graph。这张图结构取决于各个tensor的requires_grad，is_leaf（叶节点），以及相应的加减乘数函数操作。 把前向输入的data代入backward graph，得到每个需要grad的tensor的grad。 根据梯度，调整当前参数值。 以上的流程中，可以看出Tensor的核心属性就5个：data, grad, grad_fn, is_leaf, requires_grad。 简单例子 (抄自 Elliot Waite) 从例子开始讲具体的流程，假设现在有a，b两个tensor，然后把它们乘起来得到c，如下： import torch a = torch.tensor(2.0, requires_grad=True) b = torch.tensor(3.0, requires_grad=False) c = a * b 执行了以上的代码之后，实际过程如下： 这里绿色的框表示叶节点并且requires_grad = True，而黄色的框表示叶节点但是requires_grad=False，褐色的框表示非叶节点的中间节点。这三种颜色是在forward graph里，而蓝色的框表示的是backward graph。 由于设置a是需要梯度的，所以b和a相乘得到的变量c，也自动变成需要梯度了。 Mul先会去得到一个context variable，然后把输入到Mul的所有tensors（这里是a和b）的data，存储到这个ctx里面；这里用ctx.saved_tensors来表示。这里我们用了相乘，如果是加法操作的话，我们就不需要这个ctx.saved_tensors了，直接传梯度1.0上去就行。 此外，因为有两个input tensors，所以MulBackward会有一个next_functions来指向后续的两个函数（来进一步传导梯度）。在这里，由于b不需要梯度，那么就可以设置为None，也就把梯度传导断了。a是leaf node，所以直接指向AccumulateGrad，不需要再指向其他的后向图里的xxxBackward了。 Tensor c会设置grad_fn的reference来指向backward...
        </description>
        <pubDate>Sat, 30 Jan 2021 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2021-01-30-Computational-graph/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2021-01-30-Computational-graph/</guid>
      </item>
    
      <item>
        <title>Improvimg greedily leads to optimality in policy iteration</title>
        <description>
          Why? - 
          在Dynamic programming里，policy iteration是一个经典的框架，通过反复迭代evaluation和improvement 来得到一个最优的策略。Evaluation得到的值函数，传给improvement过程，而improvement过程根据这个值函数做一个贪婪的policy，返回给evaluation过程。下面看一下为什么贪婪的反馈能够得到一个optimal policy。 在Silver的课上，或者在Sutton的书上，推导的过程里面那个$E_{\pi^{\prime}}$ 让有点让我犯晕…… 我就把它展开方便理解一点。 Evaluation 这个过程就是通过bellman expectation equation来做的，先设一个价值函数$v_{\pi}(s), \forall s$，它cache了，在状态$s$，之后一直执行$\pi$ ，所能得到的expected total rewards。从随机初始化的一个值函数开始迭代，根据第$k$轮的值函数，通过one-step-look-ahead，算一个更新的$k+1$轮的值函数，以此往复： \[v^{k+1}_{\pi}(s) = \sum_{a\in A}\pi(a|s)\left( \sum_{r\in \R^1}r \sum_{s'\in S}P(s',r|s,a) + \gamma \sum_{s'\in S}{\sum_{r\in \R^1}P(s',r|s,a) v^k_{\pi}(s')} \right)\] 上面这个式子里，我完整的展开了one-step-look-ahead的所有概率公式。这里transition operator, $ P(s’,r\mid s,a)$, 完整地描述了随机切换到下一个state，同时给一个随机reward。我们认为离开当前state $s$的时候才得到reward，所以reward取决于$s,a$和环境，把marginalization去掉： \[v^{k+1}_{\pi}(s) = \sum_{a\in A}\pi(a|s)\left( \sum_{r\in \R^1}r P(r|s,a) + \gamma \sum_{s'\in S}{P(s'|s,a) v^k_{\pi}(s')}...
        </description>
        <pubDate>Mon, 25 Jan 2021 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2021-01-25-Policy-Iteration/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2021-01-25-Policy-Iteration/</guid>
      </item>
    
      <item>
        <title>Simple intuition on law of iterated expectation</title>
        <description>
          Nested form - 
          最近一个月都在搞论文的时候，没有更新。这几天隔离期空闲了，打算重新回顾下强化学习的一些基础知识；而在MDP里一些基础公式的推导，有时候有law of iterated expectation的影子。 先从基本形式开始，再介绍一个嵌套形式的。 1. $E[E[X|Y]] = E[X]$ 有一个非常简单的例子，假如现在我们想去统计整个人群中的平均身高$E[X]$，那么我们可以把采集到的数据分成男和女，我们可以先统计男生的平均身高，然后再统计女生的平均身高，分别是 \[E[X|Y=``male&quot; ],\, E[X|Y=``female&quot; ]\] 然后把这个两个期望数，用男女各自的比例加权平均一下就行了。 \[E[X] = P(Y=``male&quot;)\cdot E[X|Y=``male&quot; ] + P(Y=``male&quot;)\cdot E[X|Y=``female&quot; ]\] 为什么这样是对的呢？下面我们把期望展开一下，为了更general一点，考虑$X,Y$都是连续的情况。 \[E[E[X|Y]] = E\left[ \int{x\cdot p(x|Y)dx} \right] = \int{p(Y=y)\left[\int{x\cdot p(x|Y=y)dx}\right]dy}\] 第二个等式是因为积掉$x$之后，就只剩随机变量$Y$了，可以看成一个关于随机变量的函数$f(Y)$。 然后根据 富比尼定理 ，只要整个积分bounded，我们就能交换顺序： \[\int{x} \int{p(Y=y)\cdot p(x|Y=y)dy}dx = \int{x} \int{p(X=x,Y=y)dy}dx = \int{x } p(X=x)dx = E[X]\]...
        </description>
        <pubDate>Sun, 24 Jan 2021 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2021-01-24-Simple-Intuition-on-Iterated-Expectation/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2021-01-24-Simple-Intuition-on-Iterated-Expectation/</guid>
      </item>
    
      <item>
        <title>A simple paradox of Bayesian</title>
        <description>
          Medical test paradox - 
          这两天在3Blue1Brown上看到一个关于贝叶斯悖论的视频， Medical test paradox。大概的意思是说，对于一个比较少见的病，即使检测出来呈阳性，那么真正得这个病的概率也很低。把自己看完的理解写一下，这个问题相对简单，但是对应到实际生活中，含义还是很有趣的。先理解一些概念。 概念 True positive rate (TPR): 有疾病并且检测阳性 $P(E=+\mid H=+)$ ，这个概率长被称为sensitivity, recall，顾名思义，对于有疾病的人，检测的灵敏度。 True negative rate (TNR): 没病并且检测阴性 $P(E=-\mid H=-)$， 这个概率长被称为specificity或者selectivity，感觉可以翻译为特异性，表达一个specifically 排除其他导致positive的可能性。 False positive rate (FPR): 没病但被误诊为阳性 $P(E=+\mid H=-)$, 这个是特异性的取1-x。 False negative rate (FNR): 有病但被误诊为阴性 $P(E=-\mid H=+)$ , 这个是灵敏度的取1-x。 贝叶斯公式 大家都懂，贝叶斯公式，H是假设 (hypothesis), E是证据(evidence). \[P(H\mid E) = P(H)\frac{P(E\mid H)}{P(E)}\] 这里$P(E\mid...
        </description>
        <pubDate>Wed, 23 Dec 2020 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2020-12-23-Simple-Thoughts-on-A-Bayesian-Paradox/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2020-12-23-Simple-Thoughts-on-A-Bayesian-Paradox/</guid>
      </item>
    
      <item>
        <title>A variational inequality framework for network games (Parise and Ozdaglar, 2019)</title>
        <description>
          Part 1 - 
          这两天在Games and Economic Behavior上看到一篇个人感觉非常有趣的论文，名字是：A variational inequality framework for network games: Existence, uniqueness, convergence and sensitivity analysis。这篇文章试图用Finite Variational Inequality (VI)的框架去把之前文献中存在的一些关于network game的模型做一个统一。使用VI的主要作用是为了克服文献中使用potential game的框架所无法处理的asymmetric cost function。一些文献中已经研究的模型，可以看做是这篇文章在一定取值下的speical cases. 文章的在矩阵的表达上比较简洁，我会具体把矩阵的每一项来展开，方便更好理解，中间会穿插个人构造的小例子，来帮助理解模型的细节。大部分technical的证明部分，我还怎么看，就先略过了，之后看到精彩的证明部分，再补充。 模型 众所周知，在一个game中，玩家 i的收益是会由她本人及其他所有的玩家的策略所共同影响的。我们用 $x^i$ 来表示第 i 个玩家的策略向量，$x^i\in X^i\subseteq \mathbb{R}^n$1. 现在一共有$N$个玩家，我们用 $z^i(x)$ 来表示其他所有玩家策略的总和。这里$x$ 就是所有玩家的决策向量的”向量“，也就说是一个堆叠的$N\cdot n $维向量。 所有对于玩家 i 来说，cost (or payoff) function就长这样： \[J^i(x^i, z^i(x))\] 可以用一个非负的adjacency matrix,...
        </description>
        <pubDate>Tue, 22 Dec 2020 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2020-12-22-Variational-Inequality-Framework-For-Network-Game-Paper/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2020-12-22-Variational-Inequality-Framework-For-Network-Game-Paper/</guid>
      </item>
    
      <item>
        <title>Random incidence</title>
        <description>
          A bus stop example - 
          今天讲一下Random Incidence，我也不太确定Random Incidence的中文翻译是什么，就用英文来表示吧 ᕕ( ՞ ᗜ ՞ )ᕗ。可以先看一个现实中的例子，来看一下它的由来。 例子：公交车站等待时间 当我们想坐公交的时候，我们需要找到一个就近的公交车站，而到了车站之后我们大概率并不能马上坐上我们想要上的线路，我们关心的问题是当我们到了之后，需要等多久。这个等待时间直觉上取决于公交线路的发车频率，以及咱的人品。 每条公交线路都有一定的发车频率（比如10分钟），而由于公交车在旅途中行程时间是受到很多随机因素的干扰（比如可能会碰到红绿灯，交通拥堵），所以就算始发站的发车频率是严格的10分钟一班，那么到达每个车站的时间间隔也不会是正好10分钟。这个时间间隔其实就是所谓的headway (车头时距)，即在一个固定的地点，去数相邻两个到达的时间间隔。这里咱假设这个headway服从一个分布$f_H(h)$1，我们暂时不去假设分布的类型，只知道这个分布的均值$E[H]$和方差$\sigma_{H}^{2}$。如果有很多历史数据的话，其实拟合一个这样的分布还是非常简单的。如果始发站的发车频率是严格10分钟一班的话，那么随着数据点的增多，这个均值应该会趋近于10分钟，而方差的话，就看旅途时间波动是否非常大了。 人品指的是咱是否恰好在公交车到达的时候到了站。最幸福的莫过于一到车站就刚好来了一辆，最悲催的就是到了车站，刚好错过（然后喊司机，司机还假装听不到 ໒( •́ ‸ •̀ )७ ）。这里咱做一个假设，我们到达车站这个事件，与公交车的到站之间是独立的，也就说咱也不知道公交车是不是有一个时刻表，规定了它大概什么时间会到车站，也不打开地图看看下一辆什么时候到再安排自己的出门时间；佛系到站，纯看人品！ 有了$H$的均值和方差，还有独立性假设，我们就来算一下这个平均等待时间；由于乘客和公交车到达车站的时间都是随机的，那它直觉上也是随机的，我们用$W$来表示；我们现在关心的是$E[W]$，因为每次观察很可能都不一定，均值是我们关心的。下面这个图应该很直观地表达了上述思考。 我们的计算分两步走。（以下推导都不严谨） 第一步，确定这个乘客的到达会落在怎么样的时间间隔（记作$G$）。直觉上G跟H的长度以及$f(H)$都有关。比如想象一下如果$f_H(h)$是一个离散的分布，有0.5的概率是10分钟($f_H(10 min)=0.5$)，有0.5的概率是20分钟($f_H(20 min)=0.5$)，那么20分钟这个间隔被乘客”光临“的可能性，是10分钟那个间隔的2倍，因为它更长嘛~ 类似的，如果0.25的概率是30分钟，0.75的概率是10分钟，那么总的来说这两个类型的间隔会被等可能地”光临“。也就是说，G在每一个[g,g+dg]的概率（黎曼和），是正比于长度和该长度发生频率的乘积： \[f_G(g)\cdot dg\propto g\cdot f_H(g)\cdot dg\] $f_G(h)$还不是个valid分布，我们需要把整个概率normalize成1。两边取积分，左边等于1， \(1 \propto E[H]\) 所以， \[f_G(g) = \frac{g\cdot f_H(g)}{E[H]}\] 第二步，在已知 $G=g$ 的情况下，根据我们的假设，乘客是 均匀 地落在 $g$ 这个长度上的。所以等待时间的分布就是长度为 $g$ 的均匀分布， \[f_{W|G}(W=w|G=g) =...
        </description>
        <pubDate>Sun, 20 Dec 2020 00:00:00 +0000</pubDate>
        <link>https://minyu-shen.github.io/2020-12-20-Random-Incidence/</link>
        <guid isPermaLink="true">https://minyu-shen.github.io/2020-12-20-Random-Incidence/</guid>
      </item>
    
  </channel>
</rss>
