Seq2Seq

Seq2Seq

Seq2Seq/Encoder-Decoder:允许任意长度序列输入、输出学习

seq2seq_structure

  • $T^{‘} \neq T$:输出序列长度、输入序列长度
  • $p(y_t|\cdots)$:一般为softmax函数计算字典中各词概率
  • $c$:定长向量
  • $h_t$:隐状态
  • $q$:将隐状态映射为定长向量存储信息,如: $q(\cdots) = h_T$
  • $f$:根据输入映射为隐状态,如:RNN、LSTM

实现策略

  • encoder:将输入序列映射为定长向量
  • decoder:将该定长向量映射为目标输出 (通过将联合概率有序分解来定义翻译概率)
  • RNN:以内部隐状态作为定长向量存储输入信息

    • 理论上可实现在定长向量中存储相关信息、再解码
    • 但由于长时梯度消失,实际难以训练
  • LSTM:类似RNN在内部隐状态中存储信息

    • 学习长时依赖更有效、容易训练

Seq2Seq with Attention

  • 采用LSTM、RNN结构的Seq2Seq结构很难将输入序列转化为定长 向量而保存所有有效信息

    • 序列末尾对定长向量影响更大,难以学习长距离依赖
    • 随着输入序列长度增加,预测效果显著下降
  • 使用Attention机制的Seq2Seq无需多期迭代传递信息,不存在 长距离依赖

BiRNN2RNN with Attention

seq2seq_birnn2rnn_with_attention

  • $y_t$:当前$t$时刻输出
  • $p(y_t|\cdots)$:$t$时刻输出条件概率
  • $s_t$:解码器$t$时刻隐状态
  • $h_j$:编码器$j$时刻隐状态
  • $c_t$:expected annotation,对输出$t$的上下文向量
  • $T$:输入序列长度
  • $e{t,j}, \alpha{t,j}$:输入$j$对输出$t$重要性,反映 模型注意力分布
  • $a$:alignment model,输入输出相关性模型,同整个系统 联合训练的前向神经网络,attention机制核心
  • 编码器:Bi-RNN
  • 解码器:attention机制加权的RNN

Factorization Machine

因子分解机

因子分解机:将变量交互影响因子化 (每个变量用隐向量代表、衡量其交叉影响)

  • $w_0$:全局偏置
  • $w_i$:变量$i$权重
  • $w_{i,j} := $:变量$i$、$j$之间交互项权重
  • $v_i$:$k$维向量,变量交叉影响因子
  • FM通过因子化交互影响解耦交互项参数

    • 即使没有足够数据也能较好估计高维稀疏特征交互影响参数

      • 无需大量有交互影响(交互特征取值同时非0)样本
      • 包含某交互影响数据也能帮助估计相关的交互影响
      • 可以学习数据不存在的模式
    • 可以视为embedding,特征之间关联性用embedding向量 (隐向量)內积表示

  • 参数数量、模型复杂度均为线性

    • 可以方便使用SGD等算法对各种损失函数进行优化
    • 无需像SVM需要支持向量,可以扩展到大量数据集
  • 适合任何实值特征向量,对某些输入特征向量即类似 biased MFSVD++PITFFPMC

  • 另外还有d-way因子分解机,交互作用以PARAFAC模型因子化
    • $V^{(l)} \in R^{n * k_l}, k_l \in N_0^{+}$

模型表达能力

  • 考虑任何正定矩阵$W$总可以被分解为$W=V V^T$,则$k$足够大 时,FM总可以表达(还原)交叉项权重矩阵$W$

    • FM是MF降维的推广,在用户-物品评分矩阵基础上集成其他 特征
    • 特征组合发生所有变量之间
  • 实际应该选取较小的$k$

    • 对较大$k$,稀疏特征没有足够数据估计复杂交叉项权重 矩阵$W$
    • 限制FM的表达能力,模型有更好的泛化能力、交互权重矩阵

模型求解

  • $V = (v_1, v_2, \cdots, v_m)$
  • $x = (x_1, x_2, \cdots, x_m)^T$
  • 模型计算复杂度为线性$\in O(kn)$

  • 模型可以使用梯度下降类方法高效学习

  • 考虑到稀疏特征,內积只需计算非零值

模型适用

  • 回归:直接用$\hat y(x)$作为回归预测值
  • 二分类:结合logit损失、hinge损失优化
  • ranking:$\hat y(x)$作为得分排序,使用成对分类损失优化

Field-aware Factorization Machines

域感知因子分解机:在FM基础上考虑对特征分类,特征对其他类别 特征训练分别训练隐向量

  • $m$:特征数量
  • $M, M_i$:特征域数量、各特征域中特征数量
  • $V_{i,j,a}$:特征域$i$中$j$特征对特征与$a$的隐向量
  • $V_{a, f_b}$:特征$x_a$对特征$b$所属域$f_b$的隐向量
  • FFM中特征都属于特定域,相同特征域中特征性质应该相同, 一般的

    • 连续特征自己单独成域
    • 离散0/1特征按照性质划分,归于不同特征域
  • 特征对其他域分别有隐向量表示和其他域的隐含关系

    • 考虑交互作用时,对不同域使用不同隐向量计算交互作用
    • FFM中隐变量维度也远远小于FM中隐向量维度

算法

ffm_steps

模型特点

  • 模型总体类似FM,仅通过多样化隐向量实现细化因子分解
  • 模型总体较FM复杂度大、参数数量多
    • 无法抽取公因子化简为线性
    • 数据量较小时可能无法有效训练隐向量

Batch Normalization

Internal Covariate Shift

ICS:由于网络参数变化,引起内部节点(输入)数据分布发生变化的过程

  • 网络中层与层之间高度耦合,具有强关联性

    • 网络中任意层都可以视为单独网络
    • 上层输入可视为作为当前层外部输入
  • 随训练进行,网络中参数不断发生改变

    • 任意层中参数变化会导致之后层输入发生改变
    • 高层需要不断适应输入分布的改变,即其输入分布性质影响 该层训练
    • 由此导致模型训练困难

负面影响

  • 上层网络需要不断调整输入适应数据分布变换,降低网络学习 效率

  • 输入数据量级不稳定、各维度数据量级差距不稳定

    • 降低学习效率
      • 小量级维度参数要求更小的学习率
      • 否则参数可能在最优解附近反复波动
    • 容易出现梯度消失,难以训练饱和非线性模型
      • 大量级维度训练过程中容易陷入梯度饱和区,参数更新 速度慢,减缓网络收敛速度
      • 训练过程中参数更新更有可能使得输入移向激活函数 饱和区
      • 且该效应随着网络深度加深被进一步放大
    • 参数初始化需要更复杂考虑
  • 还可以使用非饱和激活函数ReLU等避免陷入梯度饱和区

Batch Normalization

Batch Normalization:规范化batch数据,使样本各维度 标准化,即均值为0、方差为1

  • $B$:mini-batch
  • $z, y$:某层输入向量、规范化后输入向量 (即以个神经元中激活前标量值$z=Wx+b$为一维)
  • $\odot$:逐元素乘积
  • $E(x)$:均值使用移动平均均值
  • $Var(x)$:方差使用移动平均无偏估计
  • $\gamma, \beta$:待学习向量,用于恢复网络的表示能力
  • $\epsilon$:为数值计算稳定性添加
  • BN可以视为whitening的简化

    • 简化计算过程:避免过高的运算代价、时间
    • 保留数据信息:未改变网络每层各特征之间相关性
  • BN层引入可学习参数$\gamma, \beta$以恢复数据表达能力

    • Normalization操作缓解了ICS问题,使得每层输入稳定 ,也导致数据表达能力的缺失
    • 输入分布均值为0、方差为1时,经过sigmoid、tanh激活 函数时,容易陷入其线性区域
    • $\gamma = \sqrt {Var(z)}, \beta = E(z)$时为等价变换 ,并保留原始输入特征分布信息
  • Whitening:白化,对输入数据变换使得各特征同均值、 同方向、不相关,可以分为PCA白化、ZCA白化

训练

  • 规范化在每个神经元内部非线性激活前$z=Wu$进行,而不是 [也]在上一层输出$u$上进行,即包含BN最终为

    • $act$:激活函数
    • 偏置$b$:可以被省略,BN中减去均值
    • $u$的分布形状可以在训练过程中改变
    • 而$u$两次正则化无必要
    • $z=Wu$分布更可能对称、稠密、类似高斯分布
  • 以batch统计量作为整体训练样本均值、方差估计

    • 每层均需存储均值、方差的移动平均统计量用于测试时 归一化测试数据
  • 对卷积操作,考虑卷积特性,不是只为激活函数(即卷积核) 学习$\gamma, \beta$,而是为每个feature map学习 (即每个卷积核、对每个特征图层分别学习)

预测

  • 预测过程中各参数(包括均值、方差)为定值,BN仅仅对数据 做了线性变换

    • 使用训练总体的无偏统计量对测试数据归一化 (训练时存储)

    • 还可以使用样本指数加权平均统计量

用途

  • BN通过规范化输入数据各维度分布减少ICS,使得网络中每层 输入数据分布相对稳定
  • 实现网络层与层之间的解耦

    • 方便迁移学习
    • 加速模型学习速度:后层网络无需不断适应输入分布变化, 利于提高神经网络学习速度
  • 降低模型对网络超参数、初始值敏感度,使得网络学习更加稳定

    • 简化调参过程
    • 允许使用更大的学习率提高学习效率
    • $a$:假设某层权重参数变动$a$倍
    • 激活函数函数输入不受权重$W$放缩影响
    • 梯度反向传播更稳定,权重$W$的Jacobian矩阵将包含接近 1的奇异值,保持梯度稳定反向传播
  • 允许网络使用饱和激活函数(sigmoid、tanh等),而不至于 停滞在饱和处,缓解梯度消失问题

    • 深度网络的复杂性容易使得网络变化积累到上层网络中, 导致模型容易进入激活函数梯度饱和区
  • 有正则化作用,提高模型泛化性能,减少对Dropout的需求

    • 不同batch均值、方差有所不同,为网络学习过程增加随机 噪声
    • 与Dropout关闭神经元给网络带来噪声类似,一定程度上 有正则化效果

Layer Normalization

层归一化:假设非线性激活前的输入随机变量分布接近,可以直接 基于每层所有非线性激活前输入估计均值、方差

  • $h^l$:第$l$隐层激活前值
  • $\mu^l, \sigma^l$:第$l$隐层对应LN均值、方差 (标量,是同层神经元激活前值统计量)
  • 相对于BN,其适应范围更广

    • 循环神经网络中,BN无法处理长于训练序列的测试序列
    • BN无法应用到在线学习、超大分布式模型任务,此时训练 batch较小,计算的均值、方差无法有效代表训练总体
  • LN假设非线性激活前输入随机变量分布接近,而CNN网络中图像 边缘对应kernel大量隐藏单元未被激活,假设不成立,所以 CNN网络中LN效果没有BN效果好

激活函数

指数类

Sigmoid

将实数映射到(0, 1)区间

  • $z= wx+b$
  • 用途

    • 隐层神经元输出
    • 二分类输出
  • 缺点

    • 激活函数计算量大,BP算法求误差梯度时,求导涉及除法
    • 误差反向传播时容易出现梯度消失
    • 函数收敛缓慢

Hard_Sigmoid

计算速度比sigmoid激活函数快

  • $z= wx+b$

Softmax

主要用于多分类神经网络输出

  • $z_i = w_i x + b_i$:$(w_i, b_i)$组数同分类数量,和输入 $x$维度无关

  • $K$:分类数目

  • 工程意义:指数底

    • 可导$max$:拉开数值之间差距
    • 特征对输出结果为乘性:即$z_i$中输入增加会导致输出 随对应权重倍数增加
    • 联合交叉熵损失避免导数溢出,提高数值稳定性
  • 理论意义:概率论、最优化

    • softmax符合最大熵原理
    • 假设各标签取值符合多元伯努利分布,而softmax是其 link functiond的反函数#todo
    • 光滑间隔最大函数
  • Softmax回归参数$(w_i, b_i$$冗余,可以消去一组

Softplus

  • $z = wx + b$

Tanh

双曲正切函数

  • $z = wx + b$
  • $\frac{\partial tanh(z)}{\partial z} = (1 - tanh(z))^2$ :非常类似普通正切函数,可以简化梯度计算

线性类

Softsign

ReLU

Rectfied Linear Units:修正线性单元

LeakyReLU

Leaky ReLU:带泄露的修正线性

  • $\alpha$:超参,建议取0.01
  • 解决了$z < 0$时进入死区问题,同时保留了ReLU的非线性特性

Parametric ReLU

PReLU:参数化的修正线性

  • $\alpha$:自学习参数(向量),初始值常设置为0.25,通过 momentum方法更新

ThreshholdReLU

带阈值的修正线性

Linear

线性激活函数:不做任何改变

线性指数类

Exponential Linear Unit

Elu:线性指数

  • $\alpha$:超参
  • $x \leq 0$时,$f(x)$随$x$变小而饱和
    • ELU对输入中存在的特性进行了表示,对缺失特性未作定量 表示
  • 网络深度超超过5层时,ELU相较ReLU、LReLU学习速度更快、 泛化能力更好

Gausssion Error Liear Unit

GELU:ReLU的可导版本

Selu

可伸缩指数线性激活:可以两个连续层之间保留输入均值、方差

  • 正确初始化权重:lecun_normal初始化
  • 输入数量足够大:AlphaDropout
  • 选择合适的$\alpha, scale$值

梯度消失

激活函数导数太小($<1$),压缩误差(梯度)变化

Dropout

Dropout

Dropout训练时根据随机隐藏部分神经元、对应连接边避免 过拟合

固定概率丢弃

Dropout最简单方法:设置固定概率p,对每个神经元以概率p判定 是否需要保留

  • $d(x)$:丢弃函数
  • $m \in {0, 1}^d$:丢弃掩码,通过概率为p的伯努利 分布随机生成
  • $p$可以设置为0.5,对大部分网络、任务比较有效

    • 此时随机生成多的网络最具多样性
  • 训练时

    • 激活神经元数量为原来的p倍
    • 每个batch分别进行drop,相当于对每个batch都有独特网络
  • 测试时

    • 所有神经元都被激活,造成训练、测试时网络输出不一致, 需将每个神经元输出乘p避免
    • 也相当于把不同网络做平均
  • 在预测时,类似bagging技术将多个模型组合

    • 只是类似,各个drop后的子网并不独立,在不同子网中相同 神经元的权重相同
    • 多个模型组合组合可以一定程度上抵消过拟合
    • 因为在训练时子网中部分神经元被drop,剩余部分权重相较 完全网络有$\frac 1 {1-p}$,所以在完整网络中,各部分 权重需要$ * (1-p)$
  • 讲道理应该是隐藏部分神经元而不是连接,否则会使神经元偏向 某些输入,还不如隐藏部分神经元,这样可以让神经元随机降低 样本权重,理论上能减弱过拟合

丢弃方法

  • 输入层神经元丢弃率更接近1,使得输入变化不会太大

    • 输入层神经元丢失时,相当于给数据增加噪声,提高网络 稳健性
  • 循环神经网络丢弃

    • 不能直接丢弃隐状态,会损害循环网络在时间维度上的记忆 能力
    • 简单方法:可以考虑对非循环连接进行随机丢弃
    • 变分丢弃法:根据贝叶斯对丢弃法是对参数的采样解释, 采样参数需要每个时刻保持不变
      • 需要对参数矩阵的每个元素随机丢弃
      • 所有时刻使用相同的丢弃掩码

解释

  • 集成学习解释

    • 每次丢弃,相当于从原网络采样得到子网络
    • 每次迭代,相当于训练不同的子网络,共享原始网络参数
    • 最终网络可以近似看作是集成了指数个不同网络的组合模型
  • 贝叶斯学习解释

    • 对需要学习的网络$y = f(x, \theta)$,贝叶斯学习假设 参数$\theta$为随机向量
    • 设先验分布为$q(\theta)$,贝叶斯方法预测为

    • $f(x, \theta_m)$:第$m$次应用丢弃方法的网络
    • $\theta_m$:对全部参数的采样

CTR Stacking Models

深度学习CTR

stacking_nn_models_envolution_network

Deep Crossing

Deep Crossing:深度学习CTR模型最典型、基础性模型

deep_crossing_structure

  • multiple residual units:残差网络

Factorization Machine based Neural Network

FNN:使用FM隐层作为embedding向量,避免完全从随机状态训练 embedding

fnn_structure

  • 输入特征为高维稀疏特征,embeddingd层与输入层连接数量大、 训练效率低、不稳定

  • 提前训练embedding提高模型复杂度、不稳定性

Product-based Neural Network

PNN:在embedding层、全连接层间加入product layer,完成 针对性特征交叉

pnn_structure

  • product layer:在不同特征域间进行特征组合,定义有 inner、outer product以捕捉不同的交叉信息,提高表示能力

  • 传统DNN中通过多层全连接层完成特征交叉组合,缺乏针对性

    • 没有针对不同特征域进行交叉
    • 不是直接针对交叉特征设计

Wide&Deep Network

Wide&Deep:结合深层网络、广度网络平衡记忆、泛化

wide_and_deep_structure

  • deep models:基于稠密embedding前馈神经网络
  • wide models:基于稀疏特征、特征交叉、特征转换线性模型
  • 基于记忆的推荐通常和用户已经执行直接相关;基于泛化的推荐 更有可能提供多样性的推荐
  • memorization:记忆,学习频繁出现的物品、特征,从历史 数据中探索相关性
  • generalization:泛化,基于相关性的transitivity,探索 较少出现的新特征组合

  • https://arxiv.org/pdf/1606.07792.pdf

  • wide&deep系模型应该都属于stacking集成

Google App Store实现

wide_and_deep_logit_structure

  • wide部分:cross product transformation

    • 输入
      • 已安装Apps
      • impression Apps
      • 特征工程交叉特征
    • 优化器:带L1正则的FTRL
  • Deep部分:左侧DNN

    • 输入
      • 类别特征embedding:32维
      • 稠密特征
      • 拼接:拼接后1200维 (多值类别应该需要将embedding向量平均、极大化)
    • 优化器:AdaGrad
    • 隐层结构
      • 激活函数relu优于tanh
      • 3层隐层效果最佳
      • 隐层使用塔式结构

DeepFM

DeepFM:用FM替代wide&deep中wide部分,提升其表达能力

deepfm_structure

  • Dense Embeddings:FM中各特征隐向量,FM、DNN公用
  • FM Layer:FM內积、求和层
  • 特点(和Wide&Deep关键区别)

    • wide部分为FM (deep&wide中wide部分有特征交叉,但依靠特征工程实现)
    • FM、DNN部分共享embedding层
  • 同时组合wide、二阶交叉、deep三部分结构,增强模型表达能力

    • FM负责一阶特征、二阶特征交叉
    • DNN负责更高阶特征交叉、非线性

实现

  • DNN部分隐层

    • 激活函数relu优于tanh
    • 3层隐层效果最佳
    • 神经元数目在200-400间为宜,略少于Wide&Deep
    • 在总神经元数目固定下,constant结构最佳
  • embedding层

    • 实验中维度为10

Deep&Cross Network

Deep&Cross:用cross网络替代wide&deep中wide部分,提升其 表达能力

deep_and_cross_structure

  • 特点(和WDL、DeepFM区别)

    • 使用交叉网络结构提取高阶交叉特征
      • 无需特征工程(WDL)
      • 不局限于二阶交叉特征(DeepFM)
  • 交叉网络可以使用较少资源提取高阶交叉特征

https://arxiv.org/pdf/1708.05123.pdf

交叉网络

交叉网络:以有效地方式应用显式特征交叉,由多个交叉层组成

cross_network_cross_layer

  • $x_l$:第$l$交叉层输出
  • $w_l, b_l$:第$l$交叉层参数
  • 借鉴残差网络思想

    • 交叉层完成特征交叉后,会再加上其输入
    • 则映射函数$f(x_l, w_l, b_l)$即拟合残差
  • 特征高阶交叉

    • 每层$x_0 x_l^T$都是特征交叉
    • 交叉特征的阶数随深度$l$增加而增加,最高阶为$l+1$
  • 复杂度(资源消耗)

    • 随输入向量维度、深度、线性增加
    • 受益于$x_l^T w$为标量,由结合律无需存储中间过程矩阵

Nueral Factorization Machine

NFM:用带二阶交互池化层的DNN替换FM中二阶交叉项,提升FM的 非线性表达能力

  • $f_{DNN}(x)$:多层前馈神经网络,包括Embedding LayerBi-Interaction LayerHidden LayerPrediciton Layer
  • $h^T$:DNN输出层权重

模型结构

nfm_structure

Embedding Layer

全连接网络:将每个特征映射为稠密向量表示

  • $v_i$:$k$维embedding向量
  • 只需要考虑非0特征,得到一组特征向量
  • 特征向量会乘以特征值以反映真实值特征 (一般embedding特征取0/1,等价于查表)

Bi-Interaction Layer

BI层:将一组embedding向量转换为单个向量

  • $\odot$:逐元素乘积
  • 没有引入额外参数,可在线性时间$\in O(kM_x)$内计算
  • 可以捕获在低层次二阶交互影响,较拼接操作更 informative,方便学习更高阶特征交互
  • 将BI层替换为拼接、同时替换隐层为塔型MLP(残差网络) 则可以得到wide&deepDeepCross
  • 拼接操作不涉及特征间交互影响,都交由后续深度网络学习 ,实际操作中比较难训练

Hidden Layer

隐层:普通多层嵌套权重、激活函数

  • $l=0$没有隐层时,$f_{\sigma}$原样输出,取$h^T$为 全1向量,即可得FM模型

Attentional Factorization Machines

AFM:引入Attention网络替换FM中二阶交互项,学习交互特征的 重要性,剔除无效的特征组合(交互项)

  • $\varepsilon$:隐向量集,同上
  • $p^T$:Attention网络输出权重

模型结构

afm_structure

Pair-Wise Interaction Layer

成对交互层:将m个embedding向量扩充为$m(m-1)/2$个交互向量

  • $R_X = {(i,j) | i \in X, j \in X, j > i }$
  • $v_i$:$k$维embedding向量

Attention-based Pooling

注意力池化层:压缩交互作用为单一表示时,给交互作用赋不同权重

  • $a{i,j}$:交互权重$w{i,j}$的注意力得分
  • $\odot$:逐元素乘积
  • 考虑到特征高维稀疏,注意力得分不能直接训练,使用MLP attention network参数化注意力得分

    • $W \in R^{t*k}, b \in R^t, h \in R^T$:模型参数
    • $t$:attention network隐层大小

Deep Interest Network

DIN:融合Attention机制作用于DNN

模型结构

din_stucture

activation unit

激活单元

  • 相较于上个结构仅多了直接拼接的用户、上下文特征 din_stucture_comparision

模型训练

Mini-batch Aware Regularization

  • 以Batch内参数平均近似$L_2$约束
  • $W \in R^{K * M}, W_i$:embedding字典、第$i$embedding 向量
  • $K, M$:embedding向量维数、特征数量
  • $B, B_j$:batch数量、第$j$个batch
  • 则参数迭代

Data Adaptive Activation Function

PReLU在0点处硬修正,考虑使用其他对输入自适应的函数替代,以 适应不同层的不同输入分布

Deep Interest Evolution Network

DIEN:引入序列模型AUGRU模拟行为进化过程

模型结构

dien_structure

  • Interest Extractor Layer:使用GRU单元建模历史行为依赖 关系

? 关系

Vector

向量

  • 线性组合
  • 向量空间
  • 空间的基:向量空间的一组基是张成该空间的一个线性无关向量集
  • 线性相关

vector_rules_for_addition_and_scaling

向量点积

  • 向量点积性质

    • 向量的数乘等比例影响点积,则可为每个向量找到共线单位向量满足 $u \cdot u=1$

      vector_dot_scaling

    • 点积等同于向量 $b$ 左乘矩阵 $a^T$,即把向量 $b$ 压缩(线性变换)至向量 $a$ 方向上

      vector_dot_as_matrix_production

  • 点积 $a \cdot b$ 与投影关系(假设向量 $a$ 为单位向量)

    • 投影,即将向量 $b$ 线性变换 至 $a$ 方向上的标量

      • 则投影可以用 $1 * n$ 矩阵表示
      • 投影代表的矩阵则可通过利用基向量的变换结果求解

      vector_projection_as_transformer

    • 向量 $a$ 本身作为单位向量

      • 坐标轴上单位向量与 $a$ 的内积即为 $a$ 该方向分量,也即 $a$ 在该轴上投影
      • 由对称性显然,坐标轴在 $a$ 方向投影等于 $a$ 在轴方向投影
      • 则投影到向量 $a$ 代表的线性变换矩阵即为 $a^T$

      vector_dot_projection_duality

    • 扩展到一般情况

      • 考虑标量乘法对点积影响,坐标轴上向量与任意向量 $a$ 内积等价于投影
      • 投影是线性变换,则对空间一组基的变换可以推导到空间中任意向量 $b$
  • 高维空间到标量的线性变换与空间中一个向量对应,即应用线性变换等价于同该向量点积 vector_dot_as_matrix_production

点积用途

  • 向量证明基本都是都转换到点积上
    • 正定:行列式恒>0
    • 下降方向:内积<0
    • 方向(趋于)垂直:内积趋于0

求和、积分、点积、卷积

连续(函数) 离散(向量)
单元累计 积分:按值出现频率加权求和 求和:向量视为分段函数积分
二元累计 卷积:连续卷积 点积:离散卷积的特殊情况,即仅向量对应位置分量乘积有定义
  • 卷积:累计中各点的值变为需累计的值,即二次累计

向量叉积

vector_cross_formula

  • 向量叉积意义

    • 向量叉积即寻找向量(到标量的线性变换),满足与其点积结果为张成的体积

      vector_cross_as_volume

    • 考虑点积性质,则向量叉积的方向与向量构成超平面垂直、模为超平面大小

      vector_cross_direction

一些规定

  • 正交方向:向量空间 $R^n$ 中 $k, k \leq n$ 个向量 $q^{(1)}, \cdots, q^{(k)}$ 两两正交,则称其为 $k$ 个正交方向,若满足所有向量非 0,则称为 $k$ 个非 0 正交方向

  • 向量左右

    • 左侧:向量逆时针旋转 $[0, \pi]$ 内
    • 右侧:反左侧

矩阵

  • 矩阵(乘法):对向量的变换

    • 对 $m * n$ 矩阵,即将 $n$ 维空间映射至 $m$ 维空间
  • 矩阵相关概念

    • (矩阵)秩:空间维数
    • (矩阵)零空间/核:变换(左乘矩阵)后落在原点的向量的集合

    matrix_null_space

  • 线性变换:保持空间中坐标轴仍为直线且原点保持不变的变换
  • 此处若无特殊说明,向量均以列向量作为基础

特殊矩阵

  • 其中正交矩阵、三角阵、对角阵也被成为因子矩阵
  • Orthogonal Matrix 正交矩阵:和其转置乘积为单位阵的方阵

    • 左乘正交矩阵几何意义:等价于旋转

      orthogonal_matrix_geo

    • 酉矩阵/幺正矩阵:$n$ 个列向量是 $U$ 空间标准正交基的 $n$ 阶复方阵,是正交矩阵往复数域上的推广
  • Diagonal Matrix 对角阵:仅对角线非0的矩阵

    • 左乘对角阵矩阵几何意义:等价于对坐标轴缩放

      diagonal_matrix_geo

  • Triangular Matrix 上/下三角矩阵:左下/右上角全为0的方阵

    • 三角阵是高斯消元法的中间产物,方便进行化简、逐层迭代求解线性方程组
    • 左乘上三角阵几何意义:等价于进行右上切变(水平斜拉)

      upper_triangular_matrix_geo

    • 左乘下三角阵几何意义:等价于进行左下切变(竖直斜拉)

      lower_triangular_matrix_geo

  • Transposation Matrix 置换矩阵:系数只由 0、1 组成,每行、列恰好有一个 1 的方阵

矩阵常用公式

Sherman-Morrison 公式

  • 设A是n阶可逆矩阵,$u, v$均为n为向量,若 $1 + v^T A^{-1} u \neq 0$,则扰动后矩阵$A + u v^T$可逆

矩阵乘法

  • 矩阵乘法

    • 向量左乘矩阵:即是对向量进行变换

      matrix_as_transformer

    • 矩阵乘积:复合变换

      matrix_production

  • 矩阵乘法应按照从右往左阅读,右侧矩阵为输入、左侧矩阵为变换(向量默认为列向量时)

Affline Transformation

仿射变换:对向量空间进行线性变换、平移得到另一个向量空间

affline_transformation

  • $y \in R^n, x \in R^n$
  • $A \in R^{n * n}$:可视为产生旋转、放缩
  • $b \in R^n$:可视为产生平移
  • 仿射变换可以理解为:放缩、旋转、平移

  • 从仿射变换的角度,对向量空间进行仿射变换

    • $n+1$ 对变换前、变换后向量坐标即可以求解仿射变换的全部参数
    • 变换后的向量之间仍然保留某种相关性,所以 $n+1$ 对向量坐标可以完全确定仿射变换
  • 从仿射变换几何含义,将向量空间中向量统一变换

    • $n+1$ 个不共线 $n$ 维向量即唯一确定n维空间
    • 若所有向量变换均遵循同一“线性”变换规则,即进行相同放缩、旋转、平移,则这样的变换可以使用仿射变换表示
  • 说明

    • $n$ 变换前、变换后向量坐标可以求解 $A$(不考虑 $b$),但第 $n+1$ 对向量坐标未必满足 $A$ 变换
    • 若 $n+2$ 对向量坐标不满足 $(A|b)$ 的解,则表示不是进行仿射变换

Perspective Transformation

透视变换:将向量空间映射到更高维度,再降维到另一向量空间

perspective_transformation

  • $P \in R^{(n+1) (n+1)}, A \in R^{n n}$
  • $x \in R^n, y \in R^{n+1}$:这里默认$x$第$n+1$维为1
  • $c$:可视为产生透视,若其为0向量,则退化为仿射变换
  • $p_{n+1,n+1}$:可视为决定透视放缩,所以若是已确定新向量空间的“位置”,此参数无效,即 $n+2$ 对向量坐标即可求解变换
  • 透视变换虽然是向量空间变换至另一向量空间,但仍然存在一个透视“灭点”,作为所有透视线的交点

    • 对平面成像而言,“灭点”是成像平面、视角决定
  • 变换后 $y$ 维数增加,一般会再次投影、缩放回原维度空间,如原向量空间 $(R^n,1)$

  • 仿射变换可以视为是新的向量空间和原始空间“平行”的透视变换特例

变换矩阵求解

  • 考虑变换后再次缩放回更低维 $(R^n,1)$ 向量空间
  • $\gamma$:变换后向量缩放比例
  • 可解性
    • 共 $n+2$ 对变换前、后向量坐标,即 $n*(n+2)$ 组方程
    • 对每对向量,其中 $n$ 组方程如上可以看出是齐次方程组,不包含常数项
    • 则对 $P \in R^{(n+1) * (n+1)}$ 中除 $p_{n+1,n+1}$ 其他项均可被其比例表示(不含常数项)
  • 当然 $p_{n+1,n+1}$ 可以置 1 参加运算,不影响结果

Determinant

  • 矩阵行列式几何意义:线性变换对空间的拉伸比例

    • 行列式绝对值:拉伸的比例的绝对大小
      • 行列式为 0 时则表示空间降维
      • 则显然应有 $det(M_1 * M_2) = det(M_1) det(M_2)$
    • 行列式正负号:拉伸的方向

    matrix_determinant_as_stretch

  • 矩阵行列式的用途

    • 行列式为 0 意味着矩阵表示降维变换,则对应线性方程组仅在方程组右侧在矩阵张成空间内,即扩展矩阵秩不增时有解

特别的

  • $2 * 2$ 矩阵 $\begin{vmatrix} a & b \ c & d \end{vmatrix} = ad - bc$

    • $a, d$ 分别表示 $(1,0)$、$(0,1)$ 正向放缩比例
    • 而 $b, c$ 则相应的为逆向放缩比例

    matrix_2_2_determinant_calculation

  • 二维三点:行列式绝对值为三点构成三角形面积两倍

    • $q_3$ 位于 $\overrightarrow{q_1q_2}$ 左侧:行列式大于0
    • $q_3q_1q_2$ 共线:行列式值为 0
  • 三维三点:行列式为三个向量张成的平行六面体体积

Eigen ValueEigen Vector

  • 矩阵(变换)特征向量、特征值几何意义

    • 特征向量:在线性变换后仍然在自身生成空间中,即保持方向不变,仅是模变化的向量
    • 特征值:对应特征向量模变化的比例
  • 特殊变换中的特征向量、特征值情况

    • 旋转变换:特征值为 $\pm i$,没有特征向量,即特征值为复数表示某种旋转
    • 剪切变换($\begin{vmatrix} A^{‘} & 0 \ 0 & 1 \end{vmatrix}$$:必然有特征值为 1,且对应特征向量在坐标轴上
    • 伸缩变换($\lambda E$):所有向量都是特征向量
  • 矩阵对角化

    • 矩阵对角化:即寻找一组基,使得线性变换对该组基向量仅引起伸缩变换
    • 定理:当且仅当 $n$ 阶矩阵 $A$ 有 $n$ 个线性无关的特征向量时,其可以对角化
      • 即变换后有 $n$ 个线性无关向量在自身生成空间中
      • 也即矩阵对应变换为线性变换

线性方程组

Gaussian Elimination

高斯消元法:初等变换n个线性方程组为等价方程组,新方程组系数矩阵为上三角矩阵

  • 三角系数矩阵可以方便的递推求解
  • 初等变换可将系数矩阵变换为上三角矩阵,而不影响方程解

参考资料

Matrix Derivative/Matrix Differential

矩阵求导/矩阵微分

Layout Conventions

矩阵求导:在矩阵空间的多元微积分

  • numerator layout:分子布局,微分分子的维数决定微分结果 的高维度结构(行优先,如:微分矩阵行数等于分子维数)
  • denominator layout:分母布局,微分分母的维数为微分结果 的高维度结构(行优先)
  • 两种布局方式相差转置
  • 与微分分子、分母为行、或列向量无关 (即当微分分子、分母为向量时,行、列向量结果相同,只与 维度有关)
  • 此布局模式仅讨论简单单因子微分时布局模式,复合多因子 应使用维度分析考虑 (即若严格按照计算规则,结果应该满足布局)

matrix_derivative_results

  • 数分中Jaccobi行列式采用分子布局,以下默认为分子布局

维度分析

维度分析:对求导结果的维度进行分析,得到矩阵微分结果

  • 维度一般化:将向量、矩阵维度置不同值,便于考虑转置
  • 拆分有关因子:利用求导乘法公式(一般标量求导)拆分 因子,分别考虑各因子微分结果
  • 变换微分因子、剩余因子(可能有左右两组),以满足矩阵运算 维度要求
    • 微分因子:按布局模式考虑维度、不转置
    • 剩余因子:为满足最终结果符合维度布局,考虑转置
    • 若维度一般化也无法唯一确定剩余因子形式,再考虑行、列 內积对应关系
  • 考虑到矩阵乘法定义(左乘矩阵行数为乘法结果行数),则在 分子布局(分子行优先),简单微分中若微分因子为右乘矩阵、 剩余因子为左乘矩阵,则类似标量系数在前求微分,否则 结果需转置

  • 考虑$\frac {\partial x^T A x} {\partial x}$,其中 $A \in R^{n*n}, x \in R^n$

  • 维度一般化:$\frac {\partial u^T A v} {\partial x}$, 其中$A \in R^{a * b}, x \in R^n$

  • 拆分有关因子,变换微分、剩余因子

  • 则有

关于标量导数

标量对标量

标量$y$对标量$x$求导:$\frac {\partial y} {\partial x}$

matrix_derivative_scalar_by_scalar_vector_involved

matrix_derivative_scalar_by_scalar_matrix_involved

向量对标量

向量$Y$关于标量$x$求导($Y$为行、列向量均如此)

matrix_derivative_vector_by_scalar

矩阵对标量

矩阵$Y$关于标量$x$求导

matrix_derivative_matrix_by_scalar

关于向量导数

标量对向量

标量$y$关于向量$X$求导

matrix_derivative_scalar_by_vector matrix_derivative_scalar_by_vector

向量对向量

向量$Y$关于向量$X$求导

matrix_derivative_vector_by_vector

  • $Y$、$X$为行、列向量均如此

关于矩阵导数

标量对矩阵求导

matrix_derivative_scalar_by_matrix_1 matrix_derivative_scalar_by_matrix_2 matrix_derivative_scalar_by_matrix_3 matrix_derivative_scalar_by_matrix_4

微分

微分形式

matrix_differential

导数、微分转换

matrix_derivative_differential_conversion

组合问题

总述

  • 寻找(明确地、隐含地)寻找一个组合对象

    • 排列
    • 组合(整数规划)
    • 子集
  • 这些对象能满足特定条件并具有想要的属性

    • 价值最大化
    • 成本最小化

特点

无论从理论角度、实践角度而言,组合问题是计算领域最难的问题

  • 随着问题规模增大,组合对象数量增长极快

  • 没有一种已知算法,能在可接受的时间范围内,精确的解决 大部分组合问题,且被普遍认为不存在(未被证实)

  • 有些组合问题有高效求解算法,是幸运的例外

从更抽象的角度看,旅行商问题、图填色问题也是组合问题的特例

思路

  • exhaustive search:(穷举搜索)是简单的蛮力方法

    • 生成问题域每个元素
    • 选出满足问题约束的元素
    • 最后寻找期望元素
  • 因为可能性太多,基本可能从动态规划方向着手

背包问题

给定n个重量为$w_1, w_2, \cdots, w_n$价值为$v_1, v_2, …, vn$ 的物品和承重为$W$的背包,求能够装进背包的最有价值物品子集

蛮力算法

算法

  • 考虑所有n个物品的子集
  • 计算每个子集重量,找出可行子集
  • 找到可行子集中价值最大子集

经典自底向上动态规划

依次求解所有子问题、记录

算法

设$F(i, j)$为由前i个物品、承重量为j的背包得到最优解

  • 不包括第i个物品的子集中,最优子集价值为$F(i-1, j)$

  • 包括第i个物品的子集中,最优子集是由该物品和前i-1个物品 中能够放进承重量为$j-w_i$的背包的最优子集组成,总价值为 $v_i + F(i-1, j-w_i)$

则递推式为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Knapsack(Ws[1..n], Vs[1..n], W)
// 动态规划求解背包问题
// 输入:Ws[1..n]物品重量、Vs[1..n]物品价值,W背包承重
// 输出:背包能够装载的最大价值
for i = 0 to n do
F[i, 0] = 0
for j = 0 to W do
F[0, j] = 0
for i = 1 to n do
if j >= Ws[i]:
F[i, j] = max(F[i-1, j], Vs[i] + F[i-1, j-Ws[i])
// 这里用于比较的F值,在之前的循环中已经确定
else
F[i, j] = F[i-1, j]
return F[n, W]

算法特点

  • 算法效率
    • 时间效率$\in \Theta(nW)$
    • 空间效率$\in \Theta(nW)$
    • 回溯求最优解组成效率$\in O(n)$

自顶向下动态规划

算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MFKnapsack(i, j)
// 背包问题的记忆功能方法
// 输入:i考虑的物品数量,j背包承重
// 输出:前i个物品的最优可行子集
// Ws[1..n]、Vs[1..n]、F[0..n, 0..W]作为全局变量
for i = 0 to n do
F[i, 0] = 0
for j = 0 to W do
F[0, j] = 0
if F[i, j] < 0
if j < Ws[i]
value = MFKnapsack(i-1, j)
else
value = max(MFKnapsack(i-1, j),
Vs[i] + MFKnapsack(i-1, j - Ws[i]))
F[i, j] = value
return F[i, j]

算法特点

  • 算法效率
    • 相较于经典自底向上算法,时间效率提升常数因子,但是 效率仍然$\in \Theta(nW)$
    • 相较于自底向上算法空间优化版版本而言,空间效率较低

分支界限法

  • 不失一般性认为,物品按照价值重量比$v_i / w_i$降序排列, 可以简化问题

  • 第i层节点上界可取$ub = v + (W - w)(v{i+1} / w{i+1})$

    • $v$:已选物品价值
    • $W - w$:背包剩余承重量
    • $v{i+1}/w{i+1}$:剩余物品单位单位最大价值
  • 更紧密、复杂的上界 $ub = v + \sum{k=i+1}^K v_k + (W - \sum{k=1}^K w_k)v_K / w_K$

算法

特点

  • 分支界限法求解背包问题中,每个中间节点都是给定物品的子集 ,是背包问题的可行解

背包问题近似算法

贪婪算法

算法

  • 对物品按照价值重量比$r_i = v_i / w_i, i=1,2,\cdots,n$ 降序排列

  • 重复以下直到有序列表中不留下物品

    • 如果列表中当前物品可以装入,则放入背包并处理下个物品
    • 否则忽略,直接处理下个物品

特点

  • 原始的贪婪算法解的精确率没有上界

    • 考虑:承重量为$W$背包,如下物品

      |物品|重量|价值|价值/重量| |——-|——-|——-|——-| |1|1|2|2| |2|w|w|1|

    • 则近似解精确率$r(s_a) = W/2$无上界

  • 增强版贪婪算法:取贪婪算法解、能装载的价值最大单个物品 价值中较大者

    • 此改进的性能比可以降到2

近似方案

背包问题的存在多项式时间的系列算法,可以调节算法中参数$k$ 得到满足任意预定义精确率的近似解$s_a^{(k)}$

Sahni方案

  • 生成所有小于k个物品的子集
  • 向贪婪算法一样,向每个能装入背包的子集添加剩余物品中 价值重量比最大者
  • 得到最有价值的修改后子集作为结果返回

Fully Polynomial Scheme

完全多项式方案

特点

  • Sahni方案理论意义远大于实用价值

    • 其效率$\in O(kn^{k+1})$是n的多项式函数
    • 但是是k的指数函数
  • 完全多项式方案更加复杂,但没有效率为参数k指数的缺陷

Bin-Packing Problem

装箱问题:给定n个问题,大小都是不超过1的有理数,将其装进数量 最少的大小为1的箱子中

Graph-Coloring Problem

图着色问题:对给定图,求使得任何两个相邻顶点颜色都不同时, 需要分配给图顶点的颜色数量

划分问题

给定n个正整数${a_i, i=1,2,\cdots},判定能够将其划分为和相等 的两个子集

Subset-Sum Problem

给定n个正整数${a_i, i=1,2,\cdots}$,求子集$S$和为正整数d

回溯算法

约束

  • 其中$s$为考虑考虑第i+1元素时,前i个元素选情况下的和

算法

  • 假设集合元素按升序排列

  • 根节点为未选择任何元素

  • 依次考虑将元素$a_i$添加进子集S中

    • 若满足约束条件、下个元素未考虑,继续考虑
    • 否则回溯,重新考虑父母节点
  • 直到找到子集满足和为d,或第二次回溯到根节点

特点

币值最大化

给定一排n个硬币,币值为正整数$c_i, i=1, 2, \cdots, n$(币值 不唯一),在原始位置不相邻的情况下,使得所选硬币总金额最大

动态规划

算法

记最大可选金额为$F(n)$将可行规划分为两组

  • 包含最后一枚硬币,最大金额为$c_n + F(n-2)$
  • 不包含最后一枚硬币,最大金额为$F(n-1)$

则递推方程为

1
2
3
4
5
6
7
8
9
CoinRow(C[1..n])
// 在所选硬币不相邻,从一排硬币中选择最大金额
// 输入:C[1..n]保存n个硬币面值
// 输出:可选硬币最大金额
F[0] = 1
F[1] = C[1]
for i = 2 to n do
F[i] = max(C[i] + F[i-2], F[i-1])
return F[n]

算法特点

  • 时间效率$\in \Theta(n)$
  • 空间效率$\in \Theta(n)$

找零问题

需找零金额为n,最少需要多少面值为$d_1 < d_2 < \cdots < d_n$ 的硬币,考虑$d_1 = 1$的一般情况

动态规划

算法

记$F(n)$为总金额为n的数量最少的硬币数目,定义$F(0)=0$

  • 得到n的途径只能是在$n-d_j$上加入面值为$d_j$的硬币,其中 $j=1, 2, \cdots, m$,且$n \geqslant d_j$

  • 考虑所有满足条件$d_j$,选择使得且$F(n - d_j)$最小者

则递推式有

1
2
3
4
5
6
7
8
9
10
11
12
13
ChangeMaking(D[1..m], n)
// 动态规划法求解找零问题,d_1 = 1
// 输入:正整数n,币值数组D[1..m]
// 输出:总金额为n的最少硬币数目
F[0] = 0
for i = 1 to n do
tmp = \infty
j = 1
while j <= m and i >= D[j] do
tmp = min(F[i-D[j], tmp)
j += 1
F[i] = tmp + 1
return F[n]

硬币收集问题

在n * m格木板中存放有硬币,每格硬币最多一个,寻找左上角(1,1) 到右下角(n, m)路径,使得能够收集尽可能多硬币,每次只能向下、 向右移动

动态规划

算法

记$F(i, j)$为截止到第i行、第j列单元格$(i, j)$能够收集到最大 硬币数

  • 单元格$(i, j)$只能经由$(i-1, j)$、$(i, j-1)$达到
    • 初值1:假定$F(0, j)=0, F(i, 0)=0$
    • 初值2;递推求解$F[1, j], F[i, 1]$

则递推方程为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CoinCollection(C[1..n, 1..m])
// 动态规划算法求解硬币收集问题
// 输出:矩阵C[1..n, 1..m]表示单元格是否有硬币
// 输出:在单元格[n, m]能够收集到的最大硬币数
F[1, 1] = C[1, 1]
for j = 2 to m do
F[1, j] = F[1, j-1] + C[1, j]
// 初始化首行
for i = 2 to n do
F[i, 1] = F[i-1, 1] + C[i, 1]
for j = 2 to n do
// 先填列
F[i, j] = max(F[i-1, j], F[i, j-1]) + C[i, j]
return F[n, m]

算法特点

  • 算法效率
    • 计算每个单元格$F[i, j]$花费常量时间,所以算法时间 效率$\in \Theta(nm)$
    • 算法空间效率$\in Theta(nm)$

n皇后问题

将n个皇后放在$n * n$的棋盘上,使得皇后之间不能相互攻击

回溯算法

算法

算法特点

说明

  • $n \geqslant 4$的n皇后问题都可以在线性时间内求解,已经 找到一些可选公式,用于计算n皇后的位置

生成排列

生成集合排列问题可以抽象为生成${1,\cdots,n}$所有$n!$个排列的 问题

  • 假设$(n-1)!$个排列已经生成
  • 则可以把n插入n-1个元素中可能的n个位置中去,得到较大规模 问题的解

最小变化

  • 在元素上使用小箭头标记其方向: $\overleftarrow 1 \overleftarrow 2 \overleftarrow 3$
  • 如果元素k的箭头指向相邻的较小元素,称在此排列中是移动的

减常量法

1
2
3
4
5
6
7
8
9
10
JohnsonTrotter(n)
// 生成排列
// 输入:正整数n
// 输出:{1..n}所有排列列表
将第一个排列初始化
while 存在一个移动元素 do
求最大的移动元素k
把k和其箭头指向的相邻元素互换
调转所有大于k的元素的方向
将新排列添加到列表中

算法特点

  • JsonTrotter是生成排列最有效算法之一,其运行时间和排列 数量成正比,即$\in \Theta(n!)$

字典序

减常量法

  • 找到序列中最长递减后缀 $a{i+1} > a{i+2} > \cdots > a_{n}$
  • 将$a_i$同序列中大于其的最小元素交换
  • 将新后缀颠倒,使其变为递增序列,加入列表中
1
2
3
4
5
6
7
8
9
10
11
12
13
LexicographicPermute(n):
// 以字典序产生排列
// 输入:正整数n
// 输出:字典序下,所有排列列表
初始化第一个排列为12...n
while 最后一个排列有两成连续升序元素 do
找出使得a_i < a_{i+1}的最大的i
// 即找到最长递减后缀
找到使得a_i < a_j的最大索引
// 即在后缀中大于其的最小元素索引
交换a_i和a_j
将a_{i+1}和a_{n}的元素反序
将新排列添加至列表中

生成子集

集合$A[a_1, \cdots, a_n}$的所有子集可以分为两组

  • 包含$a_n$:${a_1, \cdots, a_n}$的所有子集
  • 不包含$a_n$的子集:把$a_n$添加进${a_1, \cdots, a_n}$子集 获得
  • 同样的可以把集合抽象为位串,每个位串表示一个子集

减常量算法

字典序

按生成字典序(位串字典序)生成子集

  • 将正序${1..n}$转换为二进制位串
  • 依次按照二进制位串生成子集
    • 位串中为1表示对应元素在子集中

挤压序

按照挤压序(位串挤压序)生成子集

  • 将倒序{n..1}转换为二进制位串
  • 依次按照二进制位串生成子集
    • 位串中为1表示对应元素在子集中

Squashed Order:所有包含$aj$子集必须紧排在所有包含 $a_1, \cdots, a{j-1}$的子集之后

最小变化

每个子集和其直接前趋之间,要么增加一个元素,要么减少一个元素

  • 即每个位串和直接前趋之间仅仅相差一位
1
2
3
4
5
6
7
8
9
10
11
12
13
BRGC(n)
// 递归生成二进制反射格雷码
// 输入:正整数n
// 输出:所有长度为n的格雷码位串列表
if n == 1
表L包含位串0、位串1
else
调用BRGC(n-1)生成长度为n-1的位串列表L1
表L1倒序后复制给表L2
0加到表L1每个位串前
1加到表L2每个位串前
把表L2添加到表L1后得到表L
return L

球、桶问题

n个球放入m个桶中情况数量

球同、桶不同、无空桶

  • 插板法

球同、桶不同、可空桶

  • 插板法:可以假设m个桶中已经放好球,即m+n个相同球放入m个 不同桶、不允许空桶

球同、桶同、可空桶

  • 动态规划

  • 球数$i \geq j$桶数时递推式

    • 若有桶均包含球:剩余球可能性$dp[i-j][j]$
    • 若存在桶不包含球:剔除一个桶不影响总数
    • 没有其余情况

球同、桶同、无空桶

  • 动态规划:由$dp_4$得到

球不同、桶同、无空桶

  • 第二类斯特林数

  • 球数$i>j$桶数时递推式

    • 考虑前$i-1$球已经占满所有桶,则最后球放入任何桶都是 新情况
    • 考虑前$i-1$只占满$j-1$个桶,则最后球必须放入空桶
    • 其他情况不可能

球不同、桶同、可空桶

  • 球不同、桶同、无空桶情况下枚举不空桶数目

球不同、桶不同、无空桶

  • 球不同、桶同、无空桶情况下对桶排序

球不同、桶不同、可空桶

  • 每个球都有m中选择:$m^n$

Stacked Generalization

Stacked Generalization

堆栈泛化:使用多种模型分别训练训练,将其结果叠加作为下层 模型的输入,最终得到预测输出

stacking

  • 属于异源集成模型,可以视为

    • 复合函数

      stacing_workflow_2

    • 短路网络

      stacing_workflow_1

  • 从某种意义上,复杂模型都是stacking

思想

  • 不同模型侧重于获取数据不同方面的特征

    • 使用基学习器抽取数据特征进行表示学习,提取不同角度的 数据高维特征
    • 考虑到使用全量训练数据训练、预测作为下层模型输入会 导致过拟合,可使用K折交叉验证避免过拟合
    • 有些基学习器只使用适合其部分特征训练
      • GBDT、DNN适合低维稠密特征
  • 元学习器组合多个基学习器的输出

    • 从数据高维特征学习数据模式,具有更好的泛化能力,避免 过拟合

算法

  • 输入:模型$M1, M_2, \cdots, M_d$、训练特征:$X{n*m}$、 训练标签$Y_{n}$、测试特征$X^{‘}$
  • 输出:stacking模型、预测标签
  • 将训练数据K折划分,对第$i$轮划分

    • 使用模型$M1, M_2, \cdots, M_d$分别在相应训练集 $[X[:n_i,:], X[n{i+1}:,:]]$、 $[Y[:ni], Y[n{i+1}:]]$上训练
    • 在相应验证集$X[ni:n{i+1}, :]$上验证、并记录验证 结果
    • 将验证集验证结果叠加得到部分样本新特征 $N[ni: n{i+1}, d]$
  • 将K轮划分得到的部分新特征拼接得到训练集的完整新特征 $N_{n * d}$,将新特征作为输入,训练下层模型,得到最终 stacking模型

  • 将测试特征如上作为输入经过两层模型预测,得到最终预测结果

  • 以上以2层stacking为例,有深层stacking

常用模型

基学习器

  • 交叉项、原始特征本身也可以视为线性基学习器学习到的特征
  • 具体模型参见 ml_specification/rec_system/ctr_stacking_models

GBDT

gbdt_in_stacking

  • 各树中各节点对应元学习器一维输入特征
  • 适合低维稠密通用特征,对输入特征分布没有要求

  • GBDT树根据熵增益(Gini系数增益)划分节点,每条路径 都代表一定区分能力

    • 以叶子节点(路径)作为特征,相当于自动进行特征 转换、组合、选择、离散化,得到高维组合特征
  • GDBT相较于单棵树、或RF更适合stacking

    • 单棵树表达能力弱,无法表达多个有区分性特征组合, 集成模型可将样本映射为多个特征
    • GBDT拟合残差意味着各树对样本区分度不同,对各特征 区别对待更合理

DNN

  • 适合普通稠密特征、embedding特征
  • 模型表达能力强,能抽取有良好分布数据的深层次特征,提高 模型准确性、泛化能力
  • 容易扩充其他类别特征,如:图片、文字

元学习器

  • LR

    • 适合低维稀疏特征,可对所有特征离散化以引入非线性
  • FM

    • 适合低维稀疏特征
    • LR基础上自动组合二阶交叉项
  • Linear:训练模型、对训练结果线性加权

?