看懂本文,入门神经网络Neural Network

server/2024/11/14 21:52:51/

神经网络(Neural Network)

1.1图片

每一个图片都是三维数组,每个像素的值为0-255,如

训练集Training Dataset:“上课学的知识”,用于训练模型得到参数

验证集Validation Dataset:“课后习题”,用于纠正和强化知识点,用来评估不同超参数训练出的模型效果,从而优化模型

测试机 Test Dataset“期末考试”,用于评估最终模型效果

        例如:已知T1(x1,y1)、T2(x2,y2)、T3(x3,y3)三个点,利用T1,T2得出y=ax+b直线,这个T1,T2就是训练集,他们参与了模型的训练得到了参数a,b。将x=x3代入得到y3’ ,比较输出y3 与标签值y3,就能衡量模型的好坏,T3参与了模型评估,T3是测试集。a,b就是训练的目标,但是,在训练模型前,要设定其他参数,如选用哪个函数空间?用什么损失函数来衡量输出与标签之间的差异?要采用哪种优化算法?等等这些问题设计的参数都是需要提取设计的超参数。可以利用验证集去寻找最优模型。

        训练集训练模型得到参数后,验证集在这个参数和超参数下训练得到的模型进行评估,并找到最优的一组超参数,然后将超参数固定,再拿到训练集上重新训练模型,最后由测试集评估最终模型性能 

1.2线性函数(得分函数)

        如,这个猫是32*32*3的像素构成,其中某些点是促进成猫的,有些像素点是抑制成为猫的,函数f(x,W)中,x表示像素点,W表示像素点的权重(得分,即促猫的程度)。

        f(x,W)=Wx+b,例如这个图片32*32*3=3072,视为3072*1的矩阵,对于猫的权重矩阵W1=1*3072,对于其他的类型,有它的Wn(n为自己想要的分类数,也可以5分类,8分类等),假设这里为10(W2可以为狗,W3可以为汽车....等等)这个n取决于自己想要的分类,则总共的W为10*3072的矩阵,再乘以图片矩阵3072*1,得到10*1的得分矩阵(第一项为W1猫的得分,第二项为W2狗的得分......),Wx起到的是决定性作用,后面的b为偏置参数,起到微调的作用(这个例子b为10*1的矩阵)

综上,对于特定的图片,它的x是不会变化的,而W权重矩阵是需要给出的,整个机器学习、深度学习就是在寻找更好的W,来输出更准确的结果。神经网络就是一直在优化W。每个特征点是独立的,则每个特征点对应的权重参数Wi的每个值也是独立的。

1.3损失函数

        得分矩阵的数值如何来说明问题?可以用损失函数来描述。神经网络可以做分类可以做回归,区别在于他们的损失函数不同,而网络结构是不改变的。

        如上图,第一列中,图片明明是猫,却是汽车的得分最高,定义了如上的损失函数,sj 为错误值,syi 为正确值,经过损失函数的计算,可得出一个数据,能够表示预测的正确性(表示是否区分开)。例如第一列猫图片的计算(右上角)。损失函数后面的+1表示的是容忍程度(一般为∆ ,用∆ 表示容忍程度),如第一列,cat为3.2,car为3.15,没有+∆ 计算后值为0,即没有损失了,效果会不好,若有+1 ,计算后为1.05,表明识别情况。损失函数越小越好。

        右上角第一个计算后值为2.9就为loss值;第二个计算后为0(car比其他值都大1),表明做的很好,loss值为0;第三个计算后值为10.9,表明做的很差

1.3.1注意问题

        损失函数值相同,两个模型效果一样吗?

        如上图,w1和w2与x计算后值都为1,但是w1过于关注x的第一参数,会导致过拟合的现象,这是不想要的。所以要加上正则化惩罚项。

如上 称为data_loss,即为数据在当前损失函数的损失,正则化惩罚项为模型的权重参数带来的损失,直接用平方来表示,λ 表示惩罚系数,它越大,表示你不希望过拟合(正则化惩罚项和数据损失是矛盾的,数据损失是要预测值与真实值越来越接近,就要满足每一个样本需求,正则化惩罚项要求不要满足每一个,所以引入λ )。

我们希望模型不要太复杂,因为神经网络太强大了,过拟合风险很高。过拟合指的是模型只关注于局部特征,没有放眼所有的位置。相应的就是泛化能力。

1.4 Softmax分类器

现在学的得到的是得分值和损失函数值,我们想要的是概率值

 

        如上图,得分矩阵中某些值差距很小,先进行一次指数运算放大差距(负数会变为正数且值很小),然后进行归一化转为概率(0.13=24.5/24.5+164.0+0.18 ),再进行对数函数计算损失值。具体公式如下:

        对数运算,-log(0.13)会得出一个较大的值,而越接近1,loss的值越小,越接近0,这就是对数函数的特点。

1.5前向传播、反向传播

1.5.1前向传播

        经过以上过程,由一个w和x最终得到loss,就为前向传播。神经网络的目的是更新权重矩阵w,比如现在的loss很高,现在要更新w将loss降低,这个过程就是反向传播(梯度下降)

1.5.2梯度下降算法(更新W)

利用公式进行参数更新(J(w)是损失函数),寻求最小的loss,a为人为设定的值(超参数),称为学习率,a一般取0.05或0.001,这是一个经验值,有些论文使其变化,刚开始较大,后面越来越小,使之取向最小loss。

同理,b的更新方式是

1.6神经网络

①input layer输入层,表示输入的 特征个数(小猫图片就有32*32*3=3072个圈)

②hidden layer1隐层1,它与输入层每一个圈全部连接,称为全连接,将输入层转化为更多的特征,由输入层转化为隐层1,经过了矩阵乘法(输入层为1*3,隐层1是1*4,则W1矩阵是3*4的矩阵),即就是输入层经过了权重矩阵W1进行了特征提取

③hidden layer2隐层2,与隐层1也是全连接,经过 了W2矩阵(这里是4*4的矩阵)的特征提取。一般情况隐层有很多层。这些隐层的目的就是为了让计算机更好的识别

④output layer输出层,隐层2乘以W3(这里是4*1的矩阵),得出预测结果。最终结果取决于W1,W2,W3好不好,因为输入X是固定的

⑤每次前一项与W相乘后,要进行一次非线性变换(X与W1组合后,进行非线性变换,再与W2进行组合)。这就是为什么不直接用一个W=W1*W2*W3直接变换。非线性函数有很多,只要不是线性的就行。如下:非线性函数是max(0,Wx)

        注意,神经元并不是越多越好,比如这里,隐层1为4个特征,也可以为5,越大更容易拟合,但是速度会相应的下降

        正则化的影响:越小越过拟合

        神经元数量的影响,隐层数量:一般为64,128,256,512等,越大越过拟合

1.7激活函数

        激活函数是神经网络中比较重要的部分,常用的有Sigmoid,Relu,Tanh等。最开始一般为Sigmoid函数,但是它靠两边的部分梯度接近0,这是个问题,称为梯度消失。

        Relu函数经常使用,其他情况也是Relu函数的变体。激活函数就是使用在每次乘法之后的非线性函数,用于非线性变换。

1.8数据预处理

对于输入数据,先进行数据中心化(实际坐标值-均值),再进行放缩或扩充(除以标准差)

1.9 参数初始化

        比如权重矩阵是3*4的矩阵,每个都有(通过策略生成的)随机的值W=0.01*np.random.randn(D,H),这里D,H为3,4,乘以0.01是为了权重参数值不要浮动大。

1.10 DROP-OUT

        由于神经网络过于强大,容易出现过拟合的情况,这也是近年来致力于解决的问题,前面提出了正则化的解决方法(R(w)),还有方法就是DROP-OUT。

        上图左边是正常神经网络,每个都是全连接,drop-out就是在每一层随机杀死部分神经元,每次训练在每一层都是随机的杀死神经元(而不是说直接去除它们)。这只是在训练阶段进行,测试阶段直接使用,不要杀死。

1.11图像增强

        如果数据集很少,就要考虑图像增强。目的是增加相似的数据集,并且防止过拟合,使网络更强壮,这些操作都是再Alexnet上提出的。

1.11.1水平翻转

1.11.2随机旋转

图片随机旋转(-45°,45°)的度数

1.11.3随机裁剪(比较好用)

如227*227的图片,裁剪成224*224,再每次一单位的滑动,最终得到9张类似的图片

1.11.3 PCA操作

更改亮度、对比度、饱和度、色相等等

1.11.4 转换为灰度

例如RGB转化为RRR,GGG,BBB等,或转化为灰度图。

注意:1.11.3和1.11.4的操作使用的很少。

总结

        以上就是神经网络的基础知识,看懂后能迅速入门神经网络,是理解更复杂的网络如CNN(卷积神经网络)的前提,学会后建议直接学习CNN卷积神经网络。也可以看Alexnet,vgg,resnet等经典网络,这些也是基于卷积神经网络实现的。


http://www.ppmy.cn/server/141956.html

相关文章

(蓝桥杯C/C++)——搜索

一、回溯法 1.回溯法简介 回溯法一般使用 ** DFS(深度优先搜索) ** 实现,DFS是一种遍历或搜索图、树或图像等数据结构的算法,当然这个图、树未必要存储下来(隐式处理就是回溯法),常见的是通过某种关系构造出的搜索树,搜索树一般…

Linux git-bash配置

参考资料 命令提示符Windows下的Git Bash配置,提升你的终端操作体验WindowsTerminal添加git-bash 目录 一. git-bash配置1.1 解决中文乱码1.2 修改命令提示符 二. WindowsTerminal配置git-bash2.1 添加git-bash到WindowsTerminal2.2 解决删除时窗口闪烁问题 三. VS…

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前,请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…

【JAVA】正则表达式中的中括弧

在Java的正则表达式中,[] 是用来定义一个字符集(character class)的。使用字符集可以匹配括号内的任何一个单个字符。下面是关于 [] 的一些基本用法和例子: 匹配特定字符: [abc] 匹配 ‘a’ 或 ‘b’ 或 ‘c’。 范围…

群控系统服务端开发模式-应用开发-前端退出功能

我们从未登录一直到退出,现在已经登录到操作,现在完成退出。退出有两种情况下会退出:第一种情况下是手动点击退出按钮,第二种情况下是登录过期时间到了自动退出的。 一、手动退出 因退出及个人信息页面都在公有页面,所…

树莓派安装FreeSWITCH

1、下载相关资源: # 假设所有资源都下载到/opt/目录下 cd /opt # 下载FreeSWITCH源码 git clone https://github.com/signalwire/freeswitch # 下载libks源码 git clone https://github.com/signalwire/libks # 下载sofia-sip源码 git clone https://github.com/fr…

鸿蒙next版开发:相机开发-适配不同折叠状态的摄像头变更(ArkTS)

在HarmonyOS 5.0中,ArkTS提供了强大的相机开发能力,其中包括适配不同折叠状态的摄像头变更。这对于开发折叠屏设备上的相机应用尤为重要,因为摄像头的位置和可用性可能会随着设备的折叠状态而变化。本文将详细介绍如何在ArkTS中适配不同折叠状…

Bugku CTF_Web——文件上传

Bugku CTF_Web——文件上传 进入靶场 My name is margin,give me a image file not a php抓个包上传试试 改成png也上传失败 应该校验了文件头 增加了文件头也不行 试了一下 把文件类型改成gif可以上传 但是还是不能连接 将Content-Type改大小写 再把文件后缀名改成php4 成…