一. 机器学习:

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

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

2.1推导回归Loss function

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

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

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

2.3全局最优和局部最优

李宏毅机器学习1
这张图就讲的很清楚

三. 学习导数,泰勒展开

3.1推导梯度下降公式

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

(2.1)Lw=n=1102(y^n(b+wxcpn))(xcpn), \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}
(2.2)Lb=n=1102(y^n(b+wxcpn)), \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}
刚开始函数的w0w^0随机生成的,然后通过计算上面损失函数的微分进行更新。
w1w0ηLww=w0,b=b0b1b0ηLbw=w0,b=b0 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}}
η\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)

李宏毅机器学习1
你会发现后面很难收敛,不怕我有一招,这招下次再说

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

4.1推导正则化公式

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

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

L1L_1L0L_0都可以实现稀疏,但是L1L_1L0L_0具有更好的优化求解特性而被广泛应用。

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

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

参考文献

https://zhuanlan.zhihu.com/p/22505062

相关文章:

  • 2020-10-02
  • 2021-12-12
  • 2019-07-24
  • 2020-04-01
  • 2021-09-20
  • 2021-06-13
  • 2021-12-12
  • 2020-12-24
猜你喜欢
  • 2019-03-13
  • 2019-11-05
  • 2020-05-01
  • 2021-08-04
  • 2020-12-22
  • 2021-09-20
  • 2019-03-23
  • 2021-09-30
相关资源
相似解决方案