问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深度学习基本概念简介

创作时间:
作者:
@小白创作中心

深度学习基本概念简介

引用
1
来源
1.
https://www.cnblogs.com/GeekDragon/p/18136797

深度学习是当前人工智能领域最热门的技术之一,它通过多层神经网络来模拟人脑的神经元结构,从而实现对复杂数据的高效处理和分析。本文将从线性模型的局限性出发,逐步介绍深度学习的核心概念和原理,包括Sigmoid函数、ReLU函数、神经网络的结构以及如何避免过拟合等问题。

一、Linear Models' Bias

在机器学习中,我们通常会使用线性模型来对数据进行建模。例如,一个简单的线性模型可以表示为:

$$y = b + wx_0$$

但是,这种线性模型存在一个明显的缺陷:它过于简单,无法很好地拟合复杂的非线性关系。在实际应用中,我们往往需要处理更复杂的模型,例如下图中的红色曲线:

为了拟合这种复杂的曲线,我们可以使用多个简单的线性函数(蓝色曲线)的组合来逼近目标函数。这种分段线性曲线(Piecewise Linear Curves)可以通过一组“蓝色函数 + 常数”来表达,即使是曲线也可以通过这种方式来逼近,如下图所示:

二、如何找“蓝色函数”?

为了更好地拟合复杂的函数关系,我们需要引入一种特殊的函数——Sigmoid函数。Sigmoid函数的数学表达式为:

$$y = c\frac{1}{1 + e ^ {-(b + wx_1)}} = c*sigmoid(b + wx_1)$$

其函数图像如下所示:

通过调整Sigmoid函数中的参数,我们可以得到不同形状的函数曲线。具体来说:

  • 改变w可以改变Sigmoid函数的斜率
  • 改变b可以左右移动其位置
  • 改变c可以改变其高度

如下图所示:

因此,不同的常数c、截距b和斜率w会得到不同的Sigmoid函数。将这些函数相加,就可以逼近目标函数:

$$y = b + \sum_{i}c_isigmoid(b_i + w_ix_1)$$

三、深度学习里的三个步骤

我们可以将机器学习中的三个基本步骤(定义带有未知参数的函数、定义损失函数、优化)完全套用到深度学习中。

1. Function with unknown parameters

与机器学习中简单的线性模型不同,深度学习中我们使用更复杂的模型。将前面的线性表达式代入Sigmoid函数,可以得到:

$$y = b + \sum_{j}w_jx_j \longrightarrow y = b + \sum_{i}c_isigmoid(b_i + \sum_{j}w_{ij}x_i)$$

其中:

  • (j)代表第(j)个特征(例如第(j)天的点击量)
  • (i)代表选择第(i)个Sigmoid函数
  • (w_{ij})表示在第(i)个Sigmoid函数中(x_j)的权重

如图所示,分别代入计算可以得到:

[r_1 = b_1 + w_{11}x_1 + w_{12}x_2 + w_{13}x_3 ]
[r_2 = b_2 + w_{21}x_1 + w_{22}x_2 + w_{23}x_3 ]
[r_3 = b_3 + w_{31}x_1 + w_{32}x_2 + w_{33}x_3 ]

由线性代数的知识可以发现,上面的三个式子可以写作矩阵的乘法:

[\begin{bmatrix}r_1 \ r_2 \ r_3 \end{bmatrix} = \begin{bmatrix}b_1 \ b_2 \ b_3 \end{bmatrix} + \begin{bmatrix} w_{11} & w_{12} & w_{13} \ w_{21} & w_{22} & w_{23} \ w_{31} & w_{32} & w_{33} \end{bmatrix} \begin{bmatrix}x_1 \ x_2 \ x_3 \end{bmatrix} ]

然后将(r)代入Sigmoid函数,记作(a = \sigma(r)),乘上系数(c),再加上(b)就得到最后的(y),即(y = b + c^Ta):

最终得到:

$$y = b + c^T \sigma({\bf b} + Wx)$$

((b)和(\bf b)区别开)

将W矩阵中的行或者列取出来,与(b),(\bf b)和(c^T)竖着排列起来组成:

[\theta = \begin{bmatrix} \theta_1 \ \theta_2 \ \theta_3 \. \. \. \end{bmatrix} ]

就进入了第2步找Loss函数

2. Define Loss from Training Data

Loss函数与ML一节中讲的一样,定义函数(L(\theta))

先给定一组参数代入(y = b + c^T \sigma({\bf b} + Wx))计算出(y)的值,然后将其与真实值(label)(\widehat{y})比较,得到误差(e),最后便可得Loss函数的表达式:

[L = \frac{1}{N}\sum_{n}e_n ]

进而到第3步找一个最优解的步骤

3. Optimization

记(\theta^\star = arg min_{\theta}L)

  • (Randomly)Pick initial value(\theta^0)
    gradient(g = \begin{bmatrix} \dfrac{\partial L}{\partial \theta_1}|{\theta = \theta^0} \ \dfrac{\partial L}{\partial \theta_2}|{\theta = \theta^0} \ . \ . \ . \end{bmatrix})
    可以记作:(g =\nabla L(\theta^0))(就是梯度符号)
  • Compute gradient again and again
    (g =\nabla L(\theta^0))(\theta^1 \leftarrow \theta^0 - \eta g)
    (g =\nabla L(\theta^1))(\theta^2 \leftarrow \theta^1 - \eta g)
    (g =\nabla L(\theta^2))(\theta^3 \leftarrow \theta^2 - \eta g)

还有另一种计算方式,将整个L中的数据分成N个batch(批),每批数据中有B个数据,与上面的方法略有差异,每次update时,是依次从每个batch里取出数据来update,当把所有的batch更新过一遍,叫1个epoch(时期)

四、从sigmoid到ReLU

ReLU(Rectified Linear Unit)是另一种激活函数,前面提到的分段Sigmoid(Hard-Sigmoid)函数的表达式可能会很难写出来,但是其可以看作是2个ReLU函数相加,ReLU函数的表达式如下:

$$c*max(0, b + wx_1)$$

如此,我们前面y的表达式就可以变成:

[y = b + \sum_{i}c_isigmoid(b_i + \sum_{j}w_{ij}x_i) ]
[\longrightarrow ]
[y = b + \sum_{2i}c_{i}max(0, b_i + \sum_{j}w_{ij}x_j) ]

注意换成ReLU函数后,(i)变为原来的2倍,因为2个ReLU函数才能合成一个Sigmoid函数

五、到底为什么叫Deep Learning ?

上面的例子里我们只套了一层激活函数就得到了y的表达式,但是人们发现套的层数多一些预测的效果就会更好一些,所以不妨多套几层:

其中我们用到的sigmoid或ReLU函数叫neuron(神经元),许多neuron套起来就叫neural network(神经网络)。后来人们又给它们取了新的名字,每一排的neuron叫作hidden layer(隐含层),有许多层layer所以叫作Deep Learning

但是层数越多不见得预测效果会越好,在课堂实例中,虽然随着层数的增加,在训练数据上的效果越来越好,但是在预测数据上误差出现了增大,这便是overfitting(过拟合)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号