简述神经网络
深度学习定义:一般是指通过训练多层网络结构对未知数据进行分类或回归
因此实现深度学习的基础即是神经网络。
神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术,与人的结构类似,其是由一个一个“神经元”构成的“网络”。
神经网络的功能实现
以图像识别任务为例:
一张图像传入计算机后,计算机并不会像人一样真正看到这张图呈现的是什么样子,而是将其拆分为一个一个像素点,并用0-255间的数字,。记录点上的颜色。通过这种矩阵(如下图)的形式,记录下图像的样子。
要做一个图像识别系统大致思路为:
1.收集训练数据集
2.确定分类标签
3. 训练一个分类器
4.测试准确性
所谓训练集
就是用于训练的数据集,只是他并不局限于狭义的数据,一般是根据要神经网络处理的内容一致的形式。如图像处理的训练集即为每个要识别的类的许多不同的图(如下图)
何谓确定分类标签
实际上就是分类器会把图分为哪几类,分类器并不会判别是不是属于哪一类,他所执行的是一个概率问题:判断这个图属于每个类别的概率,然后取概率最高的一类作为分类返回。相当于给他贴上了标签,故有此名。
如实现一个简单的识图功能,要区分狗、猫、帽子、老鼠...,那么这些即是所谓标签。而标签就是根据要实现的功能确定的。
“分类器”
分类器,就是神经网络实现“识别“功能””的核心部分了。而做一个分类器,先是建立一个模型,然后再是对模型进行训练。
建立模型会应用一些算法,下面介绍几个基础的:
1.k邻近算法(KNN):
即为给定一个训练集,对于一个新输入的数据,要判断其应该属于哪个标签下,即寻找与该实例最邻近的k个样本,看看这些样本中哪个标签下的多,则这个测试集就属于哪一个标签。
*何谓邻近:
就是在所有考虑的特征综合看来最为相似的样本。以图像为例,图像的每一个位置的像素点都是一个特征,只是重要性不同。我们对每个位置都乘上相应的参数(以区分权重),然后用处理过的新输入图像的矩阵,和用于比较的样本的处理过的矩阵相减,得到的矩阵把其每个位置数相加即得到一个数,就是所谓“距离”(操作如下)
注意:K值选取不能太小,否则受噪声影响比较大,容易出现误测;K值不能太大,否则会出现恰拟合:即训练过程他把所有全囊括进去考虑,对模型本身基本没有起到训练作用,只是对相应训练集恰好合适。
2.线性函数
上图中W即为权重向量,x为特征向量(即把所有特征值列出形成一个向量),两者相乘即形成每个类的“得分”。
因此有多少个类别,他就会打出多少个相应的分数,相应就要多少组权重参数(每个标签“判分”的参数都不同)。如下图所示:
由于多重权重参数形成了多条线性边界,因此这种判别方法叫线性函数。
3.损失函数
何谓损失函数:实际上就是,在分类器进行操作后,对数据所属有了判断,而这个判断与真实情况的差值,我们叫损失。而损失函数的目的就是通过比较损失,取损失最小的作为预测值,实现目标值更接近。
举一个例子:
上面是损失函数的判断过程:由于给分比较接近,不好判断概率*(一般情况下,神经网络返回的不是一个单独的标签,而是一个向量,对应每个标签出现的可能性),因此先统一用e的x次方放大,然后再对放大后的数据进行归一处理:即计算该数据在所有数据和中的占比,然后用这个占比值取-log,得到对应标签出现的概率*(最后一步处理意义在于,之前得到的占比是损失对应总损失的占比,占比越大,概率越小,因此要用这一步进行颠倒)
4.前向传播与反向传播
通过设定好的权重参数与输入数据x得到损失值从而产生判断(进行分类)的方式我们叫其前向传播
而反过来,通过函数运算发现参数并不合适,则要对发现问题的参数进行调整使损失值降低到最小,这件事我们叫反向传播。反向传播一般通过梯度下降来实现。
梯度下降
何谓梯度下降?在数学中,梯度方向是函数值变化最快的方向,而在这里就是让损失越变越的方向。我们要做的就是沿着梯度的反方向让损失越来越小。
梯度下降有几个重要的参数:
1.学习率:每“走多远”更新一次
2.batch:小批量学习的参数,用于控制一次迭代取的样本数
而在更新参数时,应该用什么样的顺序更新呢?这就要引入链式法则:
链式法则
神经网络中的有许多层,每层都有自己的一组全重参数,学者提出,更新权重参数从输出层开始向输入层逐层更新,这种更新规则叫链式法则。