pytorch入门7 --感知机与神经网络

一、单层感知机
pytorch入门7 --感知机与神经网络_第1张图片pytorch入门7 --感知机与神经网络_第2张图片
可以看出单层感知机可以完成线性分割。单层感知机有一个问题,不能拟合XOR函数。
pytorch入门7 --感知机与神经网络_第3张图片
XOR函数可以表示为:
z=f(x,y),当xy>0时,z=-1;当xy<0时,z=1。上图中的紫色线画出的就是XOR函数,可以发现一条直线无论怎么画都不能将两个两个红色区域分在一块,两个绿色区域分在一块。
后来,人们发现多层感知机可以解决单层感知机的这个问题。

二、多层感知机与神经网络
pytorch入门7 --感知机与神经网络_第4张图片
关注上图中的表单,蓝色那一行与左图中蓝色的线对应,做了一次划分,1、4取正值,2、3取负值。黄色那一行对应左图中的黄线,又做了一次划分,1、2取正值,3、4取负值。最后,将黄色与蓝色划分取值相同的划为一类,取值不同的划为另一类,最后实现了对于XOR函数的拟合。这个过程对应于上图中表单下方的双层神经网络。

多层感知机(Multilayer Perceptron,MLP)是一种前馈人工神经网络模型,将输入的多个数据集映射到单一的输出数据集上。多层感知机一般分为三层:输入层、隐藏层、输出层,当引入非线性的隐藏层(使用激活函数,后面会将)后,理论上只要隐藏节点足够多,就可以拟合任意函数;同时,隐藏层越多,越容易拟合更复杂的函数。
隐藏层有两个属性:节点数和层数。层数越多,每一层需要的节点数就越少。经常看见的全连接层实际上就是指隐藏层,全连接层的每一个节点都与上一层的所有结点相连,用来把前面的特征综合起来,所以全连接层的参数也最多。
pytorch入门7 --感知机与神经网络_第5张图片
我们可能会疑惑,为什么输出层的每一个结点也与上一层的每一个结点都有相连呢?这里涉及到独热编码(one-hot encoding)。以图像分类为例。
假设每次输入是一个2 * 2的灰度图像。 我们可以用一个标量表示每个像素值,每个图像对应四个特征x1,x2,x3,x4。 此外,假设每个图像属于类别“猫”“鸡”和“狗”中的一个。
接下来,我们要选择如何表示标签。 我们有两个明显的选择:最直接的想法是选择y属于集合{1,2,3},, 其中整数1,2,3分别代表狗,猫,鸡。 这是在计算机上存储此类信息的有效方法。但是一般的分类问题并不与类别之间的自然顺序有关。 幸运的是,统计学家很早以前就发明了一种表示分类数据的简单方法:独热编码(one-hot encoding)。 独热编码是一个向量,它的分量和类别一样多。 类别对应的分量设置为1,其他所有分量设置为0。 在我们的例子中,标签y将是一个三维向量, 其中(1,0,0)
对应于“猫”、(0,1,0)对应于“鸡”、(0,0,1对应于“狗”:
在这里插入图片描述
为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。 每个输出对应于它自己的仿射函数。 在我们的例子中,由于我们有4个特征和3个可能的输出类别, 我们将需要12个标量来表示权重(带下标的w), 3个标量来表示偏置(带下标的b)。 下面我们为每个输入计算三个未规范化的预测(logit):o1、o2和o3。
pytorch入门7 --感知机与神经网络_第6张图片
为了更简洁地表达模型,我们仍然使用线性代数符号。 通过向量形式表达为:
在这里插入图片描述
这是一种更适合数学和编写代码的形式。 由此,我们已经将所有权重放到一个3 * 4矩阵中。 对于给定数据样本的特征x, 我们的输出是由权重与输入特征进行矩阵-向量乘法再加上偏置b得到的。最后可以根据o1,o2,o3的值运用softmax激活函数算一个概率最大的o然后对其分类。(当然,实际的图片分类涉及多层,还包括激活函数,算法复杂,这里只是说明一下独热编码)。
pytorch入门7 --感知机与神经网络_第7张图片
三、激活函数
激活函数是一类非线性函数,它将非线性特性引入到人工神经网络中,其主要的作用是使用非线性的方法将神经网络模型中一个节点的输入信号转换为一个非线性输出信号,从而增强神经网络对非线性函数的拟合能力。常见的激活函数有sigmoid,tanh,relu,prelu,softmax。
pytorch入门7 --感知机与神经网络_第8张图片
pytorch入门7 --感知机与神经网络_第9张图片

你可能感兴趣的:(神经网络,pytorch,深度学习)