数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
六、序列最小最优化方法
支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有多种算法可以用于这一问题的求解。
当训练样本容量非常大时,这些算法往往非常低效。而序列最小最优化(
sequential minimal optimization:SMO
)算法可以高效求解。SMO
算法的思路:若所有变量都满足条件,则最优化问题的解就得到了。
否则,选择两个变量的同时固定其他所有变量,针对这两个变量构建一个二次规划子问题。
这个二次规划子问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。
更重要的是,这个二次规划子问题可以通过解析的方法求解。
此时子问题有两个变量,至少存在一个变量不满足约束条件(否则就是所有变量满足条件了)。
假设其中一个是违反约束最严重的那个,另一个由约束等式自动确定: $ MathJax-Element-394 $ 。
SMO
算法将原始问题不断地分解为子问题并且对子问题求解,进而达到求解原问题的目的。整个
SMO
算法包括两部分:- 求解两个变量二次规划的解析方法。
- 选择变量的启发式方法。
6.1 子问题的求解
假设选择的两个变量是 $ MathJax-Element-454 $ , 其他变量 $ MathJax-Element-396 $ 是固定的。
于是
$ \min_{\alpha_1,\alpha_2} L(\alpha_1,\alpha_2)=\frac 12 K_{11}\alpha_1^{2}+\frac 12K_{22}\alpha_2^{2}+\tilde y_1\tilde y_2K_{12}\alpha_1\alpha_2-(\alpha_1+\alpha_2)\\ +\tilde y_1\alpha_1\sum_{i=3}^{N}\tilde y_i\alpha_iK_{i1}+\tilde y_2\alpha_2\sum_{i=3}^{N}\tilde y_i\alpha_iK_{i2}\\ s.t.\quad \alpha_1\tilde y_1+\alpha_2\tilde y_2=-\sum_{i=3}^{N}\tilde y_i\alpha_i=\gamma\\ 0 \le \alpha_i \le C,i=1,2 $SMO
的最优化问题的子问题为:其中 $ MathJax-Element-397 $ 为常数, 且目标函数式中省略了不含 $ MathJax-Element-454 $ 的常数项。
6.1.1 取值范围约束
$ MathJax-Element-454 $ 的约束条件为:
当 $ MathJax-Element-409 $ 异号时, $ MathJax-Element-454 $ 位于直线 $ MathJax-Element-402 $ ,且在矩形范围内。矩形的长为 $ MathJax-Element-504 $ ,宽为 $ MathJax-Element-504 $ , 起始点坐标为
(0,0)
: 此时 $ MathJax-Element-490 $ 和 $ MathJax-Element-492 $ 的取值范围为:当 $ MathJax-Element-407 $ 时(上面那条线):
$ \gamma \le \alpha_2 \le C\\ 0\le\alpha_1\le C-\gamma $当 $ MathJax-Element-408 $ 时(下面那条线):
$ 0 \le \alpha_2 \le C-\gamma\\ \gamma\le\alpha_1\le C $
当 $ MathJax-Element-409 $ 同号时, $ MathJax-Element-454 $ 位于直线 $ MathJax-Element-411 $ ,且在矩形范围内。矩形的长为 $ MathJax-Element-504 $ ,宽为 $ MathJax-Element-504 $ , 起始点坐标为
(0,0)
:此时 $ MathJax-Element-454 $ 取值范围为:
- 当 $ MathJax-Element-431 $ 时:(上面那条线)
当 $ MathJax-Element-433 $ 时:(下面那条线)
$ 0 \le \alpha_2 \le \gamma\\ 0 \le \alpha_1 \le \gamma $
假设 $ MathJax-Element-490 $ 的最优解为 $ MathJax-Element-473 $ ,其初始可行解为 $ MathJax-Element-419 $ ; $ MathJax-Element-492 $ 的初始可行解为 $ MathJax-Element-421 $ 。
既然是初始可行解,则需要满足约束条件。因此有
$ |\alpha_1^{old}-\alpha_2^{old}|=\gamma,\quad \text{if } \tilde y_1\ne \tilde y_2\\ \alpha_1^{old}+\alpha_2^{old}=\gamma,\quad \text{if } \tilde y_1 = \tilde y_2 $假设 $ MathJax-Element-473 $ 的取值范围为 $ MathJax-Element-423 $ ,则有:
当 $ MathJax-Element-424 $ 时:
若 $ MathJax-Element-425 $ ,则 $ MathJax-Element-426 $ ;若 $ MathJax-Element-427 $ ,则 $ MathJax-Element-428 $ 。
根据:
$ \gamma=|\alpha_1^{old}-\alpha_2^{old}|=\begin{cases} \alpha_2^{old}-\alpha_1^{old},&\text{if} \;\alpha_2^{old}\ge \alpha_1^{old}\\ \alpha_1^{old}-\alpha_2^{old},&\text{else} \end{cases} $则有: $ MathJax-Element-429 $ 。
当 $ MathJax-Element-430 $ 时:
若 $ MathJax-Element-431 $ ,则 $ MathJax-Element-432 $ ;若 $ MathJax-Element-433 $ , 则 $ MathJax-Element-434 $ 。
根据 $ MathJax-Element-435 $ ,则有: $ MathJax-Element-436 $
6.1.2 解析解
令 $ MathJax-Element-437 $ 。它表示解得 $ MathJax-Element-438 $ 参数之后,对 $ MathJax-Element-439 $ 的预测值。预测值的正负代表了分类的结果。
令 $ MathJax-Element-440 $ 。
- $ MathJax-Element-496 $ 表示 $ MathJax-Element-442 $ 的预测值与真实输出 $ MathJax-Element-443 $ 之差。
- $ MathJax-Element-484 $ 表示 $ MathJax-Element-445 $ 的预测值与真实输出 $ MathJax-Element-446 $ 之差。
根据 $ MathJax-Element-447 $ ,将 $ MathJax-Element-448 $ 代入 $ MathJax-Element-449 $ 中。
求解 $ MathJax-Element-450 $ ,即可得到 $ MathJax-Element-490 $ 的最优解(不考虑约束条件):
$ \alpha_2^{new,unc}=\alpha_2^{old}+\frac{\tilde y_2(E_1-E_2)}{\eta} $其中:
- $ MathJax-Element-452 $
- $ MathJax-Element-453 $ 中的 $ MathJax-Element-454 $ 分别为 $ MathJax-Element-465 $ (它们表示初始的可行解,用于消掉 $ MathJax-Element-456 $ )。
- $ MathJax-Element-452 $
将 $ MathJax-Element-457 $ 截断,则得到 $ MathJax-Element-473 $ 的解析解为:
$ \alpha_2^{new}=\begin{cases} H, & \alpha_2^{new,unc} \gt H\\ \alpha_2^{new,unc}, & L \le \alpha_2^{new,unc} \le H\\ L, & \alpha_2^{new,unc} \lt L \end{cases} $其中 $ MathJax-Element-465 $ 为初始可行解, $ MathJax-Element-473 $ 为最终解。
根据 $ MathJax-Element-461 $ ,以及 $ MathJax-Element-462 $ ,得到 $ MathJax-Element-466 $ :
$ MathJax-Element-464 $ 。
其中 $ MathJax-Element-465 $ 为初始可行解, $ MathJax-Element-466 $ 为最终解。
6.2 变量选择
SMO
算法在每个子问题中选择两个变量进行优化,其中至少一个变量是违反约束条件的。如果都不违反约束条件,则说明已经求解了。
6.2.1 外层循环
第一个变量的选择过程称为外层循环。
外层循环在训练样本中选择违反约束条件最严重的样本点,并将对应的变量作为第一个变量。
具体来讲,就是检验训练样本点 $ MathJax-Element-467 $ 是否满足约束条件(
$ \alpha_i=0 \Leftrightarrow \tilde y_ig(\mathbf {\vec x}_i)\ge 1\\ 0 \lt \alpha_i \lt C \Leftrightarrow \tilde y_ig(\mathbf {\vec x}_i)=1\\ \alpha_i=C \Leftrightarrow \tilde y_ig(\mathbf {\vec x}_i) \le 1 $KKT
条件):其中, $ MathJax-Element-524 $ 。
检验时:
- 外层循环首先遍历所有满足条件 $ MathJax-Element-469 $ 的样本点,即间隔边界上的支持向量点。
- 如果这些样本点都满足条件,再遍历整个训练集,检验是否满足条件。
6.2.2 内存循环
第二个变量的选择过程称为内层循环。
假设已经在外层循环中找到第一个变量 $ MathJax-Element-492 $ , 现在要在内层循环中找到第二个变量 $ MathJax-Element-490 $ 。第二个变量选择标准是希望能够使得 $ MathJax-Element-490 $ 有足够大的变化。
由前面式子可知, $ MathJax-Element-473 $ 依赖于 $ MathJax-Element-474 $ 。一种简单的做法是选择 $ MathJax-Element-490 $ ,使得对应的 $ MathJax-Element-476 $ 最大。因为 $ MathJax-Element-492 $ 已经确定, $ MathJax-Element-496 $ 也已经确定。
- 如果 $ MathJax-Element-496 $ 为正数,则选择最小的 $ MathJax-Element-508 $ 作为 $ MathJax-Element-484 $ 。
- 如果 $ MathJax-Element-496 $ 为负数,则选择最大的 $ MathJax-Element-508 $ 作为 $ MathJax-Element-484 $ 。
为了节省计算时间,可以将所有 $ MathJax-Element-508 $ 值保存在一个列表中。
特殊情况下,若内层循环找到的 $ MathJax-Element-490 $ 不能使得目标函数有足够的下降,则采用以下的启发式规则继续选择 $ MathJax-Element-490 $ :
- 遍历在间隔边界上的支持向量点,依次将其对应的变量作为 $ MathJax-Element-490 $ 试用,直到目标函数有足够的下降。
- 若还是找不到合适的 $ MathJax-Element-490 $ ,则遍历训练数据集寻找。
- 若还是找不到合适的 $ MathJax-Element-490 $ ,则放弃找到的 $ MathJax-Element-492 $ ,再通过外层循环寻求另外的 $ MathJax-Element-492 $ 。
6.2.3 参数更新
每次完成两个变量的优化后,都要重新计算 $ MathJax-Element-493 $ 。根据约束条件有:
当 $ MathJax-Element-494 $ 时: $ MathJax-Element-495 $ 。
代入 $ MathJax-Element-496 $ 的定义式有: $ MathJax-Element-497 $ 。
同样,当 $ MathJax-Element-498 $ 时有: $ MathJax-Element-499 $ 。
如果 $ MathJax-Element-500 $ 同时满足 $ MathJax-Element-501 $ ,则有: $ MathJax-Element-502 $
如果 $ MathJax-Element-503 $ 或者为 0,或者为 $ MathJax-Element-504 $ ,则 $ MathJax-Element-505 $ 区间内的数都可以作为 $ MathJax-Element-509 $ 。此时一个选择是:
$ b^{new}=\frac{b_1^{new}+b_2^{new}}{2} $
每次完成两个变量的优化后,需要更新对应的 $ MathJax-Element-508 $ 值。 $ MathJax-Element-508 $ 的更新要用到 $ MathJax-Element-509 $ 以及所有支持向量对应的 $ MathJax-Element-510 $ 。
6.3 SMO算法
SMO
算法:输入:
- 训练数据集 $ MathJax-Element-511 $ ,其中 $ MathJax-Element-512 $
- 精度 $ MathJax-Element-521 $
输出:近似解 $ MathJax-Element-514 $
算法步骤:
取初值 $ MathJax-Element-515 $ , $ MathJax-Element-516 $
选取优化变量 $ MathJax-Element-517 $ ,解析求解两个变量的最优化问题,求得最优解 $ MathJax-Element-518 $ ,更新 $ MathJax-Element-519 $ 为 $ MathJax-Element-520 $ 。
若在精度 $ MathJax-Element-521 $ 范围内满足停机条件:
$ \sum_{i=1}^{N}\alpha_i\tilde y_i=0\\ 0 \le \alpha_i \le C,i=1,2,\cdots,N\\ \tilde y_ig(\mathbf {\vec x}_i)=\begin{cases} \ge 1, & \alpha_i=0 \\ =1, & 0 \lt \alpha_i \lt C \\ \le 1, & \alpha_i = C \end{cases} $则退出迭代并令 $ MathJax-Element-522 $ ;否则令 $ MathJax-Element-523 $ ,继续迭代。
其中 $ MathJax-Element-524 $ 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论