Fisher's Blog

Sein heißt Werden
Leben heißt Lernen

0%

来自图像的原始输入维度非常高,造成在强化学习中数据利用率非常低效,而来自伯克利的新论文 CURL: Contrastive Unsupervised Representations for Reinforcement Learning 认为如果智能体能在高维的观测信息中学习到更有用的表征,那么基于这些表征所做的强化学习算法将会更加数据高效。该论文主要通过对比学习的方法对高维原始图像输入做表征,能达到可以比肩直接用向量化状态输入的数据利用率。

阅读全文 »

换源

编辑 /etc/apt/sources.list 文件,删除原文件所有内容,用以下内容取代:

1
2
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib

编辑 /etc/apt/sources.list.d/raspi.list 文件,删除原文件所有内容,用以下内容取代:

1
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

挂载 U 盘

参考:https://www.jianshu.com/p/0ea8e7b7d64d

1
2
3
$ sudo mkdir /mnt/usb
$ sudo mount -o uid=pi,gid=pi,umask=007 /dev/sda1 /mnt/usb
$ sudo umount /mnt/usb

安装 bt 下载器 transmission

参考:https://shumeipai.nxez.com/2013/09/08/raspberry-pi-bt-download-servers.html

1
2
3
sudo apt-get install transmission-daemon
sudo usermod -G pi debian-transmission
sudo nano /etc/transmission-daemon/settings.json

配置 settings.json

1
2
3
4
5
"download-dir": "/mnt/usb/downloads",
未完成的下载目录
"incomplete-dir": "/mnt/usb/downloads",
允许Web访问的白名单地址
"rpc-whitelist": "192.168.0.*",
1
2
sudo service transmission-daemon reload
sudo service transmission-daemon restart

安装 Adafruit_Python_GPIO

1
2
3
4
5
sudo apt-get update
sudo apt-get install build-essential python3-pip python3-dev python3-smbus git
git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
cd Adafruit_Python_GPIO
sudo python3 setup.py install

开启 i2c

1
sudo raspi-config

安装 python3 gpio

1
sudo apt-get install python3-rpi.gpio

更新 pip

1
2
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install pip -U

  1. 首先根据官方教程 https://docs.docker.com/engine/install/ubuntu/ 确保服务器已经安装了 Docker,同时根据 https://docs.docker.com/compose/install/ 安装 Docker Compose。

  2. 拉取最新的 overleaf 服务器版本

    1
    $ docker pull sharelatex/sharelatex
  3. 在用户目录 ~ 下新建文件夹 ~/sharelatex/, ~/sharelatex/sharelatex_data/, ~/sharelatex/mongo_data/, ~/sharelatex/redis_data/

  4. 下载 docker-compose.yml 文件,并存在 ~/sharelatex/​ 文件夹中

  5. 根据需要修改 docker-compose.yml 文件,可以更改服务器映射的端口号 ports ,修改 sharelatex, mongo 和 redis 的volumes 到步骤3创建的文件夹中。注意 SHARELATEX_APP_NAME 中不能有特殊字符,否则可能会解析失败。

  6. 进入 ~sharelatex 启动 docker-compose.yml

    1
    $ docker-compose up
  7. 由于默认安装的是最小版本 TeXLive,如果要安装完整包,执行

    1
    $ docker exec sharelatex tlmgr install scheme-full

    或者也可以安装任意的单个包,只需要把 sheme-full 替换为包的名称即可

  8. 第一次启动镜像后,访问 /launchpad 页面设置管理员账号

1
2
3
import tensorflow as tf
import numpy as np
import time

比较动态图与静态图的执行速度

1
2
3
4
5
6
7
8
9
10
11
12
13
def test1(a, b):
a = tf.pow(a, 2)
b = tf.pow(b, 2)
a = a * b
return a, b


@tf.function
def test2(a, b):
a = tf.pow(a, 2)
b = tf.pow(b, 2)
a = a * b
return a, b
1
2
a = np.random.randn(1024, 1024).astype(np.float32)
b = np.random.randn(1024, 1024).astype(np.float32)
1
2
3
4
5
6
7
8
9
10
11
12
13
t = time.time()
for _ in range(100):
test1(a, b)
print('动态图', time.time() - t)

t = time.time()
test2(a, b)
print('静态图第一次构造', time.time() - t)

t = time.time()
for _ in range(100):
test2(a, b)
print('静态图', time.time() - t)
动态图 3.0627214908599854
静态图第一次构造 0.5964057445526123
静态图 0.6522562503814697
阅读全文 »

一般环境的动作空间是有界的,但由于策略是个分布,如高斯分布,是无界的,所以我们需要对动作进行 squashing 挤压。\(\tanh\) 是一个可逆函数,值域在 \((-1,1)\) 之间,非常适合用来达到我们的目的。

换句话说,一个 squashed 后的与状态独立的高斯策略应该是 \(\mathbf{a}=\tanh \left(\mathbf{b}_{\phi}(\mathbf{s})+\mathbf{A}_{\phi}(\mathbf{s}) \epsilon\right)\) ,其中 \(\epsilon \sim \mathcal{N}(0, I)\)\(\mathbf{b}\) 是可训练的偏差,\(\mathbf{A}\) 是可训练的满秩矩阵,一般来说是对角全为正数的对角矩阵。我们可以将两个函数的转换简写成:\(\mathbf{a}=\left(f_{2} \circ f_{1}\right)(\epsilon)\) ,其中 \(\mathbf{z}=f_{1}(\epsilon) \triangleq b(\mathbf{s})+A(\mathbf{s}) \epsilon\)\(\mathbf{a}=f_{2}(\mathbf{z}) \triangleq \tanh (\mathbf{z})\)

Soft actor-critic 需要我们计算动作的 log-likelihood 值,因为 \(f_1\)\(f_2\) 都是可逆的,所以我们可以应用如下定理:对于任意可逆函数 \(\mathbf{z}^{(i)}=f_{i}\left(\mathbf{z}^{(i-1)}\right)\) ,我们有

\[ \begin{align} \mathrm{z}^{(N)}=\left(f_{N} \circ \cdots \circ f_{1}\right)\left(\mathrm{z}^{0}\right) & \Leftrightarrow \\ \log p\left(\mathrm{z}^{(N)}\right) &= \log p\left(\mathrm{z}^{(0)}\right)-\sum_{i=1}^{N} \log \left|\operatorname{det}\left(\frac{d f_{i}\left(\mathrm{z}^{(i-1)}\right)}{d \mathrm{z}^{(i-1)}}\right)\right| \end{align} \]

其中 \(\frac{d f_{i}(\mathbf{z})}{d \mathbf{z}}\)\(f_i\) 的雅可比矩阵。

在实际开发中,对于 \(\tanh\) ,雅可比矩阵是对角为 \(\frac{d \tanh \left(z_{i}\right)}{d z_{i}}=1-\tanh ^{2}\left(z_{i}\right)\) 的对角矩阵,因此我们有: \[ \log \left|\operatorname{det}\left(\frac{d f_{2}(\mathbf{z})}{d \mathbf{z}}\right)\right|=\sum_{i=1}^{|\mathcal{A}|} \log \left(1-\tanh ^{2}\left(z_{i}\right)\right) \] 即: \[ \pi(\mathbf{a} | \mathbf{s})=\mu(\mathbf{z} | \mathbf{s})\left|\operatorname{det}\left(\frac{\mathrm{da}}{\mathrm{dz}}\right)\right|^{-1} \]

\[ \log \pi(\mathbf{a} | \mathbf{s})=\log \mu(\mathbf{z} | \mathbf{s})-\sum_{i=1}^{|\mathcal{A}|} \log \left(1-\tanh ^{2}\left(z_{i}\right)\right) \]

本文翻译自 Natural Gradient Descent, Agustinus Kristiadi.

假设我们现在有一个概率模型 \(p(x|\theta)\) ,我们希望通过最大化似然函数来找到最优的参数 \(\theta\),也就是最小化损失函数 \(\mathcal{L}(\theta)\) ,即负的似然函数。 一般用来解决优化问题的方法是使用梯度下降法,我们根据 \(-\nabla \mathcal{L}(\theta)\) 的方向来使参数向前走一步,这个方向是 \(\theta\) 在参数空间中最陡峭的方向。可以用如下公式表示: \[ \frac{-\nabla_\theta \mathcal{L}(\theta)}{\lVert \nabla_\theta \mathcal{L}(\theta) \rVert} = \lim_{\epsilon \to 0} \frac{1}{\epsilon} \mathop{\text{arg min}}_{\text{ s.t. } \lVert d \rVert \leq \epsilon} \mathcal{L}(\theta + d) \, . \] 意思就是要去选取一个向量 \(d\) ,使得新参数 \(\theta +d\) 在参数 \(\theta\) 的距离为 \(\epsilon\) 的范围内,并能最小化损失。注意我们在描述这个范围的时候用的是欧几里得范数,因此梯度下降取决于参数空间(parameter space)的欧几里得几何。

但如果我们的目标是使损失函数最小(使似然性最大化),那么很自然地,我们会在所有可能的似然性空间中让参数向前走一步。 由于似然函数本身是概率分布,因此我们可以将其称为分布空间(distribution space) 。 因此,在该分布空间而不是参数空间中采用最陡的下降方向是有意义的。

那么我们应该在该空间中使用哪个度量/距离呢?一个流行的选择是 KL 散度。

阅读全文 »

本文翻译自 Understanding Variational Autoencoders (VAEs), Joseph Rocca, Sep 24, 2019

这篇文章里,我们主要介绍一种深度生成模型:Variational Autoencoders (VAEs)。概括地说,VAE 就是一个自动编码器(autoencoder),但它编码后的分布在训练阶段需要被正则化,以此让它的隐空间(latent space)有足够好的性质来使我们生成新的数据。另外,用 variational 这个词是因为该方法与正则化和统计学中的变分推断有关。

阅读全文 »

本文翻译自 Understanding the Variational Lower Bound, Xitong Yang, September 13, 2017

变分贝叶斯(Variational Bayesian (VB))是一类非常受欢迎的统计类机器学习方法。VB 非常有用的一个特性是推断优化的二元性:我们可以将统计推断问题(从一个随机变量的值推断出另一种随机变量的值)作为优化问题(找到参变量的值来最小化某些目标函数)。另外,variational lower bound ,也被称作 evidence lower bound (ELBO),在 VB 的推导中起了非常重要的作用。在这篇文章中,我们主要介绍有关 variational lower bound 的最基础的知识,有助于理解与 “hard attention” 机制有关的论文。

阅读全文 »

DeepMind 在 Distributed Prioritized Experience Replay 的基础上增加了 RNN 的支持,于是形成了本文要介绍的论文 Recurrent Experience Replay in Distributed Reinforcement Learning 。论文主要讨论了由于使用经验池机制产生参数滞后 (parameter lag) 现象而导致的表征漂移 (representational drift) 和 RNN 隐藏状态滞后 (recurrent state staleness) 问题,这两个问题在分布式学习中更加显著。

阅读全文 »

深度强化学习在一系列任务中取得了显着的成功,从机器人的连续控制问题到 Go 和 Atari 等游戏。 但到目前为止,深度强化学习的发展在这些领域中仅局限于单个任务,每个智能体需要对每个任务进行单独的调整和训练。

DeepMind 开发了一套新的训练环境,DMLab-30,在具有相同的动作空间和图像状态环境中进行各种各样的挑战。

而 DeepMind 在 Impala: Scalable distributed deep-rl with importance weighted actor-learner architectures 论文中,只用一个智能体在多个任务上进行学习。为了训练智能体在多任务上获得更好的效果,需要大吞吐量并能有效利用每个数据点。 为此,DeepMind 开发了一种新的,高度可扩展的分布式体系结构,称为 Importance Weighted Actor-Learner Architecture,它使用一种称为 V-trace 的 off-policy 校正算法。

阅读全文 »