牛客网算法八股刷题系列卷积函数随机梯度下降ReLU

Posted 静静的喝酒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客网算法八股刷题系列卷积函数随机梯度下降ReLU相关的知识,希望对你有一定的参考价值。

牛客网算法八股刷题系列——卷积函数、随机梯度下降、ReLU

题目描述

本节并不过多针对题目中的非线性,而更多关注随机梯度下降、卷积运算自身以及卷积运算与全连接运算在动机上的差异性。

下列哪一项在神经网络中引入了非线性 ? ( ) ?(\\quad) ?()

A \\mathcal A \\quad A随机梯度下降

B \\mathcal B\\quad B修正线性单元 ( ReLU ) (\\textReLU) (ReLU)

C \\mathcal C \\quad C卷积函数

D \\mathcal D \\quad D以上都不正确

正确答案: B \\mathcal B B

题目解析

A \\mathcal A \\quad A随机梯度下降 ( Stochastic Gradient Descent,SGD ) (\\textStochastic Gradient Descent,SGD) (Stochastic Gradient Descent,SGD)梯度下降法( Gradient Descent,GD \\textGradient Descent,GD Gradient Descent,GD)系列的一种算法表达。

梯度下降法的基础上,随机梯度下降的核心操作在于:每次算法迭代中的采样操作

关于机器学习算法中的代价函数 J \\mathcal J J可以分解成每个样本的损失函数总和:
已知数据集合 D = x ( i ) , y ( i ) i = 1 N \\mathcal D = \\x^(i),y^(i)\\_i=1^N D=x(i),y(i)i=1N并以此作为‘真实分布/真实模型’ P d a t a \\mathcal P_data Pdata的参考。在极大似然估计与最大后验概率估计中介绍过,真实模型是客观的,是无法准确得到的分布结果。因而 D \\mathcal D D可理解为从真实分布 P d a t a \\mathcal P_data Pdata中采集出的样本组成的集合。
J ( θ ) = E x ( i ) , y ( i ) ∈ P d a t a L ( x ( i ) , y ( i ) ; θ ) = 1 N ∑ i = 1 N L ( x ( i ) , y ( i ) ; θ ) \\beginaligned \\mathcal J(\\theta) & = \\mathbb E_x^(i),y^(i) \\in \\mathcal P_data \\mathcal L(x^(i),y^(i);\\theta) \\\\ & = \\frac1N \\sum_i=1^N \\mathcal L(x^(i),y^(i);\\theta) \\endaligned J(θ)=Ex(i),y(i)PdataL(x(i),y(i);θ)=N1i=1NL(x(i),y(i);θ)
其中, L \\mathcal L L损失函数,根据不同的处理任务,可使用不同的损失函数,这里不过多描述。基于梯度下降法,我们需要计算代价函数关于参数 θ \\theta θ梯度 ∇ θ J ( θ ) \\nabla_\\theta \\mathcal J(\\theta) θJ(θ)
∇ θ J ( θ ) = 1 N ∑ i = 1 N ∇ θ L ( x ( i ) , y ( i ) ; θ ) \\nabla_\\theta\\mathcal J(\\theta) = \\frac1N \\sum_i=1^N \\nabla_\\theta \\mathcal L(x^(i),y^(i);\\theta) θJ(θ)=N1i=1NθL(x(i),y(i);θ)

关于随机梯度下降,它的底层逻辑是:梯度自身就是期望结果,而期望可以用小规模样本近似估计。针对上式,可以使用牛顿-莱布尼兹公式,将梯度符号与积分号调换位置
∇ θ J ( θ ) = 1 N ∇ θ [ ∑ i = 1 N L ( x ( i ) , y ( i ) ; θ ) ] \\nabla_\\theta\\mathcal J(\\theta) = \\frac1N \\nabla_\\theta \\left[\\sum_i=1^N \\mathcal L(x^(i),y^(i);\\theta)\\right] θJ(θ)=N1θ[i=1NL(x(i),y(i);θ)]
因而上式描述的就是: N N N个样本对应损失函数结果期望的梯度。如果样本量 N N N足够大,每一次求解梯度的代价(计算量)也是足够高的。

期望自身是可以使用小规模样本近似估计,针对庞大的数据集合 D \\mathcal D D,在迭代过程中均匀抽取小批量( MiniBatch \\textMiniBatch MiniBatch)样本 D ′ = ( x ( i ) , y ( i ) ) i = 1 m ∈ D \\mathcal D' = \\(x^(i),y^(i))\\_i=1^m \\in \\mathcal D D=(x(i),y(i))i=1mD,这个 m m m是一个很小的数值,从一到几百。使用这种方式进行训练,其最大的优势是大幅度缩短迭代过程中的计算时长
E x ( i ) , y ( i ) ∈ D ′ [ L ( x ( i ) , y ( i ) ; θ ) ] ≈ J ( θ ) g = 1 m ∇ θ [ ∑ i = 1 m L ( x ( i ) , y ( i ) ; θ ) ] ≈ ∇ θ J ( θ ) \\begincases \\mathbb E_x^(i),y^(i) \\in \\mathcal D' \\left[\\mathcal L(x^(i),y^(i);\\theta)\\right] \\approx \\mathcal J(\\theta)\\\\ g = \\frac1m \\nabla_\\theta \\left[\\sum_i=1^m \\mathcal L(x^(i),y^(i);\\theta)\\right] \\approx \\nabla_\\theta \\mathcal J(\\theta) \\endcases Ex(i),y(i)D[L(x(i),y(i);θ)]J(θ)g=m1θ[i=1mL(x(i),y(i);θ)]θJ(θ)
具体执行过程表示如下:

  • 在采样之前,将数据集

    牛客网算法八股刷题系列概率密度函数累积分布函数概率质量函数

    牛客网算法八股刷题系列——概率密度函数、累积分布函数、概率质量函数

    题目描述

    以下关于 PMF \\textPMF PMF(概率质量函数), PDF \\textPDF PDF(概率密度函数), CDF \\textCDF CDF(累积分布函数)描述错误的是 ( ) (\\quad) ()

    A PDF \\mathcal A \\quad \\textPDF APDF描述的是连续型随机变量在特定取值空间的概率

    B CDF \\mathcal B \\quad \\textCDF BCDF PDF \\textPDF PDF在特定区间上的积分

    C PMF \\mathcal C \\quad \\textPMF CPMF描述的是离散型随机变量在特定取值点的概率

    D \\mathcal D \\quad D有一个分布的 CDF \\textCDF CDF函数 H ( a ) \\mathcal H(a) H(a),则 H ( a ) = P ( x ≤ a ) \\mathcal H(a) = \\mathcal P(x \\leq a) H(a)=P(xa)

    正确答案: A \\mathcal A A

    题目解析

    该问题中最容易被忽视的点:概率密度函数 ( Probability Density Function,PDF ) (\\textProbability Density Function,PDF) (Probability Density Function,PDF),它的函数输出值描述的是对应输入事件发生的可能性

    • 但这个可能性不是概率
    • 概率描述的是函数在某范围内的积分
    • 连续型随机变量取值在任意一点概率均为 0 0 0

    举一个实际例子:一维高斯分布概率密度函数
    f ( x ) = 1 σ ⋅ 2 π exp ⁡ − ( x − μ ) 2 σ 2 f(x) = \\frac1\\sigma \\cdot \\sqrt2\\pi \\exp \\left\\-\\frac(x - \\mu)^2\\sigma^2\\right\\ f(x)=σ2π 1expσ2(xμ)2
    它的函数图像表示如下 ( μ = 0 , σ = 1 ) (\\mu=0,\\sigma=1) (μ=0,σ=1)

    由于均值 μ = 0 \\mu=0 μ=0的原因,在图像中观察, x = 0 x=0 x=0对应的可能性最高的
    f ( 0 ) = 1 2 π exp ⁡ 0 ≈ 0.3989 f(0) = \\frac1\\sqrt2\\pi \\exp^0 \\approx 0.3989 f(0)=2π 1exp00.3989
    但是该点对应的概率 P ( x = 0 ) = 0 \\mathcal P(x=0) =0 P(x=0)=0,但并不是说 x = 0 x = 0 x=0是不可能发生事件。
    如何用概率密度函数来描述概率呢?积分

    作为概率密度函数的性质,有:
    ∫ − ∞ + ∞ f ( x ) d x = 1 \\int_-\\infty^+\\infty f(x) dx = 1 +f(x)dx=1
    如果将积分在图像中进行描述,其表示函数图像与坐标轴在某一范围内围成图像的面积。依然以 x = 0 x = 0 x=0为例,它在图像中的概率结果表示为:

    很明显,这仅仅是一个线段。而线段自身没有面积。这也可以说明:连续型随机变量取值在任意一点概率均为 0 0 0

    如果想要描述 P ( − 2 < x < 0 ) \\mathcal P(-2<x<0) P(2<x<0)概率结果,对应在概率密度函数图像中表示为如下形式:
    阴影面积部分。

    因而它的概率是积分结果,而不是函数值。从另一个角度观察,如果某一个一维高斯分布方差较小,从而出现下图现象:

    很明显,如果 PDF \\textPDF PDF函数结果表示概率值,那么橙色线 0 0 0对应的函数结果显然超过概率结果上界 1 1 1了,自然也是不合理的。 A \\mathcal A \\quad A 选项错误。

    B D \\mathcal B \\quad \\mathcal D\\quad BD 选项中提到了累积分布函数 ( Cumulative Distribution Function,CDF ) (\\textCumulative Distribution Function,CDF) (Cumulative Distribution Function,CDF),首先它是概率密度函数的积分,简单来说,它将积分结果映射到了函数值上。

    从计算角度来看,概率密度函数累积分布函数的导数。依然以一维高斯分布为例,它的累积分布函数表示如下:
    这里并没有将‘累积分布函数’的公式求解出来,仅通过采样的方式近似求解。

    import math
    import matplotlib.pyplot as plt
    import numpy as np
    
    def pdf(mu,sigma,x):
        return (1 / (math.sqrt(2 * math.pi) * sigma)) * math.exp(-1 * (((x - mu) ** 2) / (2 * (sigma ** 2))))
    
    def func(x):
        return math.exp(-1 *(x ** 2))
    
    def erf(x):
        if x > 0:
            x_l = np.arange(0,x,0.01)
            y_l = np.array([func(i) for i in x_l])
        else:
            x_l = np.arange(x,0,0.01)
            y_l = np.array([-1 * func(i) for i in x_l])
        res = (2 / (math.sqrt(math.pi))) * np.trapz(y_l,x_l)
        return res
    
    def cdf(mu,sigma,x):
        input_x = (x - mu) / (sigma * (2 ** 0.5))
        return 0.5 * (1 + erf(input_x))
    
    if __name__ == '__main__':
        mu_0,sigma_0 = 0,1
        mu_1,sigma_1 = 0.8,1.5
        x = list(np.linspace(-6,6,300))
        y = [cdf(mu_0,sigma_0,i) for i in x]
        y_pdf = [pdf(mu_0,sigma_0,i) for i in x]
        plt.plot(x,y,c="tab:orange")
        plt.plot(x,y_pdf,c="tab:blue")
        plt.show()
    

    对应函数图像表示如下。其中蓝色线表示概率密度函数;对应的橙色线表示对应的累积分布函数

    B \\mathcal B \\quad B 选项是累积分布函数的定义;关于 D \\mathcal D \\quad D 选项,这里以 a = 1 a = 1 a=1为例,它的概率密度函数的积分结果与累积分布函数结果分别表示如下:

    其中红色虚线 CDF \\textCDF CDF交点对应的函数值等于阴影部分面积,而阴影部分面积就是 P ( x ≤ a ) \\mathcal P(x \\leq a) P(xa)的概率值。

    C \\mathcal C \\quad C 选项,关于概率质量函数 ( Probability Mass Function,PMF ) (\\textProbability Mass Function,PMF) (Probability Mass Function,PMF),它与概率密度函数不同,由于是离散型随机变量,这导致概率质量函数不连续。具体公式表示如下:
    f X ( x ) = P ( X = x ) x ∈ S 0 x ∈ R \\ S f_\\mathcal X(x) = \\begincases \\mathcal P(\\mathcal X = x) \\quad x \\in \\mathcal S \\\\ 0 \\quad x \\in \\mathbb R \\backslash \\mathcal S \\endcases fX(x)=P(X=x)xS0xR\\S
    相关描述为: S \\mathcal S S表示随机变量 X \\mathcal X X能够取到数值 x x x集合;而 R \\ S \\mathbb R \\backslash \\mathcal S R\\S表示实数集合 R \\mathbb R R中除去 S \\mathcal S S之外的剩余集合。

    • X \\mathcal X X集合 S \\mathcal S S中的某一具体值 x x x时,对应概率为 P ( X = x ) \\mathcal P(\\mathcal X = x) P(X=x)
    • X \\mathcal X X集合 R \\ S \\mathbb R \\backslash \\mathcal S R\\S中的值时,其对应概率结果必然为 0 0 0

    这意味着概率质量函数的函数值就是该自变量对应的概率值。这也是它与概率密度函数的主要区别。

    以上是关于牛客网算法八股刷题系列卷积函数随机梯度下降ReLU的主要内容,如果未能解决你的问题,请参考以下文章

    牛客网算法八股刷题系列K-Means真题描述

    随机梯度下降算法

    深度学习笔记:SGDMomentumRMSpropAdam优化算法解析

    深度学习笔记:SGDMomentumRMSpropAdam优化算法解析

    随机梯度下降分类器和回归器

    Hulu机器学习问题与解答系列 | 十七:随机梯度下降算法之经典变种