李宏毅机器学习1

一. 机器学习:

在现实世界中我们是把我们人类的“经验”以数据的形式来存储,所以我们想着能不能让机器从这些数据进行学习,归纳中我们人类中的经验来进行推理。简称机器学习。
工程化定义:假设用P来评估计算机程序在某任务类T上的性能,若一个程序通过利用经验E在任务T上获得了性能改善,则我们就说关于T和P,该程序对E进行了学习。
人话就是:我们想让机器从我们这些人类的经验进行学习来帮我们解决一些任务,如果机器完成的不错,则我们会说机器从数据中得到了学习。

二. 学习中心极限定理,学习正态分布,学习最大似然估计

中心极限定理(Central Limit Theorem)

定义

在这里插入图片描述
在这里插入图片描述
我每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然后把这 m 组抽样分别求出平均值。 这些平均值的分布接近正态分布。

举个例子:
现在我们要统计全国的人的体重,看看我国平均体重是多少。当然,我们把全国所有人的体重都调查一遍是不现实的。所以我们打算一共调查1000组,每组50个人。 然后,我们求出第一组的体重平均值、第二组的体重平均值,一直到最后一组的体重平均值。中心极限定理说:这些平均值是呈现正态分布的。并且,随着组数的增加,效果会越好。 最后,当我们再把1000组算出来的平均值加起来取个平均值,这个平均值会接近全国平均体重。

注意的地方:
1.总体本身的分布不要求正态分布
上面的例子中,人的体重是正态分布的。但如果我们的例子是掷一个骰子(平均分布),最后每组的平均值也会组成一个正态分布。
2.样本每组要足够大,但也不需要太大
取样本的时候,一般认为,每组大于等于30个,即可让中心极限定理发挥作用。

正态分布

上面说到了正太分布,那正太分布是什么呢
正态分布(Normal distribution)又名高斯分布(Gaussian distribution),是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。
若随机变量X服从一个数学期望为μ、标准方差为 σ 2 σ^2 σ2的高斯分布,记为:
X ∼ N ( μ , σ 2 ) X∼N(μ,σ^2) XN(μ,σ2)
其概率密度函数为:
在这里插入图片描述
如图
在这里插入图片描述
那么中心极限定理上面的 ϕ ( x ) \phi(x) ϕ(x)是什么呢,是累积分布函数
在这里插入图片描述
其中N(0, 1)就是平均值为 μ \mu μ=0,方差 σ \sigma σ=1时的值
在这里插入图片描述
正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。因其曲线呈钟形,因此人们又经常称之为钟形曲线。我们通常所说的标准正态分布是μ = 0,σ = 1的正态分布。

最大似然估计

在机器学习中,我们经常使用一个模型来描述生成观察数据的过程。例如,我们可以使用一个随机森林模型来分类客户是否会取消订阅服务(称为流失建模),或者我们可以用线性模型根据公司的广告支出来预测公司的收入(这是一个线性回归的例子)。每个模型都包含自己的一组参数,这些参数最终定义了模型本身。

最大似然估计的直观解释

最大似然估计是一种确定模型参数值的方法。确定参数值的过程,是找到能最大化模型产生真实观察数据可能性的那一组参数。

上述的定义可能听起来还是有点模糊,那么让我们通过一个例子来帮助理解。

假设我们从某个过程中观察了 10 个数据点。例如,每个数据点可以代表一个学生回答特定考试问题的时间长度(以秒为单位)。这 10 个数据点如下图所示:
在这里插入图片描述
我们首先要决定哪个模型最适合描述生成数据的过程,这一步至关重要。至少,我们应该对使用哪种模型有一个不错的想法。这个判断通常来自于一些领域内专家,但我们不在这里讨论这个问题。

对于这些数据,我们假设数据生成过程可以用高斯分布(正态分布)进行充分描述。对以上数值目测一番就可以得知,高斯分布是合理的,因为这 10 个点的大部分都集中在中间,而左边和右边的点都很少。(因为我们只使用了 10 个数据点,做出这样的草率决定是不明智的,但考虑到我是用某个确定的分布函数生成这些数据点,我们就凑合着用吧)。

回想一下高斯分布有两个参数:均值μ和标准差σ。这些参数的不同值会对应不同的曲线(就像上面的直线一样)。我们想知道「哪条曲线最可能产生我们观察到的数据点」?(见下图)。用最大似然估计法,我们会找到与数据拟合得最好的 μ、σ 的值。

在这里插入图片描述
10 个数据点和可能得出这些数据的高斯分布。f_1 是均值为 10、方差为 2.25(方差等于标准偏差的平方)的正态分布,也可以表示为 f_1∼N(10, 2.25)。其它曲线为 f_2∼N(10, 9)、f_3∼N(10, 0.25)、f_4∼N(8,2.25)。最大似然的目标是找到最有可能生成已知观察数据分布的参数值。

我生成这 10 个数据的真实分布是 f_1~N(10, 2.25),也就是上图中的蓝色曲线。

计算最大似然估计

现在我们对最大似然估计有了直观的理解,我们可以继续学习如何计算参数值了。我们找到的参数值被称为最大似然估计(maximum likelihood estimates,MLE)。

我们同样将用一个例子来演示这个过程。假设这次有三个数据点,我们假设它们是从一个被高斯分布充分描述的过程生成的。这些点是 9、9.5 和 11。那么如何用最大似然估计逼近这个高斯分布的参数 μ 和 σ 呢?

我们要计算的是同时观察到所有这些数据的概率,也就是所有观测数据点的联合概率分布。因此,我们需要计算一些可能很难算出来的条件概率。我们将在这里做出第一个假设,假设每个数据点都是独立于其他数据点生成的。这个假设能让计算更容易些。如果事件(即生成数据的过程)是独立的,那么观察所有数据的总概率就是单独观察到每个数据点的概率的乘积(即边缘概率的乘积)。

从高斯分布中生成的单个数据点 x 的(边缘)概率是:
在这里插入图片描述
在表达式 P(x; μ, σ) 中的分号是为了强调在分号后的符号都是概率分布的参数。所以千万不要把这个与条件概率相混淆。条件概率一般会用竖线来表达,比如说 P(A| B)。

在我们的例子中,同时观察到这三个数据点的总(联合)概率是:
在这里插入图片描述
我们只要找出能够让上述表达式最大化的μ、σ值就可以了。

如果你在数学课上学过微积分,那么你可能会意识到有一种技巧可以帮助我们找到函数的最大值(和最小值)。我们所要做的就是求出函数的导数,把导函数设为零然后重新变换方程,使其参数成为方程的未知数。然后就这样,我们将得到参数的 MLE 值。我将串讲一下这些步骤,但我假设读者知道如何对常用函数进行微分。

对数似然函数

上述的总概率表达式实际上是很难微分,所以它几乎总是通过对表达式取自然对数进行简化。这完全没问题,因为自然对数是一个单调递增的函数。这意味着,如果 x 轴上的值增加,y 轴上的值也会增加(见下图)。这一点很重要,因为它确保了概率的最大对数值出现在与原始概率函数相同的点上。因此,我们可以用更简单的对数概率来代替原来的概率。
在这里插入图片描述
原函数的单调性,左边是 y = x,右边是(自然)对数函数 y = ln(x)。

取初始表达式的对数能得到:
在这里插入图片描述
我们可以用对数的运算法则再一次简化这个表达式,得到:
在这里插入图片描述
这个表达式可以通过求导得到最大值。在这个例子中,我们要找到平均值 μ。为此我们对函数求μ的偏导数,得到:
在这里插入图片描述
最后,设置等式的左边为零,然后以μ为未知数整理式子,可以得到:
在这里插入图片描述
这样我们就得到了 μ 的最大似然估计。我们可以用同样的方法得到σ的最大似然估计,σ自行练习

最大似然估计小结

最大似然估计总是能精确地得到解吗?
简单来说,不能。更有可能的是,在真实的场景中,对数似然函数的导数仍然是难以解析的(也就是说,很难甚至不可能人工对函数求微分)。因此,一般采用期望最大化(EM)算法等迭代方法为参数估计找到数值解,但总体思路还是一样的。

为什么叫「最大似然(最大可能性)」,而不是「最大概率」呢?
好吧,这只是统计学家们卖弄学问(但也是有充分的理由)。大多数人倾向于混用「概率」和「似然度」这两个名词,但统计学家和概率理论家都会区分这两个概念。通过观察这个等式,我们可以更好地明确这种混淆的原因。
在这里插入图片描述
这两个表达式是相等的!所以这是什么意思?我们先来定义 P(data; μ, σ) 它的意思是「在模型参数μ、σ条件下,观察到数据 data 的概率」。值得注意的是,我们可以将其推广到任意数量的参数和任何分布。

另一方面,L(μ, σ; data) 的意思是「我们在观察到一组数据 data 之后,参数μ、σ取特定的值的似然度。」

上面的公式表示,给定参数后数据的概率等于给定数据后参数的似然度。但是,尽管这两个值是相等的,但是似然度和概率从根本上是提出了两个不同的问题——一个是关于数据的,另一个是关于参数值的。这就是为什么这种方法被称为最大似然法(极大可能性),而不是最大概率。

什么时候最小二乘参数估计和最大似然估计结果相同?
最小二乘法是另一种常用的机器学习模型参数估计方法。结果表明,当模型向上述例子中一样被假设为高斯分布时,MLE 的估计等价于最小二乘法。

直觉上,我们可以通过理解两种方法的目的来解释这两种方法之间的联系。对于最小二乘参数估计,我们想要找到最小化数据点和回归线之间距离平方之和的直线(见下图)。在最大似然估计中,我们想要最大化数据同时出现的总概率。当待求分布被假设为高斯分布时,最大概率会在数据点接近平均值时找到。由于高斯分布是对称的,这等价于最小化数据点与平均值之间的距离。
在这里插入图片描述
有随机高斯噪声的回归线

2.1推导回归Loss function

损失函数公式:
我们先是搭建好一个模型函数,来输出output。然后根据output和实际的目标值的差距来构造出一个损失函数,来对模型函数里面的w和b进行更新,直到让模型函数的输出和实际的目标值的差距最小,也就是得到最优函数
(1.1) L ( f ) = ∑ n = 1 10 ( y ^ n − f ( x c p n ) ) 2 , L(f) = \sum_{n=1}^{10}\left(\widehat{y}^{n}- f(x^n_{cp})\right)^{2}, \tag{1.1} L(f)=n=110(y nf(xcpn))2,(1.1)
(1.2) L ( f ) = ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 , L(f) = \sum_{n=1}^{10}\left(\widehat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)^{2}, \tag{1.2} L(f)=n=110(y n(b+wxcpn))2,(1.2)

2.2损失函数与凸函数之间的关系

我们想要构造损失函数是为了得到损失函数的最小值,然后得到最小值对应的w和b。
    凸优化,即在一系列以凸函数为条件的限制下,求解目标凸函数的最小值。即使目标函数本身是非凸函数,我们也可以使用一个凸函数去逼近它,以图寻找到一个最优的初始点来求解非凸函数的最小值问题。
    所以我们往往会想通过凸优化的方法,以此来尽可能得到损失函数的最小值。

2.3全局最优和局部最优

在这里插入图片描述
这张图就讲的很清楚

三. 学习导数,泰勒展开

导数

导数(英语:Derivative)是微积分学中重要的基础概念。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。
导数的本质是通过极限的概念对函数进行局部的线性逼近。当函数 f {\displaystyle f} f的自变量在一点 x 0 x_{0} x0上产生一个增量 h {\displaystyle h} h时,函数输出值的增量与自变量增量 h {\displaystyle h} h的比值在 h {\displaystyle h} h趋于0时的极限如果存在,即为 f {\displaystyle f} f x 0 x_{0} x0处的导数,记作 f ′ ( x 0 ) {\displaystyle f'(x_{0})} f(x0) d f d x ( x 0 ) {\displaystyle {\frac {\mathrm {df}}{\mathrm {dx}}}(x_{0})} dxdf(x0) d f d x ∣ x = x 0 {\displaystyle \left.{\frac {\mathrm {d} f}{\mathrm {d} x}}\right|_{x=x_{0}}} dxdfx=x0.
导数是函数的局部性质。不是所有的函数都有导数,一个函数也不一定在所有的点上都有导数。若某函数在某一点导数存在,则称其在这一点可导,否则称为不可导。如果函数的自变量和取值都是实数的话,那么函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率。

泰勒展开

在数学中,泰勒级数(英语:Taylor series)用无限项连加式——级数来表示一个函数,这些相加的项由函数在某一点的导数求得。
在数学上,对于一个在实数或复数 a {\displaystyle a} a邻域上,以实数作为变量或以复数作为变量的函数,并且是无穷可微的函数 f ( x ) {\displaystyle f(x)} f(x),它的泰勒级数是以下这种形式的幂级数:
∑ n = 0 ∞ f ( n ) ( a ) n ! ( x − a ) n \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n !}(x-a)^{n} n=0n!f(n)(a)(xa)n
这里, n ! {\displaystyle n!} n!表示 n {\displaystyle n} n的阶乘,而 f ( n ) ( a ) f^{(n)}(a) f(n)(a)表示函数 f {\displaystyle f} f在点 a {\displaystyle a} a处的 n {\displaystyle n} n阶导数。如果 a = 0 {\displaystyle a=0} a=0,也可以把这个级数称为麦克劳林级数。

知乎有一个泰勒公式讲的非常的好,我放在了参考链接上,有兴趣自己看看

3.1推导梯度下降公式

承接公式(2.1),(2.2),以此

(2.1) ∂ L ∂ w = ∑ n = 1 10 2 ( y ^ n − ( b + w ⋅ x c p n ) ) ( − x c p n ) , \frac{\partial L}{\partial w}= \sum_{n=1}^{10} 2\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)\left(-x_{c p}^{n}\right), \tag{2.1} wL=n=1102(y^n(b+wxcpn))(xcpn),(2.1)
(2.2) ∂ L ∂ b = ∑ n = 1 10 2 ( y ^ n − ( b + w ⋅ x c p n ) ) , \frac{\partial L}{\partial b}= \sum_{n=1}^{10} 2\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right), \tag{2.2} bL=n=1102(y^n(b+wxcpn)),(2.2)
刚开始函数的 w 0 w^0 w0随机生成的,然后通过计算上面损失函数的微分进行更新。
w 1 ← w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 b 1 ← b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 w^{1} \leftarrow w^{0}-\eta\left.\frac{\partial L}{\partial w}\right|_{w=w^{0}, b=b^{0}} \quad b^{1} \leftarrow b^{0}-\eta\left.\frac{\partial L}{\partial b}\right|_{w=w^{0}, b=b^{0}} w1w0ηwLw=w0,b=b0b1b0ηbLw=w0,b=b0
η \eta η就是学习率。
就是通过上面的不断微分更新得到w和b。

3.1梯度下降代码

import numpy as np

np.random.seed(1)
x = np.linspace(0,10,10)
y_label = 2*x +3

def gradient_descent(x, y ,w, b):
    time = 0
    n=0.0001
    w = np.random.randn(1,1)
	b = np.random.randn(1,1)
    loss = np.sum((y - (w*x + b))**2)
    while(loss>0.01)or(time<10000):
        graident_w = np.sum((y - (w*x + b))*(x))
        graident_b = np.sum(y - (w*x + b))
        w = w - n*graident_w
        b = b - n*graident_b
        loss = np.sum((y - (w*x + b))**2)
        print(loss)
    return w, b
    
w_u, b_u = gradient_descent(x, y_label, w, b)

在这里插入图片描述
你会发现后面很难收敛,不怕我有一招,这招下次再说

四. 学习L2-Norm,L1-Norm,L0-Norm

4.1推导正则化公式

min ⁡ 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) \min \frac{1}{N} \sum_{i=1}^{N} L\left(y_{i}, f\left(x_{i}\right)\right)+\lambda J(f) minN1i=1NL(yi,f(xi))+λJ(f)
一般来说,监督学习可以看成最小化下面的目标函数,其中第一项就是 L ( y i , f ( x i ; w ) ) L\left(y_{i}, f\left(x_{i} ; w\right)\right) L(yi,f(xi;w))就是误差平方和,第二项是惩罚项,对引数w的规则化函式 J ( f ) J(f) J(f)迁移约束模型尽可能简单。
一般有三种范式:
L 0 L_0 L0范数是指向量中非0的元素个数。如果我们用L_0$范数来规则化一个引数矩阵w的话,就是希望w的大部分元素都是0,也就是稀疏。
∑ j = 1 , θ j ≠ 0 m θ j 0 \sum_{j=1, \theta_{j} \neq 0}^{m} \theta_{j}^{0} j=1,θj̸=0mθj0
L 1 L_1 L1范数是指向量中各个元素绝对值之和,也就是我们常说的Lasso regularization
∑ j = 1 m ∣ θ j ∣ \sum_{j=1}^{m}\left|\theta_{j}\right| j=1mθj
L 2 L_2 L2范数是指向量中各个元素平方之和,也就是我们常说的Ridge regularization
∑ j = 1 m θ j 2 \sum_{j=1}^{m} \theta_{j}^{2} j=1mθj2
其中为什么叫 L 0 , L 1 , L 2 L_0,L_1,L2 L0,L1,L2
L ( θ ) = ∑ j = 1 m ( θ j 2 ) p L(\theta)=\sum_{j=1}^{m}\left(\sqrt{\theta_{j}^{2}}\right)^{p} L(θ)=j=1m(θj2 )p
而根据p的大小来决定是0,1,2。

4.2说明为什么用L1-Norm代替L0-Norm

L 1 L_1 L1 L 0 L_0 L0都可以实现稀疏,但是 L 1 L_1 L1 L 0 L_0 L0具有更好的优化求解特性而被广泛应用。

4.1学习为什么只对w/Θ做限制,不对b做限制

因为w通常是一个高维参数矢量,w几乎涵盖了所有参数,b只是众多参数的中的一个,这样加上b来做regularization的作用不大,也可以加,只是作用不大

参考文献

https://zhuanlan.zhihu.com/p/25241653
https://zhuanlan.zhihu.com/p/22505062
https://www.jiqizhixin.com/articles/2018-01-09-6
https://www.zhihu.com/question/25627482

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值