diff --git a/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.2 逻辑回归.md b/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.2 逻辑回归.md new file mode 100644 index 00000000..b3abf16d --- /dev/null +++ b/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.2 逻辑回归.md @@ -0,0 +1,342 @@ +# 1. 简介 + +逻辑回归作为机器学习领域最基础且常用的模型,掌握逻辑回归的原理推导以及扩展应用是很必要的。从名字上来听,逻辑回归似乎是处理"回归问题",实际上逻辑回归处理的是分类问题,即 **LR 分类器(Logistic Regression Classifier)**,其数学模型是一个 sigmoid 函数,因图像像 S,又经常称之为 S 形曲线。 + +**sigmoid函数公式:** +$$ +f(x)=\frac{1}{1+e^{-x}} +$$ +**sigmoid函数图像:** + +![Sigmoid_function](http://ryluo.oss-cn-chengdu.aliyuncs.com/图片Sigmoid_function.png) + +由于 sigmoid 函数的定义域是 $(-∞,+∞)$,而值域为 $(0, 1)$。Logistic 回归通过 sigmoid 联结函数可以将变量映射到 $ (0, 1) $ 之间,这也是为什么最基本的 LR 分类器适合于对二分类(类 0,类 1)目标进行分类。 + + + + + +# 2. 二项逻辑回归模型 + +## 2.1 模型定义 + +逻辑回归模型在用作二分类时,模型的表达式如下: +$$ +p_i(y_i=1 \mid x_i) = \frac{1}{1+e^{-w x_i}} \\ \\ +p_i(y_i=0 \mid x_i) = \frac{e^{-w x_i}}{1+e^{-w x_i}} +$$ +其中,随机变量$x_i \in \mathbb{R}^{n}$为实数,随机变量$y_i$的取值为$\{0, 1\}$,参数$w\in \mathbb{R}^{n}$。$wx_i$表示变量$x_i$与参数$w$之间的内积。 + +由逻辑回归模型的表达式可知,其输出值的范围为$(0,1)$。这里以$p_i(y_i=1 \mid x_i)$举例: + ++ 由于内积$-wx_i$的取值范围为$(-∞,+∞)$,可知分母项$1+e^{wx_i}$取值范围是$(1, +∞)$; ++ 最后可得,分母项的倒数范围就是$(0,1)$; + +## 2.2 几率 + +最开始我们提到,逻辑回归和线性回归最本质的区别就是它们分别是分类和回归模型,这是属于两个不同的任务。那么为什么逻辑回归会包含“回归”两个字呢?回答这个问题前,先来弄明白**几率**的概念。 + +**几率**就是事件发生的概率和事件不发生的比值: +$$ +\eta_{i}=\frac{p_{i}}{1-p_{i}} +$$ +现在,我们通过线性模型来拟合几率$\eta_{i}$的对数,有: +$$ +wx_i=\log(\frac{p_{i}}{1-p_{i}}) +$$ +将等式两边化为以`e`为底的指数函数,有: +$$ +e^{wx_i} =\frac{p_{i}}{1-p_{i}} +\\ \Downarrow +\\ +p_i = \frac{1}{1+e^{-w x_i}} +$$ +可以看到,逻辑回归本质上就是关于事件几率的线性回归。当然,逻辑回归和线性回归存在本质上的不同,其次在损失函数上,线性回归中的损失函数是均方误差,而 Logistic 回归的损失函数是**负对数似然(Negative Log-Likelihood)**。 + +二者的共同之处在于,他们的损失函数都是通过**最大似然估计**推导而来,其次在求解参数的过程中都可以使用梯度下降法,可参考资料[2]。 + +## 2.3 模型假设 + +逻辑回归模型的基本假设是$y_i$服从伯努利分布,也称为两点分布或者$0-1$分布。即: +$$ +\begin{array}{c} + +p_i(y_i=1 \mid x_i ; w)=p_i +\\ \\ +p_i(y_i=0 \mid x_i ; w)=1-p_i + +\end{array} +$$ +将公式写在一起有: +$$ +p_i(y_i \mid x_i ; w)=p_i^{y_i}\left(1-p_i\right)^{1-y_i} +$$ + + +## 2.4 模型参数估计 + +我们可以通过使用最大似然估计法来估计二项逻辑回归模型的参数,设似然函数为: +$$ +\prod_{i=1}^{n}p_{i}^{y_{i}}·\left(1-p_{i}\right)^{1-y_{i}} +$$ +对似然函数取对数后加负号有: +$$ +L(w)=-\sum_{i=1}^{n}\left(y_{i} \log \left(p_{i}\right)+\left(1-y_{i}\right) \log \left(1-p_{i}\right)\right) +$$ +我们可以通过最大化似然函数来对参数进行估计,在这里等价于最小化负对数似然函数 $L(w)$,同样可以得到 $w$ 的估计值。 + +下面关于 $L(w)$ 对 $w$ 求导,具体步骤如下: + +1. 对于任意样本$x_i$,有: + +$$ +\begin{aligned} +l &=-y_{i} \log \left(p_{i}\right)-\left(1-y_{i}\right) \log \left(1-p_{i}\right) \\ \\ +&=-y_{i} \log \left(p_{i}\right)-\log \left(1-p_{i}\right)+y_{i} \log \left(1-p_{i}\right) \\ \\ +&=-y_{i}\left(\log \left(\frac{p_{i}}{1-p_{i}}\right)\right)-\log \left(1-p_{i}\right) +\end{aligned} +$$ +2. 由于几率 $\eta_{i}=\frac{p_{i}}{1-p_{i}}$,可得 ${p_i}=\frac{\eta_{i}}{1+\eta_{i}}$,代入: + +$$ +\begin{aligned} +l &=-y_{i} \log \left(\eta_{i}\right)-\log \left(1-\frac{\eta_{i}}{1+\eta_{i}}\right) \\ \\ +&=-y_{i} \log \left(\eta_{i}\right)+\log \left({1+\eta_{i}}\right) \\ \\ +&=-y_{i} \log \left(\eta_{i}\right)+\log \left(1+e^{\log \left(\eta_{i}\right)}\right) +\end{aligned} +$$ +3. 对几率的对数 $\log(\eta_{i})$ 求导: + +$$ +\frac{d l}{d \log \left(\eta_{i}\right)}=-y_{i}+\frac{e^{\log \left(\eta_{i}\right)}}{1+e^{\log \left(\eta_{i}\right)}}=-y_{i}+p_{i} +$$ + +​ 前面我们提到过,逻辑回归相当于事件的对数几率拟合线性回归,即:$\log \left(\eta_{i}\right)=\log \frac{p_{i}}{1-p_{i}}=wx_i$,代入有: +$$ +\frac{d l}{d \log \left(\eta_{i}\right)} +=\frac{d l}{d (wx_i)}==-y_{i}+p_{i} +\\ +\Downarrow +\\ +\frac{d l}{dw}=(-y_{i}+p_{i})x_i +$$ +4. 由于我们的目标是最小化负对数似然函数,所以采梯度下降方向: + +$$ +w \leftarrow w-\frac{\gamma}{n} \sum_{i=1}^{n}\left(-y_{i}+p_{i}\right) x_{i} +\\ +其中,\gamma为学习率 +$$ + + + +# 3. 从广义线性模型推导逻辑回归 + +无论是线性回归还是逻辑回归,它们都是广义线性模型(Generalize Linear Model, GLM)的一种特殊形式。本小节将从广义线性模型的角度来对逻辑回归模型进行推导。 + +先给出本小节的参考链接,如有说的不对的地方,欢迎批评指正。 + +指数分布: + +> 指数族分布:https://blog.csdn.net/qq_27388259/article/details/113011862 +> +> 统一分布:指数模型家族:https://zhuanlan.zhihu.com/p/148776108 +> +> 指数族分布|机器学习推导系列(九):https://zhuanlan.zhihu.com/p/315688850 + +广义线性模型: + +> 从「一」到「无穷大」:广义线性模型 (GLM):https://zhuanlan.zhihu.com/p/149691129 +> +> 广义线性模型(Generalized Linear Model):https://zhuanlan.zhihu.com/p/22876460 +> +> 从广义线性模型(GLM)理解逻辑回归:[https://fighterhit.github.io/2017/12/24/machine_learning_notes/从广义线性模型理解逻辑回归/](https://fighterhit.github.io/2017/12/24/machine_learning_notes/从广义线性模型理解逻辑回归/) + + + +## 3.1指数分布族 + +在介绍广义线性模型之前,需要先来了解指数分布,因为指数分布是后面介绍的广义线性模型的基本假设之一。 + +**指数族分布(exponential family)**是指一类分布,包括**高斯分布、伯努利分布、二项分布、泊松分布、伽马分布、贝塔分布**等。很多数学模型都是建立在某种或某几种分布上的,比如风控金融判断好人坏人的伯努利分布,线性回归模型的高斯分布等。 + +在指数分布族中,每一类分布都可以使用如下的公式表示: +$$ +p(y\mid \eta)=h(y) \exp \left(\eta^{T} T(y)-a(\eta)\right) +$$ +这里我需要提醒一下数学基础跟我一样不牢固的同学,这里的指数族分布的表达式指的概率分布函数。本人一直将概率密度函数和概率分布函数混淆。这里说明一下它们之间的关系: + ++ 在连续函数中,概率分布函数$F(x)$与概率密度函数$f(x)$的关系为:$F(x)=\int_{-\infty}^{x} f(x) d x$; ++ 概率密度函数还有一个性质:$f(x) \geq 0, \int_{-\infty}^{\infty} f(x) d x=1$; + + + +OK,现在回到前面指数分布的表达式,各参数含义如下: + ++ $\eta$:自然参数,不同的指数分布参数不同; ++ $T(y)$:充分统计量(Sufficient Statistic),一般有 $T(y)=y$ ; ++ $a(\eta)$:对数配分函数(Log Partition Function); ++ $h(y)$:$h(y)\geq 0$,一般取值为1; + +下面详细解释: + +**(1)什么是充分统计量?** + +定义:设 $ x_{1}, x_{2}, \cdots, x_{n}$ 是个总体的样本,总体分布函数为$ F(x ; \theta) $, 统计量 $ \Phi(x)=\Phi\left(x_{1}, x_{2}, \cdots, x_{n}\right)$ 称为 $\theta $ 的充分统计量,如果在给定 $\Phi(x) $ 的取值后, $x_{1}, x_{2}, \cdots, x_{n} $ 的条件分布与$ \theta $ 无关。 + +比如对于服从高斯分布的样本集,我们无需记录所有样本,只需记录它们的均值和方差即可。 + +**(2)对数配分函数** + +前面介绍了概率密度函数的一个性质:$f(x) \geq 0, \int_{-\infty}^{\infty} f(x) d x=1$。 + +若指数分布族没加上归一化因子 $a(\eta)$,则分布函数 $\hat{p}(y\mid \eta)=h(y) \exp \left(\eta^{T} T(y)\right)$ 可能大于1,这是显然的,画出指数函数图像就知道了。原因很简单,就是分布函数对应的密度函数 $\hat{f}( y \mid \theta)$ 在区间的积分大于1了。 + +对于这种情况,我们希望通过除以一个归一化 $Z$ 来将积分值的区间缩放到 $(0,1)$: +$$ +\begin{array}{c} +\int \frac{1}{Z} \hat{f}(y \mid \eta) \mathrm{d} y =1 +\\ +\Downarrow +\\ +Z=\int \hat{f}(y \mid \eta) \mathrm{d} y +\end{array} +$$ +在明白这一点后,现在我们对指数分布函数 $p(y\mid \eta)$ 化简: +$$ +\begin{array}{c} +p(y \mid \eta)=h(y) \exp \left(\eta^{T} T(y)-A(\eta)\right) +\\ +\Downarrow + +\\ +p(y \mid \eta)=\frac{1}{\exp (A(\eta))} h(y) \exp \left(\eta^{T} T(y)\right)= +\frac{1}{Z} \hat{p}(y \mid \eta) +\\ +\Downarrow + +\\ +A(\eta)=\log Z + + +\end{array} +$$ +归一化因子又称作配分函数,这也是$A(\eta)$叫做对数配分函数的原因。 + +## 3.2 广义线性模型假设 + +上一小节主要介绍了指数分布族,旨在了解指数分布函数的形式以及各参数的意义。 + +本小节将要介绍的广义线性模型,它的构建基于3个假设: + +1. 变量$y$的条件概率服从指数分布族,即 $y \mid x ; \theta \sim \text { ExponentialFamily }(\eta)$; +2. 在给变量 $x$下,广义线性模型的求解目标为 $T(y)|x$;考虑到大多数情况下 $T(y)=y$,所以求解目标为 $h(x)=E(y \mid x)$; +3. 自然参数$\eta$和变量$x$为线性关系:$\eta=\theta^{T}x$,若 $\theta$ 为向量,则$\eta_i=\theta_i^{T}x$; + +## 3.3 广义线性模型推到逻辑回归 + +前面我们提到过,逻辑回归的基本假设为变量$y$服从伯努利分布,这满足第一个假设: +$$ +\begin{flalign} + +& p(y=1 \mid x ; \theta)=p +\\ \\ +& p(y=0 \mid x ; \theta)=1-p + +\end{flalign} +$$ +合并公式,进一步有: +$$ +\begin{aligned} +p(y \mid x ; \theta) &=p^{y}(1-p)^{1-y} +\\ \\ +&=\exp \left(\log p^{y}(1-p)^{1-y}\right) +\\ \\ +&=\exp (y \log p+(1-y) \log (1-p)) +\\ \\ +&=\exp \left(\log \left(\frac{p}{1-p}\right) y+\log (1-p)\right) +\end{aligned} +$$ +参照前面的指数分布族函数: +$$ +p(y\mid \eta)=h(y) \exp \left(\eta^{T} T(y)-a(\eta)\right) +$$ +可得: +$$ +\begin{flalign} +&h(y)=1 +\\ \\ +&\eta=\log \left(\frac{p}{1-p}\right) +\Rightarrow +p = \frac{1}{1+e^{-\eta}} +\\ \\ +&T(y)=y +\\ \\ +&a(\eta)=\log (1-p) +\end{flalign} +$$ + + +最后,再根据第三个假设 $\eta=\theta^{T}x$ ,代入 $p$ 的表达式有: +$$ +\begin{array}{c} + +p(y=1 \mid x ; \theta) = \frac{1}{1+e^{-\theta^{T}x}} +\\ +\Leftrightarrow +\\ +p(y_i=1 \mid x_i ; \theta) = \frac{1}{1+e^{-\theta^{T}x_i}} + +\end{array} +$$ +至此,从广义线性模型推到逻辑回归的过程结束。 + +同样的,还可以从高斯分布的角度来推到出线性回归模型,这里不再推导,详可见参考的前面的博客。 + + + + + +# 4. 推荐中的逻辑回归 + +## 4.1 LR模型 + +我们在前面介绍了二项逻辑回归模型,当将样本的特征输入到模型后,输出的值范围在$(0,1)$之间。在推荐的点击预测业务中,用户对物品的点击行为只存在两个可能{0: 未点击,1:点击},实际就是一个二分类的问题。 + +当我们将与用户、物品以及其它相关的特征信息输入到逻辑回归模型后,得到的输出就可以作为用户对物品的点击概率。在优化模型时,损失函数与前面提到的一样为负对数似然函数,再通过梯度下降法进行参数优化。 + +下面分析一下逻辑回归模型的优缺点。 + ++ 优点: + + LR模型形式简单,可解释性好,预测结果是界于 0 和 1 之间的概率,可直接理解为用户的点击概率。 + + 适用于连续性或者离散型数据。 + + 模型简单,易于实现,同时训练的开销小,训练速度快。 ++ 缺点: + + 表达能力不强, 无法进行特征交叉, 特征筛选等一系列“高级“操作需要人工进行组合, 可能造成信息的损失。 + + 处理非线性问题能力差。 + + 很难处理数据不平衡问题。 + +## 4.2 GBDT+LR + +前面我们提到了LR模型的特征表达能力不足,需要通过人工进行特征筛选和特征组合,而这将导致人工的成本过高,同时会造成信息损失。因此,对模型中引入自动特征筛选、组合是有必要的。 + +由于GBDT的思想使其具有天然优势,可以发现多种有区分性的特征及特征组合。在这种背景下,Faceook于2014年发布了应用于广告推荐的GBDT+LR模型,利用GBDT自动进行特征筛选和组合, 进而生成新的离散特征向量, 再把该特征向量当做LR模型的输入, 来产生最后的预测结果。 + +关于该模型的详细原理和实现,可以参考资料[4]。 + +![Sigmoid_function_01](http://ryluo.oss-cn-chengdu.aliyuncs.com/图片gbdt_lr.png) + + + +# 参考资料 + +> [1] 《百面机器学习》,诸葛越著 +> +> [2] 最大似然估计:从概率角度理解线性回归的优化目标:https://zhuanlan.zhihu.com/p/143416436 +> +> [3] Logistic回归:https://lumingdong.cn/logistic-regression.html +> +> [4] 逻辑回归模型与GBDT+LR:https://zhongqiang.blog.csdn.net/article/details/108349729 +> +> [5] 线性回归、logistic回归、广义线性模型: https://blog.csdn.net/sinat_37965706/article/details/69204397 + diff --git a/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.4 常用优化算法.md b/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.4 常用优化算法.md new file mode 100644 index 00000000..3abc2952 --- /dev/null +++ b/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.4 常用优化算法.md @@ -0,0 +1,349 @@ + + +# 1. 基础数学知识 + +## 1.1 凸优化 + +本小节将简单介绍凸优化问题,如果想进一步了解与凸优化相关的知识,可参考参考链接中斯坦福课程对应的课件。 + +### 1.1.1 凸集 + +如果集合 $S$ 为凸集,则对于任意 $x,y \in S$ 以及 $\theta \in \mathbb{R}$,其中 $0 \leq \theta \leq 1$ ,有: +$$ +\theta x+(1-\theta) y \in S +$$ +![convex_set](http://ryluo.oss-cn-chengdu.aliyuncs.com/图片convex_set.png) + +### 1.1.2 凸函数 + +函数 $f(\cdot)$ 为凸函数当且仅当对定义域中的任意两点 $x,y$ 和任意实数 $\lambda \in [0,1]$ 有: +$$ +f(\lambda x+(1-\lambda)y) \le \lambda f(x)+(1-\lambda)f(y) +$$ +直观上来看,对于 $z \in (x, y)$,对应的坐标点 $\left (z,f(z)\right)$ 的位置,均处于点 $(x, f(x))$ 和点 $(y,f(y))$ 连接成的线段的下方。 + +![convex_func](http://ryluo.oss-cn-chengdu.aliyuncs.com/图片convex_func.png) + +凸函数具有一个重要的性质: **局部极小值点为全局极小值点**。 + +### 1.1.3 凸函数的判定 + +我们可以通过一阶条件和二阶条件来判定目标函数是否为凸函数。 + +**一阶条件** + +设 $f(x)$ 在凸集$S$ 上有一阶连续偏导数,则 $f(x)$ 为 $S$ 上的凸函数的充要条件为:对于任意两个不同的点 $x_1,x_2$ 有: +$$ +f\left(x_1\right) \geq f\left(x_2\right)+\nabla f\left(x_2\right)^{T}\left(x_2-x_1\right) +$$ +**二阶条件** + +设 $f(x)$ 在凸集 $\mathrm{S} $ 上有二阶连续偏导数, 则 $ f(x) $ 为 $ \mathrm{S} $ 上的凸函数的充要条件为: $ f(x) $ 的 $Hessian$ 矩阵 $ \nabla^{2} f(x)$ 在 $S$ 上处处半正定。 + +假如 $Hessian$ 矩阵 $\nabla^{2} f(x) $ 在 $S$ 上处处正定, 则 $ f(x)$ 严格凸函数, 但是反过来不成立。 + +其中,$Hessian$ 矩阵和正定矩阵定义如下: + ++ $Hessian$ 矩阵 + +$$ +\nabla^{2} f(x)=\left(\begin{array}{cccc} +\frac{\partial^{2} f(x)}{\partial^{2} x_{1}} & \frac{\partial^{2} f(x)}{\partial x_{1} \partial x_{2}} & \cdots & \frac{\partial^{2} f(x)}{\partial x_{1} \partial x_{n}} \\ +\frac{\partial^{2} f(x)}{\partial x_{2} \partial x_{1}} & \frac{\partial^{2} f(x)}{\partial^{2} x_{2}} & \cdots & \frac{\partial^{2} f(x)}{\partial x_{2} \partial x_{n}} \\ +\vdots & \vdots & \ddots & \vdots \\ +\frac{\partial^{2} f(x)}{\partial x_{n} \partial x_{1}} & \frac{\partial^{2} f(x)}{\partial x_{n} \partial x_{2}} & \cdots & \frac{\partial^{2} f(x)}{\partial^{2} x_{n}} +\end{array}\right) +$$ + ++ 正定矩阵 + + 定义:特征值都大于 $0$ 的实对称矩阵; + + 充分必要条件:所有各阶顺序主子式都大于 $0$ ,即 $\operatorname{det} \boldsymbol{A}_{i}>0 \quad(i=1,2, \cdots, n)$; + ++ 半正定矩阵 + + 定义:特征值都不小于 $0$ 的实对称矩阵; + + 充分必要条件:$\operatorname{det} \boldsymbol{A}_{i}=0$ 且 $\operatorname{det} \boldsymbol{A}_{i}\ge 0 \quad(i=1,2, \cdots, n-1)$; + +### 1.1.4 凸优化问题 + +对于优化的目标函数为凸函数的问题,我们称为凸优化问题。一些常用的机器学习模型,如逻辑回归、支持向量机、线性回归模型等,对应的优化问题就是凸优化问题。前面我们提到过,对于凸函数它的局部极小值即为全局最小值,所以这类问题一般被认为是比较容易求解的问题。 + +非凸优化问题包括了主成分分析问题,矩阵分解,深度神经网络等。 + + + +## 1.2. 极值 + +### 1.2.1 一元函数 + +在微积分中,函数$f(x)$在点 $x_0$ 处的导数定义为: +$$ +f^{\prime}\left(x_{0}\right)=\lim _{x \rightarrow x_{0}} \frac{f(x)-f\left(x_{0}\right)}{x-x_{0}} +$$ +它在几何上就是指函数 $f(x)$ 在 $x_0$ 上切线方向。一般而言,如果要计算某个函数 $f(x)$ 的最大值或者最小值。通常先计算它的导数 $f'(x)$, 然后求解方程 $f'(x)=0$ 可以得到函数的临界点,进一步判断临界点是否为最大值或者最小值。但是临界点并不一定是全局最大值或者全局最小值,甚至不是局部的最大值或者局部最小值。 + +例如: 函数 $f(x)=x^{3}$ ,它的导数是 $f^{\prime}(x)=3 x^{2}$ ,因此 $x=0$ 是它的临界点。但 $x=0$ 则不是这个函数的局部最大值或者局部最小值点,因为 $f(x)<0$, $\forall x<0$ 且 $f(x)>0, \forall x>0 $ 。 + +下面介绍极值点(局部最值)的判断条件: + +**极值点判定的第一充分条件** + ++ 如果 $x \in\left(x_{0}-\delta, x_{0}\right)$ ,有 $f^{\prime}(x)>0$ ; 而 $x \in\left(x_{0}, x_{0}+\delta\right) $,有 $f^{\prime}(x)<0$ , 则 $f(x)$ 在 处取得极大值; ++ 如果 $x \in\left(x_{0}-\delta, x_{0}\right)$ ,有 $f^{\prime}(x)<0$ ; 而 $x \in\left(x_{0}, x_{0}+\delta\right) $,有 $f^{\prime}(x)>0$ , 则 $f(x)$ 在 处取得极小值; ++ 如果当 $x \in\left(x_{0}-\delta, x_{0}\right) $ 及 $ x \in\left(x_{0}, x_{0}+\delta\right) $ 时, $f^{\prime}(x) $ 符号相同, 则 $ f(x)$ 在 $ x_{0}$ 处无极值; + +**极值点判定的第二充分条件** + +从 $Taylor$ 级数的角度来看,$f(x)$ 在 $x_0$ 附件的 $Taylor$ 级数为: +$$ +f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(x_{0}\right)}{2}\left(x-x_{0}\right)^{2}+O\left(\left|x-x_{0}\right|^{3}\right) +$$ +若 $f(x)$ 在 $ x_{0}$ 处具有二阶导数, 且 $f^{\prime}\left(x_{0}\right)=0, f^{\prime \prime}\left(x_{0}\right) \neq 0 $,有: + ++ 当 $f^{\prime \prime}\left(x_{0}\right)<0$ 时, 函数 $f(x)$ 在 $ x_{0} $ 处取得极大值; ++ 当 $f^{\prime \prime}\left(x_{0}\right)>0$ 时, 函数 $f(x) $ 在 $x_{0}$ 处取得极小值; + +### 1.2.2 多元函数 + +对于多元函数 $f(\mathbf{x})=f(x_1, ..., x_n)$ ,它的梯度可以定义为: +$$ +\nabla f(\mathbf{x})=\left(\frac{\partial f}{\partial x_{1}}(\mathbf{x}), \cdots, \frac{\partial f}{\partial x_{n}}(\mathbf{x})\right) +$$ +多元函数 $f(\mathbf{x})$ 在点 $\mathbf{x_0}$ 处的 $Taylor$ 级数为: +$$ +f(\mathbf{x})=f\left(\mathbf{x}_{0}\right)+\nabla f\left(\mathbf{x}_{0}\right)\left(\mathbf{x}-\mathbf{x}_{0}\right)+\frac{1}{2}\left(\mathbf{x}-\mathbf{x}_{0}\right)^{T} \mathbf{H}\left(\mathbf{x}-\mathbf{x}_{0}\right)+O\left(\left|\mathbf{x}-\mathbf{x}_{0}\right|^{3}\right) +$$ +其中,$\mathbf{H}$ 表示 $Hessian$ 矩阵。 + +判定条件为: + ++ 如果 $x_0$ 是临界点,并且 $Hessian$ 矩阵为正定矩阵时, $f(\mathbf{x})$ 在 $\mathbf{x_0}$ 处达到局部极小值。 ++ 如果 $x_0$ 是临界点,并且 $Hessian$ 矩阵为负定矩阵时, $f(\mathbf{x})$ 在 $\mathbf{x_0}$ 处达到局部极大值。 ++ 如果 $x_0$ 是临界点,但是 $Hessian$ 矩阵为不定矩阵时, $f(\mathbf{x})$ 在 $\mathbf{x_0}$ 处不取极值。 + +**负定矩阵**: + ++ 定义:特征值都小于 $0$ 的实对称矩阵; + ++ 充分必要条件: + $$ + \operatorname{det} \boldsymbol{A}_{i}\left\{\begin{array}{l} + <0(i \text { 为奇数 }) \\ + >0(i \text { 为偶数 }) + \end{array}(i=1,2, \cdots, n)\right. + $$ + +相关证明可以文末的引用资料。 + + + +# 2. 损失函数 + +在监督学习中,损失函数来画了模型和训练样本的匹配程度。例如,对于训练样本 $(x_i, y_i)$,其中 $x_i\in X$ 表示第 $i$ 个样本的特征,$y_i \in Y$ 表示该样本点的标签。参数为为$\theta$的模型可以表示为函数 $f(\cdot,\theta):X \to Y$ ,模型关于第 $i$ 个样本点的输出为 $f(x_i, \theta)$。 + +为了刻画模型输出和样本标签之间的匹配程度,定义损失函数 $L(\cdot,\cdot):Y \times Y \to \mathbb{R}_{\Bbb\ge 0}$ ,$L(f(x_i,\theta),y_i)$ 越小,表明模型在该样本点匹配的程度越好。 + +在机器学习中,优化问题的损失函数可以表示为: +$$ +L(\theta) = \mathbb{E}_{(x,y)\sim P_{data}}L(f(x, \theta),y) +$$ +其中,$x$ 表示模型输入数据,$y$ 表示模型期望的输出,$f(x,\theta)$ 表示模型的实际输出。 + +我们希望通过不断优化参数 $\theta$,来最小化损失函数 $L(\theta)$ 的值,这就是优化问题的求解。 +$$ +\theta^*=\rm{arg}\ minL(\theta) +$$ + + + +# 3. 常见优化算法 + +从数学上的角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向。那么,如果想计算一个函数的最小值,就可以使用梯度下降法的思想来做。 + +假设求解目标函数为 $L(\theta)=L(\theta_1, ..., \theta_n)$ 的最小值,可以从一个初始点 $\theta^{0}=(\theta_1^{(0)},...,\theta_n^{(0)})$,基于学习率 $\eta>0 $ 构建迭代过程: +$$ +\begin{array}{l} +\theta_{1}^{(i+1)}=\theta_{1}^{(i)}-\eta \cdot \frac{\partial L}{\partial \theta_{1}}\left(\theta^{(i)}\right) \\ +\cdots \\ +\theta_{n}^{(i+1)}=\theta_{n}^{(i)}-\eta \cdot \frac{\partial L}{\partial \theta_{n}}\left(\theta^{(i)}\right) +\end{array} +$$ +一旦达到收敛条件的话,迭代就结束。从梯度下降法的迭代公式来看,下一个点的选择与当前点的位置和它的梯度相关。 + +![optimization](http://ryluo.oss-cn-chengdu.aliyuncs.com/图片optimization.gif) + +不同的优化算法,由于优化目标函数时有着不同的出发点,所以函数在寻找局部极小值点的时对应的轨迹也有所不同。 + + + +## 3.1 BGD + +经典的梯度下降法是采用训练集数据的平均损失来近似目标函数,这种方法被称为**批量梯度下降法(Batch Gradient Descent,BGD)**。损失函数及梯度的计算公式如下: +$$ +L(\theta) = \frac{1}{N} \sum_{i=1}^{N} L(f(x, \theta),y) \\ +\nabla L(\theta) = \frac{1}{N} \sum_{i=1}^{N}\nabla L(f(x, \theta),y) +$$ +模型参数的更新公式为: +$$ +\theta = \theta- \alpha\nabla L(\theta) +$$ +其中,$\alpha$ 为学习率。可以看出,为了获得准确的梯度,批量梯度下降法每一步都将整个数据集载入进行计算,时间花费和内存开销都非常大,无法应用于大数据集和大规模场景。 + + + +## 3.2 SGD + +**SGD的英文全称是 Stochastic Gradient Descent,中文名为随机梯度下降法**。随机梯度下降法是使用单个训练数据来近似平均损失: +$$ +L(\theta;x_i,y_i) = L(f(x_i, \theta),y_i) +\\ \\ +\nabla L(\theta) = \nabla L(f(x_i, \theta),y_i) +$$ +随机梯度下降法放弃了对梯度准确性的追求,每步仅随机采样一个样本来估计梯度,优点是计算速度快,内存开销小。但是由于每一步接收的信息量有限,随机梯度下降法对梯度的估计常常出现偏差,造成目标函数的收敛不稳定,伴有剧烈波动,甚至出现不收敛的情况。 + +对于随机梯度下降法而言, 除了存在会陷入局部最优解的困境,更害怕的是遇到山谷和鞍点两种地形。 + ++ 山谷顾名思义就是一条狭长的山间小道,左右为峭壁。在山谷中,准确的梯度方向是沿山道向下,但是粗略的梯度估计会使得它在两山壁之间来回反弹震荡,造成收敛不稳定和收敛速度慢。 ++ 鞍点就是形状似马鞍,一个方向上两头翘,另一个方向两头垂,中间是一片平原。在鞍点处,随机梯度下降法会陷入平原,但是距离最低点还有很远。在梯度接近为 $0$ 处,随机梯度下降法无法察觉出梯度的变化,结果就会陷入停滞状态。 + + + +## 3.3 MBGD + +**MBGD的全称是 Mini-Batch Gradient Descent,中文名为小批量梯度下降法**。它是是一种介于BGD和SGD之间的优化算法。前面介绍的BGD和SGD算法,各自存在不同的优缺点,BGD梯度估计更准确但时间开销更大,SGD计算开销小却存在不稳定的缺点。 + +为了缓解二者各存在的问题,小批量梯度下降法每次在更新梯度的时候,只需要同时处理 $n(n< [1] 《百面机器学习》,诸葛越著 +> +> [2] 《深度学习入门:基于Python的理论与实现》,斋藤康毅著 +> +> [3] 凸集、凸函数与凸优化基本概念:https://blog.51cto.com/u_15009309/2554110 +> +> [4] 斯坦福凸优化课件: http://cs229.stanford.edu/section/cs229-cvxopt.pdf +> +> [5] Hessian矩阵和极值判断: https://zhuanlan.zhihu.com/p/377754969 +> +> [6] 深度学习优化入门:https://zhuanlan.zhihu.com/p/42495844 +> +> [7] 深度学习中的优化算法:https://zhuanlan.zhihu.com/p/43506482) +> +> [8] 故意让人难记的公式——多元函数极值: https://mp.weixin.qq.com/s?__biz=MzU1OTAzMjE2OA==&mid=2247485977&idx=1&sn=c35473dcca80d0df80ed0a5951eb0a02&chksm=fc1c381ecb6bb108a0e37e40d817594eebbe8f05efe9294a8a164d632d3a1e1eab3a33c4ede2&token=2002571029&lang=zh_CN#rd) +