1、什么是机器学习

机器学习 ≈ 让机器帮我们找一个函数f解决某一问题

如:

  • 语音识别:输入一段语音信号,输出识别出的文字。

    语音识别
  • 图像识别:输入一个图像,输出图像识别结果。

    图像识别
  • 阿尔法Go:输入棋盘上黑子和白子的位置,输出下一步下棋的位置。

    阿尔法go

注:

  • 本课程重点介绍机器学习(MLMachine Learning)中的深度学习(DLDeep Learning);
  • 本课程主要介绍如何通过神经网络(NNNeural Network)的方式实现深度学习。

2、机器拟合函数类型

2.1、回归

回归Regression):函数的输出是一个标量。

如: 使用机器学习预测PM2.5

输入各种与预测PM2.5相关的指数(如:今天的PM2.5值、温度和臭氧的浓度等),输出明天的PM2.5值。

预测PM2.5

2.2、分类

分类Classification):函数从我们事先设定好的一些选项【options】(又称“类别”,classes)中选择一个作为输出。

如:

  • 使用机器学习进行垃圾邮件筛选。

    输入一封邮件,输出是否为垃圾邮件(2个选项)。

垃圾邮件筛选
  • 阿尔法Go

    输入棋盘上黑子和白子的位置,函数从所有可以落子的位置中选择一个作为输出(19×19个选项)。

阿尔法Go分类器

2.3、结构化学习

结构化学习Structured Learning):函数的输出是有结构的部件(如:图像、文本、语音等)。

3、★机器拟合线性函数(3步曲)

例: 我们想使用B站后台历史数据(如:视频的观看人数、观看时长、点赞数、搜藏数、投币数、视频收益等)拟合一个函数,用于预测明天该视频可能的播放量。

通过机器学习找到拟合函数的步骤主要包括以下3个:

3.1、定义一个带有未知参数的函数模型(单变量线性回归模型)

第一步需要先定义一个带有未知参数的函数。

拟合函数

通过领域知识,我们猜测该视频明天的播放量与今天播放量的关系可能为:

y=b+ωx1y=b+\omega x_1

其中:yy是视频明天播放量的预测值x1x_1是视频今天的播放量(即:特征feature);ω\omega权重weight)和bb偏差bias)是从历史数据中学习到的未知参数。

3.2、定义训练数据的损失函数

第二步主要定义一个损失函数Loss)。

注:

  • 损失函数是计算预测值和真实值之间差距的函数。

  • 损失函数也是一个函数,其输入为机器学习模型的未知参数,输出表示当前模型输入未知参数值的好坏。

  • 损失函数的自变量是机器学习函数模型中的未知参数ω\omega(权重)和bb(偏差),即损失函数可以表示为:L(b,ω)L(b,\omega)

  • 损失函数的输出可以反映出:函数模型中未知参数ω\omega(权重)和bb(偏差)取值的好坏,输出越小越好。

(1)令预测误差:

e=(yy^)2=[(b+ωx1)y^]2e=(y- \hat{y})^2=[(b+\omega x_1) - \hat{y}]^2

其中:yy是预测值,y^\hat{y}是实际值。

注: 实际应用中,预测误差e的计算方法可以是:

  • 平均绝对误差mean absolute errorMAE):e=yy^e=|y- \hat{y}|
  • 均方误差mean square errorMSE): e=(yy^)2e=(y- \hat{y})^2e=12(yy^)2e=\frac {1}{2}(y- \hat{y})^2(其中12\frac {1}{2}是为了方便求导)
  • yyy^\hat{y}都符合概率分布时,我们可以选择使用交叉熵Cross-entropy)损失函数。

(2)则损失函数:

L=1Ni=1Nei=1Ni=1N[(b+ωx1i)yi^]2L=\frac {1}{N}\sum_{i=1}^N{e_i}=\frac {1}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]^2}

其中:NN是训练样本的数量,x1ix^i_1是第ii个训练样本的输入值,yi^\hat{y^i}是第ii个训练样本的实际输出值。

调整机器学习函数模型中的未知参数ω\omega(权重)和bb(偏差)的值,可以得到不同的损失函数值,再画出等高线即可得到预测模型的误差曲面Error Surface )。

上述B站视频播放量预测模型的误差曲面如下图所示:

损失函数3

其中:若损失函数L(b,ω)L(b,\omega)的值越大,则红色越深(ω\omegabb的取值约差);若损失函数L(b,ω)L(b,\omega)的值越小,则蓝色越深(ω\omegabb的取值约好)。

如: 令预测误差:e=yy^e=|y- \hat{y}|,则当ω=1\omega=1​、b=0.5kb=0.5k​时,拟合函数为:y=0.5k+1x1y=0.5k+1x_1​,损失函数为:L(0.5k,1)L(0.5k,1)​。

此时,使用2017/01/01的访问量预测2017/01/02的访问量,预测误差:

e1=yy^=(0.5k+4.8k)4.9k=5.3k4.9k=0.4ke_1=|y-\hat{y}|=|(0.5k+4.8k)-4.9k|=|5.3k-4.9k|=0.4k

损失函数

使用2017/01/02的访问量预测2017/01/03的访问量,预测误差:

e2=yy^=(0.5k+4.9k)7.5k=5.4k7.5k=2.1ke_2=|y-\hat{y}|=|(0.5k+4.9k)-7.5k|=|5.4k-7.5k|=2.1k

以此类推,我们可以得到每天的预测误差eie_i

损失函数2

3.3、最优化

第三步要做的事情,其实是解一个最优化Optimization)的问题。即:找一对最佳的ω\omega(权重)和bb(偏差)使损失函数的值最小。

取反函数,可得:

ω,b=arg(minω,bL)\omega ^ *,b ^*=arg(\min_{\omega,b}L)

其中:ω\omega ^*最合适的权重值bb^*最合适的偏差值

3.3.1、使用梯度下降法求最佳权重

本课程求解最佳ω\omegabb的唯一方法是:梯度下降法Gradient Descent)。

使用梯度下降法求解最佳ω\omega(权重)的步骤如下:

(1)随机选取一个初始的权重值ω0\omega_0

(2)计算所有训练样本的损失函数L(b,ω)L(b,\omega)

为了求最佳的ω\omega,我们可以把bb看做常量。此时,损失函数L(b,ω)L(b,\omega)ω\omega(权重)的关系如下图所示:

损失函数与权重关系曲线

(3)使用所有的训练样本,计算ω=ω0\omega=\omega_0处损失函数的梯度值:

Lωω=ω0=ω1Ni=1N[(b+ωx1i)yi^]2ω=ω0=2Ni=1N[(b+ωx1i)yi^]x1iω=ω0\frac{\partial L}{\partial \omega}|_{\omega=\omega_0}=\frac{\partial}{\partial \omega}\frac {1}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]^2}|_{\omega=\omega_0}=\frac{2}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]x^i_1}|_{\omega=\omega_0}

其中:NN是训练样本的数量,x1ix^i_1是第ii个训练样本的输入值,yi^\hat{y^i}是第ii个训练样本的实际输出值。

  • ω=ω0\omega=\omega_0处损失函数LLω\omega的偏导数<0<0,则增加ω\omega的值;
  • ω=ω0\omega=\omega_0处损失函数LLω\omega的偏导数>0>0,则减小ω\omega的值。

注:ω=ω0\omega=\omega_0处偏导数(即:斜率)的绝对值越大(或越小),则ω\omega的值增加或减小的越大(或越小)。

求偏导数

(4)设置学习效率,计算ω\omega(权重)的调整步长;

此时,ω\omega(权重)的调整步长为:

η×Lωω=ω0\eta \times \frac{\partial L}{\partial \omega}|_{\omega=\omega_0}

其中:η\eta是学习效率(learning rate),用户可以自定义该参数。

注:η\eta这样需要人手工设置的参数又叫做超参数hyperparameters )。

计算调整步长

(5)迭代更新ω\omega(权重)的值。

此时,ω\omega(权重)的值由ω0\omega_0调整为ω1\omega_1

ω1=ω0η×Lωω=ω0\omega_1 = \omega_0 - \eta \times \frac{\partial L}{\partial \omega}|_{\omega=\omega_0}

不断重复步骤(3)到步骤(5),直到迭代次数达到用户自定义的迭代次数上限(或Lωω=ωi=0\frac{\partial L}{\partial \omega}|_{\omega=\omega_i} = 0)时停止迭代。

迭代更新

注:当使用梯度下降优化机器学习模型的未知参数时,可能会出现局部最小local minima)不是全局最小global minima)的情况。但该问题其实并不是深度学习过程中面临的痛点问题,因为当预测误差e均方误差时,损失函数L(b,ω)L(b,\omega)ω\omega的二次函数,此时损失函数是一个抛物线,此时通过梯度下降法得到的最优值一定是全局最优值

均方误差损失函数

3.3.2、使用梯度下降法求最佳偏差

同样地,我们可以使用梯度下降法求解最佳的bb(偏差)。

3.3.3、★小结(梯度下降法)

综上所述: 使用梯度下降法求解两个未知参数(ω\omegabb)最佳值的步骤是:

(1)随机选取一个初始的权重值ω0\omega_0和偏差值b0b_0

(2)计算所有训练样本的损失函数L(b,ω)L(b,\omega)

L(b,ω)=1Ni=1Nei=1Ni=1N[(b+ωx1i)yi^]2L(b,\omega)=\frac {1}{N}\sum_{i=1}^N{e_i}=\frac {1}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]^2}

其中:NN是训练样本的数量,x1ix^i_1是第ii个训练样本的输入值,yi^\hat{y^i}是第ii个训练样本的实际输出值。

(3)使用所有的训练样本,分别计算ω=ω0,b=b0\omega=\omega_0,b=b_0处损失函数LL对各个未知参数的的梯度值;

Lωω=ω0,b=b0=ω1Ni=1N[(b+ωx1i)yi^]2ω=ω0,b=b0=2Ni=1N[(b+ωx1i)yi^]x1iω=ω0,b=b0\frac{\partial L}{\partial \omega}|_{\omega=\omega_0,b=b_0}= \frac{\partial}{\partial \omega}\frac {1}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]^2}|_{\omega=\omega_0,b=b_0}=\frac{2}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]x^i_1}|_{\omega=\omega_0,b=b_0}

Lbω=ω0,b=b0=b1Ni=1N[(b+ωx1i)yi^]2ω=ω0,b=b0=2Ni=1N[(b+ωx1i)yi^]ω=ω0,b=b0\frac{\partial L}{\partial b}|_{\omega=\omega_0,b=b_0}= \frac{\partial}{\partial b}\frac {1}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]^2}|_{\omega=\omega_0,b=b_0}=\frac{2}{N}\sum_{i=1}^N{[(b+\omega x^i_1) - \hat{y^i}]}|_{\omega=\omega_0,b=b_0}

其中:NN是训练样本的数量,x1ix^i_1是第ii个训练样本的输入值,yi^\hat{y^i}是第ii个训练样本的实际输出值。

注:未知参数在某一处的损失函数值的梯度值是通过训练样本计算得到的。

(4)设置学习效率,分别计算各个未知参数的调整步长;

η×Lωω=ω0,b=b0\eta \times \frac{\partial L}{\partial \omega}|_{\omega=\omega_0,b=b_0}

以此类推,梯度下降法可以推广到求解多个未知参数最佳值。

η×Lbω=ω0,b=b0\eta \times \frac{\partial L}{\partial b}|_{\omega=\omega_0,b=b_0}

(5)迭代更新各个未知参数的值。

ω1=ω0η×Lωω=ω0,b=b0\omega_1 = \omega_0 - \eta \times \frac{\partial L}{\partial \omega}|_{\omega=\omega_0,b=b_0}

b1=b0η×Lbω=ω0,b=b0b_1 = b_0 - \eta \times \frac{\partial L}{\partial b}|_{\omega=\omega_0,b=b_0}

不断重复步骤(3)到步骤(5),直到迭代次数达到用户自定义的迭代次数上限(或Lωω=ωi,b=bi=0\frac{\partial L}{\partial \omega}|_{\omega=\omega_i,b=bi} = 0Lbω=ωi,b=bi=0\frac{\partial L}{\partial b}|_{\omega=\omega_i,b=bi} = 0)时停止迭代。

上述步骤在上述B站视频播放量预测模型的误差曲面上的更新过程如下图所示:

迭代过程

注: 同样地,上述使用梯度下降法求解未知参数最佳值的步骤和方法可以推广到任意多个参数。

3.4、★小结(线性拟合)

综上所述,使用机器学习模型的方法其实很简单,只需要要3步即可。(就像把大象放进冰箱只需分3步一样)

机器学习训练

例: 上述B站视频播放量预测的例子中,我们使用2017–2020 的数据(训练集)对预测模型进行训练,最终得到的最佳权重ω=0.97\omega ^*=0.97,最佳偏差b=0.1kb ^*=0.1k。此时,损失函数达到最小值0.48k0.48k,即:L=0.48kL=0.48k

即:使用此训练集得到的该视频播放量预测模型为:

y=0.1k+0.97x1y=0.1k+0.97x_1

其中:yy是视频明天播放量的预测值x1x_1是视频今天的播放量(即:特征feature)。

使用该模型对该视频2021年可能的播放量(测试集),预测损失L=0.58kL^\prime = 0.58k。预测结果如下图所示:

预测结果

附、模型优化:输入多个特征(多变量线性回归)

仔细观察视频播放量曲线,可以发现其呈周期性变化。 因此,为了提高预测的准确性,我们也可以使用最近7天的播放量来预测该视频明天的播放量。此时,我们可以将带有未知参数的预测函数模型修改为:

y=b+j=17ωjxjy=b+\sum_{j = 1} ^7 \omega_j x_j

其中:yy是视频明天播放量的预测值xjx_j是视频前jj天的播放量(即:特征feature);jj是输入特征的数量。

此时,我们同样使用2017–2020 的数据(训练集)对预测模型进行训练,训练完成后得到的最佳偏差bb ^*xjx_j的最佳权重ωj\omega_j^*如下表所示:

优化函数训练结果

此时,损失函数达到最小值0.38k0.38k,即:L=0.38kL=0.38k

使用新的模型对该视频2021年可能的播放量(测试集),预测损失L=0.49kL^\prime = 0.49k

那么,是不是使用的历史播放量天数越多,预测模型的准确性越高呢?答案是否定的。

预测结果对比

4、★机器学习拟合非线性函数

4.1、定义一个带有未知参数的函数模型

4.1.1、任意连续函数的多SigmoidSigmoid函数累加模型

线性函数模型可能太简单了,可能无法满足实际需求。实际应用建模过程中,机器学习往往需要拟合更加复杂的函数。

例: 我们想拟合下图中的红色折线函数y=f(x1)y=f(x_1)

折线函数

实际上,任意折线都可以拆分成:一个常数 + 一系列平折线Hard Sigmoid函数

如下图所示:

折线拆分函数

上述红色折线可以拆分为:

折线拆分

同样地,我们也可以把任意函数曲线看做无数个相邻的点连接而成的折线函数。

曲线函数

因此,任意连续函数都可以拆分成:一个常数 + 一系列平折线Hard Sigmoid函数

实际应用中,我们使用Sigmoid函数(又称“S形”函数)来逼近平折线Hard Sigmoid函数

Sigmoid函数

因此,红色折线函数y=f(x1)y=f(x_1)可以拆分为:

Sigmoid函数拟合

其中:ωi\omega_ibib_icic_i是未知参数;iiSigmoid函数的数量。

Sigmoid函数拟合示意图

附:SigmoidSigmoid激活函数

激活函数(Activation Function 的主要作用是提供神经网络的非线性建模能力。如果没有激活函数,那么神经网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

SigmoidSigmoid函数的表达式为:

y=c×sigmoid(b+ωx1)=c11+e(b+ωx1)y = c \times sigmoid(b + \omega x_1)= c \frac{1}{1+e^{-(b+\omega x_1)}}

其中:ω\omegabbcc是未知参数。

  • 若控制其它参数不变,只改变ω\omega的值,则Sigmoid函数的斜率将发生变化。

    Sigmoid函数斜率变化
  • 若控制其它参数不变,只改变bb的值,则Sigmoid函数将会左右移动。

    Sigmoid函数左右移动
  • 若控制其它参数不变,只改变cc的值,则Sigmoid函数的高度将会随之改变。

    Sigmoid函数高度变化

4.1.2、模型优化:输入多个特征

同样地,为了提高预测的准确性,我们也可以使用多个特征作为带有未知参数函数模型的输入。

  • 如上述示例中,线性模型y=b+ωx1y=b+ \omega x_1可以优化为:

y=b+j=1nωjxjy=b+\sum_{j = 1} ^n \omega_j x_j

其中:yy是视频明天播放量的预测值xjx_j是视频前jj天的播放量(即:特征feature);jj是输入特征的数量。

即:

函数模型优化

所以,同样地:

  • 我们也可以将非线性函数模型

y=b+i=1mci×sigmoid(bi+ωix1)y=b+\sum_{i=1} ^ m c_i \times sigmoid(b_i + \omega_i x_1)

其中:ωi\omega_ibib_icic_i是未知参数;iiSigmoid函数的数量。

优化为:

y=b+i=1mci×sigmoid(bi+j=1nωijxj)y=b+\sum_{i=1} ^ m c_i \times sigmoid(b_i + \sum_{j=1} ^ n \omega_{ij} x_j)

其中:ωij\omega_{ij}bib_icic_i是未知参数;iiSigmoid函数的数量;jj是输入特征的数量。

即:

函数模型优化

4.1.3、函数模型的图形化和矩阵表示

为了更加直观地理解机器学习,我们可以将上述非线性函数模型:

y=b+i=1mci×sigmoid(bi+j=1nωijxj)y=b+\sum_{i=1} ^ m c_i \times sigmoid(b_i + \sum_{j=1} ^ n \omega_{ij} x_j)

其中:ωij\omega_{ij}bib_icic_i是未知参数;iiSigmoidSigmoid函数的数量;jj是输入特征的数量;ωij\omega_{ij}是第iiSigmoidSigmoid函数中第jj个特征的权重。

进行图形化表示,具体表示过程如下:

(1)各SigmoidSigmoid函数输入的图形化和矩阵表示

首先,令各SigmoidSigmoid函数的输入:

ri=bi+j=1nωijxjr_i=b_i + \sum_{j=1} ^ n \omega_{ij} x_j

若我们取前3天的历史数据作为特征输入神经网络,则:

{r1=b1+ω11x1+ω12x2+ω13x3r2=b2+ω21x1+ω22x2+ω23x3r3=b3+ω31x1+ω32x2+ω33x3\begin{cases} r_1 = b_1 + \omega_{11}x_1 + \omega_{12}x_2 + \omega_{13}x_3 \\ r_2 = b_2 + \omega_{21}x_1 + \omega_{22}x_2 + \omega_{23}x_3 \\ r_3 = b_3 + \omega_{31}x_1 + \omega_{32}x_2 + \omega_{33}x_3 \\ \end{cases}

  • rir_i可以用图形化表示为:
图形化Sigmoid函数输入
  • rir_i可以用矩阵表示为:

    [r1r2r3]=[b1b2b3]+[ω11ω12ω13ω21ω22ω23ω31ω32ω33][x1x2x3]\left[ \begin{matrix} r_1\\ r_2 \\ r_3 \end{matrix} \right] = \left[ \begin{matrix} b_1\\ b_2 \\ b_3 \end{matrix} \right] + \left[ \begin{matrix} \omega_{11} & \omega_{12} & \omega_{13}\\ \omega_{21} & \omega_{22} & \omega_{23} \\ \omega_{31} & \omega_{32} & \omega_{33} \end{matrix} \right] \left[ \begin{matrix} x_1\\ x_2 \\ x_3 \end{matrix} \right]

    即:

r=b+Wx\mathbf{r} = \mathbf{b} + \mathbf{W} \mathbf{x}

矩阵表示Sigmoid函数输入

因此,rir_i的图形化和矩阵表示如下图所示:

矩阵和图形化各Sigmoid函数输入

(2)各SigmoidSigmoid函数输出的图形化和矩阵表示

然后,将各SigmoidSigmoid函数的输入rir_i带入对应的SigmoidSigmoid函数。令各SigmoidSigmoid函数的输出:

ai=Sigmoid(ri)=11+eria_i = Sigmoid(r_i) = \frac{1}{1+e^{-r_i}}

则:

{a1=Sigmoid(r1)a2=Sigmoid(r2)a3=Sigmoid(r3)\begin{cases} a_1 = Sigmoid(r_1) \\ a_2 = Sigmoid(r_2) \\ a_3 = Sigmoid(r_3) \\ \end{cases}

用矩阵可以表示为:

a=σ(r)\mathbf{a} = \sigma(\mathbf{r})

因此,aia_i的图形化和矩阵表示如下图所示:

矩阵和图形化各Sigmoid函数输出

(3)任意连续函数的图形化和矩阵表示

将各SigmoidSigmoid函数的输出aia_i带入任意连续函数的多SigmoidSigmoid函数累加模型,便可以得到任意连续函数的机器学习模型。

即任意连续函数的多SigmoidSigmoid函数累加模型:

y=b+i=1mci×sigmoid(bi+j=1nωijxj)y=b+\sum_{i=1} ^ m c_i \times sigmoid(b_i + \sum_{j=1} ^ n \omega_{ij} x_j)

用矩阵可以表示为:

y=b+cTa\mathbf{y} = b + \mathbf{c}^T \mathbf{a}

因此,机器学习函数模型的图形化和矩阵表示如下图所示:

矩阵和图形化任意连续函数

综上所述:

{r=b+Wxa=σ(r)y=b+cTa\begin{cases} \mathbf{r} = \mathbf{b} + \mathbf{W} \mathbf{x} \\ \mathbf{a} = \sigma(\mathbf{r}) \\ \mathbf{y} = b + \mathbf{c}^T \mathbf{a} \end{cases}

矩阵和图形化任意连续函数过程

即:任意连续函数的多SigmoidSigmoid函数累加模型为:

y=b+cTσ(b+Wx)\mathbf{y} = b + \mathbf{c}^T \sigma(\mathbf{\mathbf{b} + \mathbf{W} \mathbf{x}})

矩阵和图形化任意连续函数2

4.2、定义训练数据的损失函数

4.2.1、多SigmoidSigmoid函数累加模型中的未知参数

在上述任意连续函数的多SigmoidSigmoid函数累加模型

y=b+cTσ(b+Wx)\mathbf{y} = b + \mathbf{c}^T \sigma(\mathbf{\mathbf{b} + \mathbf{W} \mathbf{x}})

中:x\mathbf{x}特征向量W\mathbf{W}b\mathbf{b}cT\mathbf{c}^T和常量bb未知参数

为了方便计算未知参数的值,我们将W\mathbf{W}的所有列、向量b\mathbf{b}、向量c\mathbf{c}和常量bb组合成一个新的未知参数向量θ\mathbf{ \theta }。如下图所示:

未知参数向量

其中:向量θ\mathbf{ \theta }中的元素分别为θ1\theta_1θ2\theta_2θ3\theta_3……

4.2.2、定义损失函数

接下来,我们同样要定义一个损失函数Loss)。

注:

  • 损失函数是计算预测值和真实值之间差距的函数。

  • 损失函数也是一个函数,其输入为机器学习模型的未知参数,输出表示当前模型输入未知参数值的好坏。

  • 由于损失函数的自变量是机器学习函数模型中的所有未知参数,因此损失函数可以表示为:L(θ)L(\mathbf{ \theta })

  • 损失函数的输出可以反映出:函数模型中所有未知参数θ\mathbf{ \theta }取值的好坏,输出越小越好。

同样地,令预测误差:

e=(yy^)2e=(y- \hat{y})^2

其中:yy是预测值,y^\hat{y}是实际值。

以预测明天视频可能的播放量为例,我们可以得到每天的预测误差eie_i

因此,损失函数:

L=1Ni=1NeiL=\frac {1}{N}\sum_{i=1}^N{e_i}

其中:NN是训练样本的数量。

注:当预测误差e均方误差时,损失函数L(θ)L(\mathbf{ \theta })是所有未知参数θ\mathbf{ \theta }的二次函数,此时对于任一未知参数而言,损失函数是一个抛物线,此时通过梯度下降法得到的最优值一定是θ\mathbf{ \theta }的全局最优值

自定义损失函数

4.3、多SigmoidSigmoid函数累加模型中未知参数的最优化

同样地,第三步要做的事情,其实是解一个最优化Optimization)的问题。即:找出多SigmoidSigmoid函数累加模型中所有未知参数(即:向量θ\mathbf{ \theta }中的所有元素θ1\theta_1θ2\theta_2θ3\theta_3……)的最佳值使损失函数的值最小。

取反函数,可得:

θ=arg(minθL)\mathbf{ \theta }^*=arg(\min_{\mathbf{ \theta }}L)

其中:θ\mathbf{ \theta }^*SigmoidSigmoid函数累加模型中所有未知参数的最佳值

4.3.1、使用标准梯度下降法迭代优化未知参数

同样地,我们将使用梯度下降法求解多SigmoidSigmoid函数累加模型中所有未知参数的最佳值。具体步骤如下:

(1)随机初始化未知参数向量θ0\mathbf{ \theta }^0(即:随机选取所有未知参数的初始值);

(2)计算所有训练样本的损失函数L(θ)L(\mathbf{ \theta })

(3)使用所有的训练样本,计算θ=θ0\mathbf{ \theta }=\mathbf{ \theta }_0处损失函数的梯度值(向量g\mathbf{ g })

g=[Lθ1θ=θ0Lθ2θ=θ0]\mathbf{ g } = \left[ \begin{matrix} \frac{\partial L}{\partial \theta_1}|_{\mathbf{ \theta } = \mathbf{ \theta }^0}\\ \frac{\partial L}{\partial \theta_2}|_{\mathbf{ \theta } = \mathbf{ \theta }^0} \\ \vdots \end{matrix} \right]

又记作:

g=L(θ0)\mathbf{ g } = \nabla L(\mathbf{ \theta }^0)

注:未知参数在某一处的损失函数值的梯度值是通过训练样本计算得到的(具体公式推导过程参考3.3.3节)。

(4)设置学习效率η\eta(常量),得到所有未知参数的调整步长向量;

η×g=[ηLθ1θ=θ0ηLθ2θ=θ0]\eta \times \mathbf{ g } = \left[ \begin{matrix} \eta \frac{\partial L}{\partial \theta_1}|_{\mathbf{ \theta } = \mathbf{ \theta }^0}\\ \eta \frac{\partial L}{\partial \theta_2}|_{\mathbf{ \theta } = \mathbf{ \theta }^0} \\ \vdots \end{matrix} \right]

(5)迭代更新未知参数向量的值。

[θ11θ21]=[θ10θ20][ηLθ1θ=θ0ηLθ2θ=θ0]\left[ \begin{matrix} \theta_1^1 \\ \theta_2^1 \\ \vdots \end{matrix} \right] = \left[ \begin{matrix} \theta_1^0 \\ \theta_2^0 \\ \vdots \end{matrix} \right] - \left[ \begin{matrix} \eta \frac{\partial L}{\partial \theta_1}|_{\mathbf{ \theta } = \mathbf{ \theta }^0}\\ \eta \frac{\partial L}{\partial \theta_2}|_{\mathbf{ \theta } = \mathbf{ \theta }^0} \\ \vdots \end{matrix} \right]

即:

θ1=θ0η×g\mathbf{ \theta }^1 = \mathbf{ \theta }^0 - \eta \times \mathbf{ g }

不断重复步骤(3)到步骤(5),直到迭代次数达到用户自定义的迭代次数上限(或Lθ1θ=θi=0\frac{\partial L}{\partial \theta_1}|_{\mathbf{ \theta } = \mathbf{ \theta }^i} = 0Lθ2θ=θi,=0\frac{\partial L}{\partial \theta_2}|_{\mathbf{ \theta } = \mathbf{ \theta }^i,\cdots} = 0\cdots)时停止迭代。

梯度下降法反复迭代

4.3.2、梯度下降法的种类

(1)标准的梯度下降法Batch Gradient Descent, BGD

标准的梯度下降法(又称“批量梯度下降法”),指的是每次迭代会使用全部的训练样本来计算梯度向量g\mathbf{ g }的值,然后再通过调整步长向量η×g\eta \times \mathbf{ g }完成对模型未知参数向量θ\mathbf{ \theta }值的一轮更新。

当拟合线性函数且预测误差e均方误差时,预测模型的损失函数曲面及梯度下降过程如下图所示:

批量梯度下降法png

该方法的优点:

  • 梯度下降的非常平稳。
  • 能够确保找到未知参数向量θ\mathbf{ \theta }的全局最优解,且最优解的精度非常高。

该方法的缺点:

  • 它每更新一次都需要遍历整个训练集,训练时间比较长。
  • 不适合大数据集。

(2)随机梯度下降法Stochastic Gradient Descent, SGD

所谓随机梯度下降法,指的是每次迭代会从训练集中随机抽取一个样本来计算梯度向量g\mathbf{ g }的值,然后再通过调整步长向量η×g\eta \times \mathbf{ g }完成对模型未知参数向量θ\mathbf{ \theta }值的一轮更新。

当拟合线性函数且预测误差e均方误差时,预测模型的损失函数曲面及梯度下降过程如下图所示:

随机梯度下降法

该方法的优点:

  • 大大提高了梯度下降的速度。

该方法的缺点:

  • 梯度下降不平稳,最优解的精度较低。
  • 未知参数向量θ\mathbf{ \theta }可能不会收敛,而是在最小值附近振荡。

(3)小批量梯度下降法Mini-Batch Gradient Descent, MBGD

小批量梯度下降法(又称“最速下降法”),指的是每次迭代会从训练集中选择一批(batch)样本来计算梯度向量g\mathbf{ g }的值,然后再通过调整步长向量η×g\eta \times \mathbf{ g }完成对模型未知参数向量θ\mathbf{ \theta }值的一轮更新。

当拟合线性函数且预测误差e均方误差时,预测模型的损失函数曲面及梯度下降过程如下图所示:

小批量梯度下降法

该方法的优点:

  • 梯度下降的速度比较快且比较平稳。
  • 最优解的精度相对较高。

4.3.3、使用小批量梯度下降法迭代优化未知参数

实际项目中,我们经常使用小批量梯度下降法迭代优化多SigmoidSigmoid函数累加模型中所有未知参数。具体步骤如下:

(1)随机初始化未知参数向量θ0\mathbf{ \theta }^0(即:随机选取所有未知参数的初始值);

(2)计算所有训练样本的损失函数L(θ)L(\mathbf{ \theta })

(3)将NN个训练样本随机分为多batch),每一批包含BB个训练样本;

(4)使用第1批训练样本,计算θ=θ0\mathbf{ \theta }=\mathbf{ \theta }_0处损失函数的梯度值(向量g\mathbf{ g });

g=L1(θ0)\mathbf{ g } = \nabla L^1(\mathbf{ \theta }^0)

(5)设置学习效率η\eta(常量),得到所有未知参数的调整步长(向量η×g\eta \times \mathbf{ g });

(6)迭代更新未知参数向量的值。

θ1=θ0η×g\mathbf{ \theta }^1 = \mathbf{ \theta }^0 - \eta \times \mathbf{ g }

不断重复步骤(4)到步骤(6),直到迭代次数达到用户自定义的迭代次数上限(或Lθ1θ=θi=0\frac{\partial L}{\partial \theta_1}|_{\mathbf{ \theta } = \mathbf{ \theta }^i} = 0Lθ2θ=θi,=0\frac{\partial L}{\partial \theta_2}|_{\mathbf{ \theta } = \mathbf{ \theta }^i,\cdots} = 0\cdots)时停止迭代。

注:

  • 当所有批次的训练样本都被训练一遍时(即:当所有的训练样本都被训练一遍时),我们称为一轮(epoch)训练。
  • 小批量梯度下降法在每次迭代中仅使用一批训练样本来计算损失函数和损失函数的梯度。
  • 用户可以根据实际应用自定义每一批训练样本的数量(Batch Size),一般每次迭代选取的样本数量在50到256个之间,。
小批量梯度下降法训练过程

如: 对于一个有2000个训练样本的数据集,将2000个样本分成4个大小为500的Batch。那么:

  • 经过一轮(Epoch)训练,所有的未知参数都完成了4次更新。
  • Batch Num = 每轮更新(update)次数 = 4。
  • Batch Size = 500。

4.4、SigmoidSigmoid激活函数的替代方案

机器学习拟合非线性函数模型时使用的激活函数平折线Hard Sigmoid),我们除了使用SigmoidSigmoid函数来逼近外,也可以使用两个ReLURectified Linear Unit,修正线性单元)相加来替代。如下图所示:

ReLU

即:平折线Hard Sigmoid)=cmax(0,b+ωx1)+cc \max(0,b+\omega x_1)+c'max(0,b\max(0,b'$ x_1)$。

其中:ReLU函数的表达式为:cmax(0,b+ωx1)c \max(0,b+\omega x_1)

因此,上述任意连续函数的多SigmoidSigmoid函数累加模型也可替换为多ReLUReLU函数累加模型。如下图所示:

激活函数对比

注:

  • SigmoidSigmoid函数累加模型中Sigmoid激活函数的数量是ii;多ReLUReLU函数累加模型中ReLU激活函数的数量是2i2i
  • 所谓激活函数,就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。
  • SigmoidSigmoid函数和ReLUReLU函数都是实际项目中常用的激活函数。
  • 实验表明:多ReLUReLU函数累加模型的拟合效果往往比多SigmoidSigmoid函数累加模型好一些。

5、★多层神经网络(深度学习)模型

为了进一步优化机器学习模型,我们可以在上述多SigmoidSigmoid函数(或ReLUReLU函数)累加模型中嵌套使用多层SigmoidSigmoid函数(或ReLUReLU函数)。即:将上一层SigmoidSigmoid函数(或ReLUReLU函数)的输出作为下一层SigmoidSigmoid函数(或ReLUReLU函数)的输入。如下图所示:

嵌套使用多层Sigmoid函数

注: 嵌套的次数也是一个超参数(Hyper Parameter),用户可以自定义。

此时,上述优化后的多SigmoidSigmoid函数(或ReLUReLU函数)累加模型的图形化表示如下图所示:

多层神经网络

为了让优化后的多SigmoidSigmoid函数(或ReLUReLU函数)累加模型听起来高大上,我们给它起了响亮的名字,即:神经网络(Neural Network)。

多层神经网络模型

注:

  • 该模型中的SigmoidSigmoid(或ReLUReLU)称为神经元(Neuron ,多个神经元连起来就是神经网络(Neural Network

  • 图中每一层的神经元称为隐藏层(hidden layer;多个Hidden Layer就组成了Deep。由于在上世纪八九十年代,由于吹捧的太过浮夸,人们已经把神经网络的概念炒臭了。因此,大家又给这套技术人们起了一个新的高大上的名字,即:深度学习(Deep Learning

  • 深度学习的层数也不能太多,太多会导致Overfitting(过拟合)。即:在训练集上表现的好,但是在测试集上表现差。

(本讲完,系列博文持续更新中…… )

参考文献:
[1] 《机器学习教程2021》,李宏毅

[2] 《机器学习教程2022》,李宏毅

如何获取资料?

关注 “阿汤笔迹” 微信公众号,在后台回复关键词 “机器学习” ,即可获取更多资料。

阿汤笔迹微信公众平台

原文地址:http://www.atangbiji.com/2023/10/22/regression/
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。