A Neural Representation of Sketch Drawings
以向量形式,生成连贯的涂鸦(低分辨率的)。
想法
以人的思维方式进行生成,具体是模拟控笔的动作:移动方向,提笔,结束绘画
什么是:unconditional and conditional generation of vector images composed of a sequence of lines.
数据
dataset 为笔画动作,每个点由5个元素表示,分别是偏移和状态,其中偏移是相对于上一个点的偏移,状态则包含:笔尖触纸、抬笔、结束绘画
方法
经过双向RNN 生成h,经过全连接层投影到$ \mu $和 $\sigma$,使用ex使得$\sigma$非负,再进行$z = \mu + \sigma \odot \mathcal{N}(0, I)$,其中$ \sigma \odot \mathcal{N}(0, I)$,是生成一个符合高斯分布的噪声,并使用$\sigma$进行放缩
为何这样做:
Encoder 神经网络输出 $\mu$ 和 $\sigma$ 2,实际上是在告诉系统:“我认为这张草图在潜在空间里的位置大概在这里($\mu$),但我不太确定,允许的误差范围大概是这么大($\sigma$)。
z经过tanh ($[ h0 ; c0 ] = \tanh(W_z z + b_z)$)得到初始状态向量h0,c0,其中前者是初始隐藏状态,代表短期记忆或输出状态,后者是初始细胞状态(LSTM 特有的),代表长期记忆初始细胞状态(LSTM 特有的),代表长期记忆
hi的计算方法:
根据 $h_0$(零状态)和 $S_0$ 计算出 $h_1$。
接着根据 $h_1$ 和 $S_1$ 计算出 $h_2$,以此类推
Unconditional Generation
这里是仅用解码器,那么h0初始化为0,z就没了, hi (i>0)依旧存在
生成循环 (Generation Loop)
生成过程是自回归的,每一步的输出都变成下一步的输入:
Step $i$ 的输入 ($x_i$): 在每一个时间步 $i$,输入给 RNN 的数据 $x_i$ 仅仅是前一个时间步生成的点 $S’_{i-1}$ 。
- 区别:与有条件生成不同,这里不需要拼接潜在向量 $z$ 。
Step $i$ 的输出: RNN 根据当前的内部状态和输入,计算出下一个点的概率分布参数(包括位移的高斯混合模型参数和笔触状态的分类分布参数)
采样 (Sampling): 从上述预测出的概率分布中采样得到当前的点 $S’_i$。
- 温度参数 ($\tau$):可以通过调节温度参数 $\tau$ 来控制生成的随机性。$\tau$ 越低,生成的画越确定/规范;$\tau$ 越高,生成的画越随机/混乱
重复上述循环,直到采样出的笔触状态为 $p_3=1$(结束绘画),或者达到了设定的最大序列长度 $N_{max}$ 8。
过程概述:
经过双向RNN 生成h,经过全连接层投影到$ \mu $和 $\sigma$,使用ex使得$\sigma$非负,再进行$z = \mu + \sigma \odot \mathcal{N}(0, I)$,其中$ \sigma \odot \mathcal{N}(0, I)$,是生成一个符合高斯分布的噪声,并使用$\sigma$进行放缩。z经过tanh ($[ h0 ; c0 ] = \tanh(W_z z + b_z)$)得到初始状态向量h0,c0,其中前者是初始隐藏状态,代表短期记忆或输出状态,后者是初始细胞状态(LSTM 特有的),代表长期记忆初始细胞状态(LSTM 特有的),代表长期记忆。编码器这边,z始终和si-1作为输入xi,hi(i>0)则由输入xi-1dot一个统一的权重矩阵得到,输出下一个点的分布概率yi+1,经过一系列GMM之类的处理得到一个最终的输入(此时连接了当前点和上一个点,在p1=1的情况下)
AI修正后的流程
Encode: $S \to$ Bi-RNN $\to h \to$ $(\mu, \sigma)$ $\to$ $z$。
Init: $z \to$ $[h_0; c_0]$。
Step $i$ Input: 取上一笔画完的点 $S_{i-1}$ 与 $z$ 拼接 $\to$ $x_i$。
Step $i$ Hidden: $x_i$ 进入 LSTM 单元(与 $h_{i-1}, c_{i-1}$ 交互) $\to$ $h_i$。
Step $i$ Param: $h_i$ 投影 $\to$ $y_i$ (概率参数)。
Step $i$ Sample: 从 $y_i$ 采样 $\to$ $S’_i$ (实际坐标)。
Draw: 根据 $S_{i-1}$ 的 $p_1$ 状态,决定是否画线连接 $S_{i-1}$ 和 $S’_i$
具体修正
连接动作发生在采样之后:有了 $S’i$ 的具体数值,渲染引擎才会根据上一笔的状态 ($p_1$) 将 $S{i-1}$ 和 $S’_i$ 连接起来。
hi的计算,LSTM 的更新过程不仅仅是一个矩阵乘法(dot),而是包含遗忘门、输入门、输出门等复杂的内部运算。$[h_i; c_i] = \text{forward}(x_i, [h_{i-1}; c_{i-1}])$ 这意味着它是通过递归调用 RNN 单元(forward operation)得到的,而不是简单的线性投影
补充
GAN 和Diffusion Models都使用 序列生成 和 潜空间 生成策略
无条件生成就是无输入随机生成,有条件生成就是给定要求下生成,其中向量图片就是矢量图。
对比GAN和Diffusion Models:

自回归模型RNN
一个模型,如果它使用自身过去(或先前)的输出作为输入,来预测未来的输出,那么它就是自回归模型
RNN之所以是自回归模型,是因为它的核心机制——隐藏状态的循环传递——决定了其在任意时间步
t的状态/输出,都依赖于它在t-1时刻的状态。这种对自身历史信息的依赖,正是自回归的本质
疑问:
why 激发p1时连接cur point to next point? 在渲染的时候如果当前点状态为p1,则读入下一个点进行连接。而在预测时是直接生成下一个点进行连接
why激发p3的点后,之后为何还有点? 为了让神经网络能够批量(Batch)处理数据,通常要求输入张量的维度是固定的,作者将所有训练数据的序列长度统一设定为 $N_{max}$,绝大多数草图的实际步数 $N_s$ 远小于 $N_{max}$为了填补 $N_s$ 到 $N_{max}$ 之间的空白,必须用数据填充。
- 填充值:论文明确指出,对于所有 $i > N_s$ 的点,将其值设定为 $(0, 0, 0, 0, 1)$ 。
所有激发p3后,仍可能有点存在。