李弘毅机器学习_李弘毅的机器学习讲的好吗? - CSDN
  • [机器学习入门] 李弘毅机器学习笔记-7 (Brief Introduction of Deep Learning;深度学习简介) PDF VIDEOUps and downs of Deep LearningThree Steps for Deep LearningStep 1: Neural NetworkFully Connect ...

    [机器学习入门] 李弘毅机器学习笔记-7 (Brief Introduction of Deep Learning;深度学习简介)


    Ups and downs of Deep Learning

    这里写图片描述


    Three Steps for Deep Learning

    这里写图片描述


    Step 1: Neural Network

    这里写图片描述


    Fully Connect Feedforward Network

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述


    Deep = Many hidden layers

    这里写图片描述

    这里写图片描述


    Matrix Operation

    这里写图片描述

    这里写图片描述

    这里写图片描述


    Output Layer

    这里写图片描述


    Example Application

    这里写图片描述

    这里写图片描述


    Step 2 :Goodness of function

    Loss for an Example

    这里写图片描述

    这里写图片描述

    知道了怎样计算Loss,下面就是挑选Loss最小的function。


    Step 3 :Pick the best function

    这里写图片描述


    Deeper is Better?

    这里写图片描述


    Universality Theorem

    这里写图片描述

    展开全文
  • 一、机器学习三步骤: Step1: Define a set of function Model:定义一些函数f1f2...f_1 f_2...f1​f2​... Step2: Goodness of function 使用训练数据,根据输入输出判断函数的好坏。 Step3: Pick the best ...

    一、机器学习三步骤:

    Step1: Define a set of function

    Model:定义一些函数f1f2...f_1 f_2...

    Step2: Goodness of function

    使用训练数据,根据输入输出判断函数的好坏。

    Step3: Pick the best function

    通过Testing挑选出最好的函数。

    二、Learning Map:

    scenario(学习情境) task(要解决的问题) method(解决方法)

    在这里插入图片描述

    1、Supervised Learning(监督学习)

    (1)Regression(回归)

    **定义:**The output of the target function ff is “scalar”

    **例子:**预测PM2.5
    在这里插入图片描述
    在这里插入图片描述

    (2)Classification(分类)
    • Binary Classification

      垃圾邮件分类:输入训练数据,告诉函数邮件是否是垃圾邮件。最后能自己判断邮件情况。

    • Multi-class Classification

      文档分类:输入训练数据,对数据进行多个分类:政治、体育、财经…….

    (3)Struct Learning(结构化预测)

    ​ ------Beyond Classification

    输出的是有结构性的复杂的东西。例如语音识别,根据声音信号的输入输出文字;机器翻译,根据中文输出,输出英文;人脸识别,识别出每个人脸来。

    1. Non-Linear Model(非线性模型)

    主要是Deep Learning、SVM、决策树、K-NN。这种模型的函数十分复杂,可以用来进行图像分类问题。

    2. Linear Model(线性模型)

    (4) Training Data

    数据输入和输出之间有什么联系,输出(output)是数据的标签(label)。大量的label比较难获取。

    2、Unsupervised Learning(非监督学习)

    Machine Reading(机器阅读):机器通过阅读大量的文章,从而学习词语的意思。只有输入数据,但是没有输出。

    Machine Drawing(机器绘画):训练数据是一堆图片,但是没有做标记。

    3、Semi-supervised Learning

    识别猫狗,有一些数据是给猫图数据标记为猫、狗图数据标记为狗。但是一堆没有给猫狗图做标签的数据,对学习也有帮助。

    4、Transfer Learning:

    识别猫狗,一些标记了的数据,另外一些是标记或者没标记的其它不相关的数据,也能够带来帮助。

    5、Reinforcement Learning(强化学习)

    (1 )Supervised v.s. Reinforcement

    Supervised:按照人为监督机器进行学习。
    在这里插入图片描述

    Reinforcement:不会告诉机器怎么做,只会给机器学习后的结果做评分。
    在这里插入图片描述

    1. Regression(回归)

    (1) 例子

    • 股票预测:找一个函数,输入股票数据,得出明天的股票指数。
    • 自动驾驶汽车:找一个函数,根据情境,调整方向盘角度。
    • 推荐系统:找一个函数,输入使用者A和商品B,得出使用者A购买B的可能性。

    (2) 预测宝可梦的CP(Combat Power)值

    1. 找一个函数,输入宝可梦,得出宝可梦进化后的CP值。
      在这里插入图片描述

    Step 1:Model(function set)
    (1)y=b+w.xcp y =b + w.x_{cp} \tag{1}
    其中wwbb都是参数可以是任意值,xcpx_{cp}是预测之前的CP值,yy是预测之后的CP值。

    Linear model(线性方程):y=b+wixiy = b+\sum w_ix_i
    (xix_i是输入的一种属性,wiw_i是weight权重,bb表示bias偏置值)

    Step 2:Goodness of Function

    训练数据:10个宝可梦.(x1,y^1)(x^1, \hat y^1)(x2,y^2)(x^2, \hat y^2)(x3,y^3)(x^3, \hat y^3)x10,y^10)x^{10}, \hat y^{10})
    https://www.openintro.org/stat/data?data=pokemon

    通过训练数据可以定义一个函数的好坏:
    (2)L(f)=L(w,b)=n=110(y^n(b+w.xcpn))2 L(f) = L(w, b) = \sum_{n=1}^{10}(\hat y^n-(b+w.x_{cp}^n))^2 \tag{2}
    (真正的数值减去当前函数预测的数值再取平方,就是估测的误差,再把10个数据误差加起来)

    使用Loss function LL,输入是一个函数,输出是输入函数的不好的程度,然后选择出一个最好的函数。穷举所有的w  bw\;b,然后选出使损失函数值为最小的,就找到了最好的函数。
    f=arg  minL(f)f^* = arg \; minL(f)
    w,b=arg  minL(w,b)w^*,b^* = arg \; minL(w, b)
    arg  minn=110(y^n(b+w.xcpn)arg \; min \sum_{n=1}^{10}(\hat y^n- (b+w.x_{cp}^n)
    Step 3:Gradient Descent(梯度下降)

    通过一个参数ww,考虑损失函数:

    • 随机选取一个初始值w0w^0
    • 计算dLdww=w0\frac{dL}{dw}|_w = w^0,如果斜率是负的,那么增加w的值;如果斜率是正的,那么增加w的值。
    • 计算新的权重w1=w0ηdLdww=w0w^1 = w^0-\eta \frac{dL}{dw}|_{w=w_0},其中的η\eta就是学习率"learning rata"。
    • 重复步骤,计算w2=w1ηdLdww=w1w^2 = w^1-\eta \frac{dL}{dw}|_{w=w_1}
    • 经过多次迭代
    • 遇到鞍点(局部最优点而非全局最优点),可能会导致梯度停止更新。

    经过多次迭代后,能够找到局部最优和全局最优。

    上面讨论的是一个参数的问题,下面讨论两个参数wwbb

    • 随机选取两个参数w0w^0b0b^0
    • 计算两个偏微分:dLdww=w0\frac{dL}{dw}|_{w=w^0}, dLdbw=w0,b=b0\frac{dL}{db}|_{w=w^0,b=b^0}
    • w1=w0ηdLdww=w0,b=b0w^1 = w^0-\eta \frac{dL}{dw}|_{w=w^0, b=b^0}, b1=b0ηdLdbw=w0,b=b0b^1=b^0-\eta\frac{dL}{db}|_{w=w^0,b=b^0}
    • 再计算两个偏微分:dLdww=w1,b=b1\frac{dL}{dw}|_{w=w^1, b=b^1}, dLdbw=w1,b=b1\frac{dL}{db}|_{w=w^1,b=b^1}
    • 更新参数,w2=w1ηdLdww=w1,b=b1w^2 = w^1-\eta \frac{dL}{dw}|_{w=w^1, b=b^1}, b2=b1ηdLdbw=w1,b=b1b^2=b^1-\eta\frac{dL}{db}|_{w=w^1,b=b^1}

    下面使用一张图说明怎么调整包含两个参数的值:
    在这里插入图片描述

    首先,随机选择一个(w, b),然后计算L对w和b的偏微分,根据结果调整梯度大小。下面展开L对w和b的偏微分:
    在这里插入图片描述
    Result
    经训练,y=b+w.xcpy=b+w.x_{cp}的结果:
    b=188.4w=2.7a_e=31.9 b = -188.4 \\ w = 2.7 \\ a\_e = 31.9
    但是真正关心的average—error在于在新的宝可梦上的准确率。在新的10只宝可梦数据测试后,ae=35.0>31.9a_e=35.0>31.9。如果要函数想要做得更好,应该再设计一下model:
    (5)y=b+w1.xcp+w2.(xcp)2 y = b+w_1.x_{cp}+w_2.(x_{cp})^2 \tag{5}
    经过训练之后,结果如下:
    b=10.3w1=1.0w2=2.7×103a_e=15.4 b = -10.3 \\ w_1 = 1.0 \\ w_2 = 2.7 \times 10^{-3} \\ a\_e = 15.4
    但是测试的average_error是18.4。此时average_error已经很低了,但是如果想要更好的function,需要再增加xx的次方数:
    (5)y=b+w1.xcp+w2.(xcp)2+w3.(xcp)3 y = b+w_1.x_{cp}+w_2.(x_{cp})^2+w_3.(x_{cp})^3 \tag{5}
    经过训练之后,结果如下:
    b=6.4w1=0.66w2=4.3×103w2=1.8×106a_e=15.3 b = -6.4 \\ w_1 = 0.66 \\ w_2 = 4.3 \times 10^{-3} \\ w_2 = -1.8 \times 10^{-6} \\ a\_e = 15.3
    测试的average_error是18.1。最好的函数或许是一个更加复杂的函数?
    (6)y=b+w1.xcp+w2.(xcp)2+w3.(xcp)3+w4.(xcp)4 y = b+w_1.x_{cp}+w_2.(x_{cp})^2+w_3.(x_{cp})^3+w_4.(x_{cp})^4 \tag{6}
    训练之后的a_e=14.9a\_e=14.9,但是测试数据上的结果是ae=28.8a_e = 28.8,在新数据上拟合更差了。再加次方数,在测试数据上更糟糕。

    因此,可以得出规律:model更复杂,在训练数据上的误差值就越低,但是在测试数据上不一样,误差值会逐渐降低之后暴增。
    在这里插入图片描述

    这种情况就是"Over fitting",即为过拟合,不是模型越复杂越好,应该选择一个合适的模型。

    或许存在一些隐藏因素影响进化后的CP值?

    Back to Step 1:

    重新设计Model(考虑物种因素):
    在这里插入图片描述
    除去if,写出函数形式:
    在这里插入图片描述
    如果输入数据是某种宝可梦,该宝可梦对应的δ(xs)\delta(x_s)是1,其余的是0。

    考虑到种类之后,在训练数据上的a_e=3.8a\_e = 3.8,在测试数据上a_e=14.3a\_e = 14.3。如果还要完善,则把相关的影响因素全部加入到model中:考虑进化前CP值(xcpx_{cp})、种类(xsx_s)、HP值(xhpx_{hp})、高度(xhx_h)、体重(xwx_w)。

    用这个Model在训练数据上的a_e=1.9a\_e = 1.9,但是在测试数据上是102.3102.3

    Back to Step 2:Regularization

    给Loss function加入正则化:
    (9)y=b+wixiL=n(y^n(b+wixi))2+λ(wi)2 y = b+\sum{w_ix_i} \\ L = \sum_n(\hat y^n-(b+\sum w_ix_i))^2 + \lambda\sum(w_i)^2 \tag{9}
    根据公式(9),可以看出损失函数需要的更优结果是wi|w_i|更小,因此函数会更加平滑,对输入数据更不敏感,变化越小,更不容易被噪音noise影响到,能防止在新数据上偏差大,得到一个比较好的结果。但是也不能太平滑,还是需要调整一个合适的λ\lambda,如下图所示:
    在这里插入图片描述
    正则化为什么不考虑b——因为函数的平滑与否,跟它没关系。

    相关学习

    1 中心极限定理

    (1)定义

    • 样本的平均值约等于总体的平均值。
    • 不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的整体平均值周围,并且呈正态分布。

    (2) 理解

    1. 随机抽取1个样本,样本大小为100,求该样本的平均值。(根据经验,样本大小必须达到30,中心极限定理才保证成立)
    2. 将第1步样本抽取的工作重复再三,不断地从总体随机抽取样本,例如我抽取了5个样本,每个大小为100,并计算出每个样本的平均值,那么5个样本,就会有5个平均值。因此,样本数量为5。
    3. 根据中心极限定理,这些样本平均值中的绝大部分都极为接近总体的平均值。有一些会稍高一点,有一些会稍低一点,只有极少数的样本平均值大大高于或低于群体平均值。
    4. 中心极限定理告诉我们,不论所研究的群体是怎样分布的,这些样本平均值会在总体平均值周围呈现一个正态分布。

    (3) 样本估计整体

    • 标准差:数据集中数值与平均值的偏离程度。

    • 一般样本数据更加紧密聚集在均值周围,所以样本的标准差是要小于总体标准差。

    • 所以,为了更好的用样本估计总体的标准差,统计学家就将标准差的公式做了像下面公式中这样的改造。

      数据集标准差σ\sigma
      (1)σ=(xμ)2n \sigma = \sqrt{\frac{\sum(x-\mu)^2}{n}} \tag{1}
      样本标准差ss
      (2)s=(xμ)2n1 s = \sqrt{\frac{\sum(x-\mu)^2}{n-1}} \tag{2}

    • 原来的标准差公式是除以nn,为了用样本估计总体标准差,现在是除以n1n-1。这样就是的标准略大。

    • 如果只是想计算一个数据集的标准差,那么就除以n;如果想把这个数据集当成一个样本,用这个样本来估计出总体的标准差,那么就除以n-1的标准差公式。

    (4) 标准误差

    • 定义:标准误差其实也是标准差,只不过它是所有样本平均值的标准差。怎么理解呢?其实就是你选取多个样本,对每个样本求平均值,每个平均值又组成了一个新的数据集,然后对这些平均值计算标准差,就是标准误差。概括成一句话:求样本平均值的标准差就是标准误差。

    • 作用:用来衡量样本平均值的波动大小。

    • 计算公式:
      (3)SE=sn SE = \frac{s}{\sqrt{n}} \tag{3}
      标准误差SESE等于总体标准差除以nn的开,可以用样本来估计出总体标准差的公式ss

    (5) 中心极限定理的作用

    1. 在没有办法得到总体全部数据的情况下,我们可以用样本来估计总体
    2. 根据总体的平均值和标准差,判断某个样本是否属于总体

    (6) 中心极限定理的代码模拟

    本代码来源:https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/LLN_CLT.ipynb

    import numpy as np
    from numpy import random as nprd
    
    def sampling(N):
        ## 产生一组样本,以0.5的概率为z+3,0.5的概率为z-3,其中z~N(0,1)
        d = nprd.rand(N)<0.5
        z=nprd.randn(N)
        x=np.array([z[i]+3 if d[i] else z[i]-3 for i in range(N)])
        return x
    
    N=[2,3,4,10,100,1000] # sample size
    M=2000
    MEANS=[]
    for n in N:
        mean_x=np.zeros(M)
        for i in range(M):
            x=sampling(n)
            mean_x[i]=np.mean(x)/np.sqrt(10/n) ## 标准化,因为var(x)=10
        MEANS.append(mean_x)
    
    ## 导入matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.mlab as mlab
    ## 使图形直接插入到jupyter中
    %matplotlib inline
    # 设定图像大小
    plt.rcParams['figure.figsize'] = (10.0, 8.0)
    
    x=sampling(1000)
    plt.xlabel('x')
    plt.ylabel('Density')
    plt.title('Histogram of Mixed Normal')
    plt.hist(x,bins=30,normed=1) ## histgram
    plt.show() ## 画图
    
    ## 均值
    ax1 = plt.subplot(2,3,1)
    ax2 = plt.subplot(2,3,2)
    ax3 = plt.subplot(2,3,3)
    ax4 = plt.subplot(2,3,4)
    ax5 = plt.subplot(2,3,5)
    ax6 = plt.subplot(2,3,6)
    
    ## normal density
    x=np.linspace(-3,3,100)
    d=[1.0/np.sqrt(2*np.pi)*np.exp(-i**2/2) for i in x]
    
    def plot_density(ax,data,N):
        ax.hist(data,bins=30,normed=1) ## histgram
        ax.plot(x,d)
        ax.set_title(r'Histogram of $\bar{x}$:N=%d' % N)
    
    plot_density(ax1,MEANS[0],N[0])
    plot_density(ax2,MEANS[1],N[1])
    plot_density(ax3,MEANS[2],N[2])
    plot_density(ax4,MEANS[3],N[3])
    plot_density(ax5,MEANS[4],N[4])
    plot_density(ax6,MEANS[5],N[5])
    
    
    plt.show() ## 画图
    

    2 正态分布

    • 定义:若随机变量XX服从一个位置参数为μ\mu,尺度参数为σ\sigma的正态分布,记为:
      (4)XN(μ,σ2)f(x)=1σ2πe(xμ)22σ2 X \sim N(\mu, \sigma^2) \\ f(x) = \frac{1}{\sigma \sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} \tag{4}

    • 正态分布中一些值得注意的量:

      • 密度函数关于平均值对称
      • 平均值与它的众数以及中位数是同一数值。
      • 函数曲线下68.268949%的面积在平均数左右的一个标准差范围内。
      • 95.449974%的面积在平均数左右两个标准差2σ2\sigma的范围内。
      • 99.730020%的面积在平均数左右三个标准差3σ3\sigma的范围内。
      • 99.993666%的面积在平均数左右四个标准差4σ4\sigma的范围内。
      • 函数曲线的拐点为离平均数一个标准差距离的位置。

    3 最大似然估计

    • 定义:利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值。提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”的方法。
    • 似然函数:对于函数P(xθ)P(x|\theta),输入xx表示某一个具体的数据,θ\theta表示模型的参数。如果θθ是已知确定的,xx是变量,这个函数叫做概率函数(probability function),它描述对于不同的样本点xx,其出现概率是多少。如果xx是已知确定的,θθ是变量,这个函数叫做似然函数(likelihood function), 它描述对于不同的模型参数,出现xx这个样本点的概率是多少。
    • 最大似然估计(MLE):是求参数θθ, 使似然函数P(x0θ)P(x_0|θ)最大。
    • 例子:假如有一个罐子,里面有黑白两种颜色的球,数目多少不知,两种颜色的比例也不知。想知道罐中白球和黑球的比例,但我们不能把罐中的球全部拿出来数。现在我们可以每次任意从已经摇匀的罐中拿一个球出来,记录球的颜色,然后把拿出来的球再放回罐中。这个过程可以重复,我们可以用记录的球的颜色来估计罐中黑白球的比例。假如在前面的一百次重复记录中,有七十次是白球,请问罐中白球所占的比例最有可能是多少?
      很明显是70%
    • 解释:设例子中100次抽样的结果概率表示为P(样本结果|Model) = p70.(1p)30p^{70}.(1-p)^{30},其中pp表示白球的比例。要求的是模型的参数,也就是求式中的pppp是可以有无数种分布的,例如p=50%p=50\%,此时结果p70.(1p)30=7.81031p^{70}.(1-p)^{30}=7.8 * 10^{-31} 结果是;当p=70p=70%p70.(1p)30=2.951027p^{70}.(1-p)^{30}=2.95*10^{-27}.从这里就能看出,极大似然估计是按照让这个样本结果出现的可能性最大的方法选择Model参数值。

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

    在线性回归中,损失函数LL一定是凸函数。但是其它函数可能是非凸函数,这会导致损失函数存在局部最优解,导致无法找到全局最优解。

    5 泰勒展开

    • 定义:若函数f(x)f(x)在包含x0x_0的某个闭区间[a,b][a,b]上具有n阶导数,且在开区间(a,b)(a,b)上具有(n+1)阶导数,则对闭区间[a,b][a,b]上任意一点xx,成立下式:
      f(x)=f(x0)+f(x0)1!(xx0)+fx0)2!(xx0)2+...+f(n)(x0)n!(xx0)n+Rn(x) f(x) = f(x_0)+\frac{f^`(x_0)}{1!}(x-x_0)+\frac{f^{``}x_0)}{2!}(x-x_0)^2+...+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n+R_n(x)

    6 L2-Norm,L1-Norm,L0-Norm

    • 这三者是机器学习中的正则化,常用来:1)保证模型尽可能的简单,避免过拟合;2)约束模型特性,加入一些先验知识,例如稀疏、低秩等。L1表示曼哈顿距离,L2表示欧式距离。

    • L0范数是指向量中非零元素的个数,如果用L0规则化一个参数矩阵WW,就是希望WW中大部分元素是零,实现稀疏。L1范数是指向量中各个元素的绝对值之和,也叫”系数规则算子(Lasso regularization)“。L1范数也可以实现稀疏,通过将无用特征对应的参数WW置为零实现。L0和L1都可以实现稀疏化,不过一般选用L1而不用L0。L2范数是指向量各元素的平方和然后开方,用在回归模型中也称为岭回归(Ridge regression)。L2避免过拟合的原理是:让L2范数的规则项W2||W||_2 尽可能小,可以使得W每个元素都很小,接近于零,但是与L1不同的是,不会等于0;这样得到的模型抗干扰能力强,参数很小时,即使样本数据xx发生很大的变化,模型预测值yy的变化也会很有限。

    7 正则化及其推导

    1)L1正则化

    大部分的正则化方法是在经验风险或者经验损失LempL_{emp}(emprirical loss)上加上一个结构化风险,我们的结构化风险用参数范数惩罚Ω(θ)Ω(θ),用来限制模型的学习能力、通过防止过拟合来提高泛化能力。所以总的损失函数(也叫目标函数)为:
    (1.1)J(θ;X,y)=Lemp(θ;X,y)+αΩ(θ) J(θ;X,y)=L_{emp}(θ;X,y)+αΩ(θ) \tag{1.1}
    其中XX是输入数据,yy是标签,θθ是参数,α[0,+]α∈[0,+∞]是用来调整参数范数惩罚与经验损失的相对贡献的超参数,当α=0α=0时表示没有正则化,αα越大对应该的正则化惩罚就越大。对于L1正则化,我们有:
    (1.2)Ω(θ)=w1 Ω(θ)=‖w‖_1 \tag{1.2}

    根据上两式,可以推导出L1正则化的目标函数:
    (1.3)J(w;X,y)=Lemp(w;X,y)+αw1 J(w;X,y)=L_{emp}(w;X,y)+α‖w‖_1 \tag{1.3}
    我们的目的是求得使目标函数取最小值的ww^∗,上式对ww求导可得:
    (1.4)wJ(w;X,y)=wLemp(w;X,y)+αsign(w) ∇_wJ(w;X,y)=∇_wL_{emp}(w;X,y)+α⋅sign(w)\tag{1.4}
    其中若w&gt;0w&gt;0,则sign(w)=1sign(w) = 1;若w&lt;0w&lt;0,则sign(w)=1sign(w)=−1;若w=0w=0,则sign(w)=0sign(w)=0。当α=0α=0,假设我们得到最优的目标解是ww^∗,用泰勒公式在ww^∗处展开可以得到:
    (1.5)J(w;X,y)=J(w;X,y)+12(ww)H(ww) J(w;X,y)=J(w^∗;X,y)+\frac12(w−w^∗)H(w−w^∗) \tag{1.5}
    其中HH是关于ww的Hessian矩阵,为了得到更直观的解,我们简化H,假设H是对角矩阵,则有:
    (1.6)H=diag([H1,1,H2,2...Hn,n]) H=diag([H_{1,1}, H_{2,2}...H_{n,n}]) \tag{1.6}
    将上式代入到式(1.3)中可以得到,我们简化后的目标函数可以写成这样:
    (1.7)J(w;X,y)=J(w;X,y)+i[12Hi,i(wiwi)2+αiwi] J(w;X,y)=J(w^∗;X,y)+∑_i[\frac12 H_{i,i}(w_i−w^∗_i)^2+α_i|w_i|] \tag{1.7}
    从上式可以看出,w各个方向的导数是不相关的,所以可以分别独立求导并使之为0,可得:
    (1.8)Hi,i(wiwi)+αsign(wi)=0 H_{i,i}(w_i−w^∗_i)+α⋅sign(w_i)=0 \tag{1.8}
    我们先直接给出上式的解,再来看推导过程:
    (1.9)wi=sign(w)max{wiαHi,i,0} w_i=sign(w^∗)max\{|w^∗_i|−\fracαH_{i,i},0\} \tag{1.9}
    从式(1.7)与式(1.8)可以得到两点:

    1. 可以看到式(1.7)中的二次函数是关于ww^∗对称的,所以若要使式(1.7)最小,那么必有:wi&lt;w|w_i|&lt;|w^∗|,因为在二次函数值不变的程序下,这样可以使得αwiα|w_i|更小。

    2. sign(wi)=sign(wi)sign(w_i)=sign(w^∗_i)w1=0w_1=0,因为在αwiα|w_i|不变的情况下,

      sign(wi)=sign(wi)sign(w_i)=sign(w_i^∗)wi=0w_i=0可以使式(1.7)更小。

    由式(1.8)与上述的第2点,可以得到:
    (1.10)0=Hi,i(wiwi)+αsign(wi)wi=wiαHi,isign(wi)wi=sign(wi)wiαHi,isign(wi)=sign(wi)(wiαHi,i) 0=H_{i,i}(w_i−w^∗_i)+α⋅sign(w^∗_i) \\ w_i=w^∗_i−\fracαH_{i,i}sign(w^∗_i) \\ w_i=sign(w^∗_i)|w^∗_i|−αH_{i,i}sign(w^∗i) \\ =sign(w^∗_i)(|w^∗_i|−\fracαH_{i,i}) \tag{1.10}
    我们再来看一下第2点:sign(wi)=sign(wi)sign(w_i)=sign(w^∗_i)w1=0w_1=0,若wi&lt;αHi,i|w^∗_i|&lt;\frac αH_{i,i},那么有sign(wi)sign(wi)sign(w_i)≠sign(w^∗i),所以这时有w1=0w_1=0,由于可以直接得到解式(1.9)。从这个解可以得到两个可能的结果:

    1. wiαHi,i|w^∗i|≤αH_{i,i},正则化后目标中的wiw_i的最优解是wi=0w_i=0。因为这个方向上Lemp(w;X,y)L_{emp}(w;X,y)的影响被正则化的抵消了。
    2. wi&gt;αHi,i|w^∗_i|&gt;\fracαH_{i,i},正则化不会推最优解推向0,而是在这个方面上向原点移动了αHi,iαHi,i的距离。

    8 L1-Norm代替L0-Norm

    原因包括:

    (1)L0范数很难优化求解(NP难);

    (2)L1是L0的最优凸近似,比L0更容易优化求解。

    9 为什么只对w/Θ做限制,不对b做限制

    因为影响梯度大小的只有ww值,而与bb无关。

    展开全文
  • 李宏毅机器学习系列-深度学习简介深度学习的概况深度学习的步骤前馈神经网络全连接神经网络数字识别分类总结 深度学习的概况 深度学习从2012年的图像识别比赛开始就复苏了,发展越来越快,越来越好,具体他的发展...

    深度学习的概况

    深度学习从2012年的图像识别比赛开始就复苏了,发展越来越快,越来越好,具体他的发展历史可以百度下,可以追溯到很早时期,还有几个大起大落的阶段:
    在这里插入图片描述
    可以看看这些时间点的重要发展:
    在这里插入图片描述

    深度学习的步骤

    那深度学习的步骤是怎么样的呢,其实跟我们前面说的机器学习差不多,就跟把大象放冰箱里的步骤差不多:
    在这里插入图片描述
    我们上次讲到了神经网络就是深度学习的重要部分,是由对个逻辑回归单元组合起来的:
    在这里插入图片描述

    前馈神经网络

    先介绍下这个,其实就是前向传播,从输入计算到输出,输入的是向量,每个向量的每个特征都与后一层的每个神经元相连,通过激活函数计算输入,然后继续往后面的层输入,最后到输出层,是一个向量,比如图上的例子输入是[1,-1],经过第一层的计算后,得到[0.98,0.12],很明显经过了sigmoid的非线性作用:
    在这里插入图片描述
    那我们继续这样计算,知道计算到最后的输出:
    在这里插入图片描述
    那这整一个网络结构就可以看做是一个模型集合,输入是一个向量,输出也是一个向量:
    在这里插入图片描述

    全连接神经网络

    我们来定义下这个网络,输入的向量也看做一层,叫做输入层,最后输出的向量叫输出层,中间的都叫隐藏层,每个层之间的神经网络都是相互连接的,所以叫做全连接神经网络:
    在这里插入图片描述
    所以深度学习的深度可以看做隐藏层的层数很多,所以看上去很深,比如经典的一些模型AlexNet,VGG,GoogleNet:
    在这里插入图片描述
    当然还有残差神经网络Residual Net:
    在这里插入图片描述
    其实神经网络的计算,我们可以用矩阵,这样就可以在GPU上计算,可以大大缩短时间,比如:
    在这里插入图片描述
    上面的值是一层,其实每一层都是这么计算的,计算出的结果向量又作为下一层的输入:
    在这里插入图片描述
    所以输出可以看成一个个sigmoid函数叠起来的结果,有点像递归调用啊:
    在这里插入图片描述
    通常我们把最后的输出层当做多分类器,中间的隐藏层其实就变成了特征提取器了:
    在这里插入图片描述

    数字识别分类

    我们来举一个识别数字的例子:
    我们希望输入一张数字的图片,输出是一个数字:
    在这里插入图片描述
    我们的输入是16x16像素的图,如果是填充颜色的就是1,没有就是0,因此有256个点也就是256个特征输入:
    在这里插入图片描述
    我们的输出是一个10维的向量,每一个维度代表一个数字的概率,取概率最大的为分类的数字,如下,2的概率有0.7,所以这个图片的数字被预测为2:
    在这里插入图片描述
    然后我们需要设计一些隐藏层来组成这个模型:
    在这里插入图片描述
    那么问题来了,隐藏层多少层好呢,每一层的神经元个数多少好呢,这个没有很准确的答案,很多的是根据经验试错和直觉得来的,也就是实际结果得出来的,当然也有让机器自动选择要多少层,另外网络的结构能不能变呢,可以的,可以用CNN或者RNN或者其他的:
    在这里插入图片描述
    接下来要定义模型的好坏了,我们拿真实的预测值和预测的值做交叉熵作为损失函数,为什么不用均方差前面一篇将过了,梯度为0的地方可能是远离最小点的:
    在这里插入图片描述
    于是我们拿很多的样本来进行训练,计算总的损失,我们希望损失越小越好,最小的损失的参数模型就是我们要找的:
    在这里插入图片描述
    那怎么样找出这个损失最小的模型呢,还是我们的梯度下降法:

    在这里插入图片描述
    其实这个过程就是反向传播,具体是用链式法则求导的,也就是一个计算梯度更新参数的过程,当然当参数很复杂的时候我们不可能手动去算,现在有很多的框架,当然下面列的可能是比较老的了,现在一般有keras,pytorch,tensorflow,mxnet等等:
    在这里插入图片描述
    至此,深度学习怎么训练最基本的步骤讲完了。

    总结

    本篇简单介绍了深度学习的基本框架,介绍全连接神经网络的架构,介绍了前向传播和反向传播,其实如果考虑特征空间问题,那么隐藏层在做的是就是把原始的特征空间不断的进行扭曲变形,生成新的特征空间,也就是特征被映射到新的特征空间,就是坐标变换,用来做分类或者回归,而每一层的神经元的个数就是特征空间的维度,维度越高越容易区分。附上思维导图:
    在这里插入图片描述
    好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

    展开全文
  • 李弘毅机器学习笔记:第二章回归定义和应用例子回归定义应用举例模型步骤Step 1:模型假设 - 线性模型一元线性模型(单个特征)多元线性模型(多个特征)Step 2:模型评估 - 损失函数收集和查看训练数据如何判断众多...

    回归定义和应用例子

    回归定义

    Regression 就是找到一个函数 functionfunction ,通过输入特征 xx,输出一个数值 ScalarScalar

    应用举例

    • 股市预测(Stock market forecast)
      • 输入:过去10年股票的变动、新闻咨询、公司并购咨询等
      • 输出:预测股市明天的平均值
    • 自动驾驶(Self-driving Car)
      • 输入:无人车上的各个sensor的数据,例如路况、测出的车距等
      • 输出:方向盘的角度
    • 商品推荐(Recommendation)
      • 输入:商品A的特性,商品B的特性
      • 输出:购买商品B的可能性
    • Pokemon精灵攻击力预测(Combat Power of a pokemon):
      • 输入:进化前的CP值、物种(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)
      • 输出:进化后的CP值

    模型步骤

    • step1:模型假设,选择模型框架(线性模型)
    • step2:模型评估,如何判断众多模型的好坏(损失函数)
    • step3:模型优化,如何筛选最优的模型(梯度下降)

    Step 1:模型假设 - 线性模型

    一元线性模型(单个特征)

    以一个特征 xcpx_{cp} 为例,线性模型假设 y=b+wxcpy = b + w·x_{cp} ,所以 wwbb 可以猜测很多模型:
    f1:y=10.0+9.0xcpf2:y=9.8+9.2xcpf3:y=0.81.2xcp f_1: y = 10.0 + 9.0·x_{cp} \\ f_2: y = 9.8 + 9.2·x_{cp} \\ f_3: y = - 0.8 - 1.2·x_{cp} \\ ···

    虽然可以做出很多假设,但在这个例子中,显然 f3:y=0.81.2xcpf_3: y = - 0.8 - 1.2·x_{cp} 的假设是不合理的,不能进化后CP值是个负值吧~~

    多元线性模型(多个特征)

    在实际应用中,输入特征肯定不止 xcpx_{cp} 这一个。例如,进化前的CP值、物种(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)等,特征会有很多。

    在这里插入图片描述

    所以我们假设 线性模型 Linear modely=b+wixiy = b + \sum w_ix_i

    • xix_i:就是各种特征(fetrure) xcp,xhp,xw,xh,x_{cp},x_{hp},x_w,x_h,···
    • wiw_i:各个特征的权重 wcp,whp,ww,wh,w_{cp},w_{hp},w_w,w_h,··
    • bb:偏移量

    注意:接下来的内容需要看清楚是【单个特征】还是【多个特征】的示例

    Step 2:模型评估 - 损失函数

    【单个特征】: xcpx_{cp}

    收集和查看训练数据

    这里定义 x1x^1 是进化前的CP值,y^1\hat{y}^1 进化后的CP值,^\hat{} 所代表的是真实值

    在这里插入图片描述
    将10组原始数据在二维图中展示,图中的每一个点 (xcpn,y^n)(x_{cp}^n,\hat{y}^n) 对应着 进化前的CP值 和 进化后的CP值。

    在这里插入图片描述

    如何判断众多模型的好坏

    有了这些真实的数据,那我们怎么衡量模型的好坏呢?从数学的角度来讲,我们使用距离。求【进化后的CP值】与【模型预测的CP值】差,来判定模型的好坏。也就是使用损失函数(Loss function) 来衡量模型的好坏,统计10组原始数据 (y^nf(xcpn))2\left ( \hat{y}^n - f(x_{cp}^n) \right )^2 的和,和越小模型越好。如下图所示:
    在这里插入图片描述
    如果觉得看着这个图会晕,忽略图4,直接看公式推导的过程:

    L(f)=n=110(y^nf(xcpn))2f(x)=y,y=b+wxcp=n=110(y^n(b+wxcp))2 \begin{aligned} L(f) &amp; = \sum_{n=1}^{10}\left ( \hat{y}^n - f(x_{cp}^n) \right )^2,将【f(x) = y】, 【y= b + w·x_{cp}】代入 \\ &amp; = \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2\\ \end{aligned}

    最终定义 损失函数 Loss function:L(w,b)=n=110(y^n(b+wxcp))2L(w,b)= \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2

    我们将 ww, bb 在二维坐标图中展示,如图所示:

    在这里插入图片描述

    • 图中每一个点代表着一个模型对应的 wwbb
    • 颜色越深代表模型更优

    可以与后面的图11(等高线)进行对比

    Step 3:最佳模型 - 梯度下降

    【单个特征】: xcpx_{cp}

    如何筛选最优的模型(参数w,b)

    已知损失函数是 L(w,b)=n=110(y^n(b+wxcp))2L(w,b)= \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2 ,需要找到一个令结果最小的 ff^*,在实际的场景中,我们遇到的参数肯定不止 ww, bb

    在这里插入图片描述

    先从最简单的只有一个参数ww入手,定义w=arg minxL(w)w^* = arg\ \underset{x}{\operatorname{\min}} L(w)

    在这里插入图片描述

    首先在这里引入一个概念 学习率 :移动的步长,如图7中 η\eta

    • 步骤1:随机选取一个 w0w^0
    • 步骤2:计算微分,也就是当前的斜率,根据斜率来判定移动的方向
      • 大于0向右移动(增加ww
      • 小于0向左移动(减少ww
    • 步骤3:根据学习率移动
    • 重复步骤2和步骤3,直到找到最低点

    在这里插入图片描述

    步骤1中,我们随机选取一个 w0w^0,如图8所示,我们有可能会找到当前的最小值,并不是全局的最小值,这里我们保留这个疑问,后面解决。

    解释完单个模型参数ww,引入2个模型参数 wwbb , 其实过程是类似的,需要做的是偏微分,过程如图9所示,偏微分的求解结果文章后面会有解释,详细的求解过程自行Google。

    在这里插入图片描述
    整理成一个更简洁的公式:

    在这里插入图片描述

    梯度下降推演最优模型的过程

    如果把 wwbb 在图形中展示:

    在这里插入图片描述

    • 每一条线围成的圈就是等高线,代表损失函数的值,颜色约深的区域代表的损失函数越小
    • 红色的箭头代表等高线的法线方向

    梯度下降算法在现实世界中面临的挑战

    我们通过梯度下降gradient descent不断更新损失函数的结果,这个结果会越来越小,那这种方法找到的结果是否都是正确的呢?前面提到的当前最优问题外,还有没有其他存在的问题呢?

    在这里插入图片描述

    其实还会有其他的问题:

    • 问题1:当前最优(Stuck at local minima)
    • 问题2:等于0(Stuck at saddle point)
    • 问题3:趋近于0(Very slow at the plateau)

    在这里插入图片描述
    注意:其实在线性模型里面都是一个碗的形状(山谷形状),梯度下降基本上都能找到最优点,但是再其他更复杂的模型里面,就会遇到 问题2 和 问题3 了

    w和b偏微分的计算方法

    在这里插入图片描述

    如何验证训练好的模型的好坏

    使用训练集和测试集的平均误差来验证模型的好坏
    我们使用将10组原始数据,训练集求得平均误差为31.9,如图所示:

    在这里插入图片描述

    然后再使用10组Pokemons测试模型,测试集求得平均误差为35.0 如图所示:

    在这里插入图片描述

    更强大复杂的模型:1元N次线性模型

    在模型上,我们还可以进一部优化,选择更复杂的模型,使用1元2次方程举例,如图17,发现训练集求得平均误差为15.4,测试集的平均误差为18.4

    在这里插入图片描述

    这里我们又提出一个新的问题:是不是能画出直线就是线性模型,各种复杂的曲线就是非线性模型?
    其实还是线性模型,因为把 xcp1x_{cp}^1 = (xcp)2(x_{cp})^2 看作一个特征,那么 y=b+w1xcp+w2xcp1y = b + w_1·x_{cp} + w_2·x_{cp}^1 其实就是线性模型。

    过拟合问题出现

    在模型上,我们再可以进一部优化,使用更改次方的模型,如图所示

    • 训练集平均误差【15.4】【15.3】【14.9】【12.8】
    • 测试集平均误差【18.4】【18.1】【28.8】【232.1】
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    在训练集上面表现更为优秀的模型,为什么在测试集上效果反而变差了?这就是模型在训练集上过拟合的问题。

    如图所示,每一个模型结果都是一个集合,5435次模型包 \supseteq 4次模型 \supseteq 3次模型
    所以在4次模型里面找到的最佳模型,肯定不会比5次模型里面找到更差
    在这里插入图片描述

    将错误率结果图形化展示,发现3次方以上的模型,已经出现了过拟合的现象:

    在这里插入图片描述

    步骤优化

    输入更多Pokemons数据,相同的起始CP值,但进化后的CP差距竟然是2倍。如图21,其实将Pokemons种类通过颜色区分,就会发现Pokemons种类是隐藏得比较深得特征,不同Pokemons种类影响了进化后的CP值的结果。

    在这里插入图片描述

    Step1优化:2个input的四个线性模型是合并到一个线性模型中

    通过对 Pokemons种类 判断,将 4个线性模型 合并到一个线性模型中

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    Step2优化:如果希望模型更强大表现更好(更多参数,更多input)

    在最开始我们有很多特征,图形化分析特征,将血量(HP)、重量(Weight)、高度(Height)也加入到模型中

    在这里插入图片描述

    在这里插入图片描述

    更多特征,更多input,数据量没有明显增加,仍旧导致overfitting

    Step3优化:加入正则化

    更多特征,但是权重 ww 可能会使某些特征权值过高,仍旧导致overfitting,所以加入正则化

    在这里插入图片描述

    在这里插入图片描述

    • ww 越小,表示 functionfunction 较平滑的, functionfunction输出值与输入值相差不大
    • 在很多应用场景中,并不是 ww 越小模型越平滑越好,但是经验值告诉我们 ww 越小大部分情况下都是好的。
    • bb 的值接近于0 ,对曲线平滑是没有影响

    总结

    在这里插入图片描述

    • Pokemon:原始的CP值极大程度的决定了进化后的CP值,但可能还有其他的一些因素。
    • Gradient descent:梯度下降的做法;后面会讲到它的理论依据和要点。
    • Overfitting和Regularization:过拟合和正则化,主要介绍了表象;后面会讲到更多这方面的理论
    展开全文
  • [机器学习入门] 李弘毅机器学习笔记-16 (Unsupervised Learning: Neighbor Embedding;无监督学习:邻域嵌套) PDF VIDEOManifold Learning 我们要做的是非线性的降维,data是分布在低维空间里面,只是被扭曲到...
  • 李弘毅机器学习笔记

    2020-07-29 14:20:14
    李弘毅机器学习笔记,李弘毅机器学习笔记,李弘毅机器学习笔记。
  • 李弘毅机器学习笔记:第一章机器学习介绍机器学习相关的技术监督学习半监督学习迁移学习无监督学习监督学习中的结构化学习强化学习小贴士 机器学习介绍 这门课,我们预期可以学到什么呢?我想多数同学的心理预期就是...
  • 李弘毅机器学习笔记:第十六章—无监督学习聚类K-means层次聚类Distributed Representation降维降维样例特征选择主成分分析数学推导主成分分析的另一个角度奇异值分解主成分分析和神经网络缺点应用实例矩阵分解FM...
  • 李弘毅机器学习笔记:回归演示 现在假设有10个x_data和y_data,x和y之间的关系是y_data=b+w*x_data。b,w都是参数,是需要学习出来的。现在我们来练习用梯度下降找到b和w。 x_data = [338., 333., 328., 207., 226.,...
  • 李弘毅机器学习:第四章—梯度下降法什么是梯度下降法?Review: 梯度下降法Tip1:调整学习速率小心翼翼地调整学习率自适应学习率Adagrad 算法Adagrad 是什么?Adagrad举例Adagrad 存在的矛盾?多参数下结论不一定...
  • 李弘毅机器学习笔记:第十四章—Why deep?问题1:越深越好?问题2:矮胖结构 v.s. 高瘦结构引入模块化深度学习使用语音识别举例语音辨识:传统的实现方法:HMM-GMM深度学习的实现方法 DNN两种方法的对比 GMM v.s. ...
  • 今天上B站的时候突然间看到居然有阿婆主上传了台大李弘毅教授的机器学习课程的视频,点开进去看了一下,发现这个老师真的是挺逗的,对于我这个初学者来说,课讲的也很棒(课程主页)。所以打算在这里做一个课程的...
  • 李弘毅机器学习笔记:第七章—深度学习的发展趋势 回顾一下deep learning的历史: 1958: Perceptron (linear model) 1969: Perceptron has limitation 1980s: Multi-layer perceptron Do not have significant ...
  • 李弘毅机器学习笔记:第三章—Error的来源 从上节课测试集数据来看,Average ErrorAverage\ ErrorAverage Error 随着模型复杂增加呈指数上升趋势。更复杂的模型并不能给测试集带来更好的效果,而这些 ...
  • 李弘毅机器学习笔记:第十二章—Recipe of Deep Learning神经网络的表现如何改进神经网络?新的激活函数梯度消失怎么样去解决梯度消失?Adaptive Learning RateEarly StoppingRegularizationDropout 当你的模型表现...
  • 李弘毅机器学习笔记:第十五章—半监督学习监督学习和半监督学习半监督学习的好处监督生成模型和半监督生成模型监督生成模型半监督生成模型假设一:Low-density SeparationSelf-training基于熵的正则化半监督SVM假设...
  • 李弘毅机器学习笔记:第十二章—CNN为什么用CNNSmall regionSame PatternsSubsamplingCNN架构ConvolutionPropetry1Propetry2convolution和fully connected之间的关系Max poolingFlattenCNN in KerasCNN学到了什么?...
  • 李弘毅机器学习笔记:第七章—Backprogation背景梯度下降链式法则反向传播取出一个Neuron进行分析Forward PassBackward Passcase 1 : Output layercase 2 : Not Output Layer总结 背景 梯度下降 给到 θ\thetaθ ...
  • 李弘毅机器学习笔记:第十章:Keras2.0创建网络配置选择最好的方程使用模型 创建网络 假设我们要做的事情是手写数字辨识,那我们要建一个Network scratch,input是28∗2828\ast 2828∗28的dimension,其实就是说这是...
  • 李弘毅机器学习笔记:第六章—Logistic Regressionlogistic回归Step1 逻辑回归的函数集Step2 定义损失函数Step3 寻找最好的函数损失函数:为什么不学线性回归用平方误差?判别模型v.s. 生成模型一个好玩的例子判别...
1 2 3 4 5 ... 13
收藏数 241
精华内容 96
关键字:

李弘毅机器学习