nlp处理问题流程思路总结
概述:
经过一段时间对nlp课程的学习,对nlp处理流程思想有了一定的了解,具体处理过程为,遇到一个问题,先要把这个问题处理为一个数学问题(目标和约束条件);然后对这个数学问题判断是否为凸函数,是凸函数的话进行转换为Dual问题(所有问题默认为prinal问题),转换后进行判断与原问题(prinal问题)是否相同,如果相同进行查找相关工具处理,如果不同,需要评估两者最优解之间的差别有多大处理(gap),下面以svm为例进行简单说明。
问题描述:
假设有一批数据 d={(x_1 y_1 )……(x_n y_m )} y_i∈{-1 ,1}
约束条件 当w^T x_i+b ≥0 y_i=1 当w^T x_i+b <0 y_i=-1 可以改进为 (w^T x_i+b)≥0 ,给定一条分割线,它要离分割两遍样本距离最远(max mangin)假设数据线性可分
1.nlp问题转换成数学问题的思路
已知问题如图:
w向量方向垂直于wx+b =0决策边界这条线段(证明推导略),得到 x1=x2+λw (w^T x_1+b)= 1 (w^T x_2+b)= -1 mangin= | x_1- x_2| ,把以上公式进行简化为:
(w^T x_1+b)= 1 w^T( x_2+λw)+b= 1 wTx_2+λwTw+b= 1 求导λ= 2/(w^T w) 由 mangin= | x_1- x_2| 求导出 mangin=2/||w||
知道了mangin值就可以得出svm目标函数:最大化mangin maxminize 2/||w||
约束条件: w^T x_i+b ≥1 y_i=1 w^T x_i+b ≤-1 if y_i=-1
最小化目标函数可写成 minminize ||w||_2^2 约束条件: w^T x_i+b ≥1 y_i=1 w^T x_i+b ≤-1 y_i=-1
2.是否为凸函数判断方法
判断是否为凸函数有三种方法:
1)凸集定理方式,需要关注定义域和函数本身 在线段内部都属于凸集合,两个凸集的交集也是凸函数
2)求导一阶导数证明判断(梯度下降收敛结论时常使用的方式)
2)求导二阶导数证明判断
3.非凸函问题数处理过程
1)Naïve方法,存在问题是时间复杂度很高,会形成np hard的问题 这个问题也powerset,找到满足条件的集合终止
2)贪心算法 选择哪个集合不需要的去掉,但是不保证结果的最优化,无法选出不需要的集合是停止算法,最严谨的说法,就是利用此方法可以证明误差范围在哪,可以保证一定的准确率
3)把离散型的看做连续性的数进行处理
4)把非线性的部分转换成线性的方式,然后在进行近似解的处理
4.凸函数问题转换为Dual问题并进行处理
svm prinal问题表达,目标函数 minminize 1/2||w||_2^2 约束条件 y_i(w^T x_i+b)-1 ≥0 利用ktt条件写法改进 L= 1/2 ||W||_22+∑_(i=1)nλ_i [1-y_i (w^T x_i+b)] 约束条件: λ_i ≥0 ∀i λ_i [1-y_i (w^T x_i+b)] = 0 ∀i 1-y_i (w^T x_i+b) ≤0 ∀i
转换Dual问题:
w求导: σL/σw=W+∑_(i=1)^nλ_i (-y_i x_i)=∑_(i=1)^nλ_i y_i x_i =0
b求导: σL/σb=∑_(i=1)^nλ_i y_i =0
目标函数综合写成 -1/2∑_(i=1)n∑_(j=1)nλ_i λ_j y_i y_j x_ix_j+∑_(i=1)^nλ_i 约束条件 λ_i ≥0 ∀i ∑_(i=1)^nλ_i y_i x_i =0 ∀i w=∑_(i=1)^nλ_i y_i x_i λ_i [1-y_i (w^T x_i+b)] = 0 ∀i 因为位置函数有w变成了λ变成了典型的qp问题,转换完成
5.Dual问题与prinal问题区别与联系
区别:
1) 原来需要优化的未知参数是w 而新的问题是优化未知参数λ,可以看成λ二次方的问题是典型的qp问题
2)Dual问题比原来prinal问题好优化
计算复杂度方面解释:prinal问题需要从低纬度转换为高纬度需要计算,高纬度还需要另一次计算,这样导致时间复杂度过高,而Dual问题提高维度后计算复杂度和原维度计算复杂度基本一致,因为多出一个内积的计算,具体举例:
第一个写页面的公式,有些可能不正确,希望大家批评指正,未完 后期知识点细化
原文来自本人知乎:https://zhuanlan.zhihu.com/p/54521985
参考资料
贪心学院 NLP训练营第一期课程内容