本文介绍了机器学习的基本流程,从线性模型出发,逐步引入非线性函数与神经网络结构,说明如何通过叠加多个 Sigmoid 函数逼近任意函数,最终引出深度神经网络的核心思想。
Machine Learning 是什么
Machine Learning = Looking for Function
本质上ML就是寻找一组输入到一组输出的映射函数Functions
ML中最常见的映射关系,即Functions有两种:
- Regression:输出一个数值
- Classification:输出一个类别
[!NOTE]
其实还有一种Structured Learning,这类的输出主要是结构化的信息,比如一张图片,一个文档等等
Machine Learning 基础步骤
我们以预测YouTube博主(Hung-yi Lee老师)的播放量为例,即以博主过去的访问信息为训练数据,去预测博主未来的播放量。
1. 构造带有未知参数的Function
根据已有的领域知识(domain knowledge)构造一个Fucntion,这个Function其实就是ML中我们要训练的模型(Model)。我们的主要目标就是不断通过学习来调整这个Fucntion里的参数,来使其输出尽可能符合我们的预期。
现在我们将Model定义为一个线性模型: 𝑦 = 𝑏 + 𝑤x1 其中w和b都是未知的参数,需要去学习的;x1就是前几天的播放量,y就是我们要预测的今天的播放量。
2. 定义损失函数 Loss
Loss本质上是关于参数b和w的函数L(b, w)
它主要的作用就是帮助我们量化通过得到的参数去预测播放量有多准确,预测的越准,说明loss越小,反之loss越大。
常见的loss:
- Mean Absolute Error:L = |y − ŷ|
- Mean Square Error:L = (y − ŷ)2
- Cross Entropy Loss
损失函数 | 适用任务 | 对离群点敏感性 | 典型应用 |
---|---|---|---|
MAE | 回归 | 低 | 有噪声的预测任务 |
MSE | 回归 | 高 | 普通回归任务(强调大误差惩罚) |
Cross Entropy | 分类 | - | 图像分类、文本分类、语言建模等 |
3. Optimization 最小化loss
当定义好loss后,我们的任务就是不断调整参数,最小化loss。
由于loss本质上就是关于参数的函数,最小化loss就是要找出函数的全局最小值,这个过程可以通过梯度下降(Gradient Descent)来求解。
例如上面的,假设损失函数为L(W),只与W有关。
在训练开始阶段,我们会随机初始化参数W = W0,此时需要让函数值往更小的地方移动。
根据梯度的定义(函数增长最快的方向)可知,此时需要往梯度的反方向移动。
即
Model 设置
1. 线性模型
function形如𝑦 = 𝑏 + 𝑤x1,𝑦 = 𝑏 + ∑wixi都为线性模型,无论参数w,b有多少。
当我们使用线性模型进行预测时,只能拟合出一条直线,能表达的信息十分有限,所以我们需要更加复杂的模型。
2. 非线性模型
图中蓝色线位不同的线性模型,红色线为非线性模型。
显然,红色线能表达的信息更加复杂,但我们如何使用函数将红色线表达出来呢?
本质上来看红色的非线性模型等价于分段函数,它可以由多个图中蓝色对应的函数表达出来。我们把这个蓝色线对应的函数称作Hard Sigmoid函数。
任意的一个分段函数都可以由多个Hard Sigmoid函数表示
Sigmoid函数则是Hard Sigmoid的变形:
[!IMPORTANT]
通过叠加多个 [Hard] Sigmoid 函数,我们可以逼近任意的连续函数。
这是因为任意函数都可以通过大量的分段线性函数进行近似,而每一个分段函数又可以由若干个 Sigmoid 或 Hard Sigmoid 函数叠加实现。因此,只要堆叠足够数量的 Sigmoid 类型激活函数,就能够以任意精度逼近目标函数。
而机器学习的过程,实质上就是在自动学习这些函数的参数,使其组合尽可能拟合目标函数。
深度神经网络 Deep Neural Network
回到最开始的问题,我们想要通过博主历史的播放量数据来预测今天的播放量。
最初我们设立了一个简单的线性模型:𝑦 = 𝑏 + ∑𝑤i𝑥i。这显然是不够好的,我们需要建立更复杂的非线性模型。
这里我们选择叠加多个Sigmoid函数(用σ表示)来实现:
这个函数的所对应的模型就是我们常见的神经网络模型,如上图所示。
整个模型也可以写成对应的矩阵运算形式。
当然,如果想要更加复杂的模型,我们就可以在后面堆叠多个这样的函数层,如下图:
[!NOTE]
由于这些网络中包含很多层=>Deep
网络中的连线像是神经,激活函数像是神经元=>Neural
所以这就是Deep Neural Network的由来