机器学习基础:神经网络——感知机

目录

1. 表示学习

2. 生物神经元 V.S. 人造神经元

3. 感知机

3.1 训练感知机

3.2 激活函数

3.3 一层感知机

3.4 多层感知机

3.4.1 隐藏层神经元数量选择

3.4.2 隐藏层如何学习参数

3.4.3 多层感知机的性质

3.4.4 多层感知机总结


1. 表示学习

表示学习(representation Learning)是神经网络的一个常见应用:

表示学习的基本思路,是找到对于原始数据更好的表达,以方便后续任务(比如分类)。机器学习中,同样的数据的不同表达,会直接决定后续任务的难易程度(换言之,表示方法的选择通常依赖于后续任务的需求),因此找到好的数据表示往往是机器学习的核心任务。

例如图像相关的任务,数据的特征维度太高(通常在几十万上百万的维度,因为图像的每个像素点都是一个特征)。

深度学习中常用embedding来对高维度数据进行处理,将其重新编码成维度较低的特征。

深度网络可以通过学习embedding后的特征来完成各种任务。

2. 生物神经元 V.S. 人造神经元

首先梦回高中生物——神经元:

机器学习基础:神经网络——感知机_第1张图片

输入信号,输出信号,各方输入信号加权取平均,如果超过某一个阈值就将信号传向下一个神经元

机器学习基础:神经网络——感知机_第2张图片

\vec{x}_i=<x_{i1},x_{i2},..., x_{in}>代表各方的输入组成的输入向量,b是常数偏置项bias,对这些量进行加权求和(参数的权重同样是一个向量\vec{w}=<w_1,...,w_n>\in \mathbb{R^n})然后通过一个激活函数activation\: \: function\: \: f这也是个可选的超参数,可以为神经元选用不同的激活函数,激活后的值是一个标量y_i\in \mathbb{R^n}继续传入下一个神经元;

这个过程中的超参数是f激活函数,需要学习的参数是\vec{w}b(b\equiv w_0)

形式化的数学表示为:

机器学习基础:神经网络——感知机_第3张图片

3. 感知机

感知机(Perceptron):

  • 感知机本质上就是只有单个神经元的神经网络
  • 一个感知机就是一个二元的线性分类器,形式化表示如下:

机器学习基础:神经网络——感知机_第4张图片

这里的阈值是0,也就是说只要input的加权和\geq 0那么感知机就输出1

3.1 训练感知机

训练感知机(Training Perceptron)是试图求算最佳的参数向量\vec{w}最小化训练误差

常用的方法是通过迭代(Iterative)的方式对训练集上进行反复训练。具体的算法可以如下表示:

机器学习基础:神经网络——感知机_第5张图片

基本思想是:

  • 对于每一个训练样本(x_i,y_i),得到它的预测值和实际值之间的误差。并通过这个误差和优化算法来更新所有的需要求算的参数w_j
  • 因为每个样本x_i的特征维度是j因此,整个模型一共会有j个参数。
  • 参数迭代的方式是梯度下降,图中使用的损失函数是:\sqrt{y^2_i-\hat{y}^2_i},因此它的梯度是图中下标红线的部分。
  • \lambda是学习率,是所有参数共有的控制梯度下降速度的参数,对于每个w_j\lambda都是一样的。
  • 在红线下标的式子的最后一项x_{ij}是这个特征自身的值,如果y_i-\hat{y}_i是个负数,那么w_j就会向更小的方向更新,同时如果x_{ij}较大,那么这个特征梯度下降的速度就会很快。

机器学习基础:神经网络——感知机_第6张图片

机器学习基础:神经网络——感知机_第7张图片

这里的每个x_1,x_2...应该写成x_{i1},x_{i2},也就是表示的特征的值,而不是样本的值。

根据计算,w_1,w_3下降的幅度比w_2大很多,因为他们的特征值x_{ij}比较大


下面给出一个梯度更新的动态例子:

一共有四个训练样本i=1...4,每个训练样本的特征数量是j=1,2两个。

计算\hat{y}_i的公式在左下角,通过参数,样本向量的加权求和和激活函数得到。

根据y_i, \hat{y}_i我们可以计算出误差,并通过梯度下降公式来计算每个特征的参数应该如何更新。

对于偏置b,我们始终把它看成是参数向量\vec{w}中的第一个参数w_0,统一进行梯度更新求算;我们规定x_{i0}始终为1

在进行迭代之前需要给出一个初始化的参数向量,即\vec{w}=\{b,w_1,w_2\}=\{0,0,0\}

第一个epoch中:

机器学习基础:神经网络——感知机_第8张图片

前两个样本的预测值和实际值相同,因此不需要梯度更新。第三个样本产生了误差,因此根据梯度更新公式,参数的值被更新成\vec{w}=\{b,w_1,w_2\}=\{-1,0,0\}。根据更新后的参数我们计算最后一个样本,发现没有误差,第一个epoch中所有的样本都执行了一遍,因此第一个epoch结束:

机器学习基础:神经网络——感知机_第9张图片

第二个epoch中:

机器学习基础:神经网络——感知机_第10张图片

第一个样本需要梯度更新,w_j=w_j+x_{ij}\vec{w}被更新成\{-1+1, 0+1, 0+1\} = \{0,1,1\}。第二个样本是正确的,不需要更新,第三个样本又产生了误差,需要梯度更新w_j=w_j-x_{ij}
\vec{w}被更新成\{0-1, 1-0, 1-0\} = \{-1,1,1\}。第四个样本不需要梯度更新,epoch\: \: 2结束。

第三个epoch中:

机器学习基础:神经网络——感知机_第11张图片

所有样本都没有发生梯度更新,这个模型已经收敛,因此不需要进行新的epoch,迭代结束。

3.2 激活函数

Activation Function:一般有以下三种选择。 

机器学习基础:神经网络——感知机_第12张图片

激活函数的作用一方面将加权求和后的信号进行归一化到[0,1]之间,另外一方面可以帮助多层的感知机模型获得非线性分类的能力。

对于感知机自身的激活函数:

机器学习基础:神经网络——感知机_第13张图片

这只能对线性可分的数据有一个较好的拟合结果,因为他本身基于的是线性假设,求解的总是一个 \vec{w}\cdot \vec{x_i}+b的线性方程。

感知机也不能保证分类数据有最大的决策边界(那是SVM模型的任务)。感知机更不能够保证对非线性可分(non-linearly separable)数据拟合的很好。感知机本质上是基于线性假设,如果把激活函数改成sigmoid函数,那么感知机就可以成为一个逻辑回归模型。

3.3 一层感知机

我们上面说的概念对应的是一个感知机,对应的是一个神经元结点,那么如果有多个神经元结点,就能用他们来组成一层感知机。

机器学习基础:神经网络——感知机_第14张图片

机器学习基础:神经网络——感知机_第15张图片

那么为什么要把layer的概念引入感知机呢?因为同一层内的所有感知机接受的是同样的输入,通过训练可以形成不同的参数,例如第一个节点y_1相关的参数是\vec{w}_{i1}=\{w_{11},w_{21}...\}但第二个感知机y_2的相关参数是\vec{w}_{i2}。这样的一层感知机对于同一个输入最后就可以给出多个输出的结果,如果再结合softmax激活函数,就可以进行多分类任务。当然这个是后面神经网络的内容,我们在这里只是通过这种方式来认识什么是一层感知机。有了一层感知机的概念,就可以扩展到多层感知机。

3.4 多层感知机

机器学习基础:神经网络——感知机_第16张图片

多层感知机有三个部分组成:

  • 输入层
  • 隐藏层
  • 输出层

输入层的神经元的数量取决于输入样本的特征数。输出层的神经元数量取决于分类任务或者是回归任务。隐藏层可以有很多层,图中只画了一层。每个隐藏层存在的意义都是对输入进行重新编码,编码成抽象的向量,然后输出给后面的层。在多分类任务中输出层的神经元数量与分类的类别数量一致+ softmax激活函数。

常见选项:

  • 二分类任务中,输出层一个神经元+阶跃函数作为激活函数。
  • N路分类——N个输出神经元和softmax激活函数。
  • 回归任务中输出层只有一个神经元+ sigmoid激活函数。

3.4.1 隐藏层神经元数量选择

鉴于我们不知道这一层应该学习什么特征,如何挑选合适的神经元数量?

在理论上,取决于决策边界的复杂性等因素;

在实践中,通常只是在输入和输出大小之间选择一个任意的值。

3.4.2 隐藏层如何学习参数

通过后向传播算法backpropagation

输出层的预测值和真实标签产生的误差的梯度可以通过链式法则传播到任意一个隐藏层,从而根据感知机更新参数的方式来更新每一个神经元的参数。这个过程是借助随机梯度下降的方式来完成的。因此和单个感知机一样,也需要设置一个学习率\lambda

机器学习基础:神经网络——感知机_第17张图片

3.4.3 多层感知机的性质

通用逼近定理(Universal approximation theorem)具有隐藏层的神经网络可以逼近任意的连续函数。这意味着多层感知机(神经网络)可以拟合任何线性或者非线性的函数(不同于逻辑回归或者 SVM 只能基于线性可分数据集)。上述的复杂的拟合任务必须要借助非线性!

多层感知机如何具备非线性能力:

例如我们具有一个三层的感知机:一个输入层,一个输出层和一个隐藏层,三个层的参数矩阵我们分别用\textbf{w}_{L_0}, \textbf{w}_{L_1}, \textbf{w}_{L_2} 表示。那么一个输入x_i经过整个网络的过程可以表示成:

其中f都是非线性的激活函数。非常清楚,这个式子可以拟合一个复杂的非线性函数。

作为对比,如果不采用任何非线性函数,只是使用上述的三层感知机,那么这个过程可以表示成:

通过最后的化简,这还是一个线性的函数,换句话说,还是只能处理线性可分的数据集。

因此我们说多层感知机必须搭配非线性的激活函数才能具有强大的非线性拟合能力。

3.4.4 多层感知机总结

因为多层感知机有拟合复杂数据的能力,那么他就一定比线性模型的表现更好么?

否定的,因为对于很多简单的数据集,仅用线性假设就可以很好解决, 如果采用太复杂的模型,很容易过拟合。

因为神经网络可以在隐藏层学习到他们自己的表示(representation)因此,他们不需要任何特征工程。

错的,如果不进行任何特征工程,那么很多噪声数据或者特征就容易给模型的拟合带来不利影响,garbage\: \: in \: \: garbage\: \: out。所以特征工程在很多时候都是需要的。

由于NN是通用的逼近器,它们保证比任何其他机器学习方法具有更好的概括性。

由于NN在隐藏层中学习自己的表征,它们不需要任何特征工程。

多层感知机的优缺点

  • 可以适用多种任务:分类和回归任务
  • 通用性很好,可以拟合多种分布
  • 隐藏层可以学习到自己的特征表示
  • 参数量太大,需要消耗很多的内存资源;
  • 训练速度太慢,而且以为模型复杂容易过拟合
  • 随机梯度下降不能保证每次都能收敛到同一结果

你可能感兴趣的:(机器学习基础,神经网络,机器学习,深度学习,感知机,多层感知机)