NLP学习笔记27-优化Optimization

一 序

   本文属于贪心NLP训练营学习笔记系列。视频151 变分推断先跳过。

二 为啥要关注优化

 通常有关AI的问题可以分解为:模型+优化

模型就是如何选择模型:逻辑回归、深度学习等,然后进行模型的实例化,例如选择深度学习,有几层,每层的参数等。

实例化完毕之后,我们总是可以找到一个与实例化之后的模型相对应的objective function(目标函数),接下来就进入了优化的阶段。

优化有很多算法,见截图,有了objective function之后,就是要归类,再选择合适的优化算法解决。

公式下面的,认为是条件。

Optimization is the Core of Machine Learning

线性回归(Linear Regression): minimize_w ||Xw-y||^2_F
逻辑回归(Logistic Regresssion):minimize_{w,b} =\sum^n_{i=1}y_ilog(\sigma(w^Tx_i+b)) +(1-y_i)log[1-\sigma(w^Tx_i+b)] +\lambda||w||^2_2
SVM(Support Vector Machine):||w||^2 +c\sum^n_{i=1} \epsilon_i \;\;\;\; s.t. \epsilon \geq 1-y_ix_i^Tw,\;\; \epsilon_i \geq 0
协同过滤(Collaborative Filtering):矩阵分解
K均值(K-means):minimize_{\mu_1,...,\mu_k} \sum^K_{j=1}\sum^n_{i=1} ||x_i^{(j)} - \mu_j||^2

portfolio optimization

老师以股票量化投资为例,介绍优化的重要性

三 关于objective function的分类

从下面几个维度来看:
1、是否smooth(smooth VS non-smooth):

     lasso不平滑
2、是否convex:

  是有全局最优解,否则局部最优解global optimal VS local optimal

 local optimal (深度学习) -> 初始化变得十分重要 -> multiple/better initialization

3、是否连续(discrete VD continuous):

  连续可用梯度下降法,离散需要其他方法:discrete optimization (Relaxation)
4、是否有约束:

  constrained VS non-constrained

因为日常问题主要关注的是否convex。

四 Convex Optimization: global optimal VS local optimal

因为凸函数有全局最优解,所以正确的思路是把一个non-convex转变成convex。至于优化函数选择可以很多。

判断凸函数

凸集(convex set): 假设对于任意$x,y \in C$并且任意参数, $\alpha \in [0,1]$,\alpha x + (1-\alpha)y \in C, 则集合为凸集

定义域是凸集(前提条件),从图形上看:集合有两个点,这个两个点的连线上的任意一点也在集合内

  • 例子:
    • 所有的$R^n
    • 所有正数集合R^n_+
    • 范数||x|| \leq 1
    • Affine set: 线性方程组的所有解 Ax = b
    • Halfspace: 不等式的所有解:Ax \leq b
  • 两个凸集的交集也是凸集

凸函数定义

在定义域是凸集的前提条件下,函数满足

f(\theta x + (1-\theta)y) \leq \theta f(x) + (1-\theta)f(y), \;\; \theta \in [0,1] 

才是凸函数

式子的理解:左侧认为是下图的蓝线,右侧是f(x),f(y)两点之间的连线(绿色)蓝色要《=绿色的值

常见的凸函数例子:

  • 线性函数为凸/凹函数
  • e^x, -logx, xlogx
  • 范数
  • \frac{x^tx}{t}, \;\; x>0

判别方法: First Order Convexity Condition

假设R^n -> R是可导的, 则f为凸函数, 当且仅当f(v) \geq f(x) + \delta(x)^T(y-x) ,对于任意x,y \in domf

理解:就是下图的切线,一直再函数图f(y)的下面

Second Order Convexity Condition

上面的用的不太多,这个二阶导数相对多。

  • 假设R^n -> R是两次可导的, 则f为凸函数, 当且仅当\delta^2f(x) \geq 0

线性函数: 推导是凸函数

f(x) = b^Tx+c

假设x_1,x_2 => f(x_1)=b^Tx_1+c, f(x_2)=b^Tx_2+c  要证明的是符合凸函数定义的不等式。

则: 

b^T(\theta x_1 +(1-\theta)x_2)+c \leq \theta(b^Tx_1+c) + (1-\theta)(b^Tx_2+c)

==》\theta b^Tx_1+(1-\theta)b^Tx_2+c \leq \theta b^Tx_1+ \theta c + (1-\theta)b^Tx_2+(1-\theta)c   (上面式子展开)

==》c \leq \theta c + (1-\theta)c  (左右抵消掉相同项)

==》c \leq c  式子成立

所以f(x)是凸函数

二次方函数:推导是凸函数

f(x) = \frac{1}{2}x^TAx + b^Tx+c

对于任意A\geq 0(说明了A是半正定矩阵)

\frac{\delta f(x)}{\delta x} = Ax + b   (这里使用了一个矩阵的求导法则:\frac{ \partial (x^Tx)}{\partial x}=2x

\frac{\delta^2 f(x)}{\delta^2 x} = \frac{\partial (Ax+b) }{ \partial x} =A

因为A是半正定矩阵, 所以f(x)是凸函数

L1 / L2范数

||\theta x_1 + (1-\theta)x_2|| \leq \theta ||x_1||+(1-\theta)||x_2 ||

Maximun Flow Problem

最大流问题就是在容量容许的条件下,从源点到汇点所能通过的最大流量。

网上的解法有很多,这里老师是从数学角度来描述这个问题

https://coordinate.wang/index.php/archives/2666/

根据题目,目标函数是maxmize x_{01}+x_{02}+x_{03},下面都是限制条件,本身管道的取值范围,以及管道的流向(输入=输出)。

接下来是类型判断:线性模型,是凸函数有最优解。确定模型之后,去寻找对应的模型库

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html

接下来就是要看标准化库所需要的参数的形式,把我们的条件朝着标准库做转换。

我看这个还是一脸懵逼。根据条件,我们都是等式,所以要找的就是第二项等式。以及下面的条件。

已知的条件maxmize x_{01}+x_{02}+x_{03} 求 min_x c^T x

==>maxmize x_{01}+x_{02}+x_{03}=minmize -x_{01}-x_{02}-x_{03}

x看做是个一列12行的矩阵。c^T=(-1,-1,-1,0,0,0,0,0,0,0,0,0) 

再表达矩阵的时候,把上面约束条件等式变为x_{01}-x_{14}-x{15}=0 这种表达式

A,b都已经表达出来了,b是一列全是0

接下来就是每个变量的范围

from scipy.optimize import linprog
c = [-1,-1,-1,0,0,0,0,0,0,0,0,0]
A = [[1,0,0,-1,-1,0,0,0,0,0,0,0],
     [0,1,0,0,0,-1,-1,-1,0,0,0,0],
     [0,0,1,0,0,0,0,0,-1,0,0,0],
     [0,0,0,1,0,1,0,0,0,-1,0,0],
     [0,0,0,0,1,0,1,0,1,0,-1,0],
     [0,0,0,0,0,0,0,1,0,0,0,-1]]
b = [0,0,0,0,0,0]
x0_bounds = (0, 3)
x1_bounds = (0, 2)
x2_bounds = (0, 2)
x3_bounds = (0, 5)
x4_bounds = (0, 1)
x5_bounds = (0, 1)
x6_bounds = (0, 3)
x7_bounds = (0, 1)
x8_bounds = (0, 1)
x9_bounds = (0, 4)
x10_bounds = (0, 2)
x11_bounds = (0, 4)

res = linprog(c, A_eq=A, b_eq=b, bounds=(x0_bounds, x1_bounds, x2_bounds, x3_bounds,
                                        x4_bounds, x5_bounds, x6_bounds, x7_bounds,
                                        x8_bounds, x9_bounds, x10_bounds, x11_bounds))
print(res)

最后求解结果:-6. 不知道怎么都变成这种格式了。 

非凸函数的例子:Set Cover Problem

假设有个全集U(Universal Set), 以及m个子集合S1,S2,…,Sm, 目标是要寻找最少个数的集合, 使得集合union等U

例子: U = {1,2,3,4,5}, S:{S1={1,2,3}.S2={2,4},S3={1,3},S4={4},S5={3,4},S6={4,5}}, 最少的集合为{1,2,3},{4,5}, 集合个数为2

Approach 1:Exhaustive Search枚举法

  • 列举所有可能的集合, 时间复杂度高, 但可以找到全局最优解(枚举法,最笨的方法。)

Approach 2:Greedy Search 贪心算法

每个时刻都找一个冗余集合并去掉,直到没有冗余集合为止。可以看到不能保证全局最优解

我们可以做限定,每次去掉个数最少的冗余集合。最大优势:时间高效

Approach 3:Optimization

   用优化的方法来做。可以看到每一个集合都有两个状态,选择或不选择。

1设计什么样的变量?

用数学来表示就是:S_i --> x_i \in [0,1] 当x_i=0 不选择 S_i,当x_i=1时,选择S_i

2. 目标函数:

 

Minimize \sum_{i=1}^{m}x_i​

约束条件:

x_i\in \{0,1\} ,\\\\e \in U \sum _{i:e \in U} x_i \geqslant 1 意思是U里面任意一个元素,可以属于多个S,这些S至少要有一个被选中。老师举例是元素3,

接下来判断这个问题是不是凸函数。

1定义域不是convex set

对于任意x_1,x_2,\theta x_1+(1- \theta )x_2必须要在集合内,这个公式的集合是直线,由于x只能是0或者1,所以这个不满足。所以不是凸函数。

不是凸函数,所以难找到最优解,问题难解决,只能想办法吧条件放宽一点,如果把第三个条件变成线性条件,整个问题就变成线性问题。

就是下面截图的Relaxation.目标函数不变,只是把第三个条件取值范围从离散的0,1变成了连续的(由discrete转到continuous)。就符合线性条件,可以求解,

求解的结果x不会是0和1两个整数。我们可以自定义规则,x_i<0.5 则认为是0.大于则认为是1.

如果你数学功底好想办法证明即可。也就是想办法找出放宽后的解和真实的解有多大差距

小结

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值